diff --git a/deploy/self-hosting/.env.example b/deploy/self-hosting/.env.example index 8df8559f9..4969ef347 100644 --- a/deploy/self-hosting/.env.example +++ b/deploy/self-hosting/.env.example @@ -345,6 +345,13 @@ FLUXER_DISCOVERY_ENABLED=true #FLUXER_AUTO_JOIN_INVITE_CODE= #FLUXER_DELETION_GRACE_PERIOD_HOURS=336 +# Report retention. A daily job deletes each report 365 days after it was +# filed, with its evidence copies and search entry, unless a legal hold is set. +# Until this is false the job only logs what it would delete. Check the counts +# in the "Processed report retention" log line of the worker first, because +# deleted evidence cannot be restored. +#FLUXER_REPORT_RETENTION_DRY_RUN=true + # Sign in with Bluesky, off unless turned on. #FLUXER_AUTH_BLUESKY_ENABLED=false #FLUXER_AUTH_BLUESKY_CLIENT_NAME=Fluxer diff --git a/deploy/self-hosting/docker-compose.yml b/deploy/self-hosting/docker-compose.yml index 70e1c97e1..6676a1666 100644 --- a/deploy/self-hosting/docker-compose.yml +++ b/deploy/self-hosting/docker-compose.yml @@ -158,6 +158,7 @@ x-fluxer-env: &fluxer-env FLUXER_DISCOVERY_ENABLED: ${FLUXER_DISCOVERY_ENABLED:-} FLUXER_DISCOVERY_MIN_MEMBER_COUNT: ${FLUXER_DISCOVERY_MIN_MEMBER_COUNT:-} FLUXER_DELETION_GRACE_PERIOD_HOURS: ${FLUXER_DELETION_GRACE_PERIOD_HOURS:-} + FLUXER_REPORT_RETENTION_DRY_RUN: ${FLUXER_REPORT_RETENTION_DRY_RUN:-} FLUXER_API_WORKER_LANE_CONCURRENCY_OVERRIDES: ${FLUXER_API_WORKER_LANE_CONCURRENCY_OVERRIDES:-} FLUXER_AUTH_BLUESKY_ENABLED: ${FLUXER_AUTH_BLUESKY_ENABLED:-} diff --git a/fluxer_admin/build.rs b/fluxer_admin/build.rs index 04b75b82f..13fdc0b06 100644 --- a/fluxer_admin/build.rs +++ b/fluxer_admin/build.rs @@ -175,7 +175,13 @@ fn relax_guild_audit_log_schemas(spec: &mut openapiv3::OpenAPI) { } } -const OPEN_INTEGER_ENUMS: &[&str] = &["ChannelType", "MessageType", "WebhookType"]; +const OPEN_INTEGER_ENUMS: &[&str] = &[ + "ChannelType", + "MessageType", + "ReportStatus", + "ReportType", + "WebhookType", +]; fn relax_integer_enums(spec: &mut openapiv3::OpenAPI) { let components = spec.components.as_mut().expect("missing API components"); diff --git a/fluxer_admin/openapi-admin.json b/fluxer_admin/openapi-admin.json index 6bb42e9fd..4d799fbf1 100644 --- a/fluxer_admin/openapi-admin.json +++ b/fluxer_admin/openapi-admin.json @@ -5007,6 +5007,59 @@ ] } }, + "/admin/report-reasons": { + "get": { + "operationId": "list_admin_report_reasons", + "summary": "List report reasons", + "tags": ["Admin"], + "responses": { + "200": { + "description": "Success", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdminReportReasonsResponse"}}} + }, + "400": { + "description": "Bad Request - The request was malformed or contained invalid data", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "401": { + "description": "Unauthorized - Authentication is required or the token is invalid", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "403": { + "description": "Forbidden - You do not have permission to perform this action", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "429": { + "description": "Too Many Requests - You are being rate limited", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ThrottledError"}}}, + "headers": { + "Retry-After": { + "description": "Number of seconds to wait before retrying (only on 429)", + "schema": {"type": "integer"} + }, + "X-RateLimit-Limit": { + "description": "The number of requests that can be made in the current window", + "schema": {"type": "integer"} + }, + "X-RateLimit-Remaining": { + "description": "The number of remaining requests that can be made", + "schema": {"type": "integer"} + }, + "X-RateLimit-Reset": { + "description": "Unix timestamp when the rate limit resets", + "schema": {"type": "integer"} + } + } + }, + "500": { + "description": "Internal Server Error - An unexpected error occurred", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + } + }, + "description": "Lists every reason key a report filed through a report flow can carry, with its English label, whether it is a highest-priority reason, and the legacy category it maps to for message, user and community reports. Requires REPORT_VIEW permission.", + "security": [{"adminApiKey": []}] + } + }, "/admin/reports": { "get": { "operationId": "list_admin_reports", @@ -5056,7 +5109,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Lists user and content reports with pagination. Filtering by status alone reads them straight from the database; supplying a free-text query or any of the entity, category and resolver filters searches the report index instead and adds the total, offset and limit of the page to the response. Reporter contact details are redacted unless the caller also holds REPORT_VIEW_REPORTER_PII. Requires REPORT_VIEW permission.", + "description": "Lists user and content reports from the report search index with pagination. Without a status filter the list covers reports of every status. A request that filters by status alone lists the reports with that status newest first and ignores sort_by and sort_order. A free-text query and the entity, category, reason and resolver filters narrow the results. Every response includes the total, offset and limit of the page. Reporter contact details are redacted unless the caller also holds REPORT_VIEW_REPORTER_PII. Requires REPORT_VIEW permission.", "security": [{"adminApiKey": []}], "parameters": [ { @@ -5106,6 +5159,13 @@ "schema": {"description": "Only return reports filed under this category", "type": "string"}, "description": "Only return reports filed under this category" }, + { + "name": "reason", + "in": "query", + "required": false, + "schema": {"description": "Only return reports filed with this report reason key", "type": "string"}, + "description": "Only return reports filed with this report reason key" + }, { "name": "reporter_id", "in": "query", @@ -5126,6 +5186,16 @@ }, "description": "Only return reports about this user" }, + { + "name": "reported_webhook_id", + "in": "query", + "required": false, + "schema": { + "description": "Only return reports about messages sent by this webhook", + "allOf": [{"$ref": "#/components/schemas/SnowflakeType"}] + }, + "description": "Only return reports about messages sent by this webhook" + }, { "name": "reported_guild_id", "in": "query", @@ -5268,7 +5338,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Retrieves detailed information about a specific report including content, reporter, reason, and the message context captured when it was filed. Requires REPORT_VIEW permission.", + "description": "Retrieves detailed information about a specific report including content, reporter, reason, and the message context and profile snapshot captured when it was filed. Requires REPORT_VIEW permission.", "security": [{"adminApiKey": []}], "parameters": [ { @@ -5331,7 +5401,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Moves a report to the resolved status with an optional public comment shown to the reporter. Marks the report as handled, notifies the reporter by system DM and email unless notify_reporter is false, and creates an audit log entry. Requires REPORT_RESOLVE permission.", + "description": "Moves a report to the resolved status. The reporter is always told the report was reviewed: an account reporter by system DM and email, a Digital Services Act notifier by email. notify_reporter false leaves the public comment out of that notice. Nothing is sent when the reporter account is deleted or barred from reporting. Creates an audit log entry. Requires REPORT_RESOLVE permission.", "security": [{"adminApiKey": []}], "parameters": [ { @@ -5351,6 +5421,75 @@ } } }, + "/admin/reports/{report_id}/legal-hold": { + "post": { + "operationId": "set_admin_report_legal_hold", + "summary": "Set report legal hold", + "tags": ["Admin"], + "responses": { + "200": { + "description": "Success", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportLegalHoldResponse"}}} + }, + "400": { + "description": "Bad Request - The request was malformed or contained invalid data", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "401": { + "description": "Unauthorized - Authentication is required or the token is invalid", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "403": { + "description": "Forbidden - You do not have permission to perform this action", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "429": { + "description": "Too Many Requests - You are being rate limited", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ThrottledError"}}}, + "headers": { + "Retry-After": { + "description": "Number of seconds to wait before retrying (only on 429)", + "schema": {"type": "integer"} + }, + "X-RateLimit-Limit": { + "description": "The number of requests that can be made in the current window", + "schema": {"type": "integer"} + }, + "X-RateLimit-Remaining": { + "description": "The number of remaining requests that can be made", + "schema": {"type": "integer"} + }, + "X-RateLimit-Reset": { + "description": "Unix timestamp when the rate limit resets", + "schema": {"type": "integer"} + } + } + }, + "500": { + "description": "Internal Server Error - An unexpected error occurred", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + } + }, + "description": "Places or clears a legal hold on a report. Reports are deleted 365 days after they were filed, together with their stored evidence, unless a hold that ends later is in place. A hold needs an end time in the future and a reason. A null legal_hold_until clears the hold. Creates an audit log entry. Requires REPORT_RESOLVE permission.", + "security": [{"adminApiKey": []}], + "parameters": [ + { + "name": "report_id", + "in": "path", + "required": true, + "schema": { + "description": "The ID of the report", + "allOf": [{"$ref": "#/components/schemas/SnowflakeType"}] + }, + "description": "The ID of the report" + } + ], + "requestBody": { + "required": true, + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportLegalHoldRequest"}}} + } + } + }, "/admin/search/index-refreshes/{job_id}": { "get": { "operationId": "get_admin_search_index_refresh", @@ -9075,7 +9214,10 @@ "Error": { "type": "object", "properties": { - "code": {"type": "string", "description": "Machine-readable error code"}, + "code": { + "type": "string", + "description": "Machine-readable error code. Known values are listed in the APIErrorCode schema" + }, "message": {"type": "string", "description": "Human-readable error message"}, "errors": { "description": "Field-specific validation errors", @@ -9098,7 +9240,10 @@ "ThrottledError": { "type": "object", "properties": { - "code": {"type": "string", "description": "Machine-readable error code"}, + "code": { + "type": "string", + "description": "Machine-readable error code. Known values are listed in the APIErrorCode schema" + }, "message": {"type": "string", "description": "Human-readable error message"}, "errors": { "description": "Field-specific validation errors", @@ -10254,6 +10399,41 @@ } ] }, + "ReportLegalHoldRequest": { + "type": "object", + "properties": { + "legal_hold_until": { + "nullable": true, + "description": "When the hold ends, as an ISO 8601 timestamp in the future. Null clears the hold", + "type": "string", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$" + }, + "legal_hold_reason": { + "description": "Why the report is kept past its retention period. Required to place a hold, ignored when clearing one", + "nullable": true, + "type": "string" + } + }, + "required": ["legal_hold_until"] + }, + "ReportLegalHoldResponse": { + "type": "object", + "properties": { + "report_id": {"$ref": "#/components/schemas/SnowflakeStringType"}, + "legal_hold_until": { + "nullable": true, + "description": "When the hold ends. Null when the report has no hold", + "type": "string" + }, + "legal_hold_reason": { + "nullable": true, + "description": "Why the report is held. Null when the report has no hold", + "type": "string" + } + }, + "required": ["report_id", "legal_hold_until", "legal_hold_reason"], + "additionalProperties": false + }, "UpdateReportRequest": { "type": "object", "properties": { @@ -10261,7 +10441,7 @@ "public_comment": {"description": "Public comment to include with the resolution", "type": "string"}, "notify_reporter": { "default": true, - "description": "Whether to notify the reporter by system DM and email", + "description": "Whether to include the public comment in the notice sent to the reporter. The reporter is notified either way", "type": "boolean" }, "resolution": { @@ -10312,6 +10492,39 @@ "reported_user_global_name": {"nullable": true, "type": "string"}, "reported_user_discriminator": {"nullable": true, "type": "string"}, "reported_user_avatar_hash": {"nullable": true, "type": "string"}, + "reported_user_bot": { + "description": "Whether the reported account is a bot. Null when there is no reported account or it no longer resolves.", + "nullable": true, + "type": "boolean" + }, + "reported_webhook_id": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}]}, + "reported_webhook_name": {"nullable": true, "type": "string"}, + "reported_webhook_avatar_hash": {"nullable": true, "type": "string"}, + "reported_webhook_default_name": {"nullable": true, "type": "string"}, + "reported_webhook_default_avatar_hash": {"nullable": true, "type": "string"}, + "reported_webhook_type": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/WebhookType"}]}, + "reported_webhook_application_id": { + "nullable": true, + "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}] + }, + "reported_webhook_channel_id": { + "nullable": true, + "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}] + }, + "reported_webhook_guild_id": { + "nullable": true, + "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}] + }, + "reported_webhook_created_at": {"nullable": true, "type": "string"}, + "reported_webhook_creator_id": { + "nullable": true, + "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}] + }, + "reported_webhook_creator_tag": {"nullable": true, "type": "string"}, + "reported_webhook_creator_username": {"nullable": true, "type": "string"}, + "reported_webhook_creator_global_name": {"nullable": true, "type": "string"}, + "reported_webhook_creator_discriminator": {"nullable": true, "type": "string"}, + "reported_webhook_creator_avatar_hash": {"nullable": true, "type": "string"}, "reported_guild_id": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}]}, "reported_guild_name": {"nullable": true, "type": "string"}, "reported_guild_icon_hash": {"nullable": true, "type": "string"}, @@ -10417,6 +10630,30 @@ "author_global_name": {"nullable": true, "type": "string"}, "author_discriminator": {"type": "string"}, "author_avatar": {"nullable": true, "type": "string"}, + "webhook_id": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}]}, + "author_bot": { + "description": "Whether the author is a bot account. Null for a webhook message or an account that no longer resolves.", + "nullable": true, + "type": "boolean" + }, + "missing_attachments": { + "description": "Attachments of the message that could not be copied into the report when it was filed", + "type": "array", + "items": { + "type": "object", + "properties": { + "id": {"$ref": "#/components/schemas/SnowflakeStringType"}, + "filename": {"type": "string", "minLength": 1, "maxLength": 256}, + "nsfw": {"nullable": true, "type": "boolean"}, + "content_type": {"nullable": true, "type": "string"}, + "width": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/Int32Type"}]}, + "height": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/Int32Type"}]}, + "size": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/NonNegativeSafeIntegerType"}]} + }, + "required": ["id", "filename", "nsfw", "content_type", "width", "height", "size"], + "additionalProperties": false + } + }, "user_prior_ncmec_report_ids": { "maxItems": 100, "type": "array", @@ -10441,7 +10678,218 @@ "additionalProperties": false } }, - "message_responses": {"type": "array", "items": {"$ref": "#/components/schemas/MessageResponseSchema"}} + "message_responses": {"type": "array", "items": {"$ref": "#/components/schemas/MessageResponseSchema"}}, + "reported_profile_snapshot": { + "description": "The reported profile as it was when the report was filed. Returned by the report detail only. Null for a report filed before snapshots were stored.", + "nullable": true, + "type": "object", + "properties": { + "captured_at": {"type": "string", "description": "When the snapshot was taken"}, + "user": { + "nullable": true, + "description": "The reported account as it was when the report was filed", + "type": "object", + "properties": { + "id": {"$ref": "#/components/schemas/SnowflakeStringType"}, + "username": {"nullable": true, "type": "string"}, + "discriminator": {"nullable": true, "type": "string"}, + "global_name": {"nullable": true, "type": "string"}, + "bio": {"nullable": true, "type": "string"}, + "pronouns": {"nullable": true, "type": "string"}, + "avatar": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + }, + "banner": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + } + }, + "required": ["id", "username", "discriminator", "global_name", "bio", "pronouns", "avatar", "banner"], + "additionalProperties": false + }, + "member": { + "nullable": true, + "description": "The community profile of the reported account when the report was filed from within a community", + "type": "object", + "properties": { + "guild_id": {"$ref": "#/components/schemas/SnowflakeStringType"}, + "nick": {"nullable": true, "type": "string"}, + "bio": {"nullable": true, "type": "string"}, + "pronouns": {"nullable": true, "type": "string"}, + "joined_at": {"nullable": true, "type": "string"}, + "avatar": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + }, + "banner": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + } + }, + "required": ["guild_id", "nick", "bio", "pronouns", "joined_at", "avatar", "banner"], + "additionalProperties": false + }, + "guild": { + "nullable": true, + "description": "The reported community as it was when the report was filed", + "type": "object", + "properties": { + "id": {"$ref": "#/components/schemas/SnowflakeStringType"}, + "name": {"nullable": true, "type": "string"}, + "vanity_url_code": {"nullable": true, "type": "string"}, + "icon": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + }, + "banner": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + }, + "splash": { + "nullable": true, + "type": "object", + "properties": { + "hash": {"type": "string", "description": "The asset hash at the time the report was filed"}, + "url": { + "nullable": true, + "description": "A download URL valid for 5 minutes. Null when the asset could not be copied into the report or no download URL could be made.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["hash", "url"], + "additionalProperties": false + } + }, + "required": ["id", "name", "vanity_url_code", "icon", "banner", "splash"], + "additionalProperties": false + } + }, + "required": ["captured_at", "user", "member", "guild"], + "additionalProperties": false + }, + "legal_hold_until": { + "description": "When the legal hold on the report ends. The report is kept past its retention period until then. Returned by the report detail only. Null when the report has no hold.", + "nullable": true, + "type": "string" + }, + "legal_hold_reason": { + "description": "Why the report is held. Returned by the report detail only. Null when the report has no hold.", + "nullable": true, + "type": "string" + }, + "reason": {"nullable": true, "type": "string"}, + "reason_label": {"nullable": true, "type": "string"}, + "reason_highest_priority": {"nullable": true, "type": "boolean"}, + "flow": { + "nullable": true, + "type": "object", + "properties": { + "revision_hash": {"type": "string"}, + "surface": {"type": "string"}, + "locale": {"nullable": true, "type": "string"}, + "steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "screen_id": {"type": "string"}, + "screen_title": {"type": "string"}, + "option_id": {"nullable": true, "type": "string"}, + "option_label": {"nullable": true, "type": "string"}, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": {"id": {"type": "string"}, "label": {"type": "string"}}, + "required": ["id", "label"], + "additionalProperties": false + } + } + }, + "required": ["screen_id", "screen_title", "option_id", "option_label", "items"], + "additionalProperties": false + } + } + }, + "required": ["revision_hash", "surface", "locale", "steps"], + "additionalProperties": false + }, + "reporter_good_faith_confirmed": {"nullable": true, "type": "boolean"} }, "required": [ "report_id", @@ -10483,13 +10931,43 @@ "type": "object", "properties": { "reports": {"type": "array", "items": {"$ref": "#/components/schemas/ReportAdminResponseSchema"}}, - "total": {"type": "number"}, - "offset": {"type": "number"}, - "limit": {"type": "number"} + "total": {"type": "number", "description": "Number of reports in the search index that match the filters"}, + "offset": {"type": "number", "description": "The offset this page was read from"}, + "limit": {"type": "number", "description": "The limit this page was read with"} }, "required": ["reports", "total", "offset", "limit"], "additionalProperties": false }, + "AdminReportReasonsResponse": { + "type": "object", + "properties": { + "reasons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": {"type": "string"}, + "label": {"type": "string"}, + "highest_priority": {"type": "boolean"}, + "legacy_category_message": {"type": "string"}, + "legacy_category_user": {"type": "string"}, + "legacy_category_guild": {"type": "string"} + }, + "required": [ + "key", + "label", + "highest_priority", + "legacy_category_message", + "legacy_category_user", + "legacy_category_guild" + ], + "additionalProperties": false + } + } + }, + "required": ["reasons"], + "additionalProperties": false + }, "MessageShredStatusResponse": { "anyOf": [ { @@ -13403,7 +13881,12 @@ "properties": { "hashes": {"minItems": 1, "maxItems": 1000, "type": "array", "items": {"type": "string"}}, "category": {"type": "string"}, - "severity": {"type": "integer", "minimum": 0, "maximum": 3}, + "severity": { + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, "source_url": {"type": "string"}, "reason": {"type": "string"}, "notes": {"type": "string"} @@ -13415,7 +13898,12 @@ "properties": { "sha256_hex": {"description": "SHA-256 in hex", "type": "string"}, "category": {"type": "string"}, - "severity": {"type": "integer", "minimum": 0, "maximum": 3}, + "severity": { + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, "content_type": {"description": "Optional MIME type hint for observability", "type": "string"}, "source_url": {"type": "string"}, "notes": {"type": "string"} @@ -13436,7 +13924,7 @@ }, "category": {"description": "Category / source slug (defaults to \"manual\")", "type": "string"}, "severity": { - "description": "Severity: 0 allow, 1 warn, 2 block, 3 block+report (default 2)", + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", "type": "integer", "minimum": 0, "maximum": 3 @@ -13452,7 +13940,7 @@ "url": {"description": "Absolute URL to ban. Canonicalized before storage.", "type": "string"}, "category": {"description": "Category / source slug (defaults to \"manual\")", "type": "string"}, "severity": { - "description": "Severity: 0 allow, 1 warn, 2 block, 3 block+report (default 2)", + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", "type": "integer", "minimum": 0, "maximum": 3 @@ -13514,7 +14002,12 @@ "type": "object", "properties": { "category": {"type": "string"}, - "severity": {"type": "integer", "minimum": 0, "maximum": 3}, + "severity": { + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, "source_url": {"type": "string"}, "reason": {"type": "string"}, "notes": {"type": "string"} @@ -13524,7 +14017,12 @@ "type": "object", "properties": { "category": {"type": "string"}, - "severity": {"type": "integer", "minimum": 0, "maximum": 3}, + "severity": { + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, "content_type": {"description": "Optional MIME type hint for observability", "type": "string"}, "source_url": {"type": "string"}, "notes": {"type": "string"} @@ -13540,7 +14038,7 @@ }, "category": {"description": "Category / source slug (defaults to \"manual\")", "type": "string"}, "severity": { - "description": "Severity: 0 allow, 1 warn, 2 block, 3 block+report (default 2)", + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", "type": "integer", "minimum": 0, "maximum": 3 @@ -13554,7 +14052,7 @@ "properties": { "category": {"description": "Category / source slug (defaults to \"manual\")", "type": "string"}, "severity": { - "description": "Severity: 0 allow, 1 warn, 2 block, 3 block+report (default 2)", + "description": "Stored severity label: 0 allow, 1 warn, 2 block, 3 block and report (default 2). The label is informational and every row blocks whatever its severity.", "type": "integer", "minimum": 0, "maximum": 3 @@ -16684,6 +17182,602 @@ "updated_at" ], "additionalProperties": false + }, + "APIErrorCode": { + "type": "string", + "enum": [ + "ACCESS_DENIED", + "ANNOUNCEMENT_CHANNEL_REQUIRED", + "BAD_GATEWAY", + "BAD_REQUEST", + "BLUESKY_OAUTH_AUTHORIZATION_FAILED", + "BLUESKY_OAUTH_NOT_ENABLED", + "ACCOUNT_LIMITED", + "ACCOUNT_IDENTITY_LOCKED", + "ACCOUNT_SUSPENDED_PERMANENTLY", + "ACCOUNT_SUSPENDED_TEMPORARILY", + "ACCOUNT_TOO_NEW_FOR_GUILD", + "ACLS_MUST_BE_NON_EMPTY", + "ADMIN_API_KEY_NOT_FOUND", + "APPLICATION_NOT_OWNED", + "ALREADY_FRIENDS", + "BOTS_CANNOT_CREATE_GUILDS", + "BOTS_CANNOT_SEND_FRIEND_REQUESTS", + "BOT_ALREADY_IN_GUILD", + "BOT_IS_PRIVATE", + "BOT_USER_AUTH_ENDPOINT_ACCESS_DENIED", + "BOT_USER_AUTH_SESSION_CREATION_DENIED", + "BOT_USER_GENERATION_FAILED", + "BOT_USER_NOT_FOUND", + "CALL_ALREADY_EXISTS", + "CANNOT_EDIT_OTHER_USER_MESSAGE", + "CANNOT_EXECUTE_ON_DM", + "CANNOT_BLOCK_SYSTEM_USER", + "CANNOT_MODIFY_SYSTEM_WEBHOOK", + "CANNOT_REDEEM_PLUTONIUM_WITH_VISIONARY", + "CANNOT_REPORT_GUILD", + "CANNOT_REPORT_OWN_GUILD", + "CANNOT_REPORT_OWN_MESSAGE", + "CANNOT_REPORT_YOURSELF", + "CANNOT_SEND_EMPTY_MESSAGE", + "CANNOT_SEND_FRIEND_REQUEST_TO_BLOCKED_USER", + "CANNOT_SEND_FRIEND_REQUEST_TO_SELF", + "CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL", + "CANNOT_SEND_MESSAGES_TO_USER", + "CANNOT_TRANSFER_OWNERSHIP_TO_BOT", + "CANNOT_SHRINK_RESERVED_SLOTS", + "CAPTCHA_REQUIRED", + "CHANNEL_ALREADY_FOLLOWED", + "CHANNEL_HAS_FOLLOWED_CHANNELS", + "CHANNEL_HAS_THREADS", + "CHANNEL_TYPE_CONVERSION_NOT_SUPPORTED", + "COMMUNICATION_DISABLED", + "CONNECTION_ALREADY_EXISTS", + "CONNECTION_INITIATION_TOKEN_INVALID", + "CONNECTION_INVALID_TYPE", + "CONNECTION_LIMIT_REACHED", + "CONNECTION_NOT_FOUND", + "CONNECTION_VERIFICATION_FAILED", + "CONFLICT", + "CONTENT_BLOCKED", + "DELETION_FAILED", + "DISCOVERY_ALREADY_APPLIED", + "DISCOVERY_APPLICATION_ALREADY_REVIEWED", + "DISCOVERY_APPLICATION_NOT_FOUND", + "DISCOVERY_DISABLED", + "DISCOVERY_INSUFFICIENT_MEMBERS", + "DISCOVERY_NOT_DISCOVERABLE", + "DISCRIMINATOR_REQUIRED", + "EMAIL_SERVICE_NOT_TESTABLE", + "EMAIL_UNAVAILABLE_ON_INSTANCE", + "EMAIL_VERIFICATION_REQUIRED", + "DIRECT_MESSAGE_EMAIL_VERIFICATION_REQUIRED", + "FOLLOW_TARGET_CONTENT_WARNING_REQUIRED", + "FOLLOW_TARGET_NOT_AGE_RESTRICTED", + "FRIEND_REQUEST_EMAIL_VERIFICATION_REQUIRED", + "GUILD_CREATION_EMAIL_VERIFICATION_REQUIRED", + "GUILD_CREATION_PERMISSION_REQUIRED", + "GUILD_EMAIL_VERIFICATION_REQUIRED", + "INVALID_FOLLOW_TARGET_CHANNEL", + "MESSAGE_ALREADY_CROSSPOSTED", + "MESSAGE_CROSSPOST_RATE_LIMITED", + "MESSAGE_NOT_CROSSPOSTABLE", + "MFA_EMAIL_VERIFICATION_REQUIRED", + "PROFILE_EMAIL_VERIFICATION_REQUIRED", + "PUBLISHED_MESSAGE_EDIT_RATE_LIMITED", + "PURCHASE_EMAIL_VERIFICATION_REQUIRED", + "REACTION_EMAIL_VERIFICATION_REQUIRED", + "REPORT_EMAIL_VERIFICATION_REQUIRED", + "REGISTRATION_CLOSED", + "REGISTRATION_PENDING_APPROVAL", + "REGISTRATION_REJECTED", + "REGISTRATION_URL_INVALID", + "EXPLICIT_CONTENT_CANNOT_BE_SENT", + "FEATURE_NOT_AVAILABLE_SELF_HOSTED", + "FEATURE_TEMPORARILY_DISABLED", + "FILE_SIZE_TOO_LARGE", + "FORBIDDEN", + "FORUM_TAG_NAMES_MUST_BE_UNIQUE", + "FORUM_TAG_REQUIRED", + "FRIEND_REQUEST_BLOCKED", + "GATEWAY_TIMEOUT", + "GENERAL_ERROR", + "GONE", + "GIFT_CODE_ALREADY_REDEEMED", + "GUILD_TEMPLATE_INVALID", + "GUILD_VERIFICATION_REQUIRED", + "HANDOFF_CODE_EXPIRED", + "HARVEST_EXPIRED", + "HARVEST_FAILED", + "HARVEST_NOT_READY", + "HIDE_MEDIA_DOWNLOAD_OPTION_MEDIA_ONLY", + "INTERNAL_SERVER_ERROR", + "INVALID_ACLS_FORMAT", + "INVALID_API_ORIGIN", + "INVALID_AUTH_TOKEN", + "INVALID_BOT_FLAG", + "INVALID_CAPTCHA", + "INVALID_CHANNEL_TYPE_FOR_CALL", + "INVALID_CHANNEL_TYPE", + "INVALID_DSA_REPORT_TARGET", + "INVALID_DSA_TICKET", + "INVALID_DSA_VERIFICATION_CODE", + "INVALID_FLAGS_FORMAT", + "INVALID_FORM_BODY", + "INVALID_HANDOFF_CODE", + "INVALID_ORIGIN_HANDOFF_NONCE", + "INVALID_PASSKEY_BRIDGE_NONCE", + "INVALID_PERMISSIONS_INTEGER", + "INVALID_PERMISSIONS_NEGATIVE", + "INVALID_REPORT_FLOW_ANSWERS", + "INVALID_REQUEST", + "INVALID_STREAM_KEY_FORMAT", + "INVALID_STREAM_THUMBNAIL_PAYLOAD", + "INVALID_SYSTEM_FLAG", + "INVALID_TIMESTAMP", + "INVALID_TOKEN", + "INVALID_THREAD_NOTIFICATION_SETTINGS", + "INVALID_WEBAUTHN_AUTHENTICATION_COUNTER", + "INVALID_WEBAUTHN_CREDENTIAL_COUNTER", + "INVALID_WEBAUTHN_CREDENTIAL", + "INVALID_WEBAUTHN_PUBLIC_KEY_FORMAT", + "INVITES_DISABLED", + "IP_AUTHORIZATION_REQUIRED", + "IP_AUTHORIZATION_RESEND_COOLDOWN", + "IP_AUTHORIZATION_RESEND_LIMIT_EXCEEDED", + "GLOBAL_IP_BANNED", + "GLOBAL_IP_TEMPORARILY_BANNED", + "IP_BAN_DECLINED", + "MAX_APPLICATIONS", + "MAX_BOOKMARKS", + "MAX_ACTIVE_THREADS", + "MAX_CATEGORY_CHANNELS", + "MAX_EMOJIS", + "MAX_FAVORITE_MEMES", + "MAX_FRIENDS", + "MAX_FORUM_TAGS", + "MAX_GROUP_DM_RECIPIENTS", + "MAX_GROUP_DMS", + "GROUP_DM_RECIPIENTS_NOT_ADDABLE", + "MAX_GUILD_CHANNELS", + "MAX_GUILD_MEMBERS", + "MAX_GUILD_ROLES", + "MAX_GUILDS", + "MAX_PINNED_THREADS_IN_FORUM", + "MAX_INVITES", + "MAX_REACTIONS", + "MAX_STICKERS", + "MAX_THREAD_MEMBERS", + "MAX_WEBHOOKS_PER_CHANNEL", + "MAX_WEBHOOKS_PER_GUILD", + "NCMEC_ALREADY_SUBMITTED", + "NCMEC_SUBMISSION_FAILED", + "MEDIA_METADATA_ERROR", + "METHOD_NOT_ALLOWED", + "MISSING_ACCESS", + "MISSING_ACL", + "MISSING_AUTHORIZATION", + "MISSING_OAUTH_SCOPE", + "MISSING_PERMISSIONS", + "NO_ACTIVE_CALL", + "NO_ACTIVE_SUBSCRIPTION", + "NO_TAGS_AVAILABLE_TO_NON_MODERATORS", + "NOT_FOUND", + "NOT_IMPLEMENTED", + "NO_PASSKEYS_REGISTERED", + "NO_PENDING_DELETION", + "NO_USERS_WITH_FLUXERTAG_EXIST", + "NOT_A_BOT_APPLICATION", + "NOT_FRIENDS_WITH_USER", + "NSFW_CONTENT_AGE_RESTRICTED", + "PASSKEY_AUTHENTICATION_FAILED", + "PREMIUM_PURCHASE_BLOCKED", + "PREVIEW_MUST_BE_JPEG", + "PROCESSING_FAILED", + "RATE_LIMITED", + "REPORT_ALREADY_RESOLVED", + "REPORT_BANNED", + "REPORT_FLOW_OUTDATED", + "RESPONSE_VALIDATION_ERROR", + "RESOURCE_LOCKED", + "SERVICE_UNAVAILABLE", + "SESSION_TOKEN_MISMATCH", + "SINGLE_COMMUNITY_CANNOT_CREATE_GUILDS", + "SINGLE_COMMUNITY_CANNOT_DELETE", + "SINGLE_COMMUNITY_CANNOT_LEAVE", + "INSTANCE_POLICY_TRANSITION_NOT_ALLOWED", + "SLOWMODE_RATE_LIMITED", + "SEARCH_INDEX_NOT_READY", + "SSO_REQUIRED", + "STORE_BILLING_UNAVAILABLE", + "STORE_NOTIFICATION_UNAUTHORIZED", + "STORE_PURCHASE_INVALID", + "STORE_PURCHASE_OWNED_BY_OTHER_ACCOUNT", + "STORE_PURCHASE_SANDBOX_NOT_ENTITLED", + "STREAM_KEY_CHANNEL_MISMATCH", + "STREAM_KEY_SCOPE_MISMATCH", + "STRIPE_ERROR", + "STRIPE_GIFT_REDEMPTION_IN_PROGRESS", + "STRIPE_INVALID_PRODUCT", + "STRIPE_INVALID_PRODUCT_CONFIGURATION", + "STRIPE_NO_ACTIVE_SUBSCRIPTION", + "STRIPE_NO_PURCHASE_HISTORY", + "STRIPE_REFUND_OUTSIDE_WINDOW", + "STRIPE_REFUND_COOLDOWN_ACTIVE", + "STRIPE_NO_SUBSCRIPTION", + "STRIPE_PAYMENT_NOT_AVAILABLE", + "STRIPE_SUBSCRIPTION_ALREADY_CANCELING", + "STRIPE_SUBSCRIPTION_NOT_CANCELING", + "STRIPE_WEBHOOK_NOT_AVAILABLE", + "STRIPE_WEBHOOK_SIGNATURE_INVALID", + "STRIPE_WEBHOOK_SIGNATURE_MISSING", + "DIRECT_MESSAGES_DISABLED", + "NEW_CONVERSATIONS_LIMITED", + "DONATION_AMOUNT_INVALID", + "DONATION_MAGIC_LINK_EXPIRED", + "DONATION_MAGIC_LINK_INVALID", + "DONATION_MAGIC_LINK_USED", + "SUDO_MODE_REQUIRED", + "TAG_ALREADY_TAKEN", + "TEMPORARY_INVITE_REQUIRES_PRESENCE", + "TEST_HARNESS_DISABLED", + "TEST_HARNESS_FORBIDDEN", + "THREAD_ALREADY_CREATED_FOR_MESSAGE", + "THREAD_ARCHIVED", + "THREAD_LOCKED", + "TWO_FA_NOT_ENABLED", + "TWO_FACTOR_REQUIRED", + "UNAUTHORIZED", + "UNCLAIMED_ACCOUNT_CANNOT_ACCEPT_FRIEND_REQUESTS", + "UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS", + "UNCLAIMED_ACCOUNT_CANNOT_CREATE_APPLICATIONS", + "UNCLAIMED_ACCOUNT_CANNOT_CREATE_GUILDS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_GROUP_DMS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_ONE_ON_ONE_VOICE_CALLS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_VOICE_CHANNELS", + "UNCLAIMED_ACCOUNT_CANNOT_MAKE_PURCHASES", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_DIRECT_MESSAGES", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_FRIEND_REQUESTS", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_MESSAGES", + "UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS", + "UNKNOWN_CHANNEL", + "UNKNOWN_EMOJI", + "UNKNOWN_FAVORITE_MEME", + "UNKNOWN_FORUM_TAG", + "UNKNOWN_GIFT_CODE", + "UNKNOWN_GUILD", + "UNKNOWN_HARVEST", + "UNKNOWN_INVITE", + "UNKNOWN_MEMBER", + "UNKNOWN_MESSAGE", + "UNKNOWN_ORIGIN_HANDOFF", + "UNKNOWN_PASSKEY_BRIDGE", + "UNKNOWN_PASSKEY_MIGRATION", + "UNKNOWN_REPORT", + "UNKNOWN_ROLE", + "UNKNOWN_STICKER", + "UNKNOWN_STORE_PURCHASE", + "UNKNOWN_THREAD_MEMBER", + "UNKNOWN_USER_FLAG", + "UNKNOWN_USER", + "UNKNOWN_VOICE_REGION", + "UNKNOWN_VOICE_SERVER", + "UNKNOWN_WEBAUTHN_CREDENTIAL", + "UNKNOWN_APPLICATION", + "UNKNOWN_WEBHOOK", + "WEBHOOK_FORUM_TARGET_CONFLICT", + "WEBHOOK_FORUM_TARGET_REQUIRED", + "WEBHOOK_SERVICE_FORUM_UNSUPPORTED", + "WEBHOOK_THREAD_NAME_REQUIRES_FORUM", + "USERNAME_NOT_AVAILABLE", + "USERNAME_SIGN_IN_ONLY", + "UPDATE_FAILED", + "USER_BANNED_FROM_GUILD", + "USER_IP_BANNED_FROM_GUILD", + "USER_NOT_IN_VOICE", + "USER_OWNS_GUILDS", + "VALIDATION_ERROR", + "VOICE_CHANNEL_FULL", + "WEBAUTHN_CREDENTIAL_LIMIT_REACHED", + "AGE_VERIFICATION_ALREADY_VERIFIED" + ], + "description": "Known error codes returned by API operations", + "x-enumDescriptions": [ + "You don't have access to this resource or feature.", + "This action is only available in announcement channels.", + "Bad gateway.", + "Bad request.", + "We couldn't resolve that Bluesky handle. Please check it and try again.", + "Bluesky connections are not enabled on this instance.", + "Messaging is paused on your account. Check your email for a quick step to continue.", + "The sign-in method is already set and can't be changed.", + "This account has been permanently suspended.", + "This account has been temporarily suspended.", + "Your account is too new to send messages in this community.", + "ACLs must be non-empty.", + "Admin API key wasn't found.", + "You don't own this application.", + "You're already friends with this user.", + "Bots can't create communities.", + "Bots can't send friend requests.", + "This bot is already in the community.", + "This bot is private.", + "Bot users can't use auth endpoints.", + "Bot users can't create auth sessions.", + "Bot user generation failed.", + "Bot user wasn't found.", + "A call is already in progress in this channel.", + "You can't edit another user's message.", + "This action can't be performed in a DM.", + "You can't block the system user.", + "You can't edit system messages.", + "You can't redeem {premium_tier_name} with Visionary.", + "You can't report this community.", + "You can't report your own community.", + "You can't report your own message.", + "You can't report yourself.", + "You can't send an empty message.", + "You can't send a friend request to a blocked user.", + "You can't send a friend request to yourself.", + "You can't send messages in a non-text channel.", + "You can't send messages to this user.", + "Community ownership can't be transferred to a bot.", + "You can't shrink reserved slots.", + "Verification required. Try again.", + "This channel already receives updates from that announcement channel.", + "Remove the followed channels posting here before converting it to an announcement channel.", + "Channels with threads can't be converted to announcement channels.", + "Only text and announcement channels can be converted into each other.", + "Communication is disabled.", + "A connection of this type with this identifier already exists.", + "The connection initiation token is invalid or has expired.", + "The connection type is not supported.", + "You've reached the maximum number of connections ({limit}).", + "Unknown connection.", + "Connection verification failed. Make sure the verification token is correctly placed.", + "Conflict.", + "This content was blocked by safety systems.", + "We couldn't delete the resource. Please try again.", + "This community has already applied for Discovery.", + "This Discovery application has already been reviewed.", + "Discovery application wasn't found.", + "Discovery isn't available on this instance.", + "This community doesn't meet the minimum member count for Discovery.", + "This community isn't listed in Discovery.", + "Discriminator is required.", + "Email service is temporarily unavailable. Please try again later.", + "This instance doesn't use email.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Updates from a channel with a content warning can only go to a channel with a content warning or an age restriction.", + "Updates from an age-restricted channel can only go to an age-restricted channel.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "You don't have permission to create communities on this instance. Contact your instance administrator to request access.", + "Email verification is required for this action.", + "Followed channels can only post into text channels.", + "This message has already been published.", + "This channel has reached its publishing limit. It can publish 10 messages in a row, then one more every 6 minutes.", + "This message cannot be published.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "This published message has reached its editing limit. It allows 3 quick edits, then 1 every 20 minutes.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Registration is closed on this instance.", + "This registration is waiting for admin approval.", + "This registration request was rejected.", + "This registration link is invalid or has expired.", + "Explicit content can't be sent.", + "This feature isn't available on self-hosted instances.", + "This feature is temporarily disabled.", + "File size is too large. Maximum file size is {maxSize}.", + "Forbidden.", + "Tag names must be unique.", + "A tag is required to create a post in this channel.", + "User does not accept friend requests at this time.", + "Gateway timeout.", + "Something went wrong. Please try again later.", + "Gone.", + "Gift code is already redeemed.", + "The community template data is invalid or malformed.", + "Community verification is required.", + "Handoff code expired.", + "Your data export request has expired. Please request a new export.", + "Your data export request failed. Please try again.", + "Your data export is still being prepared. Please check back in a few moments.", + "Hiding media download options is only available in media channels.", + "Internal server error.", + "Invalid ACL format.", + "Invalid API origin.", + "Invalid or expired authorization token.", + "Invalid bot flag.", + "Verification failed. Try again.", + "Calls can only be made in direct messages or group DMs.", + "Invalid channel type.", + "Invalid DSA report target.", + "Invalid DSA ticket.", + "Invalid DSA verification code.", + "Invalid flags format.", + "Invalid form body.", + "Invalid handoff code.", + "This sign-in transfer doesn't match the one you started.", + "This passkey request could not be confirmed. Try again.", + "Permissions must be a valid integer.", + "Permissions must be non-negative.", + "These answers don't match the report form. Start the report again.", + "Invalid request.", + "Invalid stream key format.", + "Invalid stream thumbnail payload.", + "Invalid system flag.", + "Invalid timestamp.", + "Invalid or expired authorization token.", + "Invalid thread notification settings.", + "Invalid WebAuthn authentication counter.", + "Invalid WebAuthn credential counter.", + "Failed to verify WebAuthn credential.", + "Invalid WebAuthn public key format.", + "Invites are disabled.", + "IP authorization is required.", + "IP authorization resend is on cooldown.", + "IP authorization resend limit exceeded.", + "Your IP address {ipAddress} has been permanently blocked from the Fluxer API by platform administrators. If you believe this is a mistake, contact support@fluxer.app to appeal. Include this IP address in your appeal.", + "Your IP address {ipAddress} has been temporarily blocked from the Fluxer API. The block lifts on its own when it expires. If you think this is a mistake, contact support@fluxer.com and include this IP address.", + "This IP address cannot be added to the blocklist.", + "You've reached the maximum of {limit, plural, one {# application} other {# applications}}.", + "You've reached the maximum of {count, plural, one {# bookmark} other {# bookmarks}}.", + "This community has reached its active thread limit of {count}.", + "You've reached the maximum of {count, plural, one {# category channel} other {# category channels}}.", + "You've reached the maximum of {count, plural, one {# emoji} other {# emojis}}.", + "You've reached the maximum of {count, plural, one {# saved media item} other {# saved media items}}.", + "You've reached the maximum of {count, plural, one {# friend} other {# friends}}.", + "This channel has reached its tag limit of {count}.", + "You've reached the maximum of {count, plural, one {# group DM recipient} other {# group DM recipients}}.", + "You've reached the maximum of {count, plural, one {# group DM} other {# group DMs}}.", + "One or more selected users can't be added to this group DM.", + "You've reached the maximum of {count, plural, one {# community channel} other {# community channels}}.", + "You've reached the maximum of {count, plural, one {# community member} other {# community members}}.", + "You've reached the maximum of {count, plural, one {# community role} other {# community roles}}.", + "You've reached the maximum of {count, plural, one {# community} other {# communities}}.", + "This channel has reached its pinned post limit of {count}.", + "You've reached the maximum of {count, plural, one {# invite} other {# invites}}.", + "You've reached the maximum of {count, plural, one {# reaction} other {# reactions}}.", + "You've reached the maximum of {count, plural, one {# sticker} other {# stickers}}.", + "This thread has reached its member limit of {count}.", + "You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per channel.", + "You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per community.", + "This content has already been submitted to NCMEC.", + "We couldn't submit the report to NCMEC. Please try again later.", + "Media metadata error.", + "Method not allowed.", + "You don't have access to this resource or feature.", + "Missing ACL.", + "Missing or invalid authorization header.", + "The requested scope isn't supported or you don't have permission to request it.", + "You don't have the permissions required to perform this action.", + "No active call.", + "No active subscription.", + "A tag is required, but only moderators can apply the tags in this channel.", + "Not found.", + "Not implemented.", + "No passkeys are registered.", + "Invalid request.", + "There are too many users with this username.", + "This application isn't a bot.", + "You're not friends with this user.", + "NSFW content is age restricted.", + "Passkey authentication failed.", + "No active subscription.", + "Preview must be JPEG.", + "We couldn't process the request. Please try again.", + "You're being rate limited.", + "Report already resolved.", + "You've been banned from submitting reports.", + "The report form changed while you were filling it in. Start the report again.", + "Response validation failed: {errors}.", + "This resource is being modified. Please try again shortly.", + "Service unavailable.", + "Session token mismatch.", + "This instance is a single community, so additional communities cannot be created.", + "The community for this instance cannot be deleted.", + "You cannot leave the community for this instance.", + "This instance policy change is not allowed.", + "Slowmode rate limited.", + "The search index isn't ready yet. Try again in a moment.", + "Invalid request.", + "In-app purchases are unavailable right now. Try again later.", + "The notification signature is invalid.", + "This purchase could not be verified.", + "This purchase is linked to a different account.", + "Test purchases cannot be applied to this account.", + "Stream key channel mismatch.", + "Stream key scope mismatch.", + "Payment processing encountered an error. Please try again or contact support.", + "Gift code redemption is in progress. Try again in a moment.", + "Invalid product selection.", + "Invalid product configuration.", + "No active subscription found.", + "No purchase history found. Customer portal isn't available.", + "This purchase is outside the 3-day self-serve refund window.", + "You can request a self-serve refund once every 30 days. Please try again later.", + "No subscription found.", + "Payment processing is temporarily unavailable. Please try again later.", + "Subscription is already set to cancel at period end.", + "Subscription isn't set to cancel.", + "Webhook processing isn't available.", + "Stripe webhook signature is invalid.", + "Stripe webhook signature is missing.", + "Direct messages and friend requests are disabled on this instance.", + "You can't start new conversations right now. Please try again later.", + "Donation amount is invalid.", + "Magic link has expired.", + "Magic link is invalid.", + "Magic link has already been used.", + "Sudo mode is required.", + "This tag is already taken.", + "Temporary invite requires presence.", + "Test harness is disabled.", + "Test harness is forbidden.", + "A thread has already been created for this message.", + "This thread is archived.", + "This thread is locked.", + "Two-factor authentication isn't enabled.", + "Two-factor authentication is required.", + "Unauthorized.", + "You're not friends with this user.", + "Invalid request.", + "Invalid request.", + "You need to complete your account setup before you can create communities.", + "You can't add yourself to a group DM.", + "Invalid request.", + "Invalid request.", + "Invalid request.", + "You can't send messages to this user.", + "Bots can't send friend requests.", + "Invalid request.", + "You need to complete your account setup before you can submit reports.", + "Channel wasn't found.", + "Unknown emoji.", + "Unknown saved media.", + "Tag wasn't found.", + "Unknown gift code.", + "Community wasn't found.", + "Unknown data export.", + "Invite wasn't found or is no longer valid.", + "Member wasn't found in this community.", + "Message wasn't found.", + "This sign-in transfer has expired or was already used.", + "This passkey request has expired. Try again.", + "There is no passkey to update right now.", + "Unknown report.", + "Role wasn't found.", + "Unknown sticker.", + "Unknown store purchase.", + "Thread member wasn't found.", + "The specified user flag isn't recognized.", + "User wasn't found.", + "Unknown voice region.", + "Unknown voice server.", + "Unknown WebAuthn credential.", + "Unknown application.", + "Unknown webhook.", + "You can't specify both `thread_id` and `thread_name`.", + "Webhooks posting to this channel need a `thread_id` or a `thread_name`.", + "This webhook service can't post to a forum or media channel without a `thread_id`.", + "`thread_name` and `applied_tags` only work in forum and media channels.", + "This username is not available.", + "This is only available on instances where people sign in with a username.", + "We couldn't update the resource. Please try again.", + "This user is banned from this community.", + "This user's IP is banned from this community.", + "This user isn't in voice.", + "This user owns communities.", + "Validation failed.", + "Voice channel is full.", + "You've reached the maximum of {count, plural, one {# WebAuthn credential} other {# WebAuthn credentials}}.", + "You've already completed age verification." + ] } }, "securitySchemes": { diff --git a/fluxer_admin/src/acl.rs b/fluxer_admin/src/acl.rs index 2e8889579..2a309f88d 100644 --- a/fluxer_admin/src/acl.rs +++ b/fluxer_admin/src/acl.rs @@ -215,6 +215,13 @@ pub const ALL_ACLS: &[&str] = &[ VOICE_SERVER_UPDATE, ]; +pub const NCMEC_ATTACHMENT_REPORT: &[&str] = &[ + CSAM_SUBMIT_NCMEC, + MESSAGE_DELETE, + USER_DELETE, + ARCHIVE_TRIGGER_USER, +]; + pub fn has_permission(admin_acls: &[String], required: &str) -> bool { let required_alias = acl_key_alias(required); admin_acls.iter().any(|acl| { @@ -229,6 +236,10 @@ pub fn has_any_permission(admin_acls: &[String], required: &[&str]) -> bool { required.iter().any(|acl| has_permission(admin_acls, acl)) } +pub fn has_all_permissions(admin_acls: &[String], required: &[&str]) -> bool { + required.iter().all(|acl| has_permission(admin_acls, acl)) +} + fn acl_key_alias(acl: &str) -> String { acl.replace(':', "_").to_ascii_uppercase() } @@ -282,6 +293,34 @@ mod tests { assert!(has_any_permission(&acls(&[]), &[])); } + #[test] + fn has_all_permissions_needs_every_acl() { + assert!(has_all_permissions(&acls(&[USER_LOOKUP]), &[])); + assert!(has_all_permissions( + &acls(&[USER_LOOKUP, GUILD_LOOKUP]), + &[GUILD_LOOKUP, USER_LOOKUP] + )); + assert!(!has_all_permissions( + &acls(&[USER_LOOKUP]), + &[GUILD_LOOKUP, USER_LOOKUP] + )); + assert!(has_all_permissions( + &acls(&[WILDCARD]), + NCMEC_ATTACHMENT_REPORT + )); + for missing in NCMEC_ATTACHMENT_REPORT { + let held = NCMEC_ATTACHMENT_REPORT + .iter() + .copied() + .filter(|acl| acl != missing) + .collect::>(); + assert!( + !has_all_permissions(&acls(&held), NCMEC_ATTACHMENT_REPORT), + "{missing}" + ); + } + } + #[test] fn has_any_permission_none_match() { let user_acls = acls(&[USER_LOOKUP]); diff --git a/fluxer_admin/src/api/reports.rs b/fluxer_admin/src/api/reports.rs index 9067ca9e1..68c0a5d17 100644 --- a/fluxer_admin/src/api/reports.rs +++ b/fluxer_admin/src/api/reports.rs @@ -4,7 +4,8 @@ use crate::api::generated::snowflake; use super::client::{AdminApiClient, ApiError, ApiResult}; use super::types::{ - ListReportsResponse, ReportEntry, ResolveReportResponse, SearchReportsResponse, + ReportEntry, ReportLegalHoldResponse, ReportReasonListResponse, ResolveReportResponse, + SearchReportsResponse, }; #[derive(Default)] @@ -13,8 +14,10 @@ pub struct SearchReportsParams<'a> { pub status: Option, pub report_type: Option, pub category: Option<&'a str>, + pub reason: Option<&'a str>, pub reporter_id: Option<&'a str>, pub reported_user_id: Option<&'a str>, + pub reported_webhook_id: Option<&'a str>, pub reported_guild_id: Option<&'a str>, pub reported_channel_id: Option<&'a str>, pub guild_context_id: Option<&'a str>, @@ -26,23 +29,6 @@ pub struct SearchReportsParams<'a> { } impl AdminApiClient { - pub async fn list_reports( - &self, - status: Option, - limit: u32, - offset: Option, - ) -> ApiResult { - let status = status.map(report_status).transpose()?.unwrap_or_default(); - let limit = limit.to_string(); - let offset = offset.map(|value| value.to_string()).unwrap_or_default(); - let query_params = [ - ("status", status), - ("limit", limit.as_str()), - ("offset", offset.as_str()), - ]; - self.get("/admin/reports", Some(&query_params)).await - } - pub async fn get_report(&self, report_id: &str) -> ApiResult { let response = self .generated() @@ -72,6 +58,27 @@ impl AdminApiClient { .await } + pub async fn set_report_legal_hold( + &self, + report_id: &str, + legal_hold_until: Option<&str>, + legal_hold_reason: Option<&str>, + ) -> ApiResult { + let body = serde_json::json!({ + "legal_hold_until": legal_hold_until, + "legal_hold_reason": legal_hold_until.and(legal_hold_reason), + }); + self.post_with_reason( + &format!( + "/admin/reports/{}/legal-hold", + urlencoding::encode(report_id) + ), + Some(&body), + None, + ) + .await + } + pub async fn search_reports( &self, params: &SearchReportsParams<'_>, @@ -98,11 +105,16 @@ impl AdminApiClient { ("status", status), ("report_type", report_type), ("category", params.category.unwrap_or_default()), + ("reason", params.reason.unwrap_or_default()), ("reporter_id", params.reporter_id.unwrap_or_default()), ( "reported_user_id", params.reported_user_id.unwrap_or_default(), ), + ( + "reported_webhook_id", + params.reported_webhook_id.unwrap_or_default(), + ), ( "reported_guild_id", params.reported_guild_id.unwrap_or_default(), @@ -127,6 +139,10 @@ impl AdminApiClient { self.get("/admin/reports", Some(&query_params)).await } + pub async fn list_report_reasons(&self) -> ApiResult { + self.get("/admin/report-reasons", None).await + } + pub async fn search_reports_by_reporter( &self, reporter_id: &str, diff --git a/fluxer_admin/src/api/types/user_detail.rs b/fluxer_admin/src/api/types/user_detail.rs index 5056a8429..3d81233c9 100644 --- a/fluxer_admin/src/api/types/user_detail.rs +++ b/fluxer_admin/src/api/types/user_detail.rs @@ -98,6 +98,38 @@ pub struct ReportEntry { pub reported_user_global_name: Option, pub reported_user_discriminator: Option, pub reported_user_avatar_hash: Option, + #[serde(default)] + pub reported_webhook_id: Option, + #[serde(default)] + pub reported_webhook_name: Option, + #[serde(default)] + pub reported_webhook_avatar_hash: Option, + #[serde(default)] + pub reported_webhook_default_name: Option, + #[serde(default)] + pub reported_webhook_default_avatar_hash: Option, + #[serde(default)] + pub reported_webhook_type: Option, + #[serde(default)] + pub reported_webhook_application_id: Option, + #[serde(default)] + pub reported_webhook_channel_id: Option, + #[serde(default)] + pub reported_webhook_guild_id: Option, + #[serde(default)] + pub reported_webhook_created_at: Option, + #[serde(default)] + pub reported_webhook_creator_id: Option, + #[serde(default)] + pub reported_webhook_creator_tag: Option, + #[serde(default)] + pub reported_webhook_creator_username: Option, + #[serde(default)] + pub reported_webhook_creator_global_name: Option, + #[serde(default)] + pub reported_webhook_creator_discriminator: Option, + #[serde(default)] + pub reported_webhook_creator_avatar_hash: Option, pub reported_guild_id: Option, pub reported_guild_name: Option, pub reported_guild_icon_hash: Option, @@ -121,6 +153,148 @@ pub struct ReportEntry { pub public_comment: Option, pub mutual_dm_channel_id: Option, pub message_context: Option>, + #[serde(default)] + pub reason: Option, + #[serde(default)] + pub reason_label: Option, + #[serde(default)] + pub reason_highest_priority: Option, + #[serde(default)] + pub flow: Option, + #[serde(default)] + pub reporter_good_faith_confirmed: Option, + #[serde(default)] + pub reported_user_bot: Option, + #[serde(default)] + pub reported_profile_snapshot: Option, + #[serde(default)] + pub legal_hold_until: Option, + #[serde(default)] + pub legal_hold_reason: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ReportProfileSnapshot { + #[serde(default)] + pub captured_at: Option, + #[serde(default)] + pub user: Option, + #[serde(default)] + pub member: Option, + #[serde(default)] + pub guild: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ReportProfileSnapshotUser { + pub id: String, + #[serde(default)] + pub username: Option, + #[serde(default)] + pub discriminator: Option, + #[serde(default)] + pub global_name: Option, + #[serde(default)] + pub bio: Option, + #[serde(default)] + pub pronouns: Option, + #[serde(default)] + pub avatar: Option, + #[serde(default)] + pub banner: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ReportProfileSnapshotMember { + pub guild_id: String, + #[serde(default)] + pub nick: Option, + #[serde(default)] + pub bio: Option, + #[serde(default)] + pub pronouns: Option, + #[serde(default)] + pub joined_at: Option, + #[serde(default)] + pub avatar: Option, + #[serde(default)] + pub banner: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ReportProfileSnapshotGuild { + pub id: String, + #[serde(default)] + pub name: Option, + #[serde(default)] + pub vanity_url_code: Option, + #[serde(default)] + pub icon: Option, + #[serde(default)] + pub banner: Option, + #[serde(default)] + pub splash: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ReportProfileSnapshotAsset { + pub hash: String, + #[serde(default)] + pub url: Option, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportLegalHoldResponse { + pub report_id: String, + pub legal_hold_until: Option, + pub legal_hold_reason: Option, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportFlowAnswersEntry { + pub revision_hash: String, + pub surface: String, + #[serde(default)] + pub locale: Option, + #[serde(default)] + pub steps: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportFlowAnswerStepEntry { + pub screen_id: String, + pub screen_title: String, + #[serde(default)] + pub option_id: Option, + #[serde(default)] + pub option_label: Option, + #[serde(default)] + pub items: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportFlowAnswerItemEntry { + pub id: String, + pub label: String, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportReasonEntry { + pub key: String, + pub label: String, + #[serde(default)] + pub highest_priority: bool, + #[serde(default)] + pub legacy_category_message: Option, + #[serde(default)] + pub legacy_category_user: Option, + #[serde(default)] + pub legacy_category_guild: Option, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ReportReasonListResponse { + pub reasons: Vec, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -131,11 +305,6 @@ pub struct SearchReportsResponse { pub limit: u64, } -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ListReportsResponse { - pub reports: Vec, -} - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ResolveReportResponse { pub report_id: String, diff --git a/fluxer_admin/src/routes/message_actions.rs b/fluxer_admin/src/routes/message_actions.rs index 5363b85bf..1891527d7 100644 --- a/fluxer_admin/src/routes/message_actions.rs +++ b/fluxer_admin/src/routes/message_actions.rs @@ -8,6 +8,7 @@ use crate::{ flash::{self, FlashData}, }, state::AppState, + templates::components::message_list::MessageActions, utils::forms::MultiValueForm, }; use axum::{ @@ -321,7 +322,11 @@ pub(crate) async fn messages_browse_fragment( .as_ref() .map(|user| user.acls.as_slice()) .unwrap_or(&[]); - let can_delete = acl::has_permission(admin_acls, acl::MESSAGE_DELETE); + let actions = MessageActions { + delete: acl::has_permission(admin_acls, acl::MESSAGE_DELETE), + ncmec: acl::has_all_permissions(admin_acls, acl::NCMEC_ATTACHMENT_REPORT), + source_report_id: None, + }; let client = AdminApiClient::new(state.http_client(), config, &auth.0.session); let result = client .browse_channel( @@ -334,7 +339,7 @@ pub(crate) async fn messages_browse_fragment( match result { Ok(resp) => { let markup = crate::templates::pages::messages_page::browse_messages_fragment( - config, &resp.data, can_delete, None, + config, &resp.data, actions, None, ); Html(markup.into_string()).into_response() } diff --git a/fluxer_admin/src/routes/messages.rs b/fluxer_admin/src/routes/messages.rs index 0e1159e37..b39e97abf 100644 --- a/fluxer_admin/src/routes/messages.rs +++ b/fluxer_admin/src/routes/messages.rs @@ -73,6 +73,7 @@ async fn messages_page( .unwrap_or(&[]); let can_lookup = acl::has_permission(admin_acls, acl::MESSAGE_LOOKUP); let can_delete = acl::has_permission(admin_acls, acl::MESSAGE_DELETE); + let can_report_ncmec = acl::has_all_permissions(admin_acls, acl::NCMEC_ATTACHMENT_REPORT); let client = AdminApiClient::new(state.http_client(), config, &auth.0.session); let channel_id = query.channel_id.as_deref().filter(|s| !s.is_empty()); let message_id = query.message_id.as_deref().filter(|s| !s.is_empty()); @@ -137,6 +138,7 @@ async fn messages_page( prefill_channel_id: channel_id, can_lookup, can_delete, + can_report_ncmec, lookup_result: lookup_result.as_ref(), browse_result: browse_result.as_ref(), search_result: search_result.as_ref(), diff --git a/fluxer_admin/src/routes/reports.rs b/fluxer_admin/src/routes/reports.rs index 407edeb4f..fb5ac4b06 100644 --- a/fluxer_admin/src/routes/reports.rs +++ b/fluxer_admin/src/routes/reports.rs @@ -1,9 +1,11 @@ // SPDX-License-Identifier: AGPL-3.0-or-later use crate::{ + acl, api::{ - client::{AdminApiClient, ApiResultExt}, + client::{AdminApiClient, ApiError, ApiResultExt}, reports::SearchReportsParams, + types::ReportEntry, }, config::AdminConfig, middleware::{ @@ -14,7 +16,7 @@ use crate::{ }, state::AppState, templates, - utils::forms::clean_string, + utils::{forms::clean_string, timestamps::format_admin_timestamp}, }; use axum::{ Form, Router, @@ -35,8 +37,10 @@ struct ReportsQuery { #[serde(rename = "type")] report_type: Option, category: Option, + reason: Option, reporter_id: Option, reported_user_id: Option, + reported_webhook_id: Option, reported_guild_id: Option, reported_channel_id: Option, guild_context_id: Option, @@ -46,6 +50,18 @@ struct ReportsQuery { page: Option, } +#[derive(Deserialize)] +struct LegalHoldForm { + #[serde(default)] + _csrf: Option, + #[serde(default)] + legal_hold_until: Option, + #[serde(default)] + legal_hold_reason: Option, + #[serde(default)] + clear: Option, +} + #[derive(Deserialize)] struct ResolveForm { #[serde(default)] @@ -67,6 +83,10 @@ pub fn router() -> Router { "/reports/{report_id}/resolve", axum::routing::post(report_resolve), ) + .route( + "/reports/{report_id}/legal-hold", + axum::routing::post(report_legal_hold), + ) } async fn reports_list( @@ -95,25 +115,30 @@ async fn reports_list( .report_type .as_deref() .and_then(|s| s.parse::().ok()); - let reports = client - .search_reports(&SearchReportsParams { - query: search_query.as_deref(), - status, - report_type, - category: query.category.as_deref(), - reporter_id: query.reporter_id.as_deref(), - reported_user_id: query.reported_user_id.as_deref(), - reported_guild_id: query.reported_guild_id.as_deref(), - reported_channel_id: query.reported_channel_id.as_deref(), - guild_context_id: query.guild_context_id.as_deref(), - resolved_by_admin_id: query.resolved_by_admin_id.as_deref(), - sort_by: Some(sort_by), - sort_order: Some(sort_order), - limit, - offset, - }) - .await - .log_error("search reports"); + let reason = query.reason.as_deref().and_then(clean_string); + let params = SearchReportsParams { + query: search_query.as_deref(), + status, + report_type, + category: query.category.as_deref(), + reason: reason.as_deref(), + reporter_id: query.reporter_id.as_deref(), + reported_user_id: query.reported_user_id.as_deref(), + reported_webhook_id: query.reported_webhook_id.as_deref(), + reported_guild_id: query.reported_guild_id.as_deref(), + reported_channel_id: query.reported_channel_id.as_deref(), + guild_context_id: query.guild_context_id.as_deref(), + resolved_by_admin_id: query.resolved_by_admin_id.as_deref(), + sort_by: Some(sort_by), + sort_order: Some(sort_order), + limit, + offset, + }; + let (reports, reasons) = tokio::join!( + client.search_reports(¶ms), + state.report_reasons(&client) + ); + let reports = reports.log_error("search reports"); let markup = templates::pages::reports_list::reports_list_page( config, @@ -124,14 +149,17 @@ async fn reports_list( status: query.status.as_deref(), report_type: query.report_type.as_deref(), category: query.category.as_deref(), + reason: reason.as_deref(), reporter_id: query.reporter_id.as_deref(), reported_user_id: query.reported_user_id.as_deref(), + reported_webhook_id: query.reported_webhook_id.as_deref(), reported_guild_id: query.reported_guild_id.as_deref(), reported_channel_id: query.reported_channel_id.as_deref(), guild_context_id: query.guild_context_id.as_deref(), resolved_by_admin_id: query.resolved_by_admin_id.as_deref(), sort: query.sort.as_deref().unwrap_or("reportedAt_desc"), }, + reasons.as_deref(), page, limit, ); @@ -167,10 +195,12 @@ async fn report_detail( .log_error("load report detail"); match report { Some(report) => { + let live = load_live_profile(&client, &auth.0, &report).await; let markup = templates::pages::report_detail::report_detail_page( config, &auth.0, &report, + &live, &csrf_token, is_detail_fragment, ); @@ -183,6 +213,49 @@ async fn report_detail( } } +async fn load_live_profile( + client: &AdminApiClient, + auth: &AuthContext, + report: &ReportEntry, +) -> templates::pages::report_detail::LiveProfile { + let can = |permission: &str| { + auth.admin_user + .as_ref() + .is_some_and(|admin| acl::has_permission(&admin.acls, permission)) + }; + let snapshot = report.reported_profile_snapshot.as_ref(); + let user_id = snapshot + .and_then(|snapshot| snapshot.user.as_ref()) + .map(|user| user.id.as_str()) + .filter(|_| can(acl::USER_LOOKUP)); + let guild_id = snapshot + .and_then(|snapshot| snapshot.guild.as_ref()) + .map(|guild| guild.id.as_str()) + .filter(|_| can(acl::GUILD_LOOKUP)); + let (user, guild) = tokio::join!( + async { + match user_id { + Some(id) => client + .get_user_by_id(id) + .await + .log_error("load live reported user"), + None => None, + } + }, + async { + match guild_id { + Some(id) => client + .lookup_guild(id) + .await + .log_error("load live reported guild") + .flatten(), + None => None, + } + } + ); + templates::pages::report_detail::LiveProfile { user, guild } +} + async fn report_fragment( State(state): State, auth: axum::Extension, @@ -261,6 +334,108 @@ async fn report_resolve( } } +async fn report_legal_hold( + State(state): State, + auth: axum::Extension, + Path(report_id): Path, + request: Request, +) -> Response { + let config = state.config(); + let base = &config.base_path; + let back = format!("{base}/reports/{report_id}"); + let form: LegalHoldForm = match Form::from_request(request, &state).await { + Ok(Form(f)) => f, + Err(error) => { + tracing::warn!(%error, report_id, "failed to parse report legal hold form"); + return flash::redirect_with_flash( + &back, + FlashData::error("Invalid form data"), + config.secure_cookies(), + ); + } + }; + let clearing = form.clear.is_some(); + let until = if clearing { + None + } else { + match form.legal_hold_until.as_deref().and_then(legal_hold_date) { + Some(date) if date < time::OffsetDateTime::now_utc().date() => { + return flash::redirect_with_flash( + &back, + FlashData::error(LEGAL_HOLD_IN_PAST), + config.secure_cookies(), + ); + } + Some(date) => Some(legal_hold_end_of_day(date)), + None => { + return flash::redirect_with_flash( + &back, + FlashData::error("Choose the date the hold ends"), + config.secure_cookies(), + ); + } + } + }; + let reason = clean_string(form.legal_hold_reason.as_deref().unwrap_or("")); + if until.is_some() && reason.is_none() { + return flash::redirect_with_flash( + &back, + FlashData::error(LEGAL_HOLD_NEEDS_REASON), + config.secure_cookies(), + ); + } + let client = AdminApiClient::new(state.http_client(), config, &auth.0.session); + let result = client + .set_report_legal_hold(&report_id, until.as_deref(), reason.as_deref()) + .await; + let flash = match result { + Ok(response) => match response.legal_hold_until { + Some(until) => FlashData::success(format!( + "Legal hold placed until {}", + format_admin_timestamp(&until) + )), + None => FlashData::success("Legal hold cleared"), + }, + Err(error) => { + tracing::warn!(%error, report_id, "admin API request failed: set report legal hold"); + match error { + ApiError::Http { + status: 400, + message, + } => FlashData::error(legal_hold_refusal(&message)), + _ => FlashData::error("Failed to update the legal hold"), + } + } + }; + flash::redirect_with_flash(&back, flash, config.secure_cookies()) +} + +const LEGAL_HOLD_IN_PAST: &str = "The hold must end in the future"; +const LEGAL_HOLD_NEEDS_REASON: &str = "Give a reason for the hold"; + +fn legal_hold_date(date: &str) -> Option { + let format = time::format_description::parse_borrowed::<2>("[year]-[month]-[day]").ok()?; + time::Date::parse(date.trim(), &format).ok() +} + +fn legal_hold_end_of_day(date: time::Date) -> String { + format!("{date}T23:59:59.999Z") +} + +fn legal_hold_refusal(body: &str) -> &'static str { + let body: serde_json::Value = serde_json::from_str(body).unwrap_or_default(); + let reason_refused = body["errors"] + .as_array() + .into_iter() + .flatten() + .any(|error| error["path"] == "legal_hold_reason"); + if reason_refused { + LEGAL_HOLD_NEEDS_REASON + } else { + LEGAL_HOLD_IN_PAST + } +} + fn decode_sort(sort: Option<&str>) -> (&'static str, &'static str) { match sort.unwrap_or("reportedAt_desc") { "reportedAt_asc" => ("reportedAt", "asc"), @@ -271,3 +446,51 @@ fn decode_sort(sort: Option<&str>) -> (&'static str, &'static str) { _ => ("reportedAt", "desc"), } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn legal_hold_dates_end_at_the_end_of_the_day_in_utc() { + assert_eq!( + legal_hold_date("2027-01-31") + .map(legal_hold_end_of_day) + .as_deref(), + Some("2027-01-31T23:59:59.999Z") + ); + assert_eq!( + legal_hold_date(" 2027-02-01 ") + .map(legal_hold_end_of_day) + .as_deref(), + Some("2027-02-01T23:59:59.999Z") + ); + for invalid in ["", "2027-02-30", "31/01/2027", "2027-1-31", "tomorrow"] { + assert_eq!(legal_hold_date(invalid), None, "{invalid}"); + } + } + + #[test] + fn a_refused_hold_names_the_field_the_api_refused() { + let refusal = |path: &str| { + serde_json::json!({ + "code": "INVALID_FORM_BODY", + "message": "Input Validation Error", + "errors": [{"path": path, "message": "refused"}] + }) + .to_string() + }; + assert_eq!( + legal_hold_refusal(&refusal("legal_hold_until")), + "The hold must end in the future" + ); + assert_eq!( + legal_hold_refusal(&refusal("legal_hold_reason")), + "Give a reason for the hold" + ); + assert_eq!( + legal_hold_refusal("not json"), + "The hold must end in the future" + ); + } +} diff --git a/fluxer_admin/src/state.rs b/fluxer_admin/src/state.rs index 0c1f2563e..cbdc82df4 100644 --- a/fluxer_admin/src/state.rs +++ b/fluxer_admin/src/state.rs @@ -3,7 +3,7 @@ use crate::{ api::{ client::{AdminApiClient, ApiResultExt}, - types::{AccountIdentityMode, AccountIdentitySettings, PremiumBranding}, + types::{AccountIdentityMode, AccountIdentitySettings, PremiumBranding, ReportReasonEntry}, }, config::AdminConfig, }; @@ -26,6 +26,7 @@ struct AppStateInner { pub http_client: reqwest::Client, premium_branding: Mutex>, account_identity: Mutex>, + report_reasons: Mutex>>, } impl AppState { @@ -40,6 +41,7 @@ impl AppState { http_client, premium_branding: Mutex::new(None), account_identity: Mutex::new(None), + report_reasons: Mutex::new(None), }), } } @@ -126,6 +128,35 @@ impl AppState { Some((Instant::now() + ttl, settings)); settings } + + pub async fn report_reasons( + &self, + client: &AdminApiClient, + ) -> Option> { + if let Some(reasons) = self.cached_report_reasons() { + return Some(reasons); + } + let reasons: Arc<[ReportReasonEntry]> = client + .list_report_reasons() + .await + .log_error("load report reasons")? + .reasons + .into(); + *self + .inner + .report_reasons + .lock() + .unwrap_or_else(|poisoned| poisoned.into_inner()) = Some(reasons.clone()); + Some(reasons) + } + + fn cached_report_reasons(&self) -> Option> { + self.inner + .report_reasons + .lock() + .unwrap_or_else(|poisoned| poisoned.into_inner()) + .clone() + } } impl axum::extract::FromRef for AdminConfig { diff --git a/fluxer_admin/src/templates/components/message_data.rs b/fluxer_admin/src/templates/components/message_data.rs index 65afcd7f0..62a79b639 100644 --- a/fluxer_admin/src/templates/components/message_data.rs +++ b/fluxer_admin/src/templates/components/message_data.rs @@ -17,6 +17,14 @@ pub struct Attachment { pub ncmec_failure_reason: Option, } +#[derive(Debug, PartialEq)] +pub struct MissingAttachment { + pub id: String, + pub filename: String, + pub content_type: Option, + pub size: Option, +} + #[derive(Debug, PartialEq)] pub struct Message { pub id: String, @@ -27,12 +35,15 @@ pub struct Message { pub author_global_name: Option, pub author_discriminator: String, pub author_avatar: Option, + pub webhook_id: Option, + pub author_bot: Option, pub channel_id: String, pub channel_nsfw: Option, pub channel_content_warning_level: Option, pub channel_content_warning_text: Option, pub guild_nsfw: Option, pub attachments: Vec, + pub missing_attachments: Vec, } pub fn ordered_messages(values: &[Value]) -> Vec { @@ -48,6 +59,12 @@ fn message_from_value(value: &Value) -> Message { .flatten() .map(attachment_from_value) .collect(); + let missing_attachments = value["missing_attachments"] + .as_array() + .into_iter() + .flatten() + .map(missing_attachment_from_value) + .collect(); Message { id: value_id(&value["id"]).unwrap_or_default(), content: value["content"].as_str().unwrap_or("").to_owned(), @@ -61,6 +78,8 @@ fn message_from_value(value: &Value) -> Message { author_discriminator: value_id(&value["author_discriminator"]) .unwrap_or_else(|| "0000".to_owned()), author_avatar: value["author_avatar"].as_str().map(ToOwned::to_owned), + webhook_id: value_id(&value["webhook_id"]), + author_bot: value["author_bot"].as_bool(), channel_id: value_id(&value["channel_id"]).unwrap_or_default(), channel_nsfw: value["channel_nsfw"].as_bool(), channel_content_warning_level: value["channel_content_warning_level"] @@ -71,6 +90,16 @@ fn message_from_value(value: &Value) -> Message { .map(ToOwned::to_owned), guild_nsfw: value["guild_nsfw"].as_bool(), attachments, + missing_attachments, + } +} + +fn missing_attachment_from_value(value: &Value) -> MissingAttachment { + MissingAttachment { + id: value_id(&value["id"]).unwrap_or_default(), + filename: value["filename"].as_str().unwrap_or("").to_owned(), + content_type: value["content_type"].as_str().map(ToOwned::to_owned), + size: value["size"].as_u64(), } } @@ -157,6 +186,8 @@ mod tests { author_global_name: Some("Alice".into()), author_discriminator: "1234".into(), author_avatar: Some("avatar-hash".into()), + webhook_id: None, + author_bot: None, channel_id: "100".into(), channel_nsfw: Some(false), channel_content_warning_level: Some(2), @@ -175,10 +206,69 @@ mod tests { ncmec_report_id: Some("report-id".into()), ncmec_failure_reason: Some("previous failure".into()), }], + missing_attachments: vec![], } ); } + #[test] + fn maps_author_bot_flags() { + let bot = message_from_value(&json!({"author_id": "42", "author_bot": true})); + assert_eq!(bot.author_bot, Some(true)); + let human = message_from_value(&json!({"author_id": "43", "author_bot": false})); + assert_eq!(human.author_bot, Some(false)); + let webhook = message_from_value( + &json!({"author_id": "500", "webhook_id": "500", "author_bot": null}), + ); + assert_eq!(webhook.author_bot, None); + let old = message_from_value(&json!({"author_id": "44"})); + assert_eq!(old.author_bot, None); + } + + #[test] + fn maps_missing_attachments() { + let message = message_from_value(&json!({ + "id": "10", + "attachments": [], + "missing_attachments": [{ + "id": 9007199254740993_u64, + "filename": "evidence.png", + "nsfw": null, + "content_type": "image/png", + "width": 640, + "height": 480, + "size": 4096 + }] + })); + assert!(message.attachments.is_empty()); + assert_eq!( + message.missing_attachments, + vec![MissingAttachment { + id: "9007199254740993".into(), + filename: "evidence.png".into(), + content_type: Some("image/png".into()), + size: Some(4096), + }] + ); + let old = message_from_value(&json!({"id": "11", "attachments": []})); + assert!(old.missing_attachments.is_empty()); + let null = message_from_value(&json!({"id": "12", "missing_attachments": null})); + assert!(null.missing_attachments.is_empty()); + } + + #[test] + fn maps_webhook_authors() { + let webhook = message_from_value(&json!({ + "author_id": "500", + "author_username": "Harbor Bulletin", + "webhook_id": "500" + })); + assert_eq!(webhook.webhook_id.as_deref(), Some("500")); + assert_eq!(webhook.author_id, "500"); + let user = message_from_value(&json!({"author_id": "42", "webhook_id": null})); + assert_eq!(user.webhook_id, None); + } + #[test] fn retains_display_defaults_for_incomplete_snapshots() { let message = message_from_value(&json!({"attachments": [{}]})); @@ -187,6 +277,7 @@ mod tests { assert_eq!(message.author_discriminator, "0000"); assert_eq!(message.content, ""); assert_eq!(message.author_global_name, None); + assert_eq!(message.webhook_id, None); assert_eq!(message.channel_nsfw, None); assert_eq!( message.attachments, diff --git a/fluxer_admin/src/templates/components/message_list.rs b/fluxer_admin/src/templates/components/message_list.rs index 217e780dc..3f3930f63 100644 --- a/fluxer_admin/src/templates/components/message_list.rs +++ b/fluxer_admin/src/templates/components/message_list.rs @@ -2,15 +2,24 @@ use maud::{Markup, PreEscaped, html}; +use super::badge::{BadgeVariant, badge}; use super::icons::paperclip_icon; use super::media::user_avatar_url; use super::nsfw_indicators::{attachment_nsfw_badge, channel_nsfw_state_badge}; use super::user_display::format_user_display; use crate::config::AdminConfig; use crate::routes::auth::json_string; +use crate::utils::timestamps::format_admin_timestamp; use super::message_data::{Attachment, Message}; +#[derive(Clone, Copy, Debug, Default)] +pub struct MessageActions<'a> { + pub delete: bool, + pub ncmec: bool, + pub source_report_id: Option<&'a str>, +} + fn is_image(att: &Attachment) -> bool { att.content_type .as_deref() @@ -44,7 +53,7 @@ fn ncmec_badge(att: &Attachment) -> Markup { } } -fn render_image_attachments(msg: &Message, include_delete: bool) -> Markup { +fn render_image_attachments(msg: &Message, actions: MessageActions<'_>) -> Markup { let mut images = msg.attachments.iter().filter(|a| is_image(a)).peekable(); if images.peek().is_none() { return html! {}; @@ -72,38 +81,43 @@ fn render_image_attachments(msg: &Message, include_delete: bool) -> Markup { (attachment_nsfw_badge(att.nsfw.unwrap_or(false))) (ncmec_badge(att)) } - @if include_delete { + @if actions.delete || actions.ncmec { div class="flex flex-wrap gap-2" { - button type="button" - class="delete-message-btn rounded bg-white px-2.5 py-1 \ - text-red-600 text-xs shadow-sm ring-1 ring-neutral-200 \ - transition-colors hover:bg-red-50 hover:text-red-700" - data-channel-id=(msg.channel_id) - data-message-id=(msg.id) { "Delete" } - button type="button" - class="ncmec-report-btn rounded bg-white px-2.5 py-1 text-xs \ - shadow-sm ring-1 ring-neutral-200 transition-colors \ - hover:bg-neutral-100 disabled:cursor-not-allowed \ - disabled:opacity-70" - data-channel-id=(msg.channel_id) - data-message-id=(msg.id) - data-attachment-id=(att.id) - data-filename=(att.filename) - data-content-type=(att.content_type.as_deref().unwrap_or("")) - data-size=(att.size.map(|s| s.to_string()).unwrap_or_default()) - data-author-id=(msg.author_id) - data-ncmec-status=(att.ncmec_status) - data-ncmec-report-id=(att.ncmec_report_id.as_deref().unwrap_or("")) - disabled[att.ncmec_status == "submitted"] - title=(if att.ncmec_status == "submitted" { - "Already reported to NCMEC" - } else { - "Report this image to NCMEC" - }) { - @if att.ncmec_status == "submitted" { - "Reported to NCMEC" - } @else { - "Report to NCMEC" + @if actions.delete { + button type="button" + class="delete-message-btn rounded bg-white px-2.5 py-1 \ + text-red-600 text-xs shadow-sm ring-1 ring-neutral-200 \ + transition-colors hover:bg-red-50 hover:text-red-700" + data-channel-id=(msg.channel_id) + data-message-id=(msg.id) { "Delete" } + } + @if actions.ncmec { + button type="button" + class="ncmec-report-btn rounded bg-white px-2.5 py-1 text-xs \ + shadow-sm ring-1 ring-neutral-200 transition-colors \ + hover:bg-neutral-100 disabled:cursor-not-allowed \ + disabled:opacity-70" + data-channel-id=(msg.channel_id) + data-message-id=(msg.id) + data-attachment-id=(att.id) + data-filename=(att.filename) + data-content-type=(att.content_type.as_deref().unwrap_or("")) + data-size=(att.size.map(|s| s.to_string()).unwrap_or_default()) + data-author-id=(msg.author_id) + data-ncmec-status=(att.ncmec_status) + data-ncmec-report-id=(att.ncmec_report_id.as_deref().unwrap_or("")) + data-source-report-id=[actions.source_report_id] + disabled[att.ncmec_status == "submitted"] + title=(if att.ncmec_status == "submitted" { + "Already reported to NCMEC" + } else { + "Report this image to NCMEC" + }) { + @if att.ncmec_status == "submitted" { + "Reported to NCMEC" + } @else { + "Report to NCMEC" + } } } } @@ -140,11 +154,34 @@ fn render_other_attachments(msg: &Message, has_content_or_images: bool) -> Marku } } +fn render_missing_attachments(msg: &Message) -> Markup { + if msg.missing_attachments.is_empty() { + return html! {}; + } + html! { + div class="mt-1.5 space-y-1" { + @for att in &msg.missing_attachments { + div class="flex flex-wrap items-center gap-2 text-amber-800 text-xs" + data-missing-attachment=(att.id) { + (paperclip_icon("text-amber-500")) + span class="break-words" { + @if att.filename.is_empty() { + "An attachment was not preserved in the report snapshot" + } @else { + (att.filename) " was not preserved in the report snapshot" + } + } + } + } + } + } +} + fn message_row( base_path: &str, avatar_url: &str, msg: &Message, - include_delete: bool, + actions: MessageActions<'_>, is_highlighted: bool, is_grouped: bool, ) -> Markup { @@ -176,10 +213,14 @@ fn message_row( text-sm leading-snug" { (msg.content) } } @if !msg.attachments.is_empty() { - (render_image_attachments(msg, include_delete)) + (render_image_attachments(msg, actions)) (render_other_attachments(msg, has_content_or_images)) } - @if include_delete && !has_images { + (render_missing_attachments(msg)) + div class="mt-1 text-neutral-400 text-xs" { + span class="" { (msg.id) } + } + @if actions.delete && !has_images { div class="absolute top-0 right-2 hidden group-hover:block" { button type="button" class="delete-message-btn rounded bg-white px-2 py-0.5 \ @@ -208,20 +249,39 @@ fn message_row( style="display:grid;grid-template-columns:16px 40px 16px minmax(0,1fr);" data-message-id=(msg.id) data-message-row="" { div style="grid-row:1;grid-column:1;" {} - a href={(base_path) "/users/" (msg.author_id)} - title=(msg.author_id) class="block flex-shrink-0" - style="grid-row:1;grid-column:2;align-self:start;" { - img src=(avatar_url) alt=(msg.author_username) - class="rounded-full" style="width:40px;height:40px;"; + @if let Some(webhook_id) = &msg.webhook_id { + span title=(webhook_id) class="block flex-shrink-0" + style="grid-row:1;grid-column:2;align-self:start;" { + img src=(avatar_url) alt=(msg.author_username) + class="rounded-full" style="width:40px;height:40px;"; + } + } @else { + a href={(base_path) "/users/" (msg.author_id)} + title=(msg.author_id) class="block flex-shrink-0" + style="grid-row:1;grid-column:2;align-self:start;" { + img src=(avatar_url) alt=(msg.author_username) + class="rounded-full" style="width:40px;height:40px;"; + } } div style="grid-row:1;grid-column:3;" {} div class="min-w-0" style="grid-column:4;" { div class="flex items-baseline gap-2" { - a href={(base_path) "/users/" (msg.author_id)} - class="font-medium text-neutral-900 text-sm hover:underline" - title=(msg.author_id) { (tag) } + @if let Some(webhook_id) = &msg.webhook_id { + span class="font-medium text-neutral-900 text-sm" + title=(webhook_id) data-message-webhook=(webhook_id) { (msg.author_username) } + span class="self-center" { (badge("Webhook", BadgeVariant::Info)) } + } @else { + a href={(base_path) "/users/" (msg.author_id)} + class="font-medium text-neutral-900 text-sm hover:underline" + title=(msg.author_id) { (tag) } + @if msg.author_bot == Some(true) { + span class="self-center" data-message-author-bot=(msg.author_id) { + (badge("Bot", BadgeVariant::Info)) + } + } + } span class="text-neutral-400 text-xs" { - " \u{2014} " (msg.timestamp) + " \u{2014} " (format_admin_timestamp(&msg.timestamp)) } (channel_nsfw_state_badge( msg.channel_nsfw.unwrap_or(false), @@ -236,14 +296,15 @@ fn message_row( text-sm leading-snug" { (msg.content) } } @if !msg.attachments.is_empty() { - (render_image_attachments(msg, include_delete)) + (render_image_attachments(msg, actions)) (render_other_attachments(msg, has_content_or_images)) } + (render_missing_attachments(msg)) div class="mt-1 text-neutral-400 text-xs" { span class="" { (msg.id) } } } - @if include_delete && !has_images { + @if actions.delete && !has_images { div class="absolute top-1 right-2 hidden group-hover:block" { button type="button" class="delete-message-btn rounded bg-white px-2 py-0.5 \ @@ -261,20 +322,22 @@ pub fn message_list( config: &AdminConfig, base_path: &str, messages: &[Message], - include_delete: bool, + actions: MessageActions<'_>, highlight_message_id: Option<&str>, ) -> Markup { html! { div class="divide-y-0" { @for (i, msg) in messages.iter().enumerate() { - @let is_grouped = i > 0 && messages[i - 1].author_id == msg.author_id; + @let is_grouped = i > 0 + && messages[i - 1].author_id == msg.author_id + && messages[i - 1].author_username == msg.author_username; @let is_highlighted = highlight_message_id == Some(msg.id.as_str()); @let avatar_url = user_avatar_url( config, &msg.author_id, msg.author_avatar.as_deref(), 160, true, ); (message_row( base_path, &avatar_url, msg, - include_delete, is_highlighted, is_grouped, + actions, is_highlighted, is_grouped, )) } } @@ -330,6 +393,7 @@ pub fn message_deletion_script(csrf_token: &str) -> Markup { fields.append('message_id', b.dataset.messageId || ''); fields.append('attachment_id', b.dataset.attachmentId || ''); fields.append('filename', b.dataset.filename || ''); + if (b.dataset.sourceReportId) fields.append('source_report_id', b.dataset.sourceReportId); fields.append('reporter_full_name', name.trim()); fields.append('confirmed_viewed', 'true'); b.disabled = true; diff --git a/fluxer_admin/src/templates/components/mod.rs b/fluxer_admin/src/templates/components/mod.rs index 4ae6c49b3..5b9159fbb 100644 --- a/fluxer_admin/src/templates/components/mod.rs +++ b/fluxer_admin/src/templates/components/mod.rs @@ -17,6 +17,8 @@ pub mod message_data; pub mod message_list; pub mod nsfw_indicators; pub mod page_container; +pub mod report_category; +pub mod report_webhook; pub mod resource_link; pub mod section_card; pub mod stack; diff --git a/fluxer_admin/src/templates/components/report_category.rs b/fluxer_admin/src/templates/components/report_category.rs new file mode 100644 index 000000000..009feaa4f --- /dev/null +++ b/fluxer_admin/src/templates/components/report_category.rs @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +use maud::{Markup, html}; + +const REPORT_CATEGORIES: &[(&str, &str)] = &[ + ("harassment", "Harassment or bullying"), + ("hate_speech", "Hate speech"), + ("spam", "Spam"), + ("illegal_activity", "Illegal activity"), + ("impersonation", "Impersonation"), + ("child_safety", "Child safety concerns"), + ("other", "Other"), + ("violent_content", "Violent or graphic content"), + ("nsfw_violation", "NSFW policy violation"), + ("doxxing", "Sharing personal information"), + ("self_harm", "Self-harm or suicide"), + ("malicious_links", "Malicious links"), + ("spam_account", "Spam account"), + ("underage_user", "Underage user"), + ("inappropriate_profile", "Inappropriate profile"), + ("raid_coordination", "Raid coordination"), + ("malware_distribution", "Malware distribution"), + ("extremist_community", "Extremist community"), +]; + +pub fn report_category_label(category: &str) -> &str { + REPORT_CATEGORIES + .iter() + .find_map(|(key, label)| (*key == category).then_some(*label)) + .unwrap_or(category) +} + +pub fn reason_repeats_category(category: &str, reason_label: &str) -> bool { + report_category_label(category).trim().to_lowercase() == reason_label.trim().to_lowercase() +} + +pub fn report_category_options(selected: &str) -> Vec<(&str, &str)> { + let mut options = std::iter::once(("", "All")) + .chain(REPORT_CATEGORIES.iter().copied()) + .collect::>(); + if !options.iter().any(|(key, _)| *key == selected) { + options.push((selected, selected)); + } + options +} + +pub fn report_category(category: &str) -> Markup { + html! { + span data-report-category=(category) title=(category) { + (report_category_label(category)) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn known_categories_get_their_label() { + assert_eq!( + report_category_label("harassment"), + "Harassment or bullying" + ); + assert_eq!(report_category_label("spam"), "Spam"); + assert_eq!(report_category_label("spam_account"), "Spam account"); + assert_eq!( + report_category_label("extremist_community"), + "Extremist community" + ); + } + + #[test] + fn unknown_categories_fall_back_to_the_key() { + assert_eq!(report_category_label("future_value"), "future_value"); + assert_eq!(report_category_label(""), ""); + } + + #[test] + fn reasons_that_repeat_the_category_label_are_detected() { + assert!(reason_repeats_category("spam", "Spam")); + assert!(reason_repeats_category("spam", "spam")); + assert!(reason_repeats_category( + "harassment", + "Harassment or bullying" + )); + assert!(reason_repeats_category( + "harassment", + " harassment OR bullying " + )); + assert!(!reason_repeats_category("harassment", "Hate speech")); + assert!(!reason_repeats_category( + "child_safety", + "Child sexual abuse material" + )); + assert!(reason_repeats_category("future_value", "future_value")); + assert!(!reason_repeats_category("future_value", "Spam")); + } + + #[test] + fn every_category_key_is_unique_and_labelled() { + let mut keys = REPORT_CATEGORIES + .iter() + .map(|(key, _)| *key) + .collect::>(); + keys.sort_unstable(); + keys.dedup(); + assert_eq!(keys.len(), REPORT_CATEGORIES.len()); + assert_eq!(keys.len(), 18); + for (key, label) in REPORT_CATEGORIES { + assert_ne!(key, label); + } + } + + #[test] + fn options_start_with_all_and_keep_an_unknown_selection() { + let options = report_category_options(""); + assert_eq!(options.first(), Some(&("", "All"))); + assert_eq!(options.len(), 19); + assert_eq!(report_category_options("spam").len(), 19); + let unknown = report_category_options("future_value"); + assert_eq!(unknown.len(), 20); + assert_eq!(unknown.last(), Some(&("future_value", "future_value"))); + } + + #[test] + fn category_markup_shows_the_label_and_keeps_the_key() { + let markup = report_category("doxxing").into_string(); + assert!( + markup.contains(r#"data-report-category="doxxing""#), + "{markup}" + ); + assert!( + markup.contains(">Sharing personal information<"), + "{markup}" + ); + let unknown = report_category("future_value").into_string(); + assert!( + unknown.contains(r#"data-report-category="future_value""#), + "{unknown}" + ); + assert!(unknown.contains(">future_value<"), "{unknown}"); + } +} diff --git a/fluxer_admin/src/templates/components/report_webhook.rs b/fluxer_admin/src/templates/components/report_webhook.rs new file mode 100644 index 000000000..dc261208b --- /dev/null +++ b/fluxer_admin/src/templates/components/report_webhook.rs @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +use maud::{Markup, html}; + +use super::badge::{BadgeVariant, badge}; +use super::media::user_avatar_url; +use crate::{ + api::types::ReportEntry, + config::AdminConfig, + utils::{timestamps::format_admin_timestamp, user_tag::user_tag}, +}; + +pub struct ReportedWebhook<'a> { + pub id: &'a str, + pub name: String, + pub configured_name: Option<&'a str>, + pub configured_avatar_url: Option, + pub avatar_url: String, + pub reports_href: String, + pub kind: Option, + pub created_at: Option, + pub channel_id: Option<&'a str>, + pub guild_id: Option<&'a str>, + pub application: Option>, + pub record_deleted: bool, + pub creator: Option>, +} + +pub struct WebhookApplication<'a> { + pub id: &'a str, + pub href: String, +} + +pub struct WebhookCreator<'a> { + pub id: &'a str, + pub label: String, + pub avatar_url: String, + pub href: String, + pub account_deleted: bool, + pub bot: bool, +} + +pub fn webhook_type_label(webhook_type: i32) -> String { + match webhook_type { + 1 => "Incoming".to_owned(), + 2 => "Channel Follower".to_owned(), + other => format!("Type {other}"), + } +} + +fn non_blank(value: Option<&str>) -> Option<&str> { + value.filter(|value| !value.trim().is_empty()) +} + +pub fn reported_webhook<'a>( + config: &AdminConfig, + report: &'a ReportEntry, +) -> Option> { + let id = report.reported_webhook_id.as_deref()?; + let name = non_blank(report.reported_webhook_name.as_deref()) + .map_or_else(|| format!("Webhook {id}"), str::to_owned); + let configured_name = non_blank(report.reported_webhook_default_name.as_deref()) + .filter(|configured| *configured != name); + let channel_id = non_blank(report.reported_webhook_channel_id.as_deref()); + let guild_id = non_blank(report.reported_webhook_guild_id.as_deref()); + let record_present = report.reported_webhook_type.is_some() + || channel_id.is_some() + || guild_id.is_some() + || non_blank(report.reported_webhook_default_name.as_deref()).is_some(); + let configured_avatar_hash = non_blank(report.reported_webhook_default_avatar_hash.as_deref()); + let configured_avatar_url = (record_present + && configured_avatar_hash != non_blank(report.reported_webhook_avatar_hash.as_deref())) + .then(|| user_avatar_url(config, id, configured_avatar_hash, 80, true)); + let created_at = non_blank(report.reported_webhook_created_at.as_deref()); + Some(ReportedWebhook { + id, + name, + configured_name, + configured_avatar_url, + avatar_url: user_avatar_url( + config, + id, + report.reported_webhook_avatar_hash.as_deref(), + 80, + true, + ), + reports_href: format!( + "{}/reports?reported_webhook_id={}", + config.base_path, + urlencoding::encode(id) + ), + kind: report.reported_webhook_type.map(webhook_type_label), + created_at: created_at.map(format_admin_timestamp), + channel_id, + guild_id, + application: non_blank(report.reported_webhook_application_id.as_deref()).map(|id| { + WebhookApplication { + id, + href: format!( + "{}/applications/{}", + config.base_path, + urlencoding::encode(id) + ), + } + }), + record_deleted: created_at.is_some() && !record_present, + creator: webhook_creator(config, report), + }) +} + +fn webhook_creator<'a>( + config: &AdminConfig, + report: &'a ReportEntry, +) -> Option> { + let id = report.reported_webhook_creator_id.as_deref()?; + let username = non_blank(report.reported_webhook_creator_username.as_deref()); + let bot = report.reported_webhook_application_id.as_deref() == Some(id); + let tag = match username { + Some(username) => Some(user_tag( + username, + report + .reported_webhook_creator_discriminator + .as_deref() + .unwrap_or("0000"), + bot, + )), + None => non_blank(report.reported_webhook_creator_tag.as_deref()).map(str::to_owned), + }; + let label = match ( + non_blank(report.reported_webhook_creator_global_name.as_deref()), + tag, + ) { + (Some(display), Some(tag)) => format!("{display} ({tag})"), + (_, Some(tag)) => tag, + (Some(display), None) => display.to_owned(), + (None, None) => format!("User {id}"), + }; + Some(WebhookCreator { + id, + label, + avatar_url: user_avatar_url( + config, + id, + report.reported_webhook_creator_avatar_hash.as_deref(), + 80, + true, + ), + href: format!("{}/users/{}", config.base_path, urlencoding::encode(id)), + account_deleted: username.is_none() + && non_blank(report.reported_webhook_creator_tag.as_deref()).is_none() + && non_blank(report.reported_webhook_creator_global_name.as_deref()).is_none(), + bot, + }) +} + +pub fn webhook_identity(webhook: &ReportedWebhook<'_>) -> Markup { + html! { + span class="inline-flex min-w-0 items-center gap-2" data-report-webhook=(webhook.id) { + img src=(webhook.avatar_url) alt=(format!("{}'s avatar", webhook.name)) + class="h-8 w-8 flex-shrink-0 rounded-full object-cover"; + span class="flex min-w-0 flex-wrap items-center gap-x-1.5 gap-y-0.5" { + span class="font-medium text-neutral-900 text-sm break-words" { (webhook.name) } + (badge("Webhook", BadgeVariant::Info)) + } + } + } +} + +pub fn webhook_creator_link(creator: &WebhookCreator<'_>) -> Markup { + html! { + a href=(creator.href) title=(creator.id) data-report-webhook-creator=(creator.id) + class="inline-flex min-w-0 items-center gap-2 text-neutral-900 underline decoration-neutral-300 hover:text-neutral-600 hover:decoration-neutral-500" { + img src=(creator.avatar_url) alt=(format!("{}'s avatar", creator.label)) + class="h-8 w-8 flex-shrink-0 rounded-full object-cover"; + span class="break-words" { (creator.label) } + } + } +} + +pub fn webhook_creator_badges(creator: &WebhookCreator<'_>) -> Markup { + html! { + @if creator.bot { + span class="inline-flex" data-report-webhook-creator-bot { (badge("Bot", BadgeVariant::Info)) } + } + @if creator.account_deleted { + span class="inline-flex" data-report-webhook-creator-deleted { (badge("Account Deleted", BadgeVariant::Default)) } + } + } +} diff --git a/fluxer_admin/src/templates/layout_scripts.rs b/fluxer_admin/src/templates/layout_scripts.rs index b5f2a0837..27a4fa1b7 100644 --- a/fluxer_admin/src/templates/layout_scripts.rs +++ b/fluxer_admin/src/templates/layout_scripts.rs @@ -489,10 +489,11 @@ pub const HTMX_FLASH_SCRIPT: &str = r#" element = element.firstElementChild; depth += 1; } - var level = status >= 400 ? 'error' : 'success'; + var level = 'success'; if (className.indexOf('red-') >= 0) level = 'error'; if (className.indexOf('green-') >= 0) level = 'success'; if (className.indexOf('blue-') >= 0) level = 'info'; + if (status >= 400) level = 'error'; return { level: level, message: text || (level === 'error' ? 'Action failed.' : 'Done.') @@ -514,6 +515,20 @@ pub const HTMX_FLASH_SCRIPT: &str = r#" } } + function refreshAfterSuccess(detail, level) { + if (level !== 'success') return; + var elt = (detail && detail.requestConfig && detail.requestConfig.elt) || mutationElement(detail); + var form = elt && elt.closest ? elt.closest('form') : null; + var selector = form ? form.getAttribute('data-admin-refresh-on-success') : ''; + if (!selector || !document.querySelector(selector)) return; + if (!window.htmx || typeof window.htmx.ajax !== 'function') return; + window.htmx.ajax('GET', window.location.pathname + window.location.search, { + target: selector, + swap: 'outerHTML', + select: selector + }); + } + document.body.addEventListener('showFlash', function (evt) { var d = evt.detail || {}; showToast(d.level || 'info', d.message || ''); @@ -533,11 +548,12 @@ pub const HTMX_FLASH_SCRIPT: &str = r#" var xhr = event.detail.xhr; var parsed = isLoginResponse(xhr) ? {level: 'error', message: 'Session expired. Sign in again.'} - : parseFlashResponse(xhr ? xhr.responseText : '', xhr ? xhr.status : 200); + : parseAdminToastHeader(xhr) || parseFlashResponse(xhr ? xhr.responseText : '', xhr ? xhr.status : 200); event.detail.shouldSwap = false; event.detail.isError = false; markToastHandled(event.detail); showToast(parsed.level, parsed.message); + refreshAfterSuccess(event.detail, parsed.level); }, true); document.addEventListener('htmx:afterRequest', function (event) { @@ -548,6 +564,7 @@ pub const HTMX_FLASH_SCRIPT: &str = r#" if (serverToast) { showToast(serverToast.level, serverToast.message); markToastHandled(event.detail); + refreshAfterSuccess(event.detail, serverToast.level); return; } var failed = !event.detail.successful || (xhr && xhr.status >= 400) || isLoginResponse(xhr); diff --git a/fluxer_admin/src/templates/pages/guild_detail_tabs/reports.rs b/fluxer_admin/src/templates/pages/guild_detail_tabs/reports.rs index e706ccbb8..01dfe0d7e 100644 --- a/fluxer_admin/src/templates/pages/guild_detail_tabs/reports.rs +++ b/fluxer_admin/src/templates/pages/guild_detail_tabs/reports.rs @@ -3,8 +3,12 @@ use crate::{ api::types::{GuildInfo, ReportEntry}, config::AdminConfig, - templates::components::{page_container::card_with_header, table::data_table}, - utils::user_tag::user_tag, + templates::{ + components::{page_container::card_with_header, table::data_table}, + pages::user_detail_tabs::reports::{ + format_status, reported_at_cell, reporter_label, type_and_category_cell, + }, + }, }; use maud::{Markup, html}; @@ -40,8 +44,7 @@ pub fn reports_tab( })) } @else { (data_table( - &["Reported At", "Report ID", "Type", "Category", - "Reporter", "Status", "Actions"], + &["Reported At", "Type / Category", "Reporter", "Status", "Actions"], html! { @for report in reports { (report_row(base, report)) @@ -74,75 +77,19 @@ pub fn reports_tab( } } -fn format_report_type(report_type: i32) -> &'static str { - match report_type { - 0 => "Message", - 1 => "User", - 2 => "Guild", - _ => "Unknown", - } -} - -fn format_status(status: i32) -> &'static str { - match status { - 0 => "Pending", - 1 => "Resolved", - _ => "Unknown", - } -} - -fn format_reporter(report: &ReportEntry) -> String { - if let Some(ref username) = report.reporter_username { - let disc = report.reporter_discriminator.as_deref().unwrap_or("0000"); - let tag = user_tag(username, disc, false); - if let Some(ref gn) = report.reporter_global_name { - let trimmed = gn.trim(); - if !trimmed.is_empty() { - return format!("{trimmed} ({tag})"); - } - } - return tag; - } - if let Some(ref tag) = report.reporter_tag { - return tag.clone(); - } - if let Some(ref email) = report.reporter_email { - return email.clone(); - } - report - .reporter_id - .as_deref() - .unwrap_or("Unknown reporter") - .to_string() -} - fn report_row(base: &str, report: &ReportEntry) -> Markup { - let reporter_display = format_reporter(report); html! { tr class="hover:bg-neutral-50 transition-colors" { - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (report.reported_at) - } - td class="whitespace-nowrap px-4 py-3 text-sm" { - a href={(base) "/reports/" (report.report_id)} - class="hover:underline" { - (report.report_id) - } - } - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (format_report_type(report.report_type)) - } - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (report.category.as_deref().unwrap_or("")) - } - td class="whitespace-nowrap px-4 py-3 text-sm" { + (reported_at_cell(base, report)) + (type_and_category_cell(report)) + td class="px-4 py-3 text-sm [overflow-wrap:anywhere]" { @if let Some(ref rid) = report.reporter_id { a href={(base) "/users/" (rid)} class="hover:underline" { - (reporter_display) + (reporter_label(report)) } } @else { - span { (reporter_display) } + span { (reporter_label(report)) } } } td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { @@ -159,3 +106,46 @@ fn report_row(base: &str, report: &ReportEntry) -> Markup { } } } + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn guild_report_rows_format_the_date_and_wrap_long_cells() { + let report: ReportEntry = serde_json::from_value(json!({ + "report_id": "1800000000000000006", + "reporter_id": "1500000000000000000", + "reporter_username": "reporter_0423a7212d56", + "reporter_discriminator": "8650", + "reporter_global_name": "Avery Reporter", + "reported_at": "2026-10-05T23:23:28.067Z", + "status": 0, + "report_type": 0, + "category": "spam", + "reason": "spam", + "reason_label": "Spam", + "reported_guild_id": "1700000000000000800" + })) + .expect("valid report"); + let markup = report_row("/admin", &report).into_string(); + assert!(markup.contains("Oct 5, 2026, 11:23 PM UTC"), "{markup}"); + assert!(!markup.contains("2026-10-05T23:23:28.067Z"), "{markup}"); + assert!( + markup + .contains(r#"(reporter_0423a7212d56#8650)"#), + "{markup}" + ); + assert!(markup.contains("Avery Reporter "), "{markup}"); + assert_eq!( + markup.matches("whitespace-nowrap px-4").count(), + 2, + "{markup}" + ); + assert!(markup.contains(">Pending<"), "{markup}"); + assert!(markup.contains(">View<"), "{markup}"); + assert_eq!(markup.matches(">Spam<").count(), 1, "{markup}"); + assert!(markup.contains(r#"data-report-reason="spam""#), "{markup}"); + } +} diff --git a/fluxer_admin/src/templates/pages/guilds_list.rs b/fluxer_admin/src/templates/pages/guilds_list.rs index db1c60c8b..2a2403b5c 100644 --- a/fluxer_admin/src/templates/pages/guilds_list.rs +++ b/fluxer_admin/src/templates/pages/guilds_list.rs @@ -97,7 +97,7 @@ pub fn guilds_list_page( } @else if let Some(count) = result_state.total { (page_header_with_actions("Guilds", None, html! { p class="text-sm font-normal text-neutral-500" { - "Found " (count) " results (showing " + "Found " (count) (if count == 1 { " result" } else { " results" }) " (showing " (result_state.guilds.map(|guilds| guilds.len()).unwrap_or_default()) ")" } diff --git a/fluxer_admin/src/templates/pages/messages_page.rs b/fluxer_admin/src/templates/pages/messages_page.rs index c3a7625de..b5478284c 100644 --- a/fluxer_admin/src/templates/pages/messages_page.rs +++ b/fluxer_admin/src/templates/pages/messages_page.rs @@ -11,7 +11,7 @@ use crate::{ submit_button, }, message_data::{Message, ordered_messages, value_id}, - message_list::{message_deletion_script, message_list}, + message_list::{MessageActions, message_deletion_script, message_list}, page_container::{card, page_header}, }, layout::LayoutOptions, @@ -193,6 +193,7 @@ pub struct MessagesPageParams<'a> { pub prefill_channel_id: Option<&'a str>, pub can_lookup: bool, pub can_delete: bool, + pub can_report_ncmec: bool, pub lookup_result: Option<&'a Value>, pub browse_result: Option<&'a Value>, pub search_result: Option<&'a Value>, @@ -207,6 +208,11 @@ pub fn messages_page( auth: &AuthContext, params: &MessagesPageParams<'_>, ) -> Markup { + let actions = MessageActions { + delete: params.can_delete, + ncmec: params.can_report_ncmec, + source_report_id: None, + }; let content = html! { (page_header("Message Tools", None)) @@ -217,19 +223,19 @@ pub fn messages_page( @if let (Some(result), Some(channel_id), Some(query)) = ( params.search_result, params.browse_channel_id, params.search_query_text, ) { - (search_result_card(config, result, channel_id, query, params.can_delete)) + (search_result_card(config, result, channel_id, query, actions)) } @if params.search_result.is_none() && let (Some(result), Some(channel_id)) = ( params.browse_result, params.browse_channel_id, ) { (browse_result_card( - config, result, channel_id, params.can_delete, + config, result, channel_id, actions, params.csrf_token, params.context_limit, )) } @if let Some(result) = params.lookup_result { - (lookup_result_card(config, result, params.can_delete, params.context_limit)) + (lookup_result_card(config, result, actions, params.context_limit)) } @if params.can_lookup { (browse_channel_form(config, params.csrf_token, params.prefill_channel_id)) @@ -260,7 +266,7 @@ pub fn messages_page( pub fn browse_messages_fragment( config: &AdminConfig, result: &Value, - show_delete: bool, + actions: MessageActions<'_>, highlight_message_id: Option<&str>, ) -> Markup { let messages = response_messages(result); @@ -280,7 +286,7 @@ pub fn browse_messages_fragment( config, &config.base_path, &messages, - show_delete, + actions, highlight_message_id, )) } @@ -291,7 +297,7 @@ fn browse_result_card( config: &AdminConfig, result: &Value, channel_id: &str, - show_delete: bool, + actions: MessageActions<'_>, csrf_token: &str, context_limit: u32, ) -> Markup { @@ -328,7 +334,7 @@ fn browse_result_card( config, channel_id, messages: &messages, - show_delete, + actions, has_more, has_newer: false, focus_message_id: None, @@ -343,7 +349,7 @@ fn search_result_card( result: &Value, channel_id: &str, query_text: &str, - show_delete: bool, + actions: MessageActions<'_>, ) -> Markup { let messages = response_messages(result); let total = result @@ -369,7 +375,7 @@ fn search_result_card( config, &config.base_path, &messages, - show_delete, + actions, None, )) } @@ -379,7 +385,7 @@ fn search_result_card( fn lookup_result_card( config: &AdminConfig, result: &Value, - show_delete: bool, + actions: MessageActions<'_>, context_limit: u32, ) -> Markup { let messages = response_messages(result); @@ -401,7 +407,7 @@ fn lookup_result_card( config, channel_id, messages: &messages, - show_delete, + actions, has_more: true, has_newer: true, focus_message_id: message_id, @@ -415,7 +421,7 @@ struct MessageScrollPane<'a> { config: &'a AdminConfig, channel_id: &'a str, messages: &'a [Message], - show_delete: bool, + actions: MessageActions<'a>, has_more: bool, has_newer: bool, focus_message_id: Option<&'a str>, @@ -454,7 +460,7 @@ fn message_scroll_pane(pane: MessageScrollPane<'_>) -> Markup { pane.config, &pane.config.base_path, pane.messages, - pane.show_delete, + pane.actions, pane.focus_message_id, )) } diff --git a/fluxer_admin/src/templates/pages/report_detail.rs b/fluxer_admin/src/templates/pages/report_detail.rs index fd31662a4..175851bc0 100644 --- a/fluxer_admin/src/templates/pages/report_detail.rs +++ b/fluxer_admin/src/templates/pages/report_detail.rs @@ -2,21 +2,32 @@ use crate::{ acl, - api::types::ReportEntry, + api::types::{ + AdminUser, GuildDetailInfo, ReportEntry, ReportFlowAnswerStepEntry, ReportFlowAnswersEntry, + ReportProfileSnapshot, ReportProfileSnapshotAsset, + }, config::AdminConfig, middleware::auth::AuthContext, templates::{ components::{ badge::{BadgeVariant, badge}, - data_field::{data_field, data_field_link_mono, data_field_mono, data_field_text}, - form::{csrf_input, opt_out_checkbox}, + data_field::{ + data_field, data_field_link_mono, data_field_mono, data_field_muted, + data_field_text, + }, + form::{FORM_CONTROL_CLASS, FORM_LABEL_CLASS, csrf_input, opt_out_checkbox}, media::{guild_icon_url, initials, user_avatar_url}, message_data::ordered_messages, - message_list::{message_deletion_script, message_list}, + message_list::{MessageActions, message_deletion_script, message_list}, nsfw_indicators::{ adult_content_badge, channel_nsfw_state_badge, content_warning_badge, }, page_container::page_header_with_back, + report_category::report_category, + report_webhook::{ + ReportedWebhook, reported_webhook, webhook_creator_badges, webhook_creator_link, + webhook_identity, + }, resource_link::{ResourceType, resource_link}, section_card::section_card, }, @@ -26,6 +37,12 @@ use crate::{ }; use maud::{Markup, html}; +#[derive(Default)] +pub struct LiveProfile { + pub user: Option, + pub guild: Option, +} + fn status_badge(status: i32) -> Markup { let (label, variant) = match status { 0 => ("Pending", BadgeVariant::Warning), @@ -80,12 +97,9 @@ fn reported_user_label(report: &ReportEntry) -> String { } fn has_acl(auth: &AuthContext, permission: &str) -> bool { - auth.admin_user.as_ref().is_some_and(|admin| { - admin - .acls - .iter() - .any(|acl| acl == permission || acl == crate::acl::WILDCARD) - }) + auth.admin_user + .as_ref() + .is_some_and(|admin| acl::has_permission(&admin.acls, permission)) } fn basic_info_section(config: &AdminConfig, auth: &AuthContext, report: &ReportEntry) -> Markup { @@ -97,7 +111,8 @@ fn basic_info_section(config: &AdminConfig, auth: &AuthContext, report: &ReportE (data_field_mono("Report ID", &report.report_id)) (data_field_text("Reported At", &format_admin_timestamp(&report.reported_at))) (data_field_text("Type", report_type_label(report.report_type))) - (data_field_text("Category", report.category.as_deref().unwrap_or(""))) + (category_field(report)) + (reason_field(report)) @if let Some(ref reporter_id) = report.reporter_id { (data_field_link_mono("Reporter", &format!("{base}/users/{reporter_id}"), &reporter_label(report))) } @else { @@ -120,6 +135,102 @@ fn basic_info_section(config: &AdminConfig, auth: &AuthContext, report: &ReportE } } +fn category_field(report: &ReportEntry) -> Markup { + match report + .category + .as_deref() + .filter(|category| !category.is_empty()) + { + Some(category) => data_field( + "Category", + html! { + p class="text-sm text-gray-900 break-words" { (report_category(category)) } + }, + ), + None => data_field_text("Category", ""), + } +} + +fn reason_field(report: &ReportEntry) -> Markup { + let Some(ref reason) = report.reason else { + return html! {}; + }; + html! { + (data_field("Reason", html! { + div class="flex flex-wrap items-center gap-2" data-report-reason=(reason) { + span class="text-sm text-gray-900 break-words" { + (report.reason_label.as_deref().unwrap_or(reason)) + } + span class="font-mono text-neutral-500 text-xs break-all" { (reason) } + @if report.reason_highest_priority == Some(true) { + (badge("Highest priority", BadgeVariant::Danger)) + } + } + })) + } +} + +fn answer_step_line(step: &ReportFlowAnswerStepEntry) -> String { + let answers = step + .option_label + .as_deref() + .or(step.option_id.as_deref()) + .into_iter() + .chain(step.items.iter().map(|item| item.label.as_str())) + .collect::>(); + if answers.is_empty() { + step.screen_title.clone() + } else { + format!("{}: {}", step.screen_title, answers.join(", ")) + } +} + +fn surface_label(surface: &str) -> &str { + match surface { + "in_app" => "In app", + "dsa" => "DSA form", + other => other, + } +} + +fn report_answers_section(report: &ReportEntry) -> Markup { + let Some(ref flow) = report.flow else { + return html! {}; + }; + html! { + (section_card(Some("Report Answers"), None, None, html! { + div class="space-y-4" data-report-answers="" { + (answer_steps(flow)) + div class="space-y-1 text-neutral-500 text-sm" { + @if let Some(ref locale) = flow.locale { + p { "Shown to the reporter in " (locale) } + } + p { "Form revision " span class="font-mono" { (flow.revision_hash) } } + p { "Surface: " (surface_label(&flow.surface)) } + @if report.reporter_good_faith_confirmed == Some(true) { + p { "Good-faith statement: Confirmed" } + } + } + } + })) + } +} + +fn answer_steps(flow: &ReportFlowAnswersEntry) -> Markup { + html! { + ol class="space-y-2" { + @for (index, step) in flow.steps.iter().enumerate() { + li class="flex gap-3 text-sm text-neutral-900" data-report-answer-step=(step.screen_id) { + span class="w-6 flex-shrink-0 text-right font-mono text-neutral-500" { + (index + 1) "." + } + span class="min-w-0 break-words" { (answer_step_line(step)) } + } + } + } + } +} + fn message_lookup_href(base: &str, channel_id: &str, message_id: Option<&str>) -> String { let mut href = format!( "{base}/messages?channel_id={}&context_limit=50", @@ -198,7 +309,11 @@ fn reported_entity_section(config: &AdminConfig, report: &ReportEntry) -> Markup div class="grid grid-cols-1 gap-4" { @match report.report_type { 0 => { - (reported_user_field(config, "User", report)) + @if let Some(webhook) = reported_webhook(config, report) { + (reported_webhook_fields(config, report, &webhook)) + } @else { + (reported_user_field(config, "User", report)) + } (reported_message_fields(config, report)) (reported_guild_field(config, report)) } @@ -226,12 +341,19 @@ fn reported_user_field(config: &AdminConfig, label: &str, report: &ReportEntry) html! { @if let Some(ref id) = report.reported_user_id { (data_field(label, html! { - a href={(base) "/users/" (id)} class="inline-flex items-center gap-2 text-neutral-900 underline decoration-neutral-300 hover:text-neutral-600 hover:decoration-neutral-500" { - img - src=(user_avatar_url(config, id, report.reported_user_avatar_hash.as_deref(), 80, true)) - alt=(format!("{}'s avatar", reported_user_label(report))) - class="h-8 w-8 rounded-full object-cover"; - span { (reported_user_label(report)) } + span class="inline-flex flex-wrap items-center gap-2" { + a href={(base) "/users/" (id)} class="inline-flex items-center gap-2 text-neutral-900 underline decoration-neutral-300 hover:text-neutral-600 hover:decoration-neutral-500" { + img + src=(user_avatar_url(config, id, report.reported_user_avatar_hash.as_deref(), 80, true)) + alt=(format!("{}'s avatar", reported_user_label(report))) + class="h-8 w-8 rounded-full object-cover"; + span { (reported_user_label(report)) } + } + @if report.reported_user_bot == Some(true) { + span class="inline-flex" data-report-user-bot=(id) { + (badge("Bot", BadgeVariant::Info)) + } + } } })) } @else { @@ -240,6 +362,59 @@ fn reported_user_field(config: &AdminConfig, label: &str, report: &ReportEntry) } } +fn reported_webhook_fields( + config: &AdminConfig, + report: &ReportEntry, + webhook: &ReportedWebhook<'_>, +) -> Markup { + let base = &config.base_path; + let moved_channel = webhook + .channel_id + .filter(|id| Some(*id) != report.reported_channel_id.as_deref()); + let moved_guild = webhook + .guild_id + .filter(|id| Some(*id) != report.reported_guild_id.as_deref()); + html! { + (data_field("Webhook", webhook_identity(webhook))) + (data_field_link_mono("Webhook ID", &webhook.reports_href, webhook.id)) + @if let Some(configured_name) = webhook.configured_name { + (data_field_text("Configured Name", configured_name)) + } + @if let Some(ref avatar_url) = webhook.configured_avatar_url { + (data_field("Configured Avatar", html! { + img src=(avatar_url) alt="Configured webhook avatar" data-report-webhook-configured-avatar + class="h-8 w-8 rounded-full object-cover"; + })) + } + @if let Some(ref kind) = webhook.kind { + (data_field_text("Webhook Type", kind)) + } + @if let Some(ref created_at) = webhook.created_at { + (data_field_text("Webhook Created", created_at)) + } + @if let Some(channel_id) = moved_channel { + (data_field_link_mono("Webhook Channel ID", &message_lookup_href(base, channel_id, None), channel_id)) + } + @if let Some(guild_id) = moved_guild { + (data_field_link_mono("Webhook Guild ID", &format!("{base}/guilds/{guild_id}"), guild_id)) + } + @if let Some(ref application) = webhook.application { + (data_field_link_mono("Application ID", &application.href, application.id)) + } + @if webhook.record_deleted { + (data_field_muted("Webhook Record", "Deleted before the report")) + } + @if let Some(ref creator) = webhook.creator { + (data_field("Webhook Creator", html! { + span class="inline-flex flex-wrap items-center gap-2" { + (webhook_creator_link(creator)) + (webhook_creator_badges(creator)) + } + })) + } + } +} + fn reported_message_fields(config: &AdminConfig, report: &ReportEntry) -> Markup { let base = &config.base_path; html! { @@ -403,7 +578,8 @@ fn actions_card(config: &AdminConfig, report: &ReportEntry, csrf_token: &str) -> fn resolve_report_form(base: &str, report_id: &str, csrf_token: &str) -> Markup { html! { - form method="post" action={(base) "/reports/" (report_id) "/resolve"} class="flex flex-col gap-3" { + form method="post" action={(base) "/reports/" (report_id) "/resolve"} class="flex flex-col gap-3" + data-admin-refresh-on-success="#report-detail" { (csrf_input(csrf_token)) label for="resolution" class="block text-sm font-medium text-neutral-700" { "Public comment to the reporter (optional)" @@ -413,7 +589,11 @@ fn resolve_report_form(base: &str, report_id: &str, csrf_token: &str) -> Markup px-3 py-2 text-sm shadow-sm \ focus:border-brand-primary focus:outline-none \ focus:ring-1 focus:ring-brand-primary" {} - (opt_out_checkbox("notify_reporter", "Notify the reporter by DM and email")) + (opt_out_checkbox("notify_reporter", "Include the public comment in the reporter notice")) + p class="text-neutral-500 text-xs" data-resolve-notice-help="" { + "The reporter is told the report was resolved either way, unless their account is gone or barred from reporting. \ + When unticked, the comment is not sent or shown on the report. It is only kept in the audit log." + } button type="submit" class="inline-flex w-full items-center justify-center gap-2 \ font-medium rounded-lg bg-neutral-900 text-white \ @@ -424,6 +604,385 @@ fn resolve_report_form(base: &str, report_id: &str, csrf_token: &str) -> Markup } } +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +enum SnapshotChange { + Same, + Changed, + Unknown, +} + +fn non_empty(value: Option<&str>) -> Option<&str> { + value.filter(|value| !value.trim().is_empty()) +} + +fn compare_text(snapshot: Option<&str>, live: Option>) -> SnapshotChange { + match live { + None => SnapshotChange::Unknown, + Some(live) if non_empty(snapshot) == non_empty(live) => SnapshotChange::Same, + Some(_) => SnapshotChange::Changed, + } +} + +fn compare_asset( + snapshot: Option<&ReportProfileSnapshotAsset>, + live: Option>, +) -> SnapshotChange { + compare_text(snapshot.map(|asset| asset.hash.as_str()), live) +} + +fn padded_discriminator(value: Option<&str>) -> Option { + non_empty(value).map(|value| format!("{value:0>4}")) +} + +fn snapshot_tag(username: Option<&str>, discriminator: Option<&str>) -> Option { + let username = non_empty(username)?; + Some(match padded_discriminator(discriminator) { + Some(discriminator) => format!("{username}#{discriminator}"), + None => username.to_owned(), + }) +} + +fn snapshot_row(key: &str, label: &str, change: SnapshotChange, value: Markup) -> Markup { + let changed = change == SnapshotChange::Changed; + html! { + div class="flex min-w-0 flex-col gap-1" data-snapshot-field=(key) data-snapshot-changed[changed] { + p class="flex flex-wrap items-center gap-2 text-gray-500 text-xs" { + (label) + @if changed { + (badge("Changed since the report", BadgeVariant::Warning)) + } + } + (value) + } + } +} + +fn snapshot_text(value: Option<&str>) -> Markup { + match non_empty(value) { + Some(value) => html! { + p class="whitespace-pre-wrap break-words text-gray-900 text-sm" { (value) } + }, + None => html! { + p class="text-neutral-500 text-sm italic" { "Not set" } + }, + } +} + +fn snapshot_image(asset: Option<&ReportProfileSnapshotAsset>, alt: &str, wide: bool) -> Markup { + let Some(asset) = asset else { + return snapshot_text(None); + }; + let image_class = if wide { + "h-16 w-40 rounded-md border border-neutral-200 object-cover" + } else { + "h-16 w-16 rounded-full border border-neutral-200 object-cover" + }; + html! { + div class="flex flex-col gap-1" { + @if let Some(url) = asset.url.as_deref() { + a href=(url) target="_blank" rel="noopener noreferrer" class="w-fit" { + img src=(url) alt=(alt) class=(image_class) loading="lazy"; + } + } @else { + p class="text-amber-800 text-sm" data-snapshot-image-missing="" { + "Not preserved in the report" + } + } + span class="break-all font-mono text-neutral-500 text-xs" { (asset.hash) } + } + } +} + +fn snapshot_group(title: &str, note: Option<&str>, rows: Markup) -> Markup { + html! { + div class="space-y-3" { + div class="space-y-1" { + h3 class="font-semibold text-neutral-900 text-sm" { (title) } + @if let Some(note) = note { + p class="text-neutral-500 text-xs" { (note) } + } + } + div class="grid grid-cols-1 gap-4 sm:grid-cols-2" { (rows) } + } + } +} + +fn profile_snapshot_section( + config: &AdminConfig, + report: &ReportEntry, + live: &LiveProfile, +) -> Markup { + let Some(snapshot) = report.reported_profile_snapshot.as_ref() else { + return html! {}; + }; + if snapshot.user.is_none() && snapshot.member.is_none() && snapshot.guild.is_none() { + return html! {}; + } + let description = snapshot + .captured_at + .as_deref() + .map(|captured| { + format!( + "Captured {}. Fields marked as changed differ from the live profile. Image links expire after 5 minutes. Reload the page for new ones.", + format_admin_timestamp(captured) + ) + }) + .unwrap_or_else(|| { + "Fields marked as changed differ from the live profile. Image links expire after 5 minutes. Reload the page for new ones.".to_owned() + }); + html! { + (section_card(Some("At Report Time"), Some(&description), None, html! { + div class="space-y-6" data-report-profile-snapshot="" { + (snapshot_user_group(config, snapshot, live)) + (snapshot_member_group(snapshot)) + (snapshot_guild_group(config, snapshot, live)) + } + })) + } +} + +fn snapshot_user_group( + config: &AdminConfig, + snapshot: &ReportProfileSnapshot, + live: &LiveProfile, +) -> Markup { + let Some(user) = snapshot.user.as_ref() else { + return html! {}; + }; + let base = &config.base_path; + let live_user = live.user.as_ref().filter(|live| live.id == user.id); + let closed = non_empty(user.username.as_deref()).is_none(); + let note = if closed { + Some("The account was closed when the report was filed, so only its ID was kept.") + } else if live_user.is_none() { + Some("The live account could not be loaded, so changes are not marked.") + } else { + None + }; + let tag = snapshot_tag(user.username.as_deref(), user.discriminator.as_deref()); + let tag_change = match live_user { + None => SnapshotChange::Unknown, + Some(live) => { + let live_tag = snapshot_tag(Some(&live.username), Some(&live.discriminator)); + if live_tag == tag { + SnapshotChange::Same + } else { + SnapshotChange::Changed + } + } + }; + let field = |value: fn(&AdminUser) -> Option<&str>| live_user.map(value); + html! { + (snapshot_group("Account", note, html! { + (data_field_link_mono("Account ID", &format!("{base}/users/{}", user.id), &user.id)) + @if !closed { + (snapshot_row("user.username", "Username", tag_change, snapshot_text(tag.as_deref()))) + (snapshot_row( + "user.global_name", + "Display Name", + compare_text(user.global_name.as_deref(), field(|live| live.global_name.as_deref())), + snapshot_text(user.global_name.as_deref()), + )) + (snapshot_row( + "user.pronouns", + "Pronouns", + compare_text(user.pronouns.as_deref(), field(|live| live.pronouns.as_deref())), + snapshot_text(user.pronouns.as_deref()), + )) + (snapshot_row( + "user.bio", + "Bio", + compare_text(user.bio.as_deref(), field(|live| live.bio.as_deref())), + snapshot_text(user.bio.as_deref()), + )) + (snapshot_row( + "user.avatar", + "Avatar", + compare_asset(user.avatar.as_ref(), field(|live| live.avatar.as_deref())), + snapshot_image(user.avatar.as_ref(), "Avatar at report time", false), + )) + (snapshot_row( + "user.banner", + "Banner", + compare_asset(user.banner.as_ref(), field(|live| live.banner.as_deref())), + snapshot_image(user.banner.as_ref(), "Banner at report time", true), + )) + } + })) + } +} + +fn snapshot_member_group(snapshot: &ReportProfileSnapshot) -> Markup { + let Some(member) = snapshot.member.as_ref() else { + return html! {}; + }; + let unknown = SnapshotChange::Unknown; + html! { + (snapshot_group( + "Community Profile", + Some("The community profile is not compared with the live one."), + html! { + (data_field_mono("Community ID", &member.guild_id)) + (snapshot_row("member.nick", "Nickname", unknown, snapshot_text(member.nick.as_deref()))) + (snapshot_row("member.pronouns", "Pronouns", unknown, snapshot_text(member.pronouns.as_deref()))) + (snapshot_row("member.bio", "Bio", unknown, snapshot_text(member.bio.as_deref()))) + (snapshot_row( + "member.joined_at", + "Joined", + unknown, + snapshot_text(member.joined_at.as_deref().map(format_admin_timestamp).as_deref()), + )) + (snapshot_row( + "member.avatar", + "Avatar", + unknown, + snapshot_image(member.avatar.as_ref(), "Community avatar at report time", false), + )) + (snapshot_row( + "member.banner", + "Banner", + unknown, + snapshot_image(member.banner.as_ref(), "Community banner at report time", true), + )) + }, + )) + } +} + +fn snapshot_guild_group( + config: &AdminConfig, + snapshot: &ReportProfileSnapshot, + live: &LiveProfile, +) -> Markup { + let Some(guild) = snapshot.guild.as_ref() else { + return html! {}; + }; + let base = &config.base_path; + let live_guild = live.guild.as_ref().filter(|live| live.id == guild.id); + let note = live_guild + .is_none() + .then_some("The live community could not be loaded, so changes are not marked."); + let field = |value: fn(&GuildDetailInfo) -> Option<&str>| live_guild.map(value); + html! { + (snapshot_group("Community", note, html! { + (data_field_link_mono("Community ID", &format!("{base}/guilds/{}", guild.id), &guild.id)) + (snapshot_row( + "guild.name", + "Name", + compare_text(guild.name.as_deref(), field(|live| Some(live.name.as_str()))), + snapshot_text(guild.name.as_deref()), + )) + (snapshot_row( + "guild.vanity_url_code", + "Vanity URL", + compare_text(guild.vanity_url_code.as_deref(), field(|live| live.vanity_url_code.as_deref())), + snapshot_text(guild.vanity_url_code.as_deref()), + )) + (snapshot_row( + "guild.icon", + "Icon", + compare_asset(guild.icon.as_ref(), field(|live| live.icon.as_deref())), + snapshot_image(guild.icon.as_ref(), "Icon at report time", false), + )) + (snapshot_row( + "guild.banner", + "Banner", + compare_asset(guild.banner.as_ref(), field(|live| live.banner.as_deref())), + snapshot_image(guild.banner.as_ref(), "Banner at report time", true), + )) + (snapshot_row( + "guild.splash", + "Invite Splash", + compare_asset(guild.splash.as_ref(), field(|live| live.splash.as_deref())), + snapshot_image(guild.splash.as_ref(), "Invite splash at report time", true), + )) + })) + } +} + +fn legal_hold_card( + config: &AdminConfig, + auth: &AuthContext, + report: &ReportEntry, + csrf_token: &str, +) -> Markup { + let base = &config.base_path; + let action = format!("{base}/reports/{}/legal-hold", report.report_id); + let held = non_empty(report.legal_hold_until.as_deref()); + let ended = held.is_some_and(legal_hold_has_ended); + let state = match (held, ended) { + (None, _) => "none", + (Some(_), true) => "ended", + (Some(_), false) => "active", + }; + let can_edit = has_acl(auth, acl::REPORT_RESOLVE); + html! { + (section_card(Some("Legal Hold"), None, None, html! { + div class="flex flex-col gap-3" data-report-legal-hold=(state) { + @if let Some(until) = held { + p class="text-neutral-700 text-sm" { + span class="font-medium" { @if ended { "Hold ended: " } @else { "Held until: " } } + span data-report-legal-hold-until=(until) { (format_admin_timestamp(until)) } + } + @if ended { + p class="text-neutral-500 text-sm" { + "The report is no longer held and is deleted 365 days after it was filed." + } + } + @if let Some(reason) = non_empty(report.legal_hold_reason.as_deref()) { + p class="whitespace-pre-wrap break-words text-neutral-700 text-sm" data-report-legal-hold-reason="" { + span class="font-medium" { "Reason: " } + (reason) + } + } + } @else { + p class="text-neutral-500 text-sm" { + "No hold. The report and its stored evidence are deleted 365 days after it was filed." + } + } + @if can_edit { + form method="post" action=(action) class="flex flex-col gap-3" data-legal-hold-form="set" + data-admin-refresh-on-success="#report-detail" { + (csrf_input(csrf_token)) + label for="legal_hold_until" class=(FORM_LABEL_CLASS) { "Hold until" } + input type="date" id="legal_hold_until" name="legal_hold_until" required + class={(FORM_CONTROL_CLASS) " h-8 px-3 py-1.5"}; + p class="text-neutral-500 text-xs" { "The hold ends at the end of that day, UTC." } + label for="legal_hold_reason" class=(FORM_LABEL_CLASS) { "Hold reason" } + textarea id="legal_hold_reason" name="legal_hold_reason" rows="2" maxlength="512" required + class={(FORM_CONTROL_CLASS) " px-3 py-2"} {} + button type="submit" + class="inline-flex w-full items-center justify-center gap-2 \ + font-medium rounded-lg bg-neutral-900 text-white \ + px-4 py-2 text-sm" { + @if state == "active" { "Update Hold" } @else { "Place Hold" } + } + } + @if held.is_some() { + form method="post" action=(action) data-legal-hold-form="clear" + data-admin-refresh-on-success="#report-detail" { + (csrf_input(csrf_token)) + input type="hidden" name="clear" value="1"; + button type="submit" + class="inline-flex w-full items-center justify-center gap-2 \ + rounded-lg border border-neutral-300 bg-white \ + px-4 py-2 font-medium text-neutral-700 text-sm \ + hover:bg-neutral-50" { + "Clear Hold" + } + } + } + } + } + })) + } +} + +fn legal_hold_has_ended(until: &str) -> bool { + time::OffsetDateTime::parse(until, &time::format_description::well_known::Rfc3339) + .is_ok_and(|until| until <= time::OffsetDateTime::now_utc()) +} + fn nav_link(href: &str, label: &str) -> Markup { html! { a href=(href) @@ -438,7 +997,7 @@ fn nav_link(href: &str, label: &str) -> Markup { fn message_context_section( config: &AdminConfig, report: &ReportEntry, - include_delete: bool, + actions: MessageActions<'_>, csrf_token: Option<&str>, ) -> Markup { let Some(values) = &report.message_context else { @@ -461,7 +1020,7 @@ fn message_context_section( config, &config.base_path, &messages, - include_delete, + actions, report.reported_message_id.as_deref(), )) } @@ -472,16 +1031,27 @@ fn message_context_section( } } +fn report_message_actions<'a>(auth: &AuthContext, report: &'a ReportEntry) -> MessageActions<'a> { + MessageActions { + delete: has_acl(auth, acl::MESSAGE_DELETE), + ncmec: auth.admin_user.as_ref().is_some_and(|admin| { + acl::has_all_permissions(&admin.acls, acl::NCMEC_ATTACHMENT_REPORT) + }), + source_report_id: Some(&report.report_id), + } +} + pub fn report_detail_page( config: &AdminConfig, auth: &AuthContext, report: &ReportEntry, + live: &LiveProfile, csrf_token: &str, is_htmx: bool, ) -> Markup { let base = &config.base_path; let content = html! { - div class="space-y-6" { + div id="report-detail" class="space-y-6" { (page_header_with_back( "Report Details", None, @@ -491,13 +1061,16 @@ pub fn report_detail_page( div class="grid grid-cols-1 gap-6 lg:grid-cols-3" { div class="space-y-6 lg:col-span-2" { (basic_info_section(config, auth, report)) + (report_answers_section(report)) (reported_entity_section(config, report)) - (message_context_section(config, report, true, Some(csrf_token))) + (profile_snapshot_section(config, report, live)) + (message_context_section(config, report, report_message_actions(auth, report), Some(csrf_token))) (additional_info_section(report)) } div class="space-y-6" { (status_card(config, report)) (actions_card(config, report, csrf_token)) + (legal_hold_card(config, auth, report, csrf_token)) } } } @@ -514,8 +1087,9 @@ pub fn report_detail_fragment(config: &AdminConfig, report: &ReportEntry) -> Mar html! { div data-report-fragment="" class="space-y-4" { (basic_info_section_fragment(config, report)) + (report_answers_section(report)) (reported_entity_section(config, report)) - (message_context_section(config, report, false, None)) + (message_context_section(config, report, MessageActions::default(), None)) (additional_info_section(report)) a href={(base) "/reports/" (&report.report_id)} class="inline-flex min-h-[44px] w-full items-center justify-center \ @@ -535,7 +1109,8 @@ fn basic_info_section_fragment(config: &AdminConfig, report: &ReportEntry) -> Ma (data_field_mono("Report ID", &report.report_id)) (data_field_text("Reported At", &format_admin_timestamp(&report.reported_at))) (data_field_text("Type", report_type_label(report.report_type))) - (data_field_text("Category", report.category.as_deref().unwrap_or(""))) + (category_field(report)) + (reason_field(report)) @if let Some(ref reporter_id) = report.reporter_id { (data_field_link_mono("Reporter", &format!("{base}/users/{reporter_id}"), &reporter_label(report))) } @else { @@ -550,14 +1125,1256 @@ fn basic_info_section_fragment(config: &AdminConfig, report: &ReportEntry) -> Ma #[cfg(test)] mod tests { use super::*; + use crate::{ + api::types::ReportFlowAnswerItemEntry, + config::{ProxyConfig, RuntimeEnv}, + session::Session, + templates::components::report_webhook::webhook_type_label, + }; + use serde_json::json; + + fn test_config() -> AdminConfig { + AdminConfig { + env: RuntimeEnv::Test, + host: String::new(), + port: 0, + secret_key_base: "test-secret".to_owned(), + base_path: "/admin".to_owned(), + api_endpoint: String::new(), + media_endpoint: "https://media.example.test".to_owned(), + static_cdn_endpoint: String::new(), + admin_endpoint: String::new(), + web_app_endpoint: String::new(), + oauth_client_id: String::new(), + oauth_client_secret: String::new(), + oauth_redirect_uri: String::new(), + build_version: "test".to_owned(), + self_hosted: false, + proxy: ProxyConfig { + trust_client_ip_header: false, + client_ip_header_name: String::new(), + }, + } + } + + fn test_auth() -> AuthContext { + AuthContext { + session: Session { + user_id: "1500000000000000000".to_owned(), + access_token: "token".to_owned(), + created_at: 0, + }, + admin_user: None, + } + } + + fn step( + screen_title: &str, + option_id: Option<&str>, + option_label: Option<&str>, + items: &[&str], + ) -> ReportFlowAnswerStepEntry { + ReportFlowAnswerStepEntry { + screen_id: "screen".to_owned(), + screen_title: screen_title.to_owned(), + option_id: option_id.map(str::to_owned), + option_label: option_label.map(str::to_owned), + items: items + .iter() + .map(|label| ReportFlowAnswerItemEntry { + id: label.to_lowercase(), + label: (*label).to_owned(), + }) + .collect(), + } + } + + fn report(extra: serde_json::Value) -> ReportEntry { + let mut value = json!({ + "report_id": "1800000000000000001", + "reported_at": "2026-05-26T12:00:00.000Z", + "status": 0, + "report_type": 0, + "category": "child_safety" + }); + for (key, field) in extra.as_object().expect("object").clone() { + value[key] = field; + } + serde_json::from_value(value).expect("valid report") + } #[test] - fn resolve_form_offers_a_public_comment_and_notifies_the_reporter_by_default() { + fn answer_step_lines_cover_choice_checklist_and_info_steps() { + assert_eq!( + answer_step_line(&step( + "What is wrong with this message?", + Some("sexual"), + Some("Sexual content"), + &[] + )), + "What is wrong with this message?: Sexual content" + ); + assert_eq!( + answer_step_line(&step( + "Which parts of the profile?", + None, + None, + &["Avatar", "Bio"] + )), + "Which parts of the profile?: Avatar, Bio" + ); + assert_eq!( + answer_step_line(&step("Before you report", None, None, &[])), + "Before you report" + ); + assert_eq!( + answer_step_line(&step("abuse", Some("future_option"), None, &[])), + "abuse: future_option" + ); + } + + #[test] + fn both_basic_info_sections_render_the_reason_row() { + let config = test_config(); + let v2 = report(json!({ + "reason": "csam", + "reason_label": "Child sexual abuse material", + "reason_highest_priority": true + })); + for markup in [ + basic_info_section(&config, &test_auth(), &v2).into_string(), + basic_info_section_fragment(&config, &v2).into_string(), + ] { + assert!(markup.contains(">Reason<"), "{markup}"); + assert!(markup.contains(r#"data-report-reason="csam""#), "{markup}"); + assert!(markup.contains("Child sexual abuse material"), "{markup}"); + assert!(markup.contains("Highest priority"), "{markup}"); + } + let unknown = report(json!({ + "reason": "future_reason", + "reason_label": "future_reason", + "reason_highest_priority": null + })); + let markup = basic_info_section_fragment(&config, &unknown).into_string(); + assert!(markup.contains("future_reason"), "{markup}"); + assert!(!markup.contains("Highest priority"), "{markup}"); + let legacy = report(json!({})); + for markup in [ + basic_info_section(&config, &test_auth(), &legacy).into_string(), + basic_info_section_fragment(&config, &legacy).into_string(), + ] { + assert!(!markup.contains(">Reason<"), "{markup}"); + } + } + + #[test] + fn answers_section_lists_steps_and_flow_metadata() { + let dsa = report(json!({ + "reason": "csam", + "reason_label": "Child sexual abuse material", + "reason_highest_priority": true, + "reporter_good_faith_confirmed": true, + "flow": { + "revision_hash": "b7667e8b32c98c40", + "surface": "dsa", + "locale": "fr", + "steps": [ + {"screen_id": "root_message", "screen_title": "What is wrong with this message?", "option_id": "sexual", "option_label": "Sexual content", "items": []}, + {"screen_id": "profile_intro", "screen_title": "Before you report", "option_id": null, "option_label": null, "items": []} + ] + } + })); + let markup = report_answers_section(&dsa).into_string(); + assert!(markup.contains("Report Answers"), "{markup}"); + assert!( + markup.contains("What is wrong with this message?: Sexual content"), + "{markup}" + ); + assert!( + markup.contains(r#"data-report-answer-step="profile_intro""#), + "{markup}" + ); + assert!(markup.contains("Shown to the reporter in fr"), "{markup}"); + assert!(markup.contains("b7667e8b32c98c40"), "{markup}"); + assert!(markup.contains("Surface: DSA form"), "{markup}"); + assert!( + markup.contains("Good-faith statement: Confirmed"), + "{markup}" + ); + + let in_app = report(json!({ + "flow": {"revision_hash": "16781a19a797f23f", "surface": "in_app", "locale": null, "steps": []} + })); + let markup = report_answers_section(&in_app).into_string(); + assert!(markup.contains("Surface: In app"), "{markup}"); + assert!(!markup.contains("Shown to the reporter in"), "{markup}"); + assert!(!markup.contains("Good-faith statement"), "{markup}"); + + assert!( + report_answers_section(&report(json!({}))) + .into_string() + .is_empty() + ); + } + + fn webhook_report() -> ReportEntry { + report(json!({ + "category": "spam", + "reported_user_id": null, + "reported_webhook_id": "1700000000000000500", + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_avatar_hash": "abc123", + "reported_message_id": "1700000000000000600", + "reported_channel_id": "1700000000000000700", + "reported_channel_name": "general", + "reported_guild_id": "1700000000000000800", + "reported_guild_name": "Harbor", + "message_context": [ + { + "id": "1700000000000000600", + "channel_id": "1700000000000000700", + "content": "Free stuff here", + "timestamp": "2026-10-04T10:00:00.000Z", + "attachments": [], + "author_id": "1700000000000000500", + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": "abc123", + "webhook_id": "1700000000000000500" + }, + { + "id": "1700000000000000590", + "channel_id": "1700000000000000700", + "content": "hello", + "timestamp": "2026-10-04T09:59:00.000Z", + "attachments": [], + "author_id": "1700000000000000900", + "author_username": "member", + "author_global_name": null, + "author_discriminator": "0001", + "author_avatar": null, + "webhook_id": null + } + ] + })) + } + + #[test] + fn reported_entity_names_the_webhook_and_never_links_it_as_a_user() { + let config = test_config(); + let markup = reported_entity_section(&config, &webhook_report()).into_string(); + assert!( + markup.contains(r#"data-report-webhook="1700000000000000500""#), + "{markup}" + ); + assert!(markup.contains("Harbor Bulletin"), "{markup}"); + assert!(markup.contains(">Webhook<"), "{markup}"); + assert!(markup.contains(">Webhook ID<"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/reports?reported_webhook_id=1700000000000000500""#), + "{markup}" + ); + assert!( + markup.contains("https://media.example.test/avatars/1700000000000000500/abc123"), + "{markup}" + ); + assert!(markup.contains("1700000000000000700"), "{markup}"); + assert!(markup.contains("general"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/guilds/1700000000000000800""#), + "{markup}" + ); + assert!(!markup.contains("/admin/users/"), "{markup}"); + assert!(!markup.contains("User unknown"), "{markup}"); + + let unnamed = report(json!({ + "reported_user_id": null, + "reported_webhook_id": "1700000000000000500", + "reported_webhook_name": null + })); + let markup = reported_entity_section(&config, &unnamed).into_string(); + assert!(markup.contains("Webhook 1700000000000000500"), "{markup}"); + + let user = report(json!({ + "reported_user_id": "1700000000000000900", + "reported_user_tag": "member#0001", + "reported_webhook_id": null + })); + let markup = reported_entity_section(&config, &user).into_string(); + assert!( + markup.contains(r#"href="/admin/users/1700000000000000900""#), + "{markup}" + ); + assert!(!markup.contains("data-report-webhook"), "{markup}"); + } + + #[test] + fn reported_entity_links_the_webhook_creator() { + let config = test_config(); + let live = report(json!({ + "reported_user_id": null, + "reported_webhook_id": "1700000000000000500", + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_default_name": "Harbor Hook", + "reported_webhook_creator_id": "1700000000000000950", + "reported_webhook_creator_tag": "keeper#0042", + "reported_webhook_creator_username": "keeper", + "reported_webhook_creator_global_name": "Harbor Keeper", + "reported_webhook_creator_discriminator": "0042", + "reported_webhook_creator_avatar_hash": "def456" + })); + let markup = reported_entity_section(&config, &live).into_string(); + assert!(markup.contains(">Webhook Creator<"), "{markup}"); + assert!( + markup.contains(r#"data-report-webhook-creator="1700000000000000950""#), + "{markup}" + ); + assert!( + markup.contains(r#"href="/admin/users/1700000000000000950""#), + "{markup}" + ); + assert!(markup.contains("Harbor Keeper (keeper#0042)"), "{markup}"); + assert!( + markup.contains("https://media.example.test/avatars/1700000000000000950/def456"), + "{markup}" + ); + assert!(markup.contains(">Configured Name<"), "{markup}"); + assert!(markup.contains("Harbor Hook"), "{markup}"); + assert!( + !markup.contains("/admin/users/1700000000000000500"), + "{markup}" + ); + let actions = actions_card(&config, &live, "csrf").into_string(); + assert!(!actions.contains("View Reported User"), "{actions}"); + + let deleted = report(json!({ + "reported_user_id": null, + "reported_webhook_id": "1700000000000000500", + "reported_webhook_name": "Harbor Hook", + "reported_webhook_default_name": "Harbor Hook", + "reported_webhook_creator_id": "1700000000000000950", + "reported_webhook_creator_tag": null, + "reported_webhook_creator_username": null, + "reported_webhook_creator_global_name": null, + "reported_webhook_creator_discriminator": null, + "reported_webhook_creator_avatar_hash": null + })); + let markup = reported_entity_section(&config, &deleted).into_string(); + assert!( + markup.contains(r#"href="/admin/users/1700000000000000950""#), + "{markup}" + ); + assert!(markup.contains("User 1700000000000000950"), "{markup}"); + assert!(!markup.contains(">Configured Name<"), "{markup}"); + assert!( + markup.contains("data-report-webhook-creator-deleted"), + "{markup}" + ); + assert!(markup.contains(">Account Deleted<"), "{markup}"); + assert!( + !markup.contains("data-report-webhook-creator-bot"), + "{markup}" + ); + + let live_markup = reported_entity_section(&config, &live).into_string(); + assert!( + !live_markup.contains("data-report-webhook-creator-deleted"), + "{live_markup}" + ); + + let markup = reported_entity_section(&config, &webhook_report()).into_string(); + assert!(!markup.contains(">Webhook Creator<"), "{markup}"); + } + + fn webhook_context_report(extra: serde_json::Value) -> ReportEntry { + let mut value = serde_json::to_value(webhook_report()).expect("serialize report"); + for (key, field) in extra.as_object().expect("object").clone() { + value[key] = field; + } + serde_json::from_value(value).expect("valid report") + } + + #[test] + fn reported_entity_shows_the_webhook_context() { + let config = test_config(); + let in_place = webhook_context_report(json!({ + "reported_webhook_default_name": "Harbor Bulletin", + "reported_webhook_default_avatar_hash": "abc123", + "reported_webhook_type": 1, + "reported_webhook_channel_id": "1700000000000000700", + "reported_webhook_guild_id": "1700000000000000800", + "reported_webhook_created_at": "2026-10-04T09:05:00.000Z", + "reported_webhook_creator_id": "1700000000000000950", + "reported_webhook_creator_username": "keeper", + "reported_webhook_creator_discriminator": "0042" + })); + let markup = reported_entity_section(&config, &in_place).into_string(); + assert!(markup.contains(">Webhook Type<"), "{markup}"); + assert!(markup.contains(">Incoming<"), "{markup}"); + assert!(markup.contains(">Webhook Created<"), "{markup}"); + assert!(markup.contains("Oct 4, 2026, 9:05 AM UTC"), "{markup}"); + assert!(!markup.contains(">Configured Name<"), "{markup}"); + assert!(!markup.contains(">Configured Avatar<"), "{markup}"); + assert!(!markup.contains(">Webhook Channel ID<"), "{markup}"); + assert!(!markup.contains(">Webhook Guild ID<"), "{markup}"); + assert!(!markup.contains(">Application ID<"), "{markup}"); + assert!(!markup.contains(">Webhook Record<"), "{markup}"); + assert!( + !markup.contains("data-report-webhook-creator-bot"), + "{markup}" + ); + + let moved_bot = webhook_context_report(json!({ + "reported_webhook_name": "Relay Override", + "reported_webhook_default_name": "Relay", + "reported_webhook_default_avatar_hash": "fed321", + "reported_webhook_type": 2, + "reported_webhook_channel_id": "1700000000000000701", + "reported_webhook_guild_id": "1700000000000000801", + "reported_webhook_application_id": "1700000000000000960", + "reported_webhook_created_at": "2026-10-04T09:05:00.000Z", + "reported_webhook_creator_id": "1700000000000000960", + "reported_webhook_creator_tag": "relaybot#0000", + "reported_webhook_creator_username": "relaybot", + "reported_webhook_creator_discriminator": "0000" + })); + let markup = reported_entity_section(&config, &moved_bot).into_string(); + assert!(markup.contains(">Channel Follower<"), "{markup}"); + assert!(markup.contains(">Configured Avatar<"), "{markup}"); + assert!( + markup.contains("https://media.example.test/avatars/1700000000000000500/fed321"), + "{markup}" + ); + assert!(markup.contains(">Webhook Channel ID<"), "{markup}"); + assert!( + markup.contains( + r#"href="/admin/messages?channel_id=1700000000000000701&context_limit=50""# + ), + "{markup}" + ); + assert!(markup.contains(">Webhook Guild ID<"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/guilds/1700000000000000801""#), + "{markup}" + ); + assert!(markup.contains(">Application ID<"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/applications/1700000000000000960""#), + "{markup}" + ); + assert!( + markup.contains("data-report-webhook-creator-bot"), + "{markup}" + ); + assert!( + !markup.contains("data-report-webhook-creator-deleted"), + "{markup}" + ); + + let deleted_webhook = webhook_context_report(json!({ + "reported_webhook_created_at": "2026-10-04T09:05:00.000Z" + })); + let markup = reported_entity_section(&config, &deleted_webhook).into_string(); + assert!(markup.contains(">Webhook Record<"), "{markup}"); + assert!(markup.contains("Deleted before the report"), "{markup}"); + assert!(markup.contains(">Webhook Created<"), "{markup}"); + assert!(!markup.contains(">Webhook Type<"), "{markup}"); + assert!(!markup.contains(">Configured Avatar<"), "{markup}"); + assert!(!markup.contains(">Webhook Creator<"), "{markup}"); + + let legacy = reported_entity_section(&config, &webhook_report()).into_string(); + assert!(!legacy.contains(">Webhook Record<"), "{legacy}"); + assert!(!legacy.contains(">Webhook Created<"), "{legacy}"); + } + + #[test] + fn unknown_webhook_types_show_their_number() { + assert_eq!(webhook_type_label(1), "Incoming"); + assert_eq!(webhook_type_label(2), "Channel Follower"); + assert_eq!(webhook_type_label(7), "Type 7"); + } + + #[test] + fn webhook_actions_offer_no_reported_user_link() { + let markup = actions_card(&test_config(), &webhook_report(), "csrf").into_string(); + assert!(!markup.contains("View Reported User"), "{markup}"); + assert!( + !markup.contains("/admin/users/1700000000000000500"), + "{markup}" + ); + } + + #[test] + fn message_context_shows_webhook_authors_without_user_links() { + let config = test_config(); + let markup = + message_context_section(&config, &webhook_report(), MessageActions::default(), None) + .into_string(); + assert!( + markup.contains(r#"data-message-webhook="1700000000000000500""#), + "{markup}" + ); + assert!(markup.contains(">Harbor Bulletin<"), "{markup}"); + assert!(!markup.contains("@Harbor Bulletin"), "{markup}"); + assert!( + !markup.contains("/admin/users/1700000000000000500"), + "{markup}" + ); + assert!( + markup.contains(r#"href="/admin/users/1700000000000000900""#), + "{markup}" + ); + } + + fn auth_with_acls(acls: &[&str]) -> AuthContext { + let mut auth = test_auth(); + auth.admin_user = Some( + serde_json::from_value(json!({ + "id": "1500000000000000000", + "username": "admin", + "discriminator": "0001", + "acls": acls + })) + .expect("valid admin user"), + ); + auth + } + + fn image_report(category: &str) -> ReportEntry { + report(json!({ + "report_id": "1800000000000000009", + "category": category, + "reported_message_id": "1700000000000000600", + "reported_channel_id": "1700000000000000700", + "message_context": [{ + "id": "1700000000000000600", + "channel_id": "1700000000000000700", + "content": "", + "timestamp": "2026-10-04T10:00:00.000Z", + "author_id": "1700000000000000900", + "author_username": "member", + "author_global_name": null, + "author_discriminator": "0001", + "author_avatar": null, + "attachments": [{ + "id": "1700000000000000610", + "url": "https://media.example.test/attachments/image.png", + "filename": "image.png", + "content_type": "image/png", + "size": 4096 + }] + }] + })) + } + + const NCMEC_BUTTON: &str = r#"class="ncmec-report-btn"#; + const DELETE_BUTTON: &str = r#"class="delete-message-btn"#; + + fn render_page(auth: &AuthContext, report: &ReportEntry) -> String { + report_detail_page( + &test_config(), + auth, + report, + &LiveProfile::default(), + "csrf", + true, + ) + .into_string() + } + + #[test] + fn ncmec_button_sends_the_report_id_when_the_admin_has_the_acls() { + let auth = auth_with_acls(acl::NCMEC_ATTACHMENT_REPORT); + let markup = render_page(&auth, &image_report("child_safety")); + assert!(markup.contains(NCMEC_BUTTON), "{markup}"); + assert!( + markup.contains(r#"data-source-report-id="1800000000000000009""#), + "{markup}" + ); + assert!( + markup.contains("fields.append('source_report_id', b.dataset.sourceReportId)"), + "{markup}" + ); + assert!(markup.contains(DELETE_BUTTON), "{markup}"); + } + + #[test] + fn ncmec_button_is_hidden_without_the_acls() { + let auth = auth_with_acls(&[acl::REPORT_VIEW, acl::MESSAGE_DELETE]); + let markup = render_page(&auth, &image_report("child_safety")); + assert!(markup.contains("image.png"), "{markup}"); + assert!(!markup.contains(NCMEC_BUTTON), "{markup}"); + assert!(!markup.contains("data-source-report-id"), "{markup}"); + assert!(markup.contains(DELETE_BUTTON), "{markup}"); + + for missing in acl::NCMEC_ATTACHMENT_REPORT { + let held = acl::NCMEC_ATTACHMENT_REPORT + .iter() + .copied() + .filter(|acl| acl != missing) + .collect::>(); + let markup = render_page(&auth_with_acls(&held), &image_report("child_safety")); + assert!(!markup.contains(NCMEC_BUTTON), "{missing}\n{markup}"); + assert_eq!( + markup.contains(DELETE_BUTTON), + *missing != acl::MESSAGE_DELETE, + "{missing}\n{markup}" + ); + } + + let markup = render_page(&auth_with_acls(&[acl::REPORT_VIEW]), &image_report("spam")); + assert!(!markup.contains(NCMEC_BUTTON), "{markup}"); + assert!(!markup.contains(DELETE_BUTTON), "{markup}"); + + let markup = render_page(&test_auth(), &image_report("child_safety")); + assert!(!markup.contains(NCMEC_BUTTON), "{markup}"); + } + + #[test] + fn ncmec_button_follows_the_acls_not_the_report_category() { + let auth = auth_with_acls(acl::NCMEC_ATTACHMENT_REPORT); + let markup = render_page(&auth, &image_report("spam")); + assert!(markup.contains(NCMEC_BUTTON), "{markup}"); + assert!( + markup.contains(r#"data-source-report-id="1800000000000000009""#), + "{markup}" + ); + + let markup = render_page(&auth_with_acls(&[acl::WILDCARD]), &image_report("spam")); + assert!(markup.contains(NCMEC_BUTTON), "{markup}"); + } + + #[test] + fn peek_fragment_offers_no_message_actions() { + let markup = + report_detail_fragment(&test_config(), &image_report("child_safety")).into_string(); + assert!(markup.contains("image.png"), "{markup}"); + assert!(!markup.contains(NCMEC_BUTTON), "{markup}"); + assert!(!markup.contains(DELETE_BUTTON), "{markup}"); + } + + #[test] + fn category_rows_show_the_label_and_keep_the_key() { + let config = test_config(); + let doxxing = report(json!({"category": "doxxing"})); + for markup in [ + basic_info_section(&config, &test_auth(), &doxxing).into_string(), + basic_info_section_fragment(&config, &doxxing).into_string(), + ] { + assert!(markup.contains(">Category<"), "{markup}"); + assert!( + markup.contains(r#"data-report-category="doxxing""#), + "{markup}" + ); + assert!( + markup.contains(">Sharing personal information<"), + "{markup}" + ); + } + let unknown = report(json!({"category": "future_value"})); + let markup = basic_info_section_fragment(&config, &unknown).into_string(); + assert!( + markup.contains(r#"data-report-category="future_value""#), + "{markup}" + ); + assert!(markup.contains(">future_value<"), "{markup}"); + let missing = report(json!({"category": null})); + let markup = basic_info_section_fragment(&config, &missing).into_string(); + assert!(markup.contains(">Category<"), "{markup}"); + assert!(!markup.contains("data-report-category"), "{markup}"); + } + + #[test] + fn resolve_form_shares_the_comment_by_default_and_says_the_reporter_is_always_told() { let markup = resolve_report_form("/admin", "1500000000000000001", "csrf").into_string(); assert!(markup.contains(r#"action="/admin/reports/1500000000000000001/resolve""#)); + assert!(markup.contains(r##"data-admin-refresh-on-success="#report-detail""##)); assert!(markup.contains(r#"name="resolution""#)); assert!(markup.contains(r#"maxlength="512""#)); assert!(markup.contains(r#"name="notify_reporter" value="true" checked"#)); assert!(markup.contains(r#"name="notify_reporter_present" value="1""#)); + assert!( + markup.contains(">Include the public comment in the reporter notice<"), + "{markup}" + ); + assert!( + markup.contains("The reporter is told the report was resolved either way"), + "{markup}" + ); + assert!( + markup.contains("When unticked, the comment is not sent or shown on the report. It is only kept in the audit log."), + "{markup}" + ); + assert!(!markup.contains("Notify the reporter"), "{markup}"); + } + + #[test] + fn reported_user_shows_a_bot_badge_only_for_bot_accounts() { + let config = test_config(); + let bot = report(json!({ + "report_type": 1, + "reported_user_id": "1700000000000000900", + "reported_user_tag": "relaybot#0000", + "reported_user_bot": true + })); + let markup = reported_entity_section(&config, &bot).into_string(); + assert!( + markup.contains(r#"data-report-user-bot="1700000000000000900""#), + "{markup}" + ); + assert!(markup.contains(">Bot<"), "{markup}"); + for flag in [json!(false), json!(null)] { + let human = report(json!({ + "report_type": 1, + "reported_user_id": "1700000000000000900", + "reported_user_tag": "member#0001", + "reported_user_bot": flag + })); + let markup = reported_entity_section(&config, &human).into_string(); + assert!(!markup.contains("data-report-user-bot"), "{markup}"); + } + let old = report(json!({"report_type": 1, "reported_user_id": "1700000000000000900"})); + let markup = reported_entity_section(&config, &old).into_string(); + assert!(!markup.contains("data-report-user-bot"), "{markup}"); + } + + fn context_report() -> ReportEntry { + report(json!({ + "category": "spam", + "reported_message_id": "1700000000000000600", + "reported_channel_id": "1700000000000000700", + "message_context": [ + { + "id": "1700000000000000600", + "channel_id": "1700000000000000700", + "content": "", + "timestamp": "2026-10-04T10:00:00.000Z", + "attachments": [], + "missing_attachments": [{ + "id": "1700000000000000610", + "filename": "harbor-notes.pdf", + "nsfw": null, + "content_type": "application/pdf", + "width": null, + "height": null, + "size": 2048 + }], + "author_id": "1700000000000000900", + "author_username": "relaybot", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": null, + "author_bot": true + }, + { + "id": "1700000000000000590", + "channel_id": "1700000000000000700", + "content": "hello", + "timestamp": "2026-10-04T09:59:00.000Z", + "attachments": [], + "missing_attachments": [], + "author_id": "1700000000000000901", + "author_username": "member", + "author_global_name": null, + "author_discriminator": "0001", + "author_avatar": null, + "webhook_id": null, + "author_bot": false + }, + { + "id": "1700000000000000580", + "channel_id": "1700000000000000700", + "content": "Free stuff", + "timestamp": "2026-10-04T09:58:00.000Z", + "attachments": [], + "author_id": "1700000000000000500", + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": "1700000000000000500", + "author_bot": null + } + ] + })) + } + + #[test] + fn message_context_marks_bot_authors_only() { + let markup = message_context_section( + &test_config(), + &context_report(), + MessageActions::default(), + None, + ) + .into_string(); + assert!( + markup.contains(r#"data-message-author-bot="1700000000000000900""#), + "{markup}" + ); + assert_eq!( + markup.matches("data-message-author-bot").count(), + 1, + "{markup}" + ); + assert!( + markup.contains(r#"data-message-webhook="1700000000000000500""#), + "{markup}" + ); + } + + #[test] + fn message_context_formats_timestamps_and_ids_every_grouped_row() { + let message = |id: &str, content: &str, timestamp: &str| { + json!({ + "id": id, + "channel_id": "1700000000000000700", + "content": content, + "timestamp": timestamp, + "attachments": [], + "author_id": "1700000000000000900", + "author_username": "relaybot", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": null, + "author_bot": true + }) + }; + let grouped = report(json!({ + "category": "spam", + "reported_message_id": "1700000000000000600", + "reported_channel_id": "1700000000000000700", + "message_context": [ + message("1700000000000000600", "Reminder", "2026-10-05T16:46:12.378Z"), + message("1700000000000000590", "Joined", "2026-10-05T16:45:00.000Z") + ] + })); + let markup = + message_context_section(&test_config(), &grouped, MessageActions::default(), None) + .into_string(); + assert!(markup.contains("Oct 5, 2026, 4:45 PM UTC"), "{markup}"); + assert!(!markup.contains("2026-10-05T16:4"), "{markup}"); + assert!( + markup.contains(r#"1700000000000000590"#), + "{markup}" + ); + let reported = markup + .split(r#"data-message-id="1700000000000000600""#) + .nth(1) + .expect("reported row"); + assert!( + reported.contains(r#"1700000000000000600"#), + "{markup}" + ); + } + + #[test] + fn message_context_names_attachments_that_were_not_preserved() { + let markup = message_context_section( + &test_config(), + &context_report(), + MessageActions::default(), + None, + ) + .into_string(); + assert!( + markup.contains(r#"data-missing-attachment="1700000000000000610""#), + "{markup}" + ); + assert!( + markup.contains("harbor-notes.pdf was not preserved in the report snapshot"), + "{markup}" + ); + assert_eq!( + markup.matches("data-missing-attachment").count(), + 1, + "{markup}" + ); + let fragment = report_detail_fragment(&test_config(), &context_report()).into_string(); + assert!( + fragment.contains("harbor-notes.pdf was not preserved in the report snapshot"), + "{fragment}" + ); + let markup = message_context_section( + &test_config(), + &image_report("spam"), + MessageActions::default(), + None, + ) + .into_string(); + assert!(!markup.contains("data-missing-attachment"), "{markup}"); + assert!(!markup.contains("data-message-author-bot"), "{markup}"); + } + + fn snapshot_report() -> ReportEntry { + report(json!({ + "report_type": 1, + "category": "harassment", + "reported_user_id": "1700000000000000900", + "reported_guild_id": "1700000000000000800", + "reported_profile_snapshot": { + "captured_at": "2026-10-04T10:00:00.000Z", + "user": { + "id": "1700000000000000900", + "username": "target", + "discriminator": "42", + "global_name": "Jordan Target", + "bio": "Original bio", + "pronouns": "they/them", + "avatar": {"hash": "avatar1", "url": "https://reports.example.test/avatar1?sig=abc"}, + "banner": {"hash": "banner1", "url": null} + }, + "member": { + "guild_id": "1700000000000000800", + "nick": "Harbor Nick", + "bio": null, + "pronouns": null, + "joined_at": "2026-10-01T08:00:00.000Z", + "avatar": null, + "banner": null + }, + "guild": null + } + })) + } + + fn live_user(extra: serde_json::Value) -> AdminUser { + let mut value = json!({ + "id": "1700000000000000900", + "username": "target", + "discriminator": 42, + "global_name": "Jordan Target", + "bio": "Original bio", + "pronouns": "they/them", + "avatar": "avatar1", + "banner": "banner1", + "email": null, + "accent_color": null, + "date_of_birth": null, + "locale": null, + "premium_type": null, + "premium_since": null, + "premium_until": null, + "premium_grace_ends_at": null, + "premium_lifetime_sequence": null, + "temp_banned_until": null, + "pending_deletion_at": null, + "pending_bulk_message_deletion_at": null, + "deletion_reason_code": null, + "deletion_public_reason": null, + "last_active_at": null, + "last_active_ip": null, + "last_active_ip_reverse": null, + "last_active_location": null + }); + for (key, field) in extra.as_object().expect("object").clone() { + value[key] = field; + } + serde_json::from_value(value).expect("valid admin user") + } + + fn changed_fields(markup: &str) -> Vec { + markup + .split("data-snapshot-field=\"") + .skip(1) + .filter_map(|rest| { + let key_end = rest.find('"')?; + let tag_end = rest.find('>')?; + rest[..tag_end] + .contains("data-snapshot-changed") + .then(|| rest[..key_end].to_owned()) + }) + .collect() + } + + #[test] + fn snapshot_card_marks_profile_fields_that_changed_since_the_report() { + let config = test_config(); + let live = LiveProfile { + user: Some(live_user(json!({"bio": "New bio", "avatar": "avatar2"}))), + guild: None, + }; + let markup = profile_snapshot_section(&config, &snapshot_report(), &live).into_string(); + assert!(markup.contains(">At Report Time<"), "{markup}"); + assert!(markup.contains("data-report-profile-snapshot"), "{markup}"); + assert!( + markup.contains("Captured Oct 4, 2026, 10:00 AM UTC"), + "{markup}" + ); + assert!(markup.contains("target#0042"), "{markup}"); + assert!(markup.contains("Original bio"), "{markup}"); + assert!(markup.contains("Jordan Target"), "{markup}"); + assert!( + markup.contains(r#"src="https://reports.example.test/avatar1?sig=abc""#), + "{markup}" + ); + assert!(markup.contains("Not preserved in the report"), "{markup}"); + assert_eq!( + changed_fields(&markup), + ["user.bio", "user.avatar"], + "{markup}" + ); + assert!(markup.contains("Changed since the report"), "{markup}"); + assert!(markup.contains(">Community Profile<"), "{markup}"); + assert!(markup.contains("Harbor Nick"), "{markup}"); + assert!( + markup.contains("The community profile is not compared with the live one."), + "{markup}" + ); + assert!(!markup.contains("could not be loaded"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/users/1700000000000000900""#), + "{markup}" + ); + + let renamed = LiveProfile { + user: Some(live_user( + json!({"username": "renamed", "discriminator": 7, "banner": null}), + )), + guild: None, + }; + let markup = profile_snapshot_section(&config, &snapshot_report(), &renamed).into_string(); + assert_eq!( + changed_fields(&markup), + ["user.username", "user.banner"], + "{markup}" + ); + + let unchanged = LiveProfile { + user: Some(live_user(json!({}))), + guild: None, + }; + let markup = + profile_snapshot_section(&config, &snapshot_report(), &unchanged).into_string(); + assert!(changed_fields(&markup).is_empty(), "{markup}"); + } + + #[test] + fn snapshot_card_marks_nothing_without_the_live_profile() { + let config = test_config(); + let markup = profile_snapshot_section(&config, &snapshot_report(), &LiveProfile::default()) + .into_string(); + assert!(markup.contains("Original bio"), "{markup}"); + assert!(changed_fields(&markup).is_empty(), "{markup}"); + assert!( + markup.contains("The live account could not be loaded, so changes are not marked."), + "{markup}" + ); + let other = LiveProfile { + user: Some(live_user( + json!({"id": "1700000000000000999", "bio": "Other"}), + )), + guild: None, + }; + let markup = profile_snapshot_section(&config, &snapshot_report(), &other).into_string(); + assert!(changed_fields(&markup).is_empty(), "{markup}"); + } + + #[test] + fn snapshot_card_shows_a_closed_account_by_id_only() { + let closed = report(json!({ + "report_type": 1, + "reported_user_id": "1700000000000000900", + "reported_profile_snapshot": { + "captured_at": "2026-10-04T10:00:00.000Z", + "user": { + "id": "1700000000000000900", + "username": null, + "discriminator": null, + "global_name": null, + "bio": null, + "pronouns": null, + "avatar": null, + "banner": null + }, + "member": null, + "guild": null + } + })); + let markup = profile_snapshot_section(&test_config(), &closed, &LiveProfile::default()) + .into_string(); + assert!( + markup.contains("The account was closed when the report was filed"), + "{markup}" + ); + assert!(markup.contains("1700000000000000900"), "{markup}"); + assert!(!markup.contains("data-snapshot-field"), "{markup}"); + } + + fn live_guild(extra: serde_json::Value) -> GuildDetailInfo { + let mut value = json!({ + "id": "1700000000000000800", + "owner_id": "1700000000000000901", + "name": "Harbor", + "vanity_url_code": null, + "icon": "icon1", + "banner": null, + "splash": null + }); + for (key, field) in extra.as_object().expect("object").clone() { + value[key] = field; + } + serde_json::from_value(value).expect("valid guild") + } + + #[test] + fn snapshot_card_marks_community_changes() { + let config = test_config(); + let guild_report = report(json!({ + "report_type": 2, + "category": "other", + "reported_guild_id": "1700000000000000800", + "reported_profile_snapshot": { + "captured_at": "2026-10-04T10:00:00.000Z", + "user": null, + "member": null, + "guild": { + "id": "1700000000000000800", + "name": "Harbor", + "vanity_url_code": null, + "icon": {"hash": "icon1", "url": "https://reports.example.test/icon1"}, + "banner": null, + "splash": null + } + } + })); + let live = LiveProfile { + user: None, + guild: Some(live_guild( + json!({"name": "Harbor Renamed", "icon": "icon2"}), + )), + }; + let markup = profile_snapshot_section(&config, &guild_report, &live).into_string(); + assert!(markup.contains(">Community<"), "{markup}"); + assert_eq!( + changed_fields(&markup), + ["guild.name", "guild.icon"], + "{markup}" + ); + assert!(!markup.contains(">Account<"), "{markup}"); + assert!( + markup.contains(r#"href="/admin/guilds/1700000000000000800""#), + "{markup}" + ); + let same = LiveProfile { + user: None, + guild: Some(live_guild(json!({}))), + }; + let markup = profile_snapshot_section(&config, &guild_report, &same).into_string(); + assert!(changed_fields(&markup).is_empty(), "{markup}"); + let markup = + profile_snapshot_section(&config, &guild_report, &LiveProfile::default()).into_string(); + assert!( + markup.contains("The live community could not be loaded"), + "{markup}" + ); + } + + #[test] + fn reports_without_a_snapshot_have_no_card() { + let config = test_config(); + for old in [ + report(json!({})), + report(json!({"reported_profile_snapshot": null})), + report( + json!({"reported_profile_snapshot": {"captured_at": "2026-10-04T10:00:00.000Z", "user": null, "member": null, "guild": null}}), + ), + ] { + let markup = + profile_snapshot_section(&config, &old, &LiveProfile::default()).into_string(); + assert!(markup.is_empty(), "{markup}"); + } + let page = render_page(&test_auth(), &snapshot_report()); + assert!(page.contains("At Report Time"), "{page}"); + let fragment = report_detail_fragment(&config, &snapshot_report()).into_string(); + assert!(!fragment.contains("At Report Time"), "{fragment}"); + } + + #[test] + fn legal_hold_card_shows_the_hold_and_offers_the_form_with_report_resolve() { + let config = test_config(); + let resolver = auth_with_acls(&[acl::REPORT_VIEW, acl::REPORT_RESOLVE]); + let viewer = auth_with_acls(&[acl::REPORT_VIEW]); + + let open = report(json!({})); + let markup = legal_hold_card(&config, &resolver, &open, "csrf").into_string(); + assert!(markup.contains(">Legal Hold<"), "{markup}"); + assert!( + markup.contains(r#"data-report-legal-hold="none""#), + "{markup}" + ); + assert!( + markup.contains("deleted 365 days after it was filed"), + "{markup}" + ); + assert!( + markup.contains(r#"action="/admin/reports/1800000000000000001/legal-hold""#), + "{markup}" + ); + assert!( + markup.contains(r#"type="date" id="legal_hold_until" name="legal_hold_until""#), + "{markup}" + ); + assert!(markup.contains(r#"name="legal_hold_reason""#), "{markup}"); + assert!(markup.contains(r#"maxlength="512""#), "{markup}"); + assert!(markup.contains(">Place Hold<"), "{markup}"); + assert!(!markup.contains("Clear Hold"), "{markup}"); + + let held = report(json!({ + "legal_hold_until": "2099-01-31T23:59:59.999Z", + "legal_hold_reason": "Court order 42" + })); + let markup = legal_hold_card(&config, &resolver, &held, "csrf").into_string(); + assert!( + markup.contains(r#"data-report-legal-hold="active""#), + "{markup}" + ); + assert!(markup.contains("Held until: "), "{markup}"); + assert!(markup.contains("Jan 31, 2099, 11:59 PM UTC"), "{markup}"); + assert!(markup.contains("Court order 42"), "{markup}"); + assert!(markup.contains(">Update Hold<"), "{markup}"); + assert!(markup.contains(">Clear Hold<"), "{markup}"); + assert!(markup.contains(r#"name="clear" value="1""#), "{markup}"); + assert_eq!( + markup + .matches(r##"data-admin-refresh-on-success="#report-detail""##) + .count(), + 2, + "{markup}" + ); + + let markup = legal_hold_card(&config, &viewer, &held, "csrf").into_string(); + assert!(markup.contains("Court order 42"), "{markup}"); + assert!(!markup.contains("Place Hold<"), "{page}"); + + let lapsed = report(json!({ + "legal_hold_until": "2026-01-31T23:59:59.999Z", + "legal_hold_reason": "Court order 41" + })); + let markup = legal_hold_card(&config, &resolver, &lapsed, "csrf").into_string(); + assert!( + markup.contains(r#"data-report-legal-hold="ended""#), + "{markup}" + ); + assert!(markup.contains("Hold ended: "), "{markup}"); + assert!(!markup.contains("Held until"), "{markup}"); + assert!(markup.contains("Jan 31, 2026, 11:59 PM UTC"), "{markup}"); + assert!(markup.contains("is no longer held"), "{markup}"); + assert!(markup.contains(">Place Hold<"), "{markup}"); + assert!(!markup.contains(">Update Hold<"), "{markup}"); + assert!(markup.contains(">Clear Hold<"), "{markup}"); } } diff --git a/fluxer_admin/src/templates/pages/reports_list.rs b/fluxer_admin/src/templates/pages/reports_list.rs index 441ad850d..a16a2ea51 100644 --- a/fluxer_admin/src/templates/pages/reports_list.rs +++ b/fluxer_admin/src/templates/pages/reports_list.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later use crate::{ - api::types::{ReportEntry, SearchReportsResponse}, + api::types::{ReportEntry, ReportReasonEntry, SearchReportsResponse}, config::AdminConfig, middleware::auth::AuthContext, templates::{ @@ -11,11 +11,16 @@ use crate::{ form::{secondary_button_link, select_input, submit_button, text_input}, media::{guild_icon_url, initials, user_avatar_url}, page_container::page_header_with_actions, - table::{data_table, empty_state}, + report_category::{reason_repeats_category, report_category, report_category_options}, + report_webhook::{ + ReportedWebhook, reported_webhook, webhook_creator_badges, webhook_identity, + }, + table::{empty_state, table, table_body, table_container, table_head}, }, layout::admin_layout, + pages::user_detail_tabs::reports::tagged_user, }, - utils::user_tag::user_tag, + utils::{timestamps::format_admin_timestamp, user_tag::user_tag}, }; use maud::{Markup, PreEscaped, html}; @@ -24,8 +29,10 @@ pub struct ReportFilters<'a> { pub status: Option<&'a str>, pub report_type: Option<&'a str>, pub category: Option<&'a str>, + pub reason: Option<&'a str>, pub reporter_id: Option<&'a str>, pub reported_user_id: Option<&'a str>, + pub reported_webhook_id: Option<&'a str>, pub reported_guild_id: Option<&'a str>, pub reported_channel_id: Option<&'a str>, pub guild_context_id: Option<&'a str>, @@ -38,6 +45,7 @@ pub fn reports_list_page( auth: &AuthContext, result: Option<&SearchReportsResponse>, filters: &ReportFilters<'_>, + reasons: Option<&[ReportReasonEntry]>, page: u32, limit: u32, ) -> Markup { @@ -48,7 +56,7 @@ pub fn reports_list_page( None, report_count_summary(result), )) - (filters_card(config, filters, limit)) + (filters_card(config, filters, reasons, limit)) @if let Some(result) = result { @if result.reports.is_empty() { (empty_state("No reports found.")) @@ -72,14 +80,25 @@ fn report_count_summary(result: Option<&SearchReportsResponse>) -> Markup { html! { @if let Some(result) = result { p class="text-neutral-500 text-sm" { - "Found " (result.total) " results (showing " (result.reports.len()) ")" + "Found " (result.total) (if result.total == 1 { " result" } else { " results" }) + " (showing " (result.reports.len()) ")" } } } } -fn filters_card(config: &AdminConfig, filters: &ReportFilters<'_>, limit: u32) -> Markup { +fn filters_card( + config: &AdminConfig, + filters: &ReportFilters<'_>, + reasons: Option<&[ReportReasonEntry]>, + limit: u32, +) -> Markup { let limit_value = limit.to_string(); + let select_grid_class = if reasons.is_some() { + "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3" + } else { + "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5" + }; html! { div class="rounded-lg border border-neutral-200 bg-white p-6 transition-all" { form method="get" { @@ -90,7 +109,7 @@ fn filters_card(config: &AdminConfig, filters: &ReportFilters<'_>, limit: u32) - filters.query.unwrap_or(""), "Search by ID, reporter, category, or description...", )) - div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5" { + div class=(select_grid_class) { (select_input("status", "Status", &[ ("", "All"), ("0", "Pending"), @@ -102,7 +121,12 @@ fn filters_card(config: &AdminConfig, filters: &ReportFilters<'_>, limit: u32) - ("1", "User"), ("2", "Guild"), ], filters.report_type.unwrap_or(""))) - (select_input("category", "Category", report_category_options(), filters.category.unwrap_or(""))) + (select_input("category", "Category", &report_category_options(filters.category.unwrap_or("")), filters.category.unwrap_or(""))) + @if let Some(reasons) = reasons { + div class="sm:col-span-2 lg:col-span-2" { + (reason_select(reasons, filters.reason.unwrap_or(""))) + } + } (select_input("sort", "Sort", &[ ("reportedAt_desc", "Reported (newest first)"), ("reportedAt_asc", "Reported (oldest first)"), @@ -121,6 +145,7 @@ fn filters_card(config: &AdminConfig, filters: &ReportFilters<'_>, limit: u32) - div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3" { (text_input("reporter_id", "Reporter user ID", filters.reporter_id.unwrap_or(""), "Snowflake")) (text_input("reported_user_id", "Reported user ID", filters.reported_user_id.unwrap_or(""), "Snowflake")) + (text_input("reported_webhook_id", "Reported webhook ID", filters.reported_webhook_id.unwrap_or(""), "Snowflake")) (text_input("reported_guild_id", "Reported guild ID", filters.reported_guild_id.unwrap_or(""), "Snowflake")) (text_input("reported_channel_id", "Reported channel ID", filters.reported_channel_id.unwrap_or(""), "Snowflake")) (text_input("guild_context_id", "Guild context ID", filters.guild_context_id.unwrap_or(""), "Snowflake")) @@ -136,28 +161,29 @@ fn filters_card(config: &AdminConfig, filters: &ReportFilters<'_>, limit: u32) - } } -fn report_category_options() -> &'static [(&'static str, &'static str)] { - &[ - ("", "All"), - ("harassment", "Harassment or Bullying"), - ("hate_speech", "Hate Speech"), - ("spam", "Spam or Scam"), - ("illegal_activity", "Illegal Activity"), - ("impersonation", "Impersonation"), - ("child_safety", "Child Safety Concerns"), - ("other", "Other"), - ("violent_content", "Violent or Graphic Content"), - ("nsfw_violation", "NSFW Policy Violation"), - ("doxxing", "Sharing Personal Information"), - ("self_harm", "Self-Harm or Suicide"), - ("malicious_links", "Malicious Links"), - ("spam_account", "Spam Account"), - ("underage_user", "Underage User"), - ("inappropriate_profile", "Inappropriate Profile"), - ("raid_coordination", "Raid Coordination"), - ("malware_distribution", "Malware Distribution"), - ("extremist_community", "Extremist Community"), - ] +fn reason_select(reasons: &[ReportReasonEntry], selected: &str) -> Markup { + let labels = reasons + .iter() + .map(|reason| { + if reason.highest_priority { + format!("Priority: {}", reason.label) + } else { + reason.label.clone() + } + }) + .collect::>(); + let mut options = std::iter::once(("", "All")) + .chain( + reasons + .iter() + .zip(&labels) + .map(|(reason, label)| (reason.key.as_str(), label.as_str())), + ) + .collect::>(); + if !options.iter().any(|(key, _)| *key == selected) { + options.push((selected, selected)); + } + select_input("reason", "Reason", &options, selected) } fn format_status(status: i32) -> (&'static str, BadgeVariant) { @@ -177,36 +203,21 @@ fn format_report_type(report_type: i32) -> (&'static str, BadgeVariant) { } } -fn format_category(category: Option<&str>) -> String { - let Some(category) = category else { - return "\u{2014}".to_owned(); - }; - report_category_options() - .iter() - .find_map(|(value, label)| (*value == category).then_some((*label).to_owned())) - .unwrap_or_else(|| category.to_owned()) -} - -fn reporter_label(report: &ReportEntry) -> String { +fn reporter_label(report: &ReportEntry) -> Markup { if let Some(username) = &report.reporter_username { - let discriminator = report.reporter_discriminator.as_deref().unwrap_or("0000"); - let tag = user_tag(username, discriminator, false); - if let Some(display) = report - .reporter_global_name - .as_ref() - .filter(|v| !v.trim().is_empty()) - { - return format!("{display} ({tag})"); - } - return tag; + return tagged_user( + report.reporter_global_name.as_deref(), + username, + report.reporter_discriminator.as_deref(), + ); } - if let Some(tag) = &report.reporter_tag { - return tag.to_owned(); + html! { + (report + .reporter_tag + .as_deref() + .or(report.reporter_email.as_deref()) + .unwrap_or("Anonymous")) } - if let Some(email) = &report.reporter_email { - return email.to_owned(); - } - "Anonymous".to_owned() } fn reported_user_label(report: &ReportEntry) -> String { @@ -277,14 +288,30 @@ fn reported_cell(config: &AdminConfig, report: &ReportEntry) -> Markup { } } +fn reported_user_name(report: &ReportEntry) -> Markup { + match &report.reported_user_username { + Some(username) => tagged_user( + report.reported_user_global_name.as_deref(), + username, + report.reported_user_discriminator.as_deref(), + ), + None => html! { (reported_user_label(report)) }, + } +} + fn reported_user_cell(config: &AdminConfig, report: &ReportEntry) -> Markup { let base = &config.base_path; let primary = reported_user_label(report); html! { @if let Some(id) = &report.reported_user_id { - a href={(base) "/users/" (id)} class="flex items-center gap-2 text-blue-600 hover:underline" { - (reported_user_avatar(config, report, id, &primary)) - span class="font-medium text-sm" { (primary) } + div class="flex flex-wrap items-center gap-2" { + a href={(base) "/users/" (id)} class="flex items-center gap-2 text-blue-600 hover:underline" { + (reported_user_avatar(config, report, id, &primary)) + span class="font-medium text-sm" { (reported_user_name(report)) } + } + @if report.reported_user_bot == Some(true) { + span class="inline-flex" data-report-user-bot=(id) { (badge("Bot", BadgeVariant::Info)) } + } } } @else { span class="text-neutral-900 text-sm" { (primary) } @@ -328,7 +355,7 @@ fn reported_guild_icon( true, ) { Some(url) => html! { - img src=(url) alt="" class="h-8 w-8 flex-shrink-0 rounded-full object-cover"; + img src=(url) alt="" class="h-8 w-8 max-w-none flex-shrink-0 rounded-full object-cover"; }, None => html! { span class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-neutral-200 text-neutral-600 text-xs" { @@ -340,26 +367,28 @@ fn reported_guild_icon( fn reported_message_cell(config: &AdminConfig, report: &ReportEntry) -> Markup { let base = &config.base_path; - let user_label = reported_user_label(report); let channel_label = report .reported_channel_name .as_deref() .or(report.reported_channel_id.as_deref()) .unwrap_or("Unknown channel"); + let channel_prefix = + if report.reported_guild_id.is_none() && report.reported_channel_id.is_some() { + "DM channel: " + } else { + "Channel: " + }; html! { div class="flex flex-col gap-1" { - @if let Some(id) = &report.reported_user_id { - a href={(base) "/users/" (id)} class="flex items-center gap-2 text-blue-600 hover:underline" { - (reported_user_avatar(config, report, id, &user_label)) - span class="font-medium text-sm" { (user_label) } - } + @if let Some(webhook) = reported_webhook(config, report) { + (reported_webhook_author(&webhook)) } @else { - span class="text-neutral-900 text-sm" { (user_label) } + (reported_user_cell(config, report)) } @if let Some(channel_id) = &report.reported_channel_id { a href=(message_lookup_href(base, channel_id, report.reported_message_id.as_deref())) class="text-blue-600 text-xs hover:underline" { - "Channel: " (channel_label) + (channel_prefix) (channel_label) } } @else { span class="text-neutral-500 text-xs" { "Channel: " (channel_label) } @@ -371,6 +400,27 @@ fn reported_message_cell(config: &AdminConfig, report: &ReportEntry) -> Markup { } } +fn reported_webhook_author(webhook: &ReportedWebhook<'_>) -> Markup { + html! { + div class="flex flex-col items-start gap-0.5" { + (webhook_identity(webhook)) + a href=(webhook.reports_href) title="Reports about this webhook" + class="font-mono text-blue-600 text-xs hover:underline" { + "Webhook ID: " (webhook.id) + } + @if let Some(ref creator) = webhook.creator { + a href=(creator.href) title=(creator.id) data-report-webhook-creator=(creator.id) + class="text-blue-600 text-xs hover:underline" { + "Webhook creator: " (creator.label) + } + @if creator.bot || creator.account_deleted { + span class="inline-flex flex-wrap items-center gap-1" { (webhook_creator_badges(creator)) } + } + } + } + } +} + fn reported_user_avatar( config: &AdminConfig, report: &ReportEntry, @@ -385,7 +435,7 @@ fn reported_user_avatar( true, ); html! { - img src=(url) alt=(format!("{label}'s avatar")) class="h-8 w-8 rounded-full object-cover"; + img src=(url) alt=(format!("{label}'s avatar")) class="h-8 w-8 max-w-none rounded-full object-cover"; } } @@ -402,31 +452,53 @@ fn render_reports_table(config: &AdminConfig, reports: &[ReportEntry]) -> Markup let rows = html! { @for report in reports { tr class="hover:bg-neutral-50 transition-colors" { - td class="whitespace-nowrap px-4 py-3 text-neutral-600 text-sm" { - (report.reported_at) + td class="whitespace-nowrap px-3 py-3 text-neutral-600 text-sm" { + (format_admin_timestamp(&report.reported_at)) } - td class="px-4 py-3 text-sm" { + td class="px-3 py-3 text-sm" { div class="flex flex-col items-start gap-1" { @let (type_label, type_variant) = format_report_type(report.report_type); (badge(type_label, type_variant)) - span class="text-neutral-600 text-xs" { - (format_category(report.category.as_deref())) + @let reason_label = report.reason.as_deref().map(|reason| report.reason_label.as_deref().unwrap_or(reason)); + @let repeats = report.category.as_deref().zip(reason_label).is_some_and(|(category, label)| reason_repeats_category(category, label)); + @let priority = report.reason_highest_priority == Some(true); + @let category_class = if repeats && priority { + "font-medium text-red-700 text-xs" + } else { + "text-neutral-600 text-xs" + }; + span class=(category_class) data-report-reason=[report.reason.as_deref().filter(|_| repeats)] { + @if let Some(category) = &report.category { + (report_category(category)) + } @else { + "\u{2014}" + } + } + @if !repeats && let (Some(reason), Some(label)) = (&report.reason, reason_label) { + @let reason_class = if priority { + "font-medium text-red-700 text-xs" + } else { + "text-neutral-500 text-xs" + }; + span class=(reason_class) data-report-reason=(reason) { + (label) + } } } } - td class="px-4 py-3 text-sm" { + td class="px-3 py-3 text-sm" { (reporter_cell(config, report)) } - td class="px-4 py-3 text-sm" { + td class="px-3 py-3 text-sm" { (reported_cell(config, report)) } - td class="whitespace-nowrap px-4 py-3 text-sm" { + td class="whitespace-nowrap px-3 py-3 text-sm" { @let (label, variant) = format_status(report.status); span data-status-pill=(report.report_id) { (badge(label, variant)) } } - td class="whitespace-nowrap px-4 py-3 text-sm" { + td class="whitespace-nowrap px-3 py-3 text-sm" { div class="flex flex-col items-start gap-1" { button type="button" data-drawer-open="report-peek" @@ -455,7 +527,18 @@ fn render_reports_table(config: &AdminConfig, reports: &[ReportEntry]) -> Markup }; html! { div data-report-table="true" { - (data_table(headers, rows)) + (table_container(table(html! { + (table_head(html! { + tr { + @for header in headers { + th class="whitespace-nowrap px-3 py-3 text-left text-neutral-600 text-xs uppercase tracking-wider" { + (header) + } + } + } + })) + (table_body(rows)) + }))) } } } @@ -508,8 +591,14 @@ fn reports_url(config: &AdminConfig, filters: &ReportFilters<'_>, page: u32, lim push_param(&mut params, "status", filters.status); push_param(&mut params, "type", filters.report_type); push_param(&mut params, "category", filters.category); + push_param(&mut params, "reason", filters.reason); push_param(&mut params, "reporter_id", filters.reporter_id); push_param(&mut params, "reported_user_id", filters.reported_user_id); + push_param( + &mut params, + "reported_webhook_id", + filters.reported_webhook_id, + ); push_param(&mut params, "reported_guild_id", filters.reported_guild_id); push_param( &mut params, diff --git a/fluxer_admin/src/templates/pages/user_detail_tabs/reports.rs b/fluxer_admin/src/templates/pages/user_detail_tabs/reports.rs index 5c0f3e688..6cb0eb9b9 100644 --- a/fluxer_admin/src/templates/pages/user_detail_tabs/reports.rs +++ b/fluxer_admin/src/templates/pages/user_detail_tabs/reports.rs @@ -6,9 +6,11 @@ use crate::{ templates::components::{ media::{guild_icon_url, initials, user_avatar_url}, page_container::card_with_header, + report_category::{reason_repeats_category, report_category}, + report_webhook::{reported_webhook, webhook_identity}, table::data_table, }, - utils::user_tag::user_tag, + utils::{timestamps::format_admin_timestamp, user_tag::user_tag}, }; use maud::{Markup, html}; @@ -102,11 +104,9 @@ fn report_section( p class="text-sm text-neutral-500" { (empty_msg) } } @else { @let headers = if kind == "sent" { - vec!["Reported At", "Report ID", "Type", "Category", - "Reported Entity", "Status", "Actions"] + vec!["Reported At", "Type / Category", "Reported Entity", "Status"] } else { - vec!["Reported At", "Report ID", "Type", "Category", - "Reporter", "Status", "Actions"] + vec!["Reported At", "Type / Category", "Reporter", "Status"] }; (data_table( &headers, @@ -152,7 +152,7 @@ fn format_report_type(report_type: i32) -> &'static str { } } -fn format_status(status: i32) -> &'static str { +pub(crate) fn format_status(status: i32) -> &'static str { match status { 0 => "Pending", 1 => "Resolved", @@ -160,36 +160,86 @@ fn format_status(status: i32) -> &'static str { } } -fn format_reporter(report: &ReportEntry) -> String { - if let Some(ref username) = report.reporter_username { - let disc = report.reporter_discriminator.as_deref().unwrap_or("0000"); - let tag = user_tag(username, disc, false); - if let Some(ref gn) = report.reporter_global_name { - let trimmed = gn.trim(); - if !trimmed.is_empty() { - return format!("{trimmed} ({tag})"); - } +pub(crate) fn tagged_user( + global_name: Option<&str>, + username: &str, + discriminator: Option<&str>, +) -> Markup { + let tag = user_tag(username, discriminator.unwrap_or("0000"), false); + html! { + @if let Some(name) = global_name.map(str::trim).filter(|name| !name.is_empty()) { + (name) " " + span class="whitespace-nowrap text-neutral-500 text-xs" { "(" (tag) ")" } + } @else { + span class="whitespace-nowrap" { (tag) } } - return tag; + } +} + +pub(crate) fn reporter_label(report: &ReportEntry) -> Markup { + if let Some(ref username) = report.reporter_username { + return tagged_user( + report.reporter_global_name.as_deref(), + username, + report.reporter_discriminator.as_deref(), + ); } if let Some(ref tag) = report.reporter_tag { - return tag.clone(); + return html! { span class="whitespace-nowrap" { (tag) } }; } - if let Some(ref email) = report.reporter_email { - return email.clone(); + html! { + (report + .reporter_email + .as_deref() + .or(report.reporter_id.as_deref()) + .unwrap_or("Unknown reporter")) } - report - .reporter_id +} + +pub(crate) fn reported_at_cell(base: &str, report: &ReportEntry) -> Markup { + html! { + td class="px-3 py-3 text-sm text-neutral-900" { + div { (format_admin_timestamp(&report.reported_at)) } + a href={(base) "/reports/" (report.report_id)} + class="whitespace-nowrap font-mono text-blue-600 text-xs tracking-tight hover:underline" { + (report.report_id) + } + } + } +} + +pub(crate) fn type_and_category_cell(report: &ReportEntry) -> Markup { + let reason_label = report + .reason .as_deref() - .unwrap_or("Unknown reporter") - .to_string() + .map(|reason| report.reason_label.as_deref().unwrap_or(reason)); + let repeats = report + .category + .as_deref() + .zip(reason_label) + .is_some_and(|(category, label)| reason_repeats_category(category, label)); + html! { + td class="px-4 py-3 text-sm text-neutral-900" { + div class="text-neutral-500 text-xs" { (format_report_type(report.report_type)) } + @if let Some(category) = &report.category { + div class="break-words" data-report-reason=[report.reason.as_deref().filter(|_| repeats)] { + (report_category(category)) + } + } + @if !repeats && let (Some(reason), Some(label)) = (&report.reason, reason_label) { + div class="break-words text-neutral-500 text-xs" data-report-reason=(reason) { + (label) + } + } + } + } } fn report_row(config: &AdminConfig, base: &str, kind: &str, report: &ReportEntry) -> Markup { - let entity_display = if kind == "sent" { - format_reported_entity(report) + let webhook = if kind == "sent" { + reported_webhook(config, report) } else { - format_reporter(report) + None }; let entity_href = if kind == "sent" { @@ -210,31 +260,28 @@ fn report_row(config: &AdminConfig, base: &str, kind: &str, report: &ReportEntry .map(|id| format!("{base}/users/{id}")) }; + let entity_display = if kind == "sent" { + format_reported_entity(report) + } else { + reporter_label(report) + }; + html! { tr class="hover:bg-neutral-50 transition-colors" { - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (report.reported_at) - } - td class="whitespace-nowrap px-4 py-3 text-sm" { - a href={(base) "/reports/" (report.report_id)} - class="hover:underline" { - (report.report_id) - } - } - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (format_report_type(report.report_type)) - } - td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { - (report.category.as_deref().unwrap_or("")) - } - td class="whitespace-nowrap px-4 py-3 text-sm" { - @if let Some(href) = entity_href { + (reported_at_cell(base, report)) + (type_and_category_cell(report)) + td class="px-4 py-3 text-sm [overflow-wrap:anywhere]" { + @if let Some(webhook) = &webhook { + a href=(webhook.reports_href) class="hover:underline" { + (webhook_identity(webhook)) + } + } @else if let Some(href) = entity_href { a href=(href) class="inline-flex items-center gap-2 hover:underline" { @if kind == "sent" { - (reported_entity_icon(config, report, &entity_display)) + (reported_entity_icon(config, report)) } - span { (entity_display) } + span class="min-w-0" { (entity_display) } } } @else { span { (entity_display) } @@ -243,48 +290,32 @@ fn report_row(config: &AdminConfig, base: &str, kind: &str, report: &ReportEntry td class="whitespace-nowrap px-4 py-3 text-sm text-neutral-900" { (format_status(report.status)) } - td class="whitespace-nowrap px-4 py-3 text-sm" { - a href={(base) "/reports/" (report.report_id)} - class="inline-flex items-center rounded-md border \ - border-neutral-300 bg-white px-3 py-1.5 text-sm \ - font-medium text-neutral-700 hover:bg-neutral-50" { - "View" - } - } } } } -fn format_reported_entity(report: &ReportEntry) -> String { +fn format_reported_entity(report: &ReportEntry) -> Markup { if let Some(ref username) = report.reported_user_username { - let disc = report - .reported_user_discriminator - .as_deref() - .unwrap_or("0000"); - let tag = user_tag(username, disc, false); - if let Some(ref gn) = report.reported_user_global_name { - let trimmed = gn.trim(); - if !trimmed.is_empty() { - return format!("{trimmed} ({tag})"); - } - } - return tag; + return tagged_user( + report.reported_user_global_name.as_deref(), + username, + report.reported_user_discriminator.as_deref(), + ); } if let Some(ref tag) = report.reported_user_tag { - return tag.clone(); + return html! { span class="whitespace-nowrap" { (tag) } }; } - if let Some(ref id) = report.reported_user_id { - return id.clone(); + html! { + (report + .reported_user_id + .as_ref() + .or(report.reported_guild_name.as_ref()) + .or(report.reported_guild_id.as_ref()) + .map_or("Unknown", String::as_str)) } - report - .reported_guild_name - .as_ref() - .or(report.reported_guild_id.as_ref()) - .cloned() - .unwrap_or_else(|| "Unknown".to_owned()) } -fn reported_entity_icon(config: &AdminConfig, report: &ReportEntry, label: &str) -> Markup { +fn reported_entity_icon(config: &AdminConfig, report: &ReportEntry) -> Markup { if let Some(ref user_id) = report.reported_user_id { return html! { img @@ -307,9 +338,161 @@ fn reported_entity_icon(config: &AdminConfig, report: &ReportEntry, label: &str) } return html! { span class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-neutral-200 text-neutral-600 text-xs" { - (initials(label)) + (initials(report.reported_guild_name.as_deref().unwrap_or(guild_id))) } }; } html! {} } + +#[cfg(test)] +mod tests { + use super::*; + use crate::config::{ProxyConfig, RuntimeEnv}; + use serde_json::json; + + fn test_config() -> AdminConfig { + AdminConfig { + env: RuntimeEnv::Test, + host: String::new(), + port: 0, + secret_key_base: "test-secret".to_owned(), + base_path: "/admin".to_owned(), + api_endpoint: String::new(), + media_endpoint: "https://media.example.test".to_owned(), + static_cdn_endpoint: String::new(), + admin_endpoint: String::new(), + web_app_endpoint: String::new(), + oauth_client_id: String::new(), + oauth_client_secret: String::new(), + oauth_redirect_uri: String::new(), + build_version: "test".to_owned(), + self_hosted: false, + proxy: ProxyConfig { + trust_client_ip_header: false, + client_ip_header_name: String::new(), + }, + } + } + + #[test] + fn sent_webhook_reports_name_the_webhook_instead_of_the_guild() { + let report: ReportEntry = serde_json::from_value(json!({ + "report_id": "1800000000000000004", + "reporter_id": "1500000000000000000", + "reported_at": "2026-10-04T10:00:00.000Z", + "status": 0, + "report_type": 0, + "category": "spam", + "reported_user_id": null, + "reported_webhook_id": "1700000000000000500", + "reported_webhook_name": "Harbor Bulletin", + "reported_guild_id": "1700000000000000800", + "reported_guild_name": "Harbor" + })) + .expect("valid report"); + let config = test_config(); + let sent = report_row(&config, "/admin", "sent", &report).into_string(); + assert!( + sent.contains(r#"href="/admin/reports?reported_webhook_id=1700000000000000500""#), + "{sent}" + ); + assert!( + sent.contains(r#"data-report-webhook="1700000000000000500""#), + "{sent}" + ); + assert!(sent.contains("Harbor Bulletin"), "{sent}"); + assert!(!sent.contains("/admin/guilds/"), "{sent}"); + let received = report_row(&config, "/admin", "received", &report).into_string(); + assert!(!received.contains("data-report-webhook"), "{received}"); + assert!( + received.contains(r#"href="/admin/users/1500000000000000000""#), + "{received}" + ); + } + + #[test] + fn report_rows_label_the_category_and_keep_the_key() { + let config = test_config(); + let report: ReportEntry = serde_json::from_value(json!({ + "report_id": "1800000000000000005", + "reporter_id": "1500000000000000000", + "reported_at": "2026-10-04T10:00:00.000Z", + "status": 0, + "report_type": 1, + "category": "inappropriate_profile", + "reported_user_id": "1500000000000000001", + "reason": "harassment", + "reason_label": "Harassment or bullying" + })) + .expect("valid report"); + for kind in ["sent", "received"] { + let markup = report_row(&config, "/admin", kind, &report).into_string(); + assert!( + markup.contains(r#"data-report-category="inappropriate_profile""#), + "{markup}" + ); + assert!(markup.contains(">Inappropriate profile<"), "{markup}"); + assert!(!markup.contains(">inappropriate_profile<"), "{markup}"); + assert!( + markup.contains(r#"data-report-reason="harassment""#), + "{markup}" + ); + assert!(markup.contains("Oct 4, 2026, 10:00 AM UTC"), "{markup}"); + assert!(!markup.contains("2026-10-04T10:00:00.000Z"), "{markup}"); + assert_eq!( + markup + .matches(r#"href="/admin/reports/1800000000000000005""#) + .count(), + 1, + "{markup}" + ); + assert!(!markup.contains(">View<"), "{markup}"); + } + let mut unknown = report.clone(); + unknown.category = Some("future_value".to_owned()); + let markup = report_row(&config, "/admin", "sent", &unknown).into_string(); + assert!(markup.contains(">future_value<"), "{markup}"); + } + + #[test] + fn report_rows_skip_a_reason_that_repeats_the_category() { + let config = test_config(); + let report: ReportEntry = serde_json::from_value(json!({ + "report_id": "1800000000000000007", + "reporter_id": "1500000000000000000", + "reporter_username": "reporter_0423a7212d56", + "reporter_discriminator": "8650", + "reporter_global_name": "Avery Reporter", + "reported_at": "2026-10-04T10:00:00.000Z", + "status": 0, + "report_type": 0, + "category": "harassment", + "reported_user_id": "1500000000000000001", + "reason": "harassment", + "reason_label": "Harassment or bullying" + })) + .expect("valid report"); + let markup = report_row(&config, "/admin", "received", &report).into_string(); + assert_eq!( + markup.matches("Harassment or bullying").count(), + 1, + "{markup}" + ); + assert_eq!( + markup.matches(r#"data-report-reason="harassment""#).count(), + 1, + "{markup}" + ); + assert!( + markup.contains(r#"data-report-category="harassment""#), + "{markup}" + ); + assert!(markup.contains(">Message<"), "{markup}"); + assert!( + markup.contains(r#"Avery Reporter (reporter_0423a7212d56#8650)"#), + "{markup}" + ); + assert!(markup.contains(">Pending<"), "{markup}"); + } +} diff --git a/fluxer_admin/tests/api_deserialization.rs b/fluxer_admin/tests/api_deserialization.rs index 78161bc74..8ca8bba7a 100644 --- a/fluxer_admin/tests/api_deserialization.rs +++ b/fluxer_admin/tests/api_deserialization.rs @@ -752,6 +752,631 @@ fn deserialize_search_reports_response() { assert!(resp.reports[0].reported_guild_icon_hash.is_none()); } +fn report_json(extra: serde_json::Value) -> serde_json::Value { + let mut report = serde_json::json!({ + "report_id": "1556008115701286089", + "reporter_id": "1556008115617399989", + "reporter_tag": "reporter#0896", + "reporter_username": "reporter", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "0896", + "reporter_email": null, + "reporter_full_legal_name": null, + "reporter_country_of_residence": "FR", + "reported_at": "2026-10-03T18:30:33.848Z", + "status": 0, + "report_type": 0, + "category": "child_safety", + "additional_info": null, + "reported_user_id": "1556008115625788599", + "reported_user_tag": "target#6741", + "reported_user_username": "target", + "reported_user_global_name": "Jordan Target", + "reported_user_discriminator": "6741", + "reported_user_avatar_hash": null, + "reported_guild_id": null, + "reported_guild_name": null, + "reported_guild_icon_hash": null, + "reported_message_id": "1556008115697091784", + "reported_channel_id": "1556008115692897479", + "reported_channel_name": null, + "reported_guild_invite_code": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null + }); + for (key, value) in extra.as_object().expect("object").clone() { + report[key] = value; + } + report +} + +fn v2_dsa_report_json() -> serde_json::Value { + report_json(serde_json::json!({ + "reason": "csam", + "reason_label": "Child sexual abuse material", + "reason_highest_priority": true, + "reporter_good_faith_confirmed": true, + "flow": { + "revision_hash": "b7667e8b32c98c40", + "surface": "dsa", + "locale": "fr", + "steps": [ + {"screen_id": "root_message", "screen_title": "Report message", "option_id": "abuse", "option_label": "Abusive or harmful content", "items": []}, + {"screen_id": "abuse", "screen_title": "What does it involve?", "option_id": "sexual", "option_label": "Sexual content", "items": []}, + {"screen_id": "private_info", "screen_title": "What private information is shared?", "option_id": null, "option_label": null, "items": [{"id": "email", "label": "Email address"}, {"id": "phone", "label": "Phone number"}]}, + {"screen_id": "profile_intro", "screen_title": "Report profile", "option_id": null, "option_label": null, "items": []} + ] + } + })) +} + +fn decode_report_both_ways(json: serde_json::Value) -> types::ReportEntry { + let generated: generated_types::ReportAdminResponseSchema = + serde_json::from_value(json.clone()).expect("generated report type"); + let via_generated: types::ReportEntry = + serde_json::from_value(serde_json::to_value(generated).expect("serialize generated")) + .expect("hand-written report type from generated"); + let direct: types::ReportEntry = + serde_json::from_value(json).expect("hand-written report type"); + assert_eq!( + serde_json::to_value(&via_generated).unwrap(), + serde_json::to_value(&direct).unwrap() + ); + direct +} + +#[test] +fn deserialize_v2_report_with_reason_and_answers() { + let report = decode_report_both_ways(v2_dsa_report_json()); + assert_eq!(report.reason.as_deref(), Some("csam")); + assert_eq!( + report.reason_label.as_deref(), + Some("Child sexual abuse material") + ); + assert_eq!(report.reason_highest_priority, Some(true)); + assert_eq!(report.reporter_good_faith_confirmed, Some(true)); + let flow = report.flow.expect("flow answers"); + assert_eq!(flow.revision_hash, "b7667e8b32c98c40"); + assert_eq!(flow.surface, "dsa"); + assert_eq!(flow.locale.as_deref(), Some("fr")); + assert_eq!(flow.steps.len(), 4); + assert_eq!(flow.steps[0].option_id.as_deref(), Some("abuse")); + assert_eq!(flow.steps[2].option_id, None); + assert_eq!(flow.steps[2].items[1].label, "Phone number"); + assert_eq!(flow.steps[3].option_label, None); + assert!(flow.steps[3].items.is_empty()); +} + +#[test] +fn deserialize_legacy_report_without_reason_fields() { + let nulls = report_json(serde_json::json!({ + "reason": null, + "reason_label": null, + "reason_highest_priority": null, + "flow": null, + "reporter_good_faith_confirmed": null + })); + for json in [report_json(serde_json::json!({})), nulls] { + let report = decode_report_both_ways(json); + assert!(report.reason.is_none()); + assert!(report.reason_label.is_none()); + assert!(report.reason_highest_priority.is_none()); + assert!(report.flow.is_none()); + assert!(report.reporter_good_faith_confirmed.is_none()); + } +} + +#[test] +fn deserialize_report_with_unknown_reason_and_ids() { + let report = decode_report_both_ways(report_json(serde_json::json!({ + "reason": "future_reason", + "reason_label": "future_reason", + "reason_highest_priority": null, + "flow": { + "revision_hash": "0000000000000000", + "surface": "future_surface", + "locale": null, + "steps": [ + {"screen_id": "future_screen", "screen_title": "future_screen", "option_id": "future_option", "option_label": "future_option", "items": [{"id": "future_item", "label": "future_item"}]} + ] + } + }))); + assert_eq!(report.reason.as_deref(), Some("future_reason")); + assert_eq!(report.reason_label.as_deref(), Some("future_reason")); + assert_eq!(report.reason_highest_priority, None); + let flow = report.flow.expect("flow answers"); + assert_eq!(flow.surface, "future_surface"); + assert_eq!(flow.locale, None); + assert_eq!(flow.steps[0].items[0].id, "future_item"); +} + +#[test] +fn deserialize_report_with_unknown_status_and_type() { + let report = decode_report_both_ways(report_json(serde_json::json!({ + "status": 7, + "report_type": 9 + }))); + assert_eq!(report.status, 7); + assert_eq!(report.report_type, 9); + let generated: generated_types::ReportAdminResponseSchema = serde_json::from_value( + report_json(serde_json::json!({"status": 7, "report_type": 9})), + ) + .expect("generated report type"); + assert_eq!(*generated.status, 7); + assert_eq!(*generated.report_type, 9); +} + +#[test] +fn deserialize_resolve_report_response_with_unknown_status() { + let json = serde_json::json!({ + "report_id": "1556008115701286089", + "status": 7, + "resolved_at": "2026-10-03T18:40:00.000Z", + "public_comment": null + }); + let generated: generated_types::ResolveReportResponse = + serde_json::from_value(json.clone()).expect("generated resolve response"); + assert_eq!(*generated.status, 7); + let via_generated: types::ResolveReportResponse = + serde_json::from_value(serde_json::to_value(generated).expect("serialize generated")) + .expect("hand-written resolve response from generated"); + let direct: types::ResolveReportResponse = + serde_json::from_value(json).expect("hand-written resolve response"); + assert_eq!(via_generated.status, 7); + assert_eq!(direct.status, 7); + assert_eq!(direct.report_id, "1556008115701286089"); +} + +#[test] +fn deserialize_webhook_message_report() { + let json = report_json(serde_json::json!({ + "category": "spam", + "reported_user_id": null, + "reported_user_tag": null, + "reported_user_username": null, + "reported_user_global_name": null, + "reported_user_discriminator": null, + "reported_webhook_id": "1556008115710000001", + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_avatar_hash": "a_1f2e3d", + "reported_guild_id": "1556008115710000002", + "reported_guild_name": "Harbor", + "message_context": [ + { + "id": "1556008115697091784", + "channel_id": "1556008115692897479", + "channel_nsfw": false, + "guild_id": "1556008115710000002", + "guild_nsfw_level": 0, + "content": "Free stuff here", + "timestamp": "2026-10-04T10:00:00.000Z", + "attachments": [], + "author_id": "1556008115710000001", + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": "a_1f2e3d", + "webhook_id": "1556008115710000001", + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556008115697091780", + "channel_id": "1556008115692897479", + "channel_nsfw": false, + "guild_id": "1556008115710000002", + "guild_nsfw_level": 0, + "content": "hello", + "timestamp": "2026-10-04T09:59:00.000Z", + "attachments": [], + "author_id": "1556008115625788599", + "author_username": "target", + "author_global_name": null, + "author_discriminator": "6741", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + } + ] + })); + let mut json = json; + let webhook_details = serde_json::json!({ + "reported_webhook_default_name": "Harbor Hook", + "reported_webhook_default_avatar_hash": "b_4c5d6e", + "reported_webhook_type": 1, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": "1556008115692897479", + "reported_webhook_guild_id": "1556008115710000002", + "reported_webhook_created_at": "2026-10-04T09:00:00.000Z", + "reported_webhook_creator_id": "1556008115625788600", + "reported_webhook_creator_tag": "keeper#0042", + "reported_webhook_creator_username": "keeper", + "reported_webhook_creator_global_name": "Harbor Keeper", + "reported_webhook_creator_discriminator": "0042", + "reported_webhook_creator_avatar_hash": "c_7f8a9b", + }); + for (key, value) in webhook_details.as_object().expect("object") { + json[key] = value.clone(); + } + let generated: generated_types::ReportAdminResponseSchema = + serde_json::from_value(json.clone()).expect("generated report type"); + let via_generated: types::ReportEntry = + serde_json::from_value(serde_json::to_value(generated).expect("serialize generated")) + .expect("hand-written report type from generated"); + let direct: types::ReportEntry = + serde_json::from_value(json).expect("hand-written report type"); + for report in [&via_generated, &direct] { + assert!(report.reported_user_id.is_none()); + assert_eq!( + report.reported_webhook_id.as_deref(), + Some("1556008115710000001") + ); + assert_eq!( + report.reported_webhook_name.as_deref(), + Some("Harbor Bulletin") + ); + assert_eq!( + report.reported_webhook_avatar_hash.as_deref(), + Some("a_1f2e3d") + ); + assert_eq!( + report.reported_webhook_default_name.as_deref(), + Some("Harbor Hook") + ); + assert_eq!( + report.reported_webhook_creator_id.as_deref(), + Some("1556008115625788600") + ); + assert_eq!( + report.reported_webhook_creator_tag.as_deref(), + Some("keeper#0042") + ); + assert_eq!( + report.reported_webhook_creator_username.as_deref(), + Some("keeper") + ); + assert_eq!( + report.reported_webhook_creator_global_name.as_deref(), + Some("Harbor Keeper") + ); + assert_eq!( + report.reported_webhook_creator_discriminator.as_deref(), + Some("0042") + ); + assert_eq!( + report.reported_webhook_creator_avatar_hash.as_deref(), + Some("c_7f8a9b") + ); + assert_eq!( + report.reported_webhook_default_avatar_hash.as_deref(), + Some("b_4c5d6e") + ); + assert_eq!(report.reported_webhook_type, Some(1)); + assert!(report.reported_webhook_application_id.is_none()); + assert_eq!( + report.reported_webhook_channel_id.as_deref(), + Some("1556008115692897479") + ); + assert_eq!( + report.reported_webhook_guild_id.as_deref(), + Some("1556008115710000002") + ); + assert_eq!( + report.reported_webhook_created_at.as_deref(), + Some("2026-10-04T09:00:00.000Z") + ); + let context = report.message_context.as_ref().expect("message context"); + assert_eq!(context[0]["webhook_id"], "1556008115710000001"); + assert_eq!(context[0]["author_id"], "1556008115710000001"); + assert!(context[1]["webhook_id"].is_null()); + } +} + +#[test] +fn deserialize_report_without_webhook_fields() { + let nulls = report_json(serde_json::json!({ + "reported_webhook_id": null, + "reported_webhook_name": null, + "reported_webhook_avatar_hash": null, + "reported_webhook_default_name": null, + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": null, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": null, + "reported_webhook_guild_id": null, + "reported_webhook_created_at": null, + "reported_webhook_creator_id": null, + "reported_webhook_creator_tag": null + })); + for json in [report_json(serde_json::json!({})), nulls] { + let report = decode_report_both_ways(json); + assert_eq!( + report.reported_user_id.as_deref(), + Some("1556008115625788599") + ); + assert!(report.reported_webhook_id.is_none()); + assert!(report.reported_webhook_name.is_none()); + assert!(report.reported_webhook_avatar_hash.is_none()); + assert!(report.reported_webhook_default_name.is_none()); + assert!(report.reported_webhook_creator_id.is_none()); + assert!(report.reported_webhook_creator_tag.is_none()); + assert!(report.reported_webhook_default_avatar_hash.is_none()); + assert!(report.reported_webhook_type.is_none()); + assert!(report.reported_webhook_application_id.is_none()); + assert!(report.reported_webhook_channel_id.is_none()); + assert!(report.reported_webhook_guild_id.is_none()); + assert!(report.reported_webhook_created_at.is_none()); + } +} + +fn snapshot_asset(hash: &str, url: Option<&str>) -> serde_json::Value { + serde_json::json!({"hash": hash, "url": url}) +} + +fn evidence_report_json() -> serde_json::Value { + report_json(serde_json::json!({ + "reported_user_bot": true, + "reported_profile_snapshot": { + "captured_at": "2026-10-04T10:00:00.000Z", + "user": { + "id": "1556008115625788599", + "username": "target", + "discriminator": "6741", + "global_name": "Jordan Target", + "bio": "Original bio", + "pronouns": null, + "avatar": snapshot_asset("avatar1", Some("https://reports.example.test/a?sig=1")), + "banner": snapshot_asset("banner1", None) + }, + "member": { + "guild_id": "1556008115710000002", + "nick": "Harbor Nick", + "bio": null, + "pronouns": null, + "joined_at": "2026-10-01T08:00:00.000Z", + "avatar": null, + "banner": null + }, + "guild": null + }, + "message_context": [ + { + "id": "1556008115697091784", + "channel_id": "1556008115692897479", + "channel_nsfw": false, + "guild_id": null, + "guild_nsfw_level": null, + "content": "", + "timestamp": "2026-10-04T10:00:00.000Z", + "attachments": [], + "author_id": "1556008115625788599", + "author_username": "target", + "author_global_name": null, + "author_discriminator": "6741", + "author_avatar": null, + "webhook_id": null, + "author_bot": true, + "missing_attachments": [{ + "id": "1556008115697091790", + "filename": "evidence.png", + "nsfw": null, + "content_type": "image/png", + "width": 640, + "height": 480, + "size": 4096 + }], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556008115697091780", + "channel_id": "1556008115692897479", + "channel_nsfw": false, + "guild_id": null, + "guild_nsfw_level": null, + "content": "hello", + "timestamp": "2026-10-04T09:59:00.000Z", + "attachments": [], + "author_id": "1556008115617399989", + "author_username": "reporter", + "author_global_name": null, + "author_discriminator": "0896", + "author_avatar": null, + "webhook_id": null, + "author_bot": false, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + } + ] + })) +} + +#[test] +fn deserialize_report_with_bot_flags_profile_snapshot_and_missing_attachments() { + let json = evidence_report_json(); + let generated: generated_types::ReportAdminResponseSchema = + serde_json::from_value(json.clone()).expect("generated report type"); + let via_generated: types::ReportEntry = + serde_json::from_value(serde_json::to_value(generated).expect("serialize generated")) + .expect("hand-written report type from generated"); + let direct: types::ReportEntry = + serde_json::from_value(json).expect("hand-written report type"); + for report in [&via_generated, &direct] { + assert_eq!(report.reported_user_bot, Some(true)); + let snapshot = report + .reported_profile_snapshot + .as_ref() + .expect("profile snapshot"); + assert_eq!( + snapshot.captured_at.as_deref(), + Some("2026-10-04T10:00:00.000Z") + ); + let user = snapshot.user.as_ref().expect("user snapshot"); + assert_eq!(user.id, "1556008115625788599"); + assert_eq!(user.bio.as_deref(), Some("Original bio")); + let avatar = user.avatar.as_ref().expect("avatar"); + assert_eq!(avatar.hash, "avatar1"); + assert_eq!( + avatar.url.as_deref(), + Some("https://reports.example.test/a?sig=1") + ); + let banner = user.banner.as_ref().expect("banner"); + assert_eq!(banner.hash, "banner1"); + assert!(banner.url.is_none()); + let member = snapshot.member.as_ref().expect("member snapshot"); + assert_eq!(member.nick.as_deref(), Some("Harbor Nick")); + assert!(snapshot.guild.is_none()); + let context = report.message_context.as_ref().expect("message context"); + assert_eq!(context[0]["author_bot"], true); + assert_eq!(context[1]["author_bot"], false); + let missing = context[0]["missing_attachments"] + .as_array() + .expect("missing attachments"); + assert_eq!(missing.len(), 1); + assert_eq!(missing[0]["filename"], "evidence.png"); + assert_eq!(missing[0]["size"], 4096); + assert!( + context[1]["missing_attachments"] + .as_array() + .is_none_or(Vec::is_empty) + ); + } +} + +#[test] +fn deserialize_report_without_bot_flags_snapshot_or_hold() { + let nulls = report_json(serde_json::json!({ + "reported_user_bot": null, + "reported_profile_snapshot": null, + "legal_hold_until": null, + "legal_hold_reason": null + })); + for json in [report_json(serde_json::json!({})), nulls] { + let report = decode_report_both_ways(json); + assert!(report.reported_user_bot.is_none()); + assert!(report.reported_profile_snapshot.is_none()); + assert!(report.legal_hold_until.is_none()); + assert!(report.legal_hold_reason.is_none()); + } +} + +#[test] +fn deserialize_report_legal_hold_fields_and_hold_response() { + let report = decode_report_both_ways(report_json(serde_json::json!({ + "legal_hold_until": "2027-01-31T23:59:59.999Z", + "legal_hold_reason": "Court order 42" + }))); + assert_eq!( + report.legal_hold_until.as_deref(), + Some("2027-01-31T23:59:59.999Z") + ); + assert_eq!(report.legal_hold_reason.as_deref(), Some("Court order 42")); + + for json in [ + serde_json::json!({ + "report_id": "1556008115701286089", + "legal_hold_until": "2027-01-31T23:59:59.999Z", + "legal_hold_reason": "Court order 42" + }), + serde_json::json!({ + "report_id": "1556008115701286089", + "legal_hold_until": null, + "legal_hold_reason": null + }), + ] { + let generated: generated_types::ReportLegalHoldResponse = + serde_json::from_value(json.clone()).expect("generated hold response"); + let via_generated: types::ReportLegalHoldResponse = + serde_json::from_value(serde_json::to_value(generated).expect("serialize generated")) + .expect("hand-written hold response from generated"); + let direct: types::ReportLegalHoldResponse = + serde_json::from_value(json.clone()).expect("hand-written hold response"); + assert_eq!( + serde_json::to_value(&via_generated).unwrap(), + serde_json::to_value(&direct).unwrap() + ); + assert_eq!(direct.report_id, "1556008115701286089"); + assert_eq!( + direct.legal_hold_until.as_deref(), + json["legal_hold_until"].as_str() + ); + } +} + +#[test] +fn deserialize_webhook_report_with_a_bot_creator_and_a_deleted_creator() { + let bot = decode_report_both_ways(report_json(serde_json::json!({ + "reported_user_id": null, + "reported_webhook_id": "1556008115710000001", + "reported_webhook_name": "Relay", + "reported_webhook_type": 2, + "reported_webhook_application_id": "1556008115625788601", + "reported_webhook_created_at": "2026-10-04T09:00:00.000Z", + "reported_webhook_creator_id": "1556008115625788601", + "reported_webhook_creator_tag": "relaybot#0000", + "reported_webhook_creator_username": "relaybot", + "reported_webhook_creator_discriminator": "0000" + }))); + assert_eq!(bot.reported_webhook_type, Some(2)); + assert_eq!( + bot.reported_webhook_application_id.as_deref(), + Some("1556008115625788601") + ); + assert_eq!( + bot.reported_webhook_application_id, + bot.reported_webhook_creator_id + ); + + let gone = decode_report_both_ways(report_json(serde_json::json!({ + "reported_user_id": null, + "reported_webhook_id": "1556008115710000001", + "reported_webhook_name": "Night Relay", + "reported_webhook_type": 1, + "reported_webhook_created_at": "2026-10-04T09:00:00.000Z", + "reported_webhook_creator_id": "1556008115625788602", + "reported_webhook_creator_tag": null, + "reported_webhook_creator_username": null, + "reported_webhook_creator_global_name": null, + "reported_webhook_creator_discriminator": null, + "reported_webhook_creator_avatar_hash": null + }))); + assert_eq!( + gone.reported_webhook_creator_id.as_deref(), + Some("1556008115625788602") + ); + assert!(gone.reported_webhook_creator_tag.is_none()); + assert!(gone.reported_webhook_creator_username.is_none()); + assert!(gone.reported_webhook_application_id.is_none()); +} + +#[test] +fn deserialize_report_reason_list() { + let json = r#"{ + "reasons": [ + {"key": "csam", "label": "Child sexual abuse material", "highest_priority": true, "legacy_category_message": "child_safety", "legacy_category_user": "child_safety", "legacy_category_guild": "child_safety"}, + {"key": "raid", "label": "Raid or brigading", "highest_priority": false, "legacy_category_message": "harassment", "legacy_category_user": "harassment", "legacy_category_guild": "raid_coordination"} + ] + }"#; + let generated: generated_types::AdminReportReasonsResponse = + serde_json::from_str(json).expect("generated reason list type"); + assert_eq!(generated.reasons.len(), 2); + let response: types::ReportReasonListResponse = + serde_json::from_str(json).expect("hand-written reason list type"); + assert_eq!(response.reasons[0].key, "csam"); + assert!(response.reasons[0].highest_priority); + assert_eq!( + response.reasons[1].legacy_category_guild.as_deref(), + Some("raid_coordination") + ); + + let lenient: types::ReportReasonListResponse = serde_json::from_str( + r#"{"reasons": [{"key": "future_reason", "label": "Future reason", "future_field": 1}], "future_field": []}"#, + ) + .expect("the reason list tolerates missing and unknown fields"); + assert_eq!(lenient.reasons[0].key, "future_reason"); + assert!(!lenient.reasons[0].highest_priority); + assert!(lenient.reasons[0].legacy_category_message.is_none()); +} + #[test] fn deserialize_lookup_guild_response() { let json = r#"{ diff --git a/fluxer_admin/tests/htmx_acceptance.rs b/fluxer_admin/tests/htmx_acceptance.rs index aa6f37ed9..311563156 100644 --- a/fluxer_admin/tests/htmx_acceptance.rs +++ b/fluxer_admin/tests/htmx_acceptance.rs @@ -7,6 +7,7 @@ use axum::{ body::{Body, to_bytes}, http::{HeaderMap, Method, Request, StatusCode, Uri, header}, response::{IntoResponse, Response}, + routing, }; use fluxer_admin::{ api::{generated::types as generated_types, types::LookupGuildResponse}, @@ -15,6 +16,10 @@ use fluxer_admin::{ session, }; use serde_json::{Value, json}; +use std::sync::{ + Arc, Mutex, + atomic::{AtomicUsize, Ordering}, +}; use tokio::net::TcpListener; use tower::ServiceExt; @@ -245,6 +250,645 @@ async fn report_routes_keep_layout_and_fragment_contract() { ); } +#[tokio::test] +async fn report_list_reason_select_is_rendered_and_wired() { + let app = setup().await; + let unfiltered = get(&app, "/reports", &[]).await; + assert!( + unfiltered.contains(r#"").unwrap(); + &body[start..end] +} + +fn pagination_href(body: &str, label: &str) -> String { + let end = body + .find(&format!("{label} &")) + .or_else(|| body.find(&format!("← {label}"))) + .unwrap_or_else(|| panic!("missing {label} link\n{body}")); + let start = body[..end] + .rfind("href=\"") + .unwrap_or_else(|| panic!("missing {label} href\n{body}")) + + "href=\"".len(); + let href = &body[start..]; + href[..href.find('"').unwrap()].replace("&", "&") +} + +async fn spawn_mock_api(api: Router) -> String { let listener = TcpListener::bind(("127.0.0.1", 0)).await.unwrap(); let addr = listener.local_addr().unwrap(); tokio::spawn(async move { - axum::serve(listener, Router::new().fallback(mock_api)) - .await - .unwrap(); + axum::serve(listener, api).await.unwrap(); }); format!("http://{addr}") } @@ -862,10 +1573,46 @@ async fn mock_api(method: Method, uri: Uri) -> Response { (Method::GET, "/admin/applications") => { json_response(json!({ "applications": [searched_application()] })) } + (Method::GET, "/admin/reports") + if query_value(&uri, "reason").as_deref() == Some("csam") => + { + json_response(json!({ + "reports": [flow_report()], + "total": 60, + "offset": 0, + "limit": 25 + })) + } + (Method::GET, "/admin/reports") + if query_value(&uri, "category").as_deref() == Some("future_value") => + { + json_response(json!({ + "reports": [future_category_report()], + "total": 60, + "offset": 0, + "limit": 25 + })) + } + (Method::GET, "/admin/reports") + if query_value(&uri, "reported_webhook_id").as_deref() == Some(WEBHOOK_ID) => + { + json_response(json!({ + "reports": [webhook_report()], + "total": 60, + "offset": 0, + "limit": 25 + })) + } (Method::GET, "/admin/reports") => json_response( json!({ "reports": [searched_report()], "total": 1, "offset": 0, "limit": 25 }), ), + (Method::GET, "/admin/report-reasons") => json_response(report_reasons()), (Method::GET, "/admin/reports/1800000000000000001") => json_response(searched_report()), + (Method::GET, "/admin/reports/1800000000000000003") => json_response(flow_report()), + (Method::GET, "/admin/reports/1800000000000000004") => json_response(webhook_report()), + (Method::GET, "/admin/reports/1800000000000000005") => { + json_response(future_status_report()) + } (Method::GET, "/admin/reports/1800000000000000002") => { json_response(searched_message_report()) } @@ -917,6 +1664,14 @@ async fn mock_api(method: Method, uri: Uri) -> Response { } } +fn query_value(uri: &Uri, name: &str) -> Option { + uri.query().and_then(|query| { + url::form_urlencoded::parse(query.as_bytes()) + .find(|(key, _)| key == name) + .map(|(_, value)| value.into_owned()) + }) +} + fn json_response(value: Value) -> Response { Json(value).into_response() } @@ -1109,6 +1864,224 @@ fn searched_report() -> Value { }) } +fn message_tools_api(acls: &[&str]) -> Router { + let mut admin = admin_user(); + admin["acls"] = json!(acls); + let message = json!({ + "id": "1800000000000001001", + "channel_id": "1600000000000000101", + "channel_name": "general", + "channel_nsfw": false, + "guild_id": "1600000000000000001", + "guild_name": "Guild", + "guild_nsfw_level": 0, + "author_id": "1500000000000000001", + "author_username": "SearchedUser", + "author_global_name": null, + "author_discriminator": "0001", + "author_avatar": null, + "content": "", + "timestamp": "2026-10-04T10:00:00.000Z", + "attachments": [{ + "id": "1800000000000001002", + "filename": "tools-image.png", + "url": "https://media.example.test/attachments/tools-image.png", + "nsfw": false, + "content_type": "image/png", + "width": 64, + "height": 64, + "size": 4096, + "ncmec_status": "not_submitted", + "ncmec_report_id": null, + "ncmec_failure_reason": null + }] + }); + let lookup = json!({"messages": [message.clone()], "message_id": "1800000000000001001"}); + let browse = json!({"messages": [message], "has_more": false}); + Router::new() + .route( + "/admin/users/@me", + routing::get(move || { + let admin = admin.clone(); + async move { json_response(json!({ "user": admin })) } + }), + ) + .route( + "/admin/channels/1600000000000000101/messages/1800000000000001001", + routing::get(move || { + let lookup = lookup.clone(); + async move { json_response(lookup) } + }), + ) + .route( + "/admin/channels/1600000000000000101/messages", + routing::get(move || { + let browse = browse.clone(); + async move { json_response(browse) } + }), + ) + .fallback(mock_api) +} + +fn future_category_report() -> Value { + let mut report = searched_report(); + report["report_id"] = json!("1800000000000000006"); + report["category"] = json!("future_value"); + report +} + +fn future_status_report() -> Value { + let mut report = searched_report(); + report["report_id"] = json!("1800000000000000005"); + report["status"] = json!(7); + report["report_type"] = json!(9); + report +} + +fn report_reasons() -> Value { + json!({ + "reasons": [ + { + "key": "csam", + "label": "Child sexual abuse material", + "highest_priority": true, + "legacy_category_message": "child_safety", + "legacy_category_user": "child_safety", + "legacy_category_guild": "child_safety" + }, + { + "key": "harassment", + "label": "Harassment or bullying", + "highest_priority": false, + "legacy_category_message": "harassment", + "legacy_category_user": "harassment", + "legacy_category_guild": "harassment" + } + ] + }) +} + +fn flow_report() -> Value { + json!({ + "report_id": "1800000000000000003", + "reporter_id": "1500000000000000000", + "reporter_tag": "AdminUser#0001", + "reported_at": "2026-05-26T12:00:00.000Z", + "status": 0, + "report_type": 0, + "category": "child_safety", + "additional_info": "Mock flow report details", + "reported_user_id": "1500000000000000001", + "reported_user_tag": "SearchedUser#0001", + "reported_message_id": "1800000000000001001", + "reported_channel_id": "1600000000000000101", + "reason": "csam", + "reason_label": "Child sexual abuse material", + "reason_highest_priority": true, + "reporter_good_faith_confirmed": true, + "flow": { + "revision_hash": "b7667e8b32c98c40", + "surface": "dsa", + "locale": "fr", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "abuse", + "option_label": "Abusive or harmful content", + "items": [] + }, + { + "screen_id": "private_info", + "screen_title": "What private information is shared?", + "option_id": null, + "option_label": null, + "items": [ + {"id": "email", "label": "Email address"}, + {"id": "phone", "label": "Phone number"} + ] + }, + { + "screen_id": "profile_intro", + "screen_title": "Report profile", + "option_id": null, + "option_label": null, + "items": [] + } + ] + } + }) +} + +const WEBHOOK_ID: &str = "1700000000000000500"; + +fn webhook_report() -> Value { + json!({ + "report_id": "1800000000000000004", + "reporter_id": "1500000000000000000", + "reporter_tag": "AdminUser#0001", + "reported_at": "2026-05-26T12:00:00.000Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": null, + "reported_user_tag": null, + "reported_webhook_id": WEBHOOK_ID, + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_avatar_hash": "abc123", + "reported_webhook_default_name": "Harbor Hook", + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": 1, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": "1600000000000000101", + "reported_webhook_guild_id": "1600000000000000001", + "reported_webhook_created_at": "2026-05-20T08:30:00.000Z", + "reported_webhook_creator_id": "1500000000000000002", + "reported_webhook_creator_tag": "HookOwner#0002", + "reported_webhook_creator_username": "HookOwner", + "reported_webhook_creator_global_name": null, + "reported_webhook_creator_discriminator": "0002", + "reported_webhook_creator_avatar_hash": null, + "reported_message_id": "1800000000000001004", + "reported_channel_id": "1600000000000000101", + "reported_channel_name": "general", + "reported_guild_id": "1600000000000000001", + "reported_guild_name": "Searched Guild", + "reason": "spam", + "reason_label": "Spam", + "reason_highest_priority": false, + "message_context": [ + { + "id": "1800000000000001003", + "content": "Member message before the webhook", + "timestamp": "2026-05-26T12:00:30.000Z", + "author_id": "1500000000000000001", + "author_username": "SearchedUser", + "author_global_name": null, + "author_discriminator": "0001", + "author_avatar": null, + "webhook_id": null, + "channel_id": "1600000000000000101", + "attachments": [] + }, + { + "id": "1800000000000001004", + "content": "Webhook spam in drawer", + "timestamp": "2026-05-26T12:01:00.000Z", + "author_id": WEBHOOK_ID, + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": "abc123", + "webhook_id": WEBHOOK_ID, + "channel_id": "1600000000000000101", + "attachments": [] + } + ] + }) +} + fn searched_message_report() -> Value { json!({ "report_id": "1800000000000000002", diff --git a/fluxer_admin/tests/parity.rs b/fluxer_admin/tests/parity.rs index 242a11aef..074c8eed7 100644 --- a/fluxer_admin/tests/parity.rs +++ b/fluxer_admin/tests/parity.rs @@ -3,12 +3,43 @@ #[path = "parity/mod.rs"] mod parity_support; -use fluxer_admin::api::generated::types::{LookupGuildResponse, SearchGuildsResponse}; +use axum::{ + Json, Router, + extract::{Path, RawQuery}, + http::StatusCode, + response::{IntoResponse, Response}, + routing::get, +}; +use fluxer_admin::api::{ + generated::types::{ + AdminReportListResponse, LookupGuildResponse, ReportAdminResponseSchema, + SearchGuildsResponse, + }, + types::{ReportEntry, SearchReportsResponse}, +}; use parity_support::{ TEST_ACCESS_TOKEN, TEST_ADMIN_SECRET, TEST_ADMIN_USER_ID, api_fixtures, capture, html_normalizer, rust_server, }; +use serde_json::{Value, json}; use std::{error::Error, io}; +use tokio::net::TcpListener; + +const SEARCH_REPORTS_V2: &str = include_str!("parity/fixtures/api/search_reports_v2.json"); +const SEARCH_REPORTS_WEBHOOK: &str = + include_str!("parity/fixtures/api/search_reports_webhook.json"); +const REPORT_WEBHOOK_DETAIL: &str = include_str!("parity/fixtures/api/report_webhook_detail.json"); +const REPORT_EVIDENCE_DETAIL: &str = + include_str!("parity/fixtures/api/report_evidence_detail.json"); +const EVIDENCE_REPORT_ID: &str = "1556352159220498613"; +const EVIDENCE_BOT_ID: &str = "1556352159149195428"; +const EVIDENCE_WEBHOOK_ID: &str = "1556352159132418208"; +const EVIDENCE_DELETED_AUTHOR_ID: &str = "1556352159216304308"; +const WEBHOOK_ID: &str = "1556114449176200401"; +const WEBHOOK_REPORT_ID: &str = "1556114449264280806"; +const BOT_REPORT_ID: &str = "1556114449268475111"; +const BOT_USER_ID: &str = "1556114449192977621"; +const WEBHOOK_CREATOR_ID: &str = "1556114449125868741"; #[test] fn html_normalizer_canonicalizes_attribute_order_and_csrf_values() { @@ -130,6 +161,473 @@ async fn rust_admin_fixture_routes_cover_default_protected_routes() -> Result<() Ok(()) } +#[test] +fn report_search_v2_fixture_matches_the_generated_and_hand_written_contracts() { + let generated: AdminReportListResponse = serde_json::from_str(SEARCH_REPORTS_V2) + .expect("v2 report search fixture must match the generated response contract"); + let flow = generated.reports[0] + .flow + .as_ref() + .expect("the v2 message report has answers"); + assert_eq!(flow.surface, "in_app"); + assert_eq!(flow.steps.len(), 4); + assert_eq!(generated.reports[0].reason.as_deref(), Some("csam")); + assert_eq!(generated.reports[2].reason, None); + + let response: SearchReportsResponse = serde_json::from_str(SEARCH_REPORTS_V2) + .expect("v2 report search fixture must match the hand-written response type"); + assert_eq!(response.total, 3); + let [message, user, legacy] = response.reports.as_slice() else { + panic!("expected three reports"); + }; + assert_eq!( + message.reason_label.as_deref(), + Some("Child sexual abuse material") + ); + assert_eq!(message.reason_highest_priority, Some(true)); + assert_eq!(message.category.as_deref(), Some("child_safety")); + let user_flow = user.flow.as_ref().expect("the v2 user report has answers"); + assert_eq!(user.reason.as_deref(), Some("harassment")); + assert_eq!(user_flow.locale.as_deref(), Some("de")); + assert_eq!(user_flow.steps[0].screen_id, "profile_intro"); + assert!(user_flow.steps[0].option_id.is_none()); + assert!(user_flow.steps[0].items.is_empty()); + assert_eq!( + user_flow.steps[1] + .items + .iter() + .map(|item| item.id.as_str()) + .collect::>(), + ["photo", "profile_text"] + ); + assert!(legacy.reason.is_none()); + assert!(legacy.reason_label.is_none()); + assert!(legacy.flow.is_none()); + assert!(legacy.reporter_good_faith_confirmed.is_none()); +} + +#[tokio::test(flavor = "multi_thread")] +async fn rust_admin_renders_v2_report_fixture_with_reason_and_answers() -> Result<(), Box> +{ + let api_endpoint = spawn_v2_report_api().await.map_err(test_error)?; + let rust_admin = rust_server::start(&api_endpoint) + .await + .map_err(test_error)?; + let client = capture::capture_client().map_err(test_error)?; + let session = fluxer_admin::session::create_session( + TEST_ADMIN_USER_ID, + TEST_ACCESS_TOKEN, + TEST_ADMIN_SECRET, + ); + let session_cookie = format!("{}={session}", fluxer_admin::session::SESSION_COOKIE_NAME); + + let list = capture::fetch_route( + &client, + rust_admin.base_url(), + "/reports?reason=csam", + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(list.status, 200, "{list:#?}"); + assert!(list.body.contains(r#"name="reason""#), "{}", list.body); + assert!( + list.body.contains("Priority: Child sexual abuse material"), + "{}", + list.body + ); + assert!( + list.body.contains(r#"data-report-reason="csam""#), + "{}", + list.body + ); + assert!( + !list.body.contains(r#"data-report-reason="harassment""#), + "{}", + list.body + ); + + let detail = capture::fetch_route( + &client, + rust_admin.base_url(), + "/reports/1556008115705480394", + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(detail.status, 200, "{detail:#?}"); + for expected in [ + "Report Answers", + "Report profile", + "Which parts of their profile are a problem?: Pictures, Profile text", + "Shown to the reporter in de", + "Surface: In app", + "Harassment or bullying", + ] { + assert!( + detail.body.contains(expected), + "{expected}\n{}", + detail.body + ); + } + + let legacy = capture::fetch_route( + &client, + rust_admin.base_url(), + "/reports/1556008115709674699", + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(legacy.status, 200, "{legacy:#?}"); + assert!(!legacy.body.contains("Report Answers"), "{}", legacy.body); + assert!( + !legacy.body.contains("data-report-reason"), + "{}", + legacy.body + ); + Ok(()) +} + +#[test] +fn report_webhook_fixtures_match_the_generated_and_hand_written_contracts() { + let generated: AdminReportListResponse = serde_json::from_str(SEARCH_REPORTS_WEBHOOK) + .expect("webhook report search fixture must match the generated response contract"); + assert_eq!(generated.reports.len(), 2); + let response: SearchReportsResponse = serde_json::from_str(SEARCH_REPORTS_WEBHOOK) + .expect("webhook report search fixture must match the hand-written response type"); + let [webhook, bot] = response.reports.as_slice() else { + panic!("expected two reports"); + }; + assert_eq!(webhook.report_id, WEBHOOK_REPORT_ID); + assert!(webhook.reported_user_id.is_none()); + assert_eq!(webhook.reported_webhook_id.as_deref(), Some(WEBHOOK_ID)); + assert_eq!( + webhook.reported_webhook_name.as_deref(), + Some("Harbor Bulletin") + ); + assert_eq!(bot.reported_user_id.as_deref(), Some(BOT_USER_ID)); + assert!(bot.reported_webhook_id.is_none()); + + let generated_detail: ReportAdminResponseSchema = serde_json::from_str(REPORT_WEBHOOK_DETAIL) + .expect("webhook report detail fixture must match the generated response contract"); + let via_generated: ReportEntry = serde_json::from_value( + serde_json::to_value(generated_detail).expect("serialize generated detail"), + ) + .expect("hand-written report type from the generated detail"); + let direct: ReportEntry = serde_json::from_str(REPORT_WEBHOOK_DETAIL) + .expect("webhook report detail fixture must match the hand-written report type"); + for detail in [&via_generated, &direct] { + assert!(detail.reported_user_id.is_none()); + assert_eq!(detail.reported_webhook_id.as_deref(), Some(WEBHOOK_ID)); + assert_eq!( + detail.reported_webhook_creator_id.as_deref(), + Some(WEBHOOK_CREATOR_ID) + ); + assert_eq!( + detail.reported_webhook_creator_global_name.as_deref(), + Some("Morgan Owner") + ); + assert_eq!(detail.reported_webhook_type, Some(1)); + assert_eq!( + detail.reported_webhook_channel_id, + detail.reported_channel_id + ); + assert_eq!(detail.reported_webhook_guild_id, detail.reported_guild_id); + assert_eq!( + detail.reported_webhook_created_at.as_deref(), + Some("2026-10-04T01:23:15.892Z") + ); + assert!(detail.reported_webhook_application_id.is_none()); + let context = detail.message_context.as_ref().expect("message context"); + let entry = context + .iter() + .find(|entry| entry["webhook_id"].as_str() == Some(WEBHOOK_ID)) + .expect("the webhook message is in the context"); + assert_eq!(entry["author_id"].as_str(), Some(WEBHOOK_ID)); + assert_eq!(entry["author_username"].as_str(), Some("Harbor Bulletin")); + } +} + +#[tokio::test(flavor = "multi_thread")] +async fn rust_admin_renders_webhook_report_fixture() -> Result<(), Box> { + let api_endpoint = spawn_v2_report_api().await.map_err(test_error)?; + let rust_admin = rust_server::start(&api_endpoint) + .await + .map_err(test_error)?; + let client = capture::capture_client().map_err(test_error)?; + let session = fluxer_admin::session::create_session( + TEST_ADMIN_USER_ID, + TEST_ACCESS_TOKEN, + TEST_ADMIN_SECRET, + ); + let session_cookie = format!("{}={session}", fluxer_admin::session::SESSION_COOKIE_NAME); + let webhook_marker = format!(r#"data-report-webhook="{WEBHOOK_ID}""#); + let webhook_user_link = format!("/users/{WEBHOOK_ID}"); + + let list = capture::fetch_route( + &client, + rust_admin.base_url(), + &format!("/reports?reported_webhook_id={WEBHOOK_ID}"), + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(list.status, 200, "{list:#?}"); + assert!(list.body.contains(WEBHOOK_REPORT_ID), "{}", list.body); + assert!(!list.body.contains(BOT_REPORT_ID), "{}", list.body); + assert!(list.body.contains(&webhook_marker), "{}", list.body); + assert!(list.body.contains("Harbor Bulletin"), "{}", list.body); + assert!(list.body.contains("Channel: general"), "{}", list.body); + assert!(!list.body.contains(&webhook_user_link), "{}", list.body); + + let both = capture::fetch_route( + &client, + rust_admin.base_url(), + "/reports?reporter_id=1556114449113285826", + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(both.status, 200, "{both:#?}"); + assert!( + both.body + .contains(&format!(r#"href="/users/{BOT_USER_ID}""#)), + "{}", + both.body + ); + + let detail = capture::fetch_route( + &client, + rust_admin.base_url(), + &format!("/reports/{WEBHOOK_REPORT_ID}"), + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(detail.status, 200, "{detail:#?}"); + for expected in [ + webhook_marker.clone(), + ">Webhook ID<".to_owned(), + format!(r#"href="/reports?reported_webhook_id={WEBHOOK_ID}""#), + "Harbor Commons".to_owned(), + "Message Context".to_owned(), + format!(r#"data-message-webhook="{WEBHOOK_ID}""#), + format!(r#"href="/users/{BOT_USER_ID}""#), + ">Webhook Creator<".to_owned(), + format!(r#"data-report-webhook-creator="{WEBHOOK_CREATOR_ID}""#), + format!(r#"href="/users/{WEBHOOK_CREATOR_ID}""#), + "Morgan Owner".to_owned(), + ">Webhook Type<".to_owned(), + ">Incoming<".to_owned(), + ">Webhook Created<".to_owned(), + "Oct 4, 2026, 1:23 AM UTC".to_owned(), + ] { + assert!( + detail.body.contains(&expected), + "{expected}\n{}", + detail.body + ); + } + assert!(!detail.body.contains(&webhook_user_link), "{}", detail.body); + assert!( + !detail.body.contains("View Reported User"), + "{}", + detail.body + ); + for absent in [ + ">Webhook Channel ID<", + ">Webhook Guild ID<", + ">Webhook Record<", + "data-report-webhook-creator-deleted", + ] { + assert!(!detail.body.contains(absent), "{absent}\n{}", detail.body); + } + Ok(()) +} + +#[test] +fn report_evidence_fixture_matches_the_generated_and_hand_written_contracts() { + let generated: ReportAdminResponseSchema = serde_json::from_str(REPORT_EVIDENCE_DETAIL) + .expect("evidence report detail fixture must match the generated response contract"); + let via_generated: ReportEntry = serde_json::from_value( + serde_json::to_value(generated).expect("serialize generated detail"), + ) + .expect("hand-written report type from the generated detail"); + let direct: ReportEntry = serde_json::from_str(REPORT_EVIDENCE_DETAIL) + .expect("evidence report detail fixture must match the hand-written report type"); + for detail in [&via_generated, &direct] { + assert_eq!(detail.reported_user_id.as_deref(), Some(EVIDENCE_BOT_ID)); + assert_eq!(detail.reported_user_bot, Some(true)); + let snapshot = detail + .reported_profile_snapshot + .as_ref() + .expect("the bot author has a profile snapshot"); + let user = snapshot.user.as_ref().expect("user snapshot"); + assert_eq!(user.id, EVIDENCE_BOT_ID); + assert_eq!(user.username.as_deref(), Some("Harbor_Helper")); + let member = snapshot.member.as_ref().expect("member snapshot"); + assert_eq!(member.guild_id, "1556352159090475158"); + assert!(member.joined_at.is_some()); + assert!(snapshot.guild.is_none()); + let context = detail.message_context.as_ref().expect("message context"); + let author_bot = |author_id: &str| { + context + .iter() + .filter(|entry| entry["author_id"].as_str() == Some(author_id)) + .map(|entry| entry["author_bot"].clone()) + .collect::>() + }; + assert_eq!(author_bot(EVIDENCE_BOT_ID), [json!(true), json!(true)]); + assert_eq!(author_bot(EVIDENCE_WEBHOOK_ID), [Value::Null]); + assert_eq!(author_bot(EVIDENCE_DELETED_AUTHOR_ID), [Value::Null]); + assert_eq!(author_bot("1556352159069503633"), [json!(false)]); + assert!(context.iter().all(|entry| { + entry["missing_attachments"] + .as_array() + .is_none_or(Vec::is_empty) + })); + } +} + +#[tokio::test(flavor = "multi_thread")] +async fn rust_admin_renders_the_evidence_report_fixture() -> Result<(), Box> { + let api_endpoint = spawn_v2_report_api().await.map_err(test_error)?; + let rust_admin = rust_server::start(&api_endpoint) + .await + .map_err(test_error)?; + let client = capture::capture_client().map_err(test_error)?; + let session = fluxer_admin::session::create_session( + TEST_ADMIN_USER_ID, + TEST_ACCESS_TOKEN, + TEST_ADMIN_SECRET, + ); + let session_cookie = format!("{}={session}", fluxer_admin::session::SESSION_COOKIE_NAME); + let detail = capture::fetch_route( + &client, + rust_admin.base_url(), + &format!("/reports/{EVIDENCE_REPORT_ID}"), + Some(&session_cookie), + ) + .await + .map_err(test_error)?; + assert_eq!(detail.status, 200, "{detail:#?}"); + for expected in [ + format!(r#"data-report-user-bot="{EVIDENCE_BOT_ID}""#), + format!(r#"data-message-author-bot="{EVIDENCE_BOT_ID}""#), + format!(r#"data-message-webhook="{EVIDENCE_WEBHOOK_ID}""#), + "At Report Time".to_owned(), + "Harbor_Helper#3966".to_owned(), + ">Community Profile<".to_owned(), + r#"data-report-legal-hold="none""#.to_owned(), + ] { + assert!( + detail.body.contains(&expected), + "{expected}\n{}", + detail.body + ); + } + assert_eq!( + detail.body.matches("data-message-author-bot=").count(), + 1, + "{}", + detail.body + ); + assert!( + !detail.body.contains("data-missing-attachment"), + "{}", + detail.body + ); + Ok(()) +} + +async fn spawn_v2_report_api() -> Result { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .map_err(|error| format!("failed to bind v2 report API: {error}"))?; + let port = listener + .local_addr() + .map_err(|error| format!("failed to read v2 report API address: {error}"))? + .port(); + let app = Router::new() + .route( + "/admin/users/@me", + get(|| async { + fixture_json(include_str!("parity/fixtures/api/admin_user_me.json")) + }), + ) + .route( + "/admin/report-reasons", + get(|| async { + Json(json!({"reasons": [ + {"key": "csam", "label": "Child sexual abuse material", "highest_priority": true, "legacy_category_message": "child_safety", "legacy_category_user": "child_safety", "legacy_category_guild": "child_safety"}, + {"key": "harassment", "label": "Harassment or bullying", "highest_priority": false, "legacy_category_message": "harassment", "legacy_category_user": "harassment", "legacy_category_guild": "harassment"} + ]})) + .into_response() + }), + ) + .route("/admin/reports", get(v2_report_search)) + .route("/admin/reports/{report_id}", get(v2_report_detail)); + tokio::spawn(async move { + let _ = axum::serve(listener, app).await; + }); + Ok(format!("http://127.0.0.1:{port}")) +} + +fn fixture_json(body: &'static str) -> Response { + let value: Value = serde_json::from_str(body).expect("fixture is JSON"); + Json(value).into_response() +} + +fn v2_reports() -> Vec { + [SEARCH_REPORTS_V2, SEARCH_REPORTS_WEBHOOK] + .into_iter() + .flat_map(|body| { + let value: Value = serde_json::from_str(body).expect("fixture is JSON"); + value["reports"].as_array().cloned().unwrap_or_default() + }) + .collect() +} + +async fn v2_report_search(RawQuery(query): RawQuery) -> Response { + let query = query.unwrap_or_default(); + let filters = url::form_urlencoded::parse(query.as_bytes()) + .filter(|(key, value)| { + matches!( + key.as_ref(), + "reason" | "reporter_id" | "reported_webhook_id" + ) && !value.is_empty() + }) + .map(|(key, value)| (key.into_owned(), value.into_owned())) + .collect::>(); + let reports = v2_reports() + .into_iter() + .filter(|report| { + filters + .iter() + .all(|(key, value)| report[key.as_str()].as_str() == Some(value.as_str())) + }) + .collect::>(); + Json(json!({"reports": reports, "total": reports.len(), "offset": 0, "limit": 25})) + .into_response() +} + +async fn v2_report_detail(Path(report_id): Path) -> Response { + if report_id == WEBHOOK_REPORT_ID { + return fixture_json(REPORT_WEBHOOK_DETAIL); + } + if report_id == EVIDENCE_REPORT_ID { + return fixture_json(REPORT_EVIDENCE_DETAIL); + } + match v2_reports() + .into_iter() + .find(|report| report["report_id"].as_str() == Some(report_id.as_str())) + { + Some(report) => Json(report).into_response(), + None => StatusCode::NOT_FOUND.into_response(), + } +} + fn test_error(message: String) -> Box { Box::new(io::Error::other(message)) } diff --git a/fluxer_admin/tests/parity/fixtures/api/report_evidence_detail.json b/fluxer_admin/tests/parity/fixtures/api/report_evidence_detail.json new file mode 100644 index 000000000..88d9aeaff --- /dev/null +++ b/fluxer_admin/tests/parity/fixtures/api/report_evidence_detail.json @@ -0,0 +1,623 @@ +{ + "report_id": "1556352159220498613", + "reporter_id": "1556352159077892243", + "reporter_tag": "target_a91da2c28aae#2089", + "reporter_username": "target_a91da2c28aae", + "reporter_global_name": "Jordan Target", + "reporter_discriminator": "2089", + "reporter_email": "target-953fa558-860b-4f49-87b7-feb3b7007b71@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-04T17:12:47.653Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": "1556352159149195428", + "reported_user_tag": "Harbor_Helper#3966", + "reported_user_username": "Harbor_Helper", + "reported_user_global_name": null, + "reported_user_discriminator": "3966", + "reported_user_avatar_hash": null, + "reported_user_bot": true, + "reported_webhook_id": null, + "reported_webhook_name": null, + "reported_webhook_avatar_hash": null, + "reported_webhook_default_name": null, + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": null, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": null, + "reported_webhook_guild_id": null, + "reported_webhook_created_at": null, + "reported_webhook_creator_id": null, + "reported_webhook_creator_tag": null, + "reported_webhook_creator_username": null, + "reported_webhook_creator_global_name": null, + "reported_webhook_creator_discriminator": null, + "reported_webhook_creator_avatar_hash": null, + "reported_guild_id": "1556352159090475158", + "reported_guild_name": "Harbor Commons", + "reported_guild_icon_hash": null, + "reported_message_id": "1556352159161778343", + "reported_channel_id": "1556352159103058073", + "reported_channel_name": "general", + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": 0, + "reported_guild_nsfw": false, + "reported_guild_content_warning_level": 0, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": false, + "reported_channel_effective_content_warning_level": 0, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "mutual_dm_channel_id": null, + "message_context": [ + { + "id": "1556352159115640988", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T17:07:50.358Z", + "attachments": [], + "author_id": "1556352159069503633", + "author_username": "reporter_c03a2ee3db86", + "author_global_name": null, + "author_discriminator": "2642", + "author_avatar": null, + "webhook_id": null, + "author_bot": false, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159119835293", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T17:07:50.359Z", + "attachments": [], + "author_id": "1556352159073697938", + "author_username": "unverified_7d9456caf467", + "author_global_name": null, + "author_discriminator": "4822", + "author_avatar": null, + "webhook_id": null, + "author_bot": false, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159124029598", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T17:07:50.360Z", + "attachments": [], + "author_id": "1556352159077892243", + "author_username": "target_a91da2c28aae", + "author_global_name": null, + "author_discriminator": "2089", + "author_avatar": "f829b914", + "webhook_id": null, + "author_bot": false, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159128223903", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Anyone up for a trade this weekend?", + "timestamp": "2026-10-04T17:07:50.361Z", + "attachments": [], + "author_id": "1556352159077892243", + "author_username": "target_a91da2c28aae", + "author_global_name": null, + "author_discriminator": "2089", + "author_avatar": "f829b914", + "webhook_id": null, + "author_bot": false, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159140806818", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Weekly bulletin: the garden swap starts Saturday.", + "timestamp": "2026-10-04T17:07:50.364Z", + "attachments": [], + "author_id": "1556352159132418208", + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": "1556352159132418208", + "author_bot": null, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159153389733", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T17:07:50.367Z", + "attachments": [], + "author_id": "1556352159149195428", + "author_username": "Harbor_Helper", + "author_global_name": null, + "author_discriminator": "3966", + "author_avatar": null, + "webhook_id": null, + "author_bot": true, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159161778343", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Reminder: the garden swap moved to 10 AM.", + "timestamp": "2026-10-04T17:07:50.369Z", + "attachments": [], + "author_id": "1556352159149195428", + "author_username": "Harbor_Helper", + "author_global_name": null, + "author_discriminator": "3966", + "author_avatar": null, + "webhook_id": null, + "author_bot": true, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159212110003", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Night relay: the swap tables are packed away.", + "timestamp": "2026-10-04T17:07:50.381Z", + "attachments": [], + "author_id": "1556352159203721393", + "author_username": "Night Relay", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": "1556352159203721393", + "author_bot": null, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556352159186944173", + "channel_id": "1556352159103058073", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556352159090475158", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T17:07:50.375Z", + "attachments": [], + "author_id": "1556352159216304308", + "author_username": "DeletedUser", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": null, + "author_bot": null, + "missing_attachments": [], + "user_prior_ncmec_report_ids": [] + } + ], + "message_responses": [ + { + "id": "1556352159115640988", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159069503633", + "username": "reporter_c03a2ee3db86", + "discriminator": "2642", + "global_name": "Avery Reporter", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T17:07:50.358Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159119835293", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159073697938", + "username": "unverified_7d9456caf467", + "discriminator": "4822", + "global_name": "Unverified Reporter", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T17:07:50.359Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159124029598", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159077892243", + "username": "target_a91da2c28aae", + "discriminator": "2089", + "global_name": "Jordan Target", + "avatar": "f829b914", + "avatar_color": 4604377, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T17:07:50.360Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159128223903", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159077892243", + "username": "target_a91da2c28aae", + "discriminator": "2089", + "global_name": "Jordan Target", + "avatar": "f829b914", + "avatar_color": 4604377, + "flags": 0 + }, + "webhook_id": null, + "type": 0, + "flags": 0, + "content": "Anyone up for a trade this weekend?", + "timestamp": "2026-10-04T17:07:50.361Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159140806818", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159132418208", + "username": "Harbor Bulletin", + "discriminator": "0000", + "global_name": "Harbor Bulletin", + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": "1556352159132418208", + "type": 0, + "flags": 0, + "content": "Weekly bulletin: the garden swap starts Saturday.", + "timestamp": "2026-10-04T17:07:50.364Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159153389733", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159149195428", + "username": "Harbor_Helper", + "discriminator": "3966", + "global_name": null, + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T17:07:50.367Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159161778343", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159149195428", + "username": "Harbor_Helper", + "discriminator": "3966", + "global_name": null, + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": null, + "type": 0, + "flags": 0, + "content": "Reminder: the garden swap moved to 10 AM.", + "timestamp": "2026-10-04T17:07:50.369Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159212110003", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159203721393", + "username": "Night Relay", + "discriminator": "0000", + "global_name": "Night Relay", + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": "1556352159203721393", + "type": 0, + "flags": 0, + "content": "Night relay: the swap tables are packed away.", + "timestamp": "2026-10-04T17:07:50.381Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556352159186944173", + "channel_id": "1556352159103058073", + "author": { + "id": "1556352159216304308", + "username": "DeletedUser", + "discriminator": "0000", + "global_name": "Deleted User", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T17:07:50.375Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + } + ], + "reported_profile_snapshot": { + "captured_at": "2026-10-04T17:12:47.653Z", + "user": { + "id": "1556352159149195428", + "username": "Harbor_Helper", + "discriminator": "3966", + "global_name": null, + "bio": null, + "pronouns": null, + "avatar": null, + "banner": null + }, + "member": { + "guild_id": "1556352159090475158", + "nick": null, + "bio": null, + "pronouns": null, + "joined_at": "2026-10-04T17:12:47.614Z", + "avatar": null, + "banner": null + }, + "guild": null + }, + "reason": "spam", + "reason_label": "Spam", + "reason_highest_priority": false, + "flow": { + "revision_hash": "16781a19a797f23f", + "surface": "in_app", + "locale": "en-US", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "spam", + "option_label": "Spam or unwanted ads", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null +} diff --git a/fluxer_admin/tests/parity/fixtures/api/report_webhook_detail.json b/fluxer_admin/tests/parity/fixtures/api/report_webhook_detail.json new file mode 100644 index 000000000..5cef9e859 --- /dev/null +++ b/fluxer_admin/tests/parity/fixtures/api/report_webhook_detail.json @@ -0,0 +1,581 @@ +{ + "report_id": "1556114449264280806", + "reporter_id": "1556114449113285826", + "reporter_tag": "reporter_010908032cb3#7915", + "reporter_username": "reporter_010908032cb3", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "7915", + "reporter_email": "reporter-ec5de823-cc5d-4edd-901e-156233385a52@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-04T01:30:41.372Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": null, + "reported_user_tag": null, + "reported_user_username": null, + "reported_user_global_name": null, + "reported_user_discriminator": null, + "reported_user_avatar_hash": null, + "reported_webhook_id": "1556114449176200401", + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_avatar_hash": null, + "reported_webhook_default_name": "Harbor Bulletin", + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": 1, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": "1556114449146840266", + "reported_webhook_guild_id": "1556114449134257351", + "reported_webhook_created_at": "2026-10-04T01:23:15.892Z", + "reported_webhook_creator_id": "1556114449125868741", + "reported_webhook_creator_tag": "owner_aa696aafce86#7021", + "reported_webhook_creator_username": "owner_aa696aafce86", + "reported_webhook_creator_global_name": "Morgan Owner", + "reported_webhook_creator_discriminator": "7021", + "reported_webhook_creator_avatar_hash": null, + "reported_guild_id": "1556114449134257351", + "reported_guild_name": "Harbor Commons", + "reported_guild_icon_hash": null, + "reported_message_id": "1556114449184589011", + "reported_channel_id": "1556114449146840266", + "reported_channel_name": "general", + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": 0, + "reported_guild_nsfw": false, + "reported_guild_content_warning_level": 0, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": false, + "reported_channel_effective_content_warning_level": 0, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "mutual_dm_channel_id": null, + "message_context": [ + { + "id": "1556114449159423181", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T01:23:15.888Z", + "attachments": [], + "author_id": "1556114449113285826", + "author_username": "reporter_010908032cb3", + "author_global_name": null, + "author_discriminator": "7915", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449163617486", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T01:23:15.889Z", + "attachments": [], + "author_id": "1556114449117480131", + "author_username": "unverified_b8bab8c7a8c5", + "author_global_name": null, + "author_discriminator": "0943", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449167811791", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T01:23:15.890Z", + "attachments": [], + "author_id": "1556114449121674436", + "author_username": "target_8b1ee6a349df", + "author_global_name": null, + "author_discriminator": "9014", + "author_avatar": "f829b914", + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449172006096", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Anyone up for a trade this weekend?", + "timestamp": "2026-10-04T01:23:15.891Z", + "attachments": [], + "author_id": "1556114449121674436", + "author_username": "target_8b1ee6a349df", + "author_global_name": null, + "author_discriminator": "9014", + "author_avatar": "f829b914", + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449184589011", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Weekly bulletin: the garden swap starts Saturday.", + "timestamp": "2026-10-04T01:23:15.894Z", + "attachments": [], + "author_id": "1556114449176200401", + "author_username": "Harbor Bulletin", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": "1556114449176200401", + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449255892196", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Night relay: the swap tables are packed away.", + "timestamp": "2026-10-04T01:23:15.911Z", + "attachments": [], + "author_id": "1556114449247503586", + "author_username": "Night Relay", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": "1556114449247503586", + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449230726366", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T01:23:15.905Z", + "attachments": [], + "author_id": "1556114449260086501", + "author_username": "DeletedUser", + "author_global_name": null, + "author_discriminator": "0000", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449205560536", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "Reminder: the garden swap moved to 10 AM.", + "timestamp": "2026-10-04T01:23:15.899Z", + "attachments": [], + "author_id": "1556114449192977621", + "author_username": "Harbor_Helper", + "author_global_name": null, + "author_discriminator": "1238", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + }, + { + "id": "1556114449197171926", + "channel_id": "1556114449146840266", + "channel_nsfw": false, + "channel_content_warning_level": null, + "channel_content_warning_text": null, + "guild_id": "1556114449134257351", + "guild_nsfw_level": 0, + "guild_nsfw": null, + "guild_content_warning_level": null, + "guild_content_warning_text": null, + "content": "", + "timestamp": "2026-10-04T01:23:15.897Z", + "attachments": [], + "author_id": "1556114449192977621", + "author_username": "Harbor_Helper", + "author_global_name": null, + "author_discriminator": "1238", + "author_avatar": null, + "webhook_id": null, + "user_prior_ncmec_report_ids": [] + } + ], + "message_responses": [ + { + "id": "1556114449159423181", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449113285826", + "username": "reporter_010908032cb3", + "discriminator": "7915", + "global_name": "Avery Reporter", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T01:23:15.888Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449163617486", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449117480131", + "username": "unverified_b8bab8c7a8c5", + "discriminator": "0943", + "global_name": "Unverified Reporter", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T01:23:15.889Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449167811791", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449121674436", + "username": "target_8b1ee6a349df", + "discriminator": "9014", + "global_name": "Jordan Target", + "avatar": "f829b914", + "avatar_color": 4604377, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T01:23:15.890Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449172006096", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449121674436", + "username": "target_8b1ee6a349df", + "discriminator": "9014", + "global_name": "Jordan Target", + "avatar": "f829b914", + "avatar_color": 4604377, + "flags": 0 + }, + "webhook_id": null, + "type": 0, + "flags": 0, + "content": "Anyone up for a trade this weekend?", + "timestamp": "2026-10-04T01:23:15.891Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449184589011", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449176200401", + "username": "Harbor Bulletin", + "discriminator": "0000", + "global_name": "Harbor Bulletin", + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": "1556114449176200401", + "type": 0, + "flags": 0, + "content": "Weekly bulletin: the garden swap starts Saturday.", + "timestamp": "2026-10-04T01:23:15.894Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449255892196", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449247503586", + "username": "Night Relay", + "discriminator": "0000", + "global_name": "Night Relay", + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": "1556114449247503586", + "type": 0, + "flags": 0, + "content": "Night relay: the swap tables are packed away.", + "timestamp": "2026-10-04T01:23:15.911Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449230726366", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449260086501", + "username": "DeletedUser", + "discriminator": "0000", + "global_name": "Deleted User", + "avatar": null, + "avatar_color": null, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T01:23:15.905Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449205560536", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449192977621", + "username": "Harbor_Helper", + "discriminator": "1238", + "global_name": null, + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": null, + "type": 0, + "flags": 0, + "content": "Reminder: the garden swap moved to 10 AM.", + "timestamp": "2026-10-04T01:23:15.899Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + }, + { + "id": "1556114449197171926", + "channel_id": "1556114449146840266", + "author": { + "id": "1556114449192977621", + "username": "Harbor_Helper", + "discriminator": "1238", + "global_name": null, + "avatar": null, + "avatar_color": null, + "bot": true, + "flags": 0 + }, + "webhook_id": null, + "type": 7, + "flags": 0, + "content": "", + "timestamp": "2026-10-04T01:23:15.897Z", + "edited_timestamp": null, + "pinned": false, + "mention_everyone": false, + "tts": false, + "mentions": [], + "mention_roles": [], + "mention_channels": null, + "embeds": null, + "attachments": null, + "stickers": null, + "reactions": null, + "message_reference": null, + "message_snapshots": null, + "nonce": null, + "call": null + } + ], + "reason": "spam", + "reason_label": "Spam", + "reason_highest_priority": false, + "flow": { + "revision_hash": "16781a19a797f23f", + "surface": "in_app", + "locale": "en-US", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "spam", + "option_label": "Spam or unwanted ads", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null +} diff --git a/fluxer_admin/tests/parity/fixtures/api/search_reports_v2.json b/fluxer_admin/tests/parity/fixtures/api/search_reports_v2.json new file mode 100644 index 000000000..b3252f5b6 --- /dev/null +++ b/fluxer_admin/tests/parity/fixtures/api/search_reports_v2.json @@ -0,0 +1,228 @@ +{ + "reports": [ + { + "report_id": "1556008115701286089", + "reporter_id": "1556008115617399989", + "reporter_tag": "reporter_f189c9468c17#0896", + "reporter_username": "reporter_f189c9468c17", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "0896", + "reporter_email": "reporter-60407b25-ee39-4291-9ff8-63d8b3652b1b@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-03T18:30:33.848Z", + "status": 0, + "report_type": 0, + "category": "child_safety", + "additional_info": null, + "reported_user_id": "1556008115625788599", + "reported_user_tag": "target_4a5a5ce687ff#6741", + "reported_user_username": "target_4a5a5ce687ff", + "reported_user_global_name": "Jordan Target", + "reported_user_discriminator": "6741", + "reported_user_avatar_hash": "f829b914", + "reported_guild_id": null, + "reported_guild_name": null, + "reported_guild_icon_hash": null, + "reported_message_id": "1556008115697091784", + "reported_channel_id": "1556008115692897479", + "reported_channel_name": null, + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": null, + "reported_guild_nsfw": null, + "reported_guild_content_warning_level": null, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": null, + "reported_channel_effective_content_warning_level": null, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "reason": "csam", + "reason_label": "Child sexual abuse material", + "reason_highest_priority": true, + "flow": { + "revision_hash": "16781a19a797f23f", + "surface": "in_app", + "locale": "en-US", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "abuse", + "option_label": "Abusive or harmful content", + "items": [] + }, + { + "screen_id": "abuse", + "screen_title": "What does it involve?", + "option_id": "sexual", + "option_label": "Sexual content", + "items": [] + }, + { + "screen_id": "sexual", + "screen_title": "Tell us about the sexual content", + "option_id": "minor_sexual", + "option_label": "Sexualizing a minor", + "items": [] + }, + { + "screen_id": "minor_sexual", + "screen_title": "What did you see involving a minor?", + "option_id": "csam", + "option_label": "Real or AI-generated images or videos of child sexual abuse", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null + }, + { + "report_id": "1556008115705480394", + "reporter_id": "1556008115617399989", + "reporter_tag": "reporter_f189c9468c17#0896", + "reporter_username": "reporter_f189c9468c17", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "0896", + "reporter_email": "reporter-60407b25-ee39-4291-9ff8-63d8b3652b1b@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-03T18:30:33.852Z", + "status": 0, + "report_type": 1, + "category": "harassment", + "additional_info": null, + "reported_user_id": "1556008115625788599", + "reported_user_tag": "target_4a5a5ce687ff#6741", + "reported_user_username": "target_4a5a5ce687ff", + "reported_user_global_name": "Jordan Target", + "reported_user_discriminator": "6741", + "reported_user_avatar_hash": "f829b914", + "reported_guild_id": null, + "reported_guild_name": null, + "reported_guild_icon_hash": null, + "reported_message_id": null, + "reported_channel_id": null, + "reported_channel_name": null, + "reported_channel_nsfw": null, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": null, + "reported_guild_nsfw": null, + "reported_guild_content_warning_level": null, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": null, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": null, + "reported_channel_effective_content_warning_level": null, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "reason": "harassment", + "reason_label": "Harassment or bullying", + "reason_highest_priority": false, + "flow": { + "revision_hash": "22a1e877519c31ca", + "surface": "in_app", + "locale": "de", + "steps": [ + { + "screen_id": "profile_intro", + "screen_title": "Report profile", + "option_id": null, + "option_label": null, + "items": [] + }, + { + "screen_id": "profile_parts", + "screen_title": "Which parts of their profile are a problem?", + "option_id": null, + "option_label": null, + "items": [ + { + "id": "photo", + "label": "Pictures" + }, + { + "id": "profile_text", + "label": "Profile text" + } + ] + }, + { + "screen_id": "root_user", + "screen_title": "What's wrong with their profile?", + "option_id": "abuse", + "option_label": "Abusive or harmful content", + "items": [] + }, + { + "screen_id": "profile_abuse", + "screen_title": "What's harmful about their profile?", + "option_id": "harassment", + "option_label": "Their profile harasses or targets me or someone else", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null + }, + { + "report_id": "1556008115709674699", + "reporter_id": "1556008115617399989", + "reporter_tag": "reporter_f189c9468c17#0896", + "reporter_username": "reporter_f189c9468c17", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "0896", + "reporter_email": "reporter-60407b25-ee39-4291-9ff8-63d8b3652b1b@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-03T18:30:33.856Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": "1556008115625788599", + "reported_user_tag": "target_4a5a5ce687ff#6741", + "reported_user_username": "target_4a5a5ce687ff", + "reported_user_global_name": "Jordan Target", + "reported_user_discriminator": "6741", + "reported_user_avatar_hash": "f829b914", + "reported_guild_id": "1556008115638371514", + "reported_guild_name": "Harbor Commons", + "reported_guild_icon_hash": null, + "reported_message_id": "1556008115676120259", + "reported_channel_id": "1556008115650954429", + "reported_channel_name": "general", + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": 0, + "reported_guild_nsfw": false, + "reported_guild_content_warning_level": 0, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": false, + "reported_channel_effective_content_warning_level": 0, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "reason": null, + "reason_label": null, + "reason_highest_priority": null, + "flow": null, + "reporter_good_faith_confirmed": null + } + ], + "total": 3, + "offset": 0, + "limit": 25 +} diff --git a/fluxer_admin/tests/parity/fixtures/api/search_reports_webhook.json b/fluxer_admin/tests/parity/fixtures/api/search_reports_webhook.json new file mode 100644 index 000000000..ad403bc9a --- /dev/null +++ b/fluxer_admin/tests/parity/fixtures/api/search_reports_webhook.json @@ -0,0 +1,161 @@ +{ + "reports": [ + { + "report_id": "1556114449264280806", + "reporter_id": "1556114449113285826", + "reporter_tag": "reporter_010908032cb3#7915", + "reporter_username": "reporter_010908032cb3", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "7915", + "reporter_email": "reporter-ec5de823-cc5d-4edd-901e-156233385a52@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-04T01:30:41.372Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": null, + "reported_user_tag": null, + "reported_user_username": null, + "reported_user_global_name": null, + "reported_user_discriminator": null, + "reported_user_avatar_hash": null, + "reported_webhook_id": "1556114449176200401", + "reported_webhook_name": "Harbor Bulletin", + "reported_webhook_avatar_hash": null, + "reported_webhook_default_name": "Harbor Bulletin", + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": 1, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": "1556114449146840266", + "reported_webhook_guild_id": "1556114449134257351", + "reported_webhook_created_at": "2026-10-04T01:23:15.892Z", + "reported_webhook_creator_id": "1556114449125868741", + "reported_webhook_creator_tag": "owner_aa696aafce86#7021", + "reported_webhook_creator_username": "owner_aa696aafce86", + "reported_webhook_creator_global_name": "Morgan Owner", + "reported_webhook_creator_discriminator": "7021", + "reported_webhook_creator_avatar_hash": null, + "reported_guild_id": "1556114449134257351", + "reported_guild_name": "Harbor Commons", + "reported_guild_icon_hash": null, + "reported_message_id": "1556114449184589011", + "reported_channel_id": "1556114449146840266", + "reported_channel_name": "general", + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": 0, + "reported_guild_nsfw": false, + "reported_guild_content_warning_level": 0, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": false, + "reported_channel_effective_content_warning_level": 0, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "reason": "spam", + "reason_label": "Spam", + "reason_highest_priority": false, + "flow": { + "revision_hash": "16781a19a797f23f", + "surface": "in_app", + "locale": "en-US", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "spam", + "option_label": "Spam or unwanted ads", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null + }, + { + "report_id": "1556114449268475111", + "reporter_id": "1556114449113285826", + "reporter_tag": "reporter_010908032cb3#7915", + "reporter_username": "reporter_010908032cb3", + "reporter_global_name": "Avery Reporter", + "reporter_discriminator": "7915", + "reporter_email": "reporter-ec5de823-cc5d-4edd-901e-156233385a52@example.com", + "reporter_full_legal_name": null, + "reporter_country_of_residence": null, + "reported_at": "2026-10-04T01:30:41.375Z", + "status": 0, + "report_type": 0, + "category": "spam", + "additional_info": null, + "reported_user_id": "1556114449192977621", + "reported_user_tag": "Harbor_Helper#1238", + "reported_user_username": "Harbor_Helper", + "reported_user_global_name": null, + "reported_user_discriminator": "1238", + "reported_user_avatar_hash": null, + "reported_webhook_id": null, + "reported_webhook_name": null, + "reported_webhook_avatar_hash": null, + "reported_webhook_default_name": null, + "reported_webhook_default_avatar_hash": null, + "reported_webhook_type": null, + "reported_webhook_application_id": null, + "reported_webhook_channel_id": null, + "reported_webhook_guild_id": null, + "reported_webhook_created_at": null, + "reported_webhook_creator_id": null, + "reported_webhook_creator_tag": null, + "reported_webhook_creator_username": null, + "reported_webhook_creator_global_name": null, + "reported_webhook_creator_discriminator": null, + "reported_webhook_creator_avatar_hash": null, + "reported_guild_id": "1556114449134257351", + "reported_guild_name": "Harbor Commons", + "reported_guild_icon_hash": null, + "reported_message_id": "1556114449205560536", + "reported_channel_id": "1556114449146840266", + "reported_channel_name": "general", + "reported_channel_nsfw": false, + "reported_guild_invite_code": null, + "reported_guild_nsfw_level": 0, + "reported_guild_nsfw": false, + "reported_guild_content_warning_level": 0, + "reported_guild_content_warning_text": null, + "reported_channel_nsfw_override": null, + "reported_channel_content_warning_level": 0, + "reported_channel_content_warning_text": null, + "reported_channel_effective_nsfw": false, + "reported_channel_effective_content_warning_level": 0, + "reported_channel_effective_content_warning_text": null, + "resolved_at": null, + "resolved_by_admin_id": null, + "public_comment": null, + "reason": "spam", + "reason_label": "Spam", + "reason_highest_priority": false, + "flow": { + "revision_hash": "16781a19a797f23f", + "surface": "in_app", + "locale": "en-US", + "steps": [ + { + "screen_id": "root_message", + "screen_title": "Report message", + "option_id": "spam", + "option_label": "Spam or unwanted ads", + "items": [] + } + ] + }, + "reporter_good_faith_confirmed": null + } + ], + "total": 2, + "offset": 0, + "limit": 50 +} diff --git a/fluxer_api/pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions.ts b/fluxer_api/pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions.ts index 63d699ad7..fd63cdcd4 100644 --- a/fluxer_api/pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions.ts +++ b/fluxer_api/pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions.ts @@ -165,8 +165,10 @@ export const ELASTICSEARCH_INDEX_DEFINITIONS: Record { expect(message).not.toHaveProperty('replyTo'); }); }); + +function createCapturingService(): {service: EmailService; sent: Array} { + const sent: Array = []; + const provider: IEmailProvider = { + sendEmail: async (message) => { + sent.push(message); + return true; + }, + }; + return {service: new EmailService(CONFIG, new EmailI18nService(), provider), sent}; +} + +describe('EmailService report notices', () => { + it('sends a receipt with the report id and target kind', async () => { + const {service, sent} = createCapturingService(); + await expect(service.sendReportReceivedEmail('notifier@example.com', '1234567890', 'guild', 'en-US')).resolves.toBe( + true, + ); + expect(sent).toHaveLength(1); + expect(sent[0].to).toBe('notifier@example.com'); + expect(sent[0].subject).toBe('We received your Fluxer report'); + expect(sent[0].text).toContain('report about a community on Fluxer.'); + expect(sent[0].text).toContain('Report ID: 1234567890'); + }); + + it('sends the receipt in the requested locale', async () => { + const {service, sent} = createCapturingService(); + await service.sendReportReceivedEmail('notifier@example.com', '1234567890', 'message', 'de'); + expect(sent[0].subject).toBe('Wir haben deine Fluxer-Meldung erhalten'); + expect(sent[0].text).toContain('Meldungs-ID: 1234567890'); + }); + + it('sends a DSA decision notice with the public comment', async () => { + const {service, sent} = createCapturingService(); + await expect( + service.sendDsaReportResolvedEmail('notifier@example.com', '1234567890', 'We removed the content.', 'en-US'), + ).resolves.toBe(true); + expect(sent).toHaveLength(1); + expect(sent[0].to).toBe('notifier@example.com'); + expect(sent[0].subject).toBe('We made a decision on your Fluxer report'); + expect(sent[0].text).toContain('(ID: 1234567890)'); + expect(sent[0].text).toContain('Response from the Safety Team:\nWe removed the content.'); + expect(sent[0].text).toContain('Email appeals@fluxer.app from this email address'); + }); + + it('sends a generic DSA decision notice without a public comment', async () => { + const {service, sent} = createCapturingService(); + await service.sendDsaReportResolvedEmail('notifier@example.com', '1234567890', '', 'en-US'); + expect(sent[0].text).not.toContain('Response from the Safety Team'); + expect(sent[0].text).not.toContain('\n\n\n'); + expect(sent[0].text).toContain('Email appeals@fluxer.app from this email address'); + }); +}); + +describe('TestEmailService report notices', () => { + it('records the receipt and the DSA decision notice', async () => { + const service = new TestEmailService(); + await service.sendReportReceivedEmail('notifier@example.com', '1234567890', 'user', 'en-US'); + await service.sendDsaReportResolvedEmail('notifier@example.com', '1234567890', '', 'en-US'); + expect(service.listSentEmails().map(({to, type, metadata}) => ({to, type, metadata}))).toEqual([ + {to: 'notifier@example.com', type: 'report_received', metadata: {report_id: '1234567890', target_kind: 'user'}}, + { + to: 'notifier@example.com', + type: 'dsa_report_resolved', + metadata: {report_id: '1234567890', public_comment: ''}, + }, + ]); + }); +}); diff --git a/fluxer_api/pkgs/email/src/EmailService.ts b/fluxer_api/pkgs/email/src/EmailService.ts index 59deb11e4..f34ed9e85 100644 --- a/fluxer_api/pkgs/email/src/EmailService.ts +++ b/fluxer_api/pkgs/email/src/EmailService.ts @@ -3,7 +3,7 @@ import {createLogger} from '@fluxer/logger/src/Logger'; import type {IEmailI18nService} from '@pkgs/email/src/EmailI18nService'; import type {EmailConfig, IEmailProvider, UserBouncedEmailChecker} from '@pkgs/email/src/EmailProviderTypes'; -import type {EmailTemplateVariables} from '@pkgs/email/src/email_i18n/EmailI18nTypes'; +import type {EmailTemplateVariables, ReportReceivedTargetKind} from '@pkgs/email/src/email_i18n/EmailI18nTypes'; import type {EmailTemplateKey} from '@pkgs/email/src/email_i18n/EmailI18nTypes.generated'; import type {IEmailService} from '@pkgs/email/src/IEmailService'; import {ms} from 'itty-time'; @@ -238,6 +238,28 @@ export class EmailService implements IEmailService { }); } + async sendDsaReportResolvedEmail( + email: string, + reportId: string, + publicComment: string, + locale: string | null = null, + ): Promise { + return this.sendTemplatedEmail(email, 'dsa_report_resolved', locale, { + reportId, + publicComment, + hasComment: publicComment ? 'yes' : 'no', + }); + } + + async sendReportReceivedEmail( + email: string, + reportId: string, + targetKind: ReportReceivedTargetKind, + locale: string | null = null, + ): Promise { + return this.sendTemplatedEmail(email, 'report_received', locale, {reportId, targetKind}); + } + async sendDsaReportVerificationCode( email: string, code: string, diff --git a/fluxer_api/pkgs/email/src/IEmailService.ts b/fluxer_api/pkgs/email/src/IEmailService.ts index 07ff832e0..b066e84cd 100644 --- a/fluxer_api/pkgs/email/src/IEmailService.ts +++ b/fluxer_api/pkgs/email/src/IEmailService.ts @@ -1,5 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import type {ReportReceivedTargetKind} from '@pkgs/email/src/email_i18n/EmailI18nTypes'; + export interface IEmailService { sendPasswordResetEmail(email: string, username: string, resetToken: string, locale?: string | null): Promise; sendEmailVerification( @@ -89,6 +91,18 @@ export interface IEmailService { publicComment: string, locale?: string | null, ): Promise; + sendDsaReportResolvedEmail( + email: string, + reportId: string, + publicComment: string, + locale?: string | null, + ): Promise; + sendReportReceivedEmail( + email: string, + reportId: string, + targetKind: ReportReceivedTargetKind, + locale?: string | null, + ): Promise; sendDsaReportVerificationCode(email: string, code: string, expiresAt: Date, locale?: string | null): Promise; sendRegistrationApprovedEmail(email: string, username: string, locale?: string | null): Promise; sendEmailChangeOriginal(email: string, username: string, code: string, locale?: string | null): Promise; diff --git a/fluxer_api/pkgs/email/src/TestEmailService.ts b/fluxer_api/pkgs/email/src/TestEmailService.ts index ca7d67ac5..3166e1f8b 100644 --- a/fluxer_api/pkgs/email/src/TestEmailService.ts +++ b/fluxer_api/pkgs/email/src/TestEmailService.ts @@ -1,5 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import type {ReportReceivedTargetKind} from '@pkgs/email/src/email_i18n/EmailI18nTypes'; import type {ITestEmailService, SentEmailRecord} from '@pkgs/email/src/ITestEmailService'; function maskToken(token: string): string { @@ -228,6 +229,26 @@ export class TestEmailService implements ITestEmailService { return this.record(email, 'report_resolved', {report_id: reportId, public_comment: publicComment}); } + async sendDsaReportResolvedEmail( + email: string, + reportId: string, + publicComment: string, + _locale?: string | null, + ): Promise { + this.logger.info(`DSA report resolved email sent to ${email}, report: ${reportId}`); + return this.record(email, 'dsa_report_resolved', {report_id: reportId, public_comment: publicComment}); + } + + async sendReportReceivedEmail( + email: string, + reportId: string, + targetKind: ReportReceivedTargetKind, + _locale?: string | null, + ): Promise { + this.logger.info(`Report received email sent to ${email}, report: ${reportId}`); + return this.record(email, 'report_received', {report_id: reportId, target_kind: targetKind}); + } + async sendDsaReportVerificationCode( email: string, code: string, diff --git a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nLocaleFiles.test.ts b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nLocaleFiles.test.ts index 2e5fee3a8..ec9be7aed 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nLocaleFiles.test.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nLocaleFiles.test.ts @@ -36,6 +36,7 @@ const FIXTURE: {[K in EmailTemplateKey]: EmailTemplateVariables[K]} = { }, donation_confirmation: {amount: '$5.00', currency: 'USD', interval: 'month', manageUrl: 'https://example.com/m'}, donation_magic_link: {manageUrl: 'https://example.com/m', expiresAt: DATE}, + dsa_report_resolved: {reportId: '1', publicComment: 'Thanks', hasComment: 'yes'}, dsa_report_verification: {code: '123456', expiresAt: DATE}, email_change_new: {username: 'testuser', code: '123456', expiresAt: DATE}, email_change_original: {username: 'testuser', code: '123456', expiresAt: DATE}, @@ -65,6 +66,7 @@ const FIXTURE: {[K in EmailTemplateKey]: EmailTemplateVariables[K]} = { password_change_verification: {username: 'testuser', code: '123456', expiresAt: DATE}, password_reset: {username: 'testuser', resetUrl: 'https://example.com/reset'}, registration_approved: {username: 'testuser', channelsUrl: 'https://example.com/channels'}, + report_received: {reportId: '1', targetKind: 'message'}, report_resolved: {username: 'testuser', reportId: '1', publicComment: 'Thanks', hasComment: 'yes'}, scheduled_deletion_notification: {username: 'testuser', deletionDate: DATE, reason: 'Payment fraud'}, self_deletion_scheduled: {username: 'testuser', deletionDate: DATE}, @@ -142,6 +144,56 @@ describe('EmailI18n locale files', () => { expect(body).not.toContain('\n\n\n'); }, ); + it.each(['en-US', ...LOCALES])('%s names each reported target kind in the receipt', (locale) => { + const bodies = (['message', 'user', 'guild'] as const).map((targetKind) => + renderBody('report_received', locale, {reportId: '1234567890', targetKind}), + ); + expect(new Set(bodies).size).toBe(3); + for (const body of bodies) { + expect(body).toContain('1234567890'); + expect(body).not.toContain('targetKind'); + } + }); + it('renders the receipt for each target kind', () => { + expect(renderBody('report_received', 'en-US', {reportId: '1', targetKind: 'message'})).toContain( + 'report about a message on Fluxer.', + ); + expect(renderBody('report_received', 'en-US', {reportId: '1', targetKind: 'user'})).toContain( + 'report about an account on Fluxer.', + ); + expect(renderBody('report_received', 'en-US', {reportId: '1', targetKind: 'guild'})).toContain( + 'report about a community on Fluxer.', + ); + }); + it.each(['en-US', ...LOCALES])('%s tells a DSA reporter how to challenge the decision', (locale) => { + const withComment = renderBody('dsa_report_resolved', locale, { + reportId: '1234567890', + publicComment: 'We removed the content.', + hasComment: 'yes', + }); + const withoutComment = renderBody('dsa_report_resolved', locale, { + reportId: '1234567890', + publicComment: '', + hasComment: 'no', + }); + for (const body of [withComment, withoutComment]) { + expect(body).toContain('1234567890'); + expect(body).toContain('appeals@fluxer.app'); + expect(body).toContain('60'); + expect(body).not.toContain('\n\n\n'); + } + expect(withComment).toContain('We removed the content.'); + expect(withComment.split('\n\n')).toHaveLength(withoutComment.split('\n\n').length + 1); + }); + it('greets a DSA reporter without a username', () => { + for (const key of ['report_received', 'dsa_report_resolved'] as const) { + const result = getEmailTemplate(key, 'en-US', FIXTURE[key]); + expect(result.ok).toBe(true); + if (!result.ok) continue; + expect(result.value.body.startsWith('Hello,\n\n')).toBe(true); + expect(result.value.body).not.toContain('{'); + } + }); it('renders a blank reason the same as no reason', async () => { const sent: Array = []; const provider: IEmailProvider = { diff --git a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nMessages.ts b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nMessages.ts index 143947bbd..fa8b904c4 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nMessages.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nMessages.ts @@ -31,6 +31,10 @@ export const EMAIL_I18N_MESSAGES = { subject: 'Manage your {product_name} donations', body: 'Hello,\n\nClick the link below to access your donor portal:\n\n{manageUrl}\n\nIn the portal, you can manage subscriptions, download invoices, and view your donation history.\n\nThis link expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you did not request this link, you can safely ignore this email.\n\n– {product_name} Team', }, + dsa_report_resolved: { + subject: 'We made a decision on your {product_name} report', + body: "Hello,\n\nOur Safety Team has reviewed your Digital Services Act report (ID: {reportId}) and made a decision.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nWe don't share details of any action taken against another person's account, because that is their personal data.\n\nIf you disagree with this decision, you can appeal free of charge within 60 days. Email {appeals_email} from this email address, include your report ID, and explain why you think the decision is wrong. If you are in the EU, you can also refer the dispute to a certified out-of-court dispute settlement body. None of this affects your right to go to court.\n\n– {product_name} Safety Team", + }, dsa_report_verification: { subject: 'Verify your email for a DSA report', body: "Hello,\n\nUse the verification code below to submit your Digital Services Act report on {product_name}:\n\n{code}\n\nThis code expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you didn't request this, you can ignore this email.\n\n– {product_name} Safety Team", @@ -83,6 +87,10 @@ export const EMAIL_I18N_MESSAGES = { subject: 'Your {product_name} registration has been approved', body: 'Hello {username},\n\nGood news: your {product_name} registration has been approved.\n\nYou can now log in to the {product_name} app here:\n{channelsUrl}\n\nWelcome to the {product_name} community.\n\n– {product_name} Team', }, + report_received: { + subject: 'We received your {product_name} report', + body: 'Hello,\n\nWe received your Digital Services Act report about {targetKind, select, message {a message} user {an account} guild {a community} other {content}} on {product_name}.\n\nReport ID: {reportId}\n\nOur Safety Team will review your report and email you at this address once we have made a decision. Keep this email for your records.\n\n– {product_name} Safety Team', + }, report_resolved: { subject: 'Your {product_name} report has been reviewed', body: 'Hello {username},\n\nYour report (ID: {reportId}) has been reviewed by our Safety Team.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nThanks for helping keep {product_name} safe for everyone. We take all reports seriously and appreciate your contribution to the community.\n\nIf you have any questions or concerns about this outcome, please contact {safety_email}.\n\n– {product_name} Safety Team', diff --git a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.generated.ts b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.generated.ts index 5d07b0f70..12614a387 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.generated.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.generated.ts @@ -8,6 +8,7 @@ export type EmailTemplateKey = | 'account_temp_banned' | 'donation_confirmation' | 'donation_magic_link' + | 'dsa_report_resolved' | 'dsa_report_verification' | 'email_change_new' | 'email_change_original' @@ -21,6 +22,7 @@ export type EmailTemplateKey = | 'password_change_verification' | 'password_reset' | 'registration_approved' + | 'report_received' | 'report_resolved' | 'scheduled_deletion_notification' | 'self_deletion_scheduled' diff --git a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.ts b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.ts index c37d346a2..231890952 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/EmailI18nTypes.ts @@ -1,5 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +export type ReportReceivedTargetKind = 'message' | 'user' | 'guild'; + export interface EmailTemplateVariables { account_deletion_cancelled: { username: string; @@ -39,6 +41,11 @@ export interface EmailTemplateVariables { manageUrl: string; expiresAt: Date; }; + dsa_report_resolved: { + reportId: string; + publicComment: string; + hasComment: 'yes' | 'no'; + }; dsa_report_verification: { code: string; expiresAt: Date; @@ -102,6 +109,10 @@ export interface EmailTemplateVariables { username: string; channelsUrl: string; }; + report_received: { + reportId: string; + targetKind: ReportReceivedTargetKind; + }; report_resolved: { username: string; reportId: string; diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/ar.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/ar.ts index ee335fdb6..7aa452d85 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/ar.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/ar.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_AR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "إدارة تبرعاتك لـ{product_name}", "body": "مرحبًا،\n\nانقر على الرابط أدناه للوصول إلى بوابة المتبرعين الخاصة بك:\n\n{manageUrl}\n\nفي البوابة، يمكنك إدارة الاشتراكات، وتنزيل الفواتير، وعرض سجل تبرعاتك.\n\nتنتهي صلاحية هذا الرابط في {expiresAt, date, full} الساعة {expiresAt, time, short}.\n\nإذا لم تطلب هذا الرابط، يمكنك تجاهل هذا البريد الإلكتروني بأمان.\n\n– فريق {product_name}" }, + "dsa_report_resolved": { + "subject": "اتخذنا قرارًا بشأن بلاغك في {product_name}", + "body": "مرحبًا،\n\nراجع فريق الأمان لدينا بلاغك بموجب قانون الخدمات الرقمية (المعرف: {reportId}) واتخذ قرارًا.{hasComment, select, yes {\n\nرد فريق الأمان:\n{publicComment}} other {}}\n\nلا نشارك تفاصيل أي إجراء يُتخذ بحق حساب شخص آخر، لأنها بياناته الشخصية.\n\nإذا كنت لا توافق على هذا القرار، يمكنك تقديم استئناف مجانًا خلال 60 يومًا. أرسل بريدًا إلكترونيًا إلى {appeals_email} من عنوان البريد الإلكتروني هذا، واذكر معرف بلاغك، واشرح سبب اعتقادك أن القرار غير صحيح. إذا كنت في الاتحاد الأوروبي، يمكنك أيضًا إحالة النزاع إلى هيئة معتمدة لتسوية المنازعات خارج المحكمة. لا يؤثر أي من ذلك على حقك في اللجوء إلى القضاء.\n\n– فريق أمان {product_name}" + }, "dsa_report_verification": { "subject": "تحقق من بريدك الإلكتروني لتقديم بلاغ DSA", "body": "مرحبًا،\n\nاستخدم رمز التحقق أدناه لتقديم بلاغك بموجب قانون الخدمات الرقمية على {product_name}:\n\n{code}\n\nتنتهي صلاحية هذا الرمز في {expiresAt, date, full} الساعة {expiresAt, time, short}.\n\nإذا لم تطلب هذا، يمكنك تجاهل هذا البريد الإلكتروني.\n\n– فريق أمان {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_AR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "تمت الموافقة على تسجيلك في {product_name}", "body": "مرحبًا {username}،\n\nأخبار سارة: تمت الموافقة على تسجيلك في {product_name}.\n\nيمكنك الآن تسجيل الدخول إلى تطبيق {product_name} من هنا:\n{channelsUrl}\n\nمرحبًا بك في مجتمع {product_name}.\n\n– فريق {product_name}" }, + "report_received": { + "subject": "لقد استلمنا بلاغك في {product_name}", + "body": "مرحبًا،\n\nلقد استلمنا بلاغك بموجب قانون الخدمات الرقمية بشأن {targetKind, select, message {رسالة} user {حساب} guild {مجتمع} other {محتوى}} على {product_name}.\n\nمعرف البلاغ: {reportId}\n\nسيراجع فريق الأمان لدينا بلاغك وسنراسلك على هذا العنوان عندما نتخذ قرارًا. احتفظ بهذه الرسالة للرجوع إليها.\n\n– فريق أمان {product_name}" + }, "report_resolved": { "subject": "تمت مراجعة بلاغك في {product_name}", "body": "مرحبًا {username}،\n\nتمت مراجعة بلاغك (المعرف: {reportId}) من قبل فريق الأمان لدينا.{hasComment, select, yes {\n\nرد فريق الأمان:\n{publicComment}} other {}}\n\nشكرًا لمساعدتك في الحفاظ على {product_name} آمنًا للجميع. نحن نأخذ جميع البلاغات على محمل الجد ونقدر مساهمتك في المجتمع.\n\nإذا كان لديك أي أسئلة أو مخاوف بشأن هذه النتيجة، يرجى الاتصال بـ{safety_email}.\n\n– فريق أمان {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/bg.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/bg.ts index 227fb8067..4a8b28fce 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/bg.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/bg.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_BG_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Управлявай даренията си за {product_name}", "body": "Здравей,\n\nКликни върху линка по-долу, за да получиш достъп до портала за дарители:\n\n{manageUrl}\n\nВ портала можеш да управляваш абонаменти, да изтегляш фактури и да преглеждаш историята на даренията си.\n\nТози линк изтича на {expiresAt, date, full} в {expiresAt, time, short}.\n\nАко не си поискал този линк, можеш спокойно да игнорираш този имейл.\n\n– Екип на {product_name}" }, + "dsa_report_resolved": { + "subject": "Взехме решение по сигнала ти във {product_name}", + "body": "Здравей,\n\nНашият екип за безопасност прегледа сигнала ти по Закона за цифровите услуги (ID: {reportId}) и взе решение.{hasComment, select, yes {\n\nОтговор от екипа за безопасност:\n{publicComment}} other {}}\n\nНе споделяме подробности за действия, предприети срещу акаунта на друг човек, защото това са негови лични данни.\n\nАко не си съгласен с това решение, можеш да го обжалваш безплатно в срок от 60 дни. Изпрати имейл на {appeals_email} от този имейл адрес, посочи ID на сигнала си и обясни защо смяташ, че решението е неправилно. Ако се намираш в ЕС, можеш също да отнесеш спора към сертифициран орган за извънсъдебно решаване на спорове. Нищо от това не засяга правото ти да се обърнеш към съда.\n\n– Екип за безопасност на {product_name}" + }, "dsa_report_verification": { "subject": "Потвърди имейла си за сигнал по DSA", "body": "Здравей,\n\nИзползвай кода за потвърждение по-долу, за да подадеш сигнала си по Закона за цифровите услуги във {product_name}:\n\n{code}\n\nТози код изтича на {expiresAt, date, full} в {expiresAt, time, short}.\n\nАко не си го поискал, можеш да игнорираш този имейл.\n\n– Екип за безопасност на {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_BG_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Регистрацията ти във {product_name} е одобрена", "body": "Здравей, {username},\n\nДобра новина: регистрацията ти във {product_name} е одобрена.\n\nВече можеш да влезеш в приложението {product_name} тук:\n{channelsUrl}\n\nДобре дошъл в общността на {product_name}.\n\n– Екип на {product_name}" }, + "report_received": { + "subject": "Получихме сигнала ти във {product_name}", + "body": "Здравей,\n\nПолучихме сигнала ти по Закона за цифровите услуги относно {targetKind, select, message {съобщение} user {акаунт} guild {общност} other {съдържание}} във {product_name}.\n\nID на сигнала: {reportId}\n\nНашият екип за безопасност ще прегледа сигнала ти и ще ти пишем на този адрес, когато вземем решение. Запази този имейл за справка.\n\n– Екип за безопасност на {product_name}" + }, "report_resolved": { "subject": "Сигналът ти във {product_name} е прегледан", "body": "Здравей, {username},\n\nСигналът ти (ID: {reportId}) е прегледан от нашия екип за безопасност.{hasComment, select, yes {\n\nОтговор от екипа за безопасност:\n{publicComment}} other {}}\n\nБлагодарим ти, че помагаш на {product_name} да остане безопасно място за всички. Приемаме всички сигнали сериозно и ценим приноса ти към общността.\n\nАко имаш въпроси или притеснения относно този резултат, свържи се с {safety_email}.\n\n– Екип за безопасност на {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/cs.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/cs.ts index 9f106ec83..f629aa369 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/cs.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/cs.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_CS_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Spravujte své dary pro {product_name}", "body": "Dobrý den,\n\nKliknutím na odkaz níže otevřete portál pro dárce:\n\n{manageUrl}\n\nNa portálu můžete spravovat předplatná, stahovat faktury a prohlížet si historii svých darů.\n\nPlatnost tohoto odkazu vyprší dne {expiresAt, date, full} v {expiresAt, time, short}.\n\nPokud jste si tento odkaz nevyžádali, můžete tento e-mail bez obav ignorovat.\n\n– Tým {product_name}" }, + "dsa_report_resolved": { + "subject": "Rozhodli jsme o vašem nahlášení na {product_name}", + "body": "Dobrý den,\n\nNáš bezpečnostní tým přezkoumal vaše nahlášení podle nařízení o digitálních službách (ID: {reportId}) a rozhodl o něm.{hasComment, select, yes {\n\nOdpověď bezpečnostního týmu:\n{publicComment}} other {}}\n\nPodrobnosti o opatřeních přijatých vůči účtu jiné osoby nesdělujeme, protože jde o její osobní údaje.\n\nPokud s tímto rozhodnutím nesouhlasíte, můžete se do 60 dnů bezplatně odvolat. Pošlete e-mail na {appeals_email} z této e-mailové adresy, uveďte ID svého nahlášení a vysvětlete, proč považujete rozhodnutí za nesprávné. Pokud jste v EU, můžete spor také předložit certifikovanému subjektu pro mimosoudní řešení sporů. Nic z toho nemá vliv na vaše právo obrátit se na soud.\n\n– Bezpečnostní tým {product_name}" + }, "dsa_report_verification": { "subject": "Ověřte svůj e-mail pro nahlášení podle DSA", "body": "Dobrý den,\n\nPomocí ověřovacího kódu níže odešlete své nahlášení podle nařízení o digitálních službách na {product_name}:\n\n{code}\n\nPlatnost tohoto kódu vyprší dne {expiresAt, date, full} v {expiresAt, time, short}.\n\nPokud jste si tento kód nevyžádali, můžete tento e-mail ignorovat.\n\n– Bezpečnostní tým {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_CS_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Vaše registrace do {product_name} byla schválena", "body": "Dobrý den, {username},\n\nDobrá zpráva: vaše registrace do {product_name} byla schválena.\n\nNyní se můžete přihlásit do aplikace {product_name} zde:\n{channelsUrl}\n\nVítejte v komunitě {product_name}.\n\n– Tým {product_name}" }, + "report_received": { + "subject": "Obdrželi jsme vaše nahlášení na {product_name}", + "body": "Dobrý den,\n\nObdrželi jsme vaše nahlášení podle nařízení o digitálních službách, které se týká {targetKind, select, message {zprávy} user {účtu} guild {komunity} other {obsahu}} na {product_name}.\n\nID nahlášení: {reportId}\n\nNáš bezpečnostní tým vaše nahlášení přezkoumá a jakmile rozhodneme, napíšeme vám na tuto adresu. Tento e-mail si uschovejte pro své záznamy.\n\n– Bezpečnostní tým {product_name}" + }, "report_resolved": { "subject": "Vaše nahlášení na {product_name} bylo přezkoumáno", "body": "Dobrý den, {username},\n\nNáš bezpečnostní tým přezkoumal vaše nahlášení (ID: {reportId}).{hasComment, select, yes {\n\nOdpověď bezpečnostního týmu:\n{publicComment}} other {}}\n\nDěkujeme, že pomáháte udržovat {product_name} bezpečný pro všechny. Všechna nahlášení bereme vážně a vážíme si vašeho přínosu komunitě.\n\nPokud máte k tomuto výsledku jakékoli dotazy nebo výhrady, kontaktujte {safety_email}.\n\n– Bezpečnostní tým {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/da.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/da.ts index 533f23192..e057568dc 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/da.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/da.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_DA_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Administrer dine {product_name}-donationer", "body": "Hej,\n\nKlik på linket nedenfor for at få adgang til din donorportal:\n\n{manageUrl}\n\nI portalen kan du administrere abonnementer, downloade fakturaer og se din donationshistorik.\n\nDette link udløber den {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke har anmodet om dette link, kan du trygt ignorere denne e-mail.\n\n– Teamet bag {product_name}" }, + "dsa_report_resolved": { + "subject": "Vi har truffet en afgørelse om din anmeldelse på {product_name}", + "body": "Hej,\n\nVores sikkerhedsteam har behandlet din anmeldelse i henhold til Digital Services Act (ID: {reportId}) og truffet en afgørelse.{hasComment, select, yes {\n\nSvar fra sikkerhedsteamet:\n{publicComment}} other {}}\n\nVi deler ikke oplysninger om tiltag mod en anden persons konto, fordi det er den persons personoplysninger.\n\nHvis du er uenig i afgørelsen, kan du klage gratis inden for 60 dage. Send en e-mail til {appeals_email} fra denne e-mailadresse, oplys dit anmeldelses-ID, og forklar, hvorfor du mener, at afgørelsen er forkert. Hvis du befinder dig i EU, kan du også indbringe tvisten for et certificeret organ for udenretslig tvistbilæggelse. Intet af dette påvirker din ret til at gå til domstolene.\n\n– Sikkerhedsteamet hos {product_name}" + }, "dsa_report_verification": { "subject": "Bekræft din e-mailadresse til en DSA-anmeldelse", "body": "Hej,\n\nBrug bekræftelseskoden nedenfor til at indsende din anmeldelse i henhold til Digital Services Act på {product_name}:\n\n{code}\n\nDenne kode udløber den {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke har anmodet om dette, kan du ignorere denne e-mail.\n\n– Sikkerhedsteamet hos {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_DA_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Din tilmelding til {product_name} er godkendt", "body": "Hej {username},\n\nGode nyheder: Din tilmelding til {product_name} er godkendt.\n\nDu kan nu logge ind på {product_name}-appen her:\n{channelsUrl}\n\nVelkommen til fællesskabet på {product_name}.\n\n– Teamet bag {product_name}" }, + "report_received": { + "subject": "Vi har modtaget din anmeldelse på {product_name}", + "body": "Hej,\n\nVi har modtaget din anmeldelse i henhold til Digital Services Act om {targetKind, select, message {en besked} user {en konto} guild {et fællesskab} other {indhold}} på {product_name}.\n\nAnmeldelses-ID: {reportId}\n\nVores sikkerhedsteam gennemgår din anmeldelse, og vi sender dig en e-mail på denne adresse, når vi har truffet en afgørelse. Gem denne e-mail, så du har den til senere.\n\n– Sikkerhedsteamet hos {product_name}" + }, "report_resolved": { "subject": "Din anmeldelse på {product_name} er blevet behandlet", "body": "Hej {username},\n\nDin anmeldelse (ID: {reportId}) er blevet behandlet af vores sikkerhedsteam.{hasComment, select, yes {\n\nSvar fra sikkerhedsteamet:\n{publicComment}} other {}}\n\nTak for din hjælp til at holde {product_name} sikkert for alle. Vi tager alle anmeldelser alvorligt og værdsætter dit bidrag til fællesskabet.\n\nHvis du har spørgsmål eller bekymringer vedrørende dette resultat, kan du kontakte {safety_email}.\n\n– Sikkerhedsteamet hos {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/de.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/de.ts index 5a870c312..046c3aa97 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/de.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/de.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_DE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Verwalte deine {product_name}-Spenden", "body": "Hallo,\n\nklicke auf den Link unten, um auf dein Spendenportal zuzugreifen:\n\n{manageUrl}\n\nIm Portal kannst du Abonnements verwalten, Rechnungen herunterladen und deine Spendenübersicht einsehen.\n\nDieser Link läuft am {expiresAt, date, full} um {expiresAt, time, short} ab.\n\nWenn du diesen Link nicht angefordert hast, kannst du diese E-Mail ignorieren.\n\n– {product_name}-Team" }, + "dsa_report_resolved": { + "subject": "Wir haben über deine {product_name}-Meldung entschieden", + "body": "Hallo,\n\nunser Sicherheitsteam hat deine Meldung nach dem Digital Services Act (ID: {reportId}) geprüft und eine Entscheidung getroffen.{hasComment, select, yes {\n\nAntwort vom Sicherheitsteam:\n{publicComment}} other {}}\n\nWir geben keine Einzelheiten zu Maßnahmen gegen den Account einer anderen Person weiter, da es sich um deren personenbezogene Daten handelt.\n\nWenn du mit dieser Entscheidung nicht einverstanden bist, kannst du innerhalb von 60 Tagen kostenlos Einspruch einlegen. Sende eine E-Mail von dieser E-Mail-Adresse an {appeals_email}, gib deine Meldungs-ID an und erkläre, warum du die Entscheidung für falsch hältst. Wenn du dich in der EU befindest, kannst du die Streitigkeit außerdem einer zertifizierten außergerichtlichen Streitbeilegungsstelle vorlegen. Dein Recht, vor Gericht zu gehen, bleibt davon unberührt.\n\n– {product_name}-Sicherheitsteam" + }, "dsa_report_verification": { "subject": "Bestätige deine E-Mail-Adresse für eine DSA-Meldung", "body": "Hallo,\n\nverwende den untenstehenden Bestätigungscode, um deine Meldung nach dem Digital Services Act (DSA) auf {product_name} einzureichen:\n\n{code}\n\nDieser Code läuft am {expiresAt, date, full} um {expiresAt, time, short} ab.\n\nWenn du dies nicht angefordert hast, kannst du diese E-Mail ignorieren.\n\n– {product_name}-Sicherheitsteam" @@ -83,6 +87,10 @@ const EMAIL_I18N_DE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Deine {product_name}-Registrierung wurde genehmigt", "body": "Hallo {username},\n\ngute Nachrichten: Deine {product_name}-Registrierung wurde genehmigt.\n\nDu kannst dich jetzt hier in die {product_name}-App einloggen:\n{channelsUrl}\n\nWillkommen in der {product_name}-Community.\n\n– {product_name}-Team" }, + "report_received": { + "subject": "Wir haben deine {product_name}-Meldung erhalten", + "body": "Hallo,\n\nwir haben deine Meldung nach dem Digital Services Act (DSA) über {targetKind, select, message {eine Nachricht} user {einen Account} guild {eine Community} other {Inhalte}} auf {product_name} erhalten.\n\nMeldungs-ID: {reportId}\n\nUnser Sicherheitsteam prüft deine Meldung. Sobald wir eine Entscheidung getroffen haben, schreiben wir dir an diese E-Mail-Adresse. Bitte bewahre diese E-Mail für deine Unterlagen auf.\n\n– {product_name}-Sicherheitsteam" + }, "report_resolved": { "subject": "Deine {product_name}-Meldung wurde geprüft", "body": "Hallo {username},\n\ndeine Meldung (ID: {reportId}) wurde von unserem Sicherheitsteam geprüft.{hasComment, select, yes {\n\nAntwort vom Sicherheitsteam:\n{publicComment}} other {}}\n\nDanke, dass du hilfst, {product_name} für alle sicher zu halten. Wir nehmen alle Meldungen ernst und schätzen deinen Beitrag zur Community.\n\nWenn du Fragen oder Bedenken zu diesem Ergebnis hast, kontaktiere bitte {safety_email}.\n\n– {product_name}-Sicherheitsteam" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/el.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/el.ts index 5b60e98da..1039dc53a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/el.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/el.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_EL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Διαχειρίσου τις δωρεές σου στο {product_name}", "body": "Γεια σου,\n\nΚάνε κλικ στον παρακάτω σύνδεσμο για να αποκτήσεις πρόσβαση στην πύλη δωρητών σου:\n\n{manageUrl}\n\nΣτην πύλη μπορείς να διαχειριστείς τις συνδρομές, να κατεβάσεις τιμολόγια και να δεις το ιστορικό των δωρεών σου.\n\nΑυτός ο σύνδεσμος λήγει στις {expiresAt, date, full} και ώρα {expiresAt, time, short}.\n\nΕάν δεν ζήτησες αυτόν τον σύνδεσμο, μπορείς να αγνοήσεις με ασφάλεια αυτό το email.\n\n– Η ομάδα του {product_name}" }, + "dsa_report_resolved": { + "subject": "Λάβαμε απόφαση για την αναφορά σου στο {product_name}", + "body": "Γεια σου,\n\nΗ ομάδα ασφαλείας μας εξέτασε την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες (ID: {reportId}) και έλαβε απόφαση.{hasComment, select, yes {\n\nΑπάντηση από την ομάδα ασφαλείας:\n{publicComment}} other {}}\n\nΔεν κοινοποιούμε λεπτομέρειες για ενέργειες που έγιναν σε βάρος του λογαριασμού άλλου ατόμου, επειδή πρόκειται για δικά του προσωπικά δεδομένα.\n\nΕάν διαφωνείς με αυτήν την απόφαση, μπορείς να υποβάλεις προσφυγή δωρεάν εντός 60 ημερών. Στείλε email στο {appeals_email} από αυτήν τη διεύθυνση email, ανάφερε το ID της αναφοράς σου και εξήγησε γιατί πιστεύεις ότι η απόφαση είναι λανθασμένη. Εάν βρίσκεσαι στην ΕΕ, μπορείς επίσης να παραπέμψεις τη διαφορά σε πιστοποιημένο όργανο εξωδικαστικής επίλυσης διαφορών. Τίποτα από αυτά δεν επηρεάζει το δικαίωμά σου να προσφύγεις στα δικαστήρια.\n\n– Η ομάδα ασφαλείας του {product_name}" + }, "dsa_report_verification": { "subject": "Επαλήθευσε το email σου για αναφορά DSA", "body": "Γεια σου,\n\nΧρησιμοποίησε τον παρακάτω κωδικό επαλήθευσης για να υποβάλεις την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες στο {product_name}:\n\n{code}\n\nΑυτός ο κωδικός λήγει στις {expiresAt, date, full} και ώρα {expiresAt, time, short}.\n\nΕάν δεν το ζήτησες, μπορείς να αγνοήσεις αυτό το email.\n\n– Η ομάδα ασφαλείας του {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_EL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Η εγγραφή σου στο {product_name} έχει εγκριθεί", "body": "Γεια σου {username},\n\nΚαλά νέα: η εγγραφή σου στο {product_name} έχει εγκριθεί.\n\nΜπορείς τώρα να συνδεθείς στην εφαρμογή του {product_name} εδώ:\n{channelsUrl}\n\nΚαλώς ήρθες στην κοινότητα του {product_name}.\n\n– Η ομάδα του {product_name}" }, + "report_received": { + "subject": "Λάβαμε την αναφορά σου στο {product_name}", + "body": "Γεια σου,\n\nΛάβαμε την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες σχετικά με {targetKind, select, message {ένα μήνυμα} user {έναν λογαριασμό} guild {μια κοινότητα} other {περιεχόμενο}} στο {product_name}.\n\nID αναφοράς: {reportId}\n\nΗ ομάδα ασφαλείας μας θα εξετάσει την αναφορά σου και θα σου στείλουμε email σε αυτήν τη διεύθυνση μόλις λάβουμε απόφαση. Κράτησε αυτό το email για το αρχείο σου.\n\n– Η ομάδα ασφαλείας του {product_name}" + }, "report_resolved": { "subject": "Η αναφορά σου στο {product_name} έχει εξεταστεί", "body": "Γεια σου {username},\n\nΗ αναφορά σου (ID: {reportId}) εξετάστηκε από την ομάδα ασφαλείας μας.{hasComment, select, yes {\n\nΑπάντηση από την ομάδα ασφαλείας:\n{publicComment}} other {}}\n\nΕυχαριστούμε που βοηθάς να παραμείνει το {product_name} ασφαλές για όλους. Λαμβάνουμε σοβαρά υπόψη κάθε αναφορά και εκτιμούμε τη συμβολή σου στην κοινότητα.\n\nΕάν έχεις ερωτήσεις ή απορίες σχετικά με αυτό το αποτέλεσμα, στείλε email στο {safety_email}.\n\n– Η ομάδα ασφαλείας του {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/en-GB.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/en-GB.ts index 1a645ab9e..277e0c833 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/en-GB.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/en-GB.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_EN_GB_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Manage your {product_name} donations", "body": "Hello,\n\nClick the link below to access your donor portal:\n\n{manageUrl}\n\nIn the portal, you can manage subscriptions, download invoices, and view your donation history.\n\nThis link expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you did not request this link, you can safely ignore this email.\n\n– {product_name} Team" }, + "dsa_report_resolved": { + "subject": "We made a decision on your {product_name} report", + "body": "Hello,\n\nOur Safety Team has reviewed your Digital Services Act report (ID: {reportId}) and made a decision.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nWe don't share details of any action taken against another person's account, because that is their personal data.\n\nIf you disagree with this decision, you can appeal free of charge within 60 days. Email {appeals_email} from this email address, include your report ID, and explain why you think the decision is wrong. If you are in the EU, you can also refer the dispute to a certified out-of-court dispute settlement body. None of this affects your right to go to court.\n\n– {product_name} Safety Team" + }, "dsa_report_verification": { "subject": "Verify your email for a DSA report", "body": "Hello,\n\nUse the verification code below to submit your Digital Services Act report on {product_name}:\n\n{code}\n\nThis code expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you didn't request this, you can ignore this email.\n\n– {product_name} Safety Team" @@ -83,6 +87,10 @@ const EMAIL_I18N_EN_GB_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Your {product_name} registration has been approved", "body": "Hello {username},\n\nGood news: your {product_name} registration has been approved.\n\nYou can now log in to the {product_name} app here:\n{channelsUrl}\n\nWelcome to the {product_name} community.\n\n– {product_name} Team" }, + "report_received": { + "subject": "We received your {product_name} report", + "body": "Hello,\n\nWe received your Digital Services Act report about {targetKind, select, message {a message} user {an account} guild {a community} other {content}} on {product_name}.\n\nReport ID: {reportId}\n\nOur Safety Team will review your report and email you at this address once we have made a decision. Keep this email for your records.\n\n– {product_name} Safety Team" + }, "report_resolved": { "subject": "Your {product_name} report has been reviewed", "body": "Hello {username},\n\nYour report (ID: {reportId}) has been reviewed by our Safety Team.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nThanks for helping keep {product_name} safe for everyone. We take all reports seriously and appreciate your contribution to the community.\n\nIf you have any questions or concerns about this outcome, please contact {safety_email}.\n\n– {product_name} Safety Team" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/es-419.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/es-419.ts index 0d426b8aa..7688df506 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/es-419.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/es-419.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_ES_419_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Administra tus donaciones a {product_name}", "body": "Hola:\n\nHaz clic en el siguiente enlace para acceder a tu portal de donantes:\n\n{manageUrl}\n\nEn el portal, puedes administrar suscripciones, descargar facturas y ver tu historial de donaciones.\n\nEste enlace vence el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste este enlace, puedes ignorar este correo electrónico de forma segura.\n\n– Equipo de {product_name}" }, + "dsa_report_resolved": { + "subject": "Tomamos una decisión sobre tu reporte en {product_name}", + "body": "Hola:\n\nNuestro equipo de seguridad revisó tu reporte conforme a la Ley de Servicios Digitales (ID: {reportId}) y tomó una decisión.{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nNo compartimos detalles sobre las medidas tomadas contra la cuenta de otra persona, porque son sus datos personales.\n\nSi no estás de acuerdo con esta decisión, puedes apelar sin costo dentro de un plazo de 60 días. Envía un correo electrónico a {appeals_email} desde esta dirección de correo electrónico, incluye el ID de tu reporte y explica por qué crees que la decisión es incorrecta. Si te encuentras en la UE, también puedes remitir la disputa a un órgano certificado de resolución extrajudicial de litigios. Nada de esto afecta tu derecho a acudir a los tribunales.\n\n– Equipo de seguridad de {product_name}" + }, "dsa_report_verification": { "subject": "Verifica tu correo electrónico para enviar un reporte conforme a la Ley de Servicios Digitales", "body": "Hola:\n\nUsa el código de verificación a continuación para enviar tu reporte conforme a la Ley de Servicios Digitales en {product_name}:\n\n{code}\n\nEste código vence el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste esto, puedes ignorar este correo electrónico.\n\n– Equipo de seguridad de {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_ES_419_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Tu registro en {product_name} ha sido aprobado", "body": "Hola {username}:\n\nBuenas noticias: tu registro en {product_name} ha sido aprobado.\n\nAhora puedes iniciar sesión en la aplicación de {product_name} aquí:\n{channelsUrl}\n\nBienvenido a la comunidad de {product_name}.\n\n– Equipo de {product_name}" }, + "report_received": { + "subject": "Recibimos tu reporte en {product_name}", + "body": "Hola:\n\nRecibimos tu reporte conforme a la Ley de Servicios Digitales sobre {targetKind, select, message {un mensaje} user {una cuenta} guild {una comunidad} other {contenido}} en {product_name}.\n\nID del reporte: {reportId}\n\nNuestro equipo de seguridad revisará tu reporte y te escribiremos a esta dirección cuando hayamos tomado una decisión. Guarda este correo electrónico para tus registros.\n\n– Equipo de seguridad de {product_name}" + }, "report_resolved": { "subject": "Se revisó tu reporte en {product_name}", "body": "Hola {username}:\n\nNuestro equipo de seguridad revisó tu reporte (ID: {reportId}).{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nGracias por ayudar a mantener {product_name} seguro para todos. Nos tomamos todos los reportes en serio y agradecemos tu contribución a la comunidad.\n\nSi tienes alguna pregunta o inquietud sobre este resultado, comunícate con {safety_email}.\n\n– Equipo de seguridad de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/es-ES.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/es-ES.ts index 2b0138480..0c0f2bf1e 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/es-ES.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/es-ES.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_ES_ES_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Gestiona tus donaciones a {product_name}", "body": "Hola:\n\nHaz clic en el siguiente enlace para acceder a tu portal de donantes:\n\n{manageUrl}\n\nEn el portal, puedes gestionar suscripciones, descargar facturas y ver tu historial de donaciones.\n\nEste enlace caduca el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste este enlace, puedes ignorar este correo electrónico de forma segura.\n\n– Equipo de {product_name}" }, + "dsa_report_resolved": { + "subject": "Hemos tomado una decisión sobre tu denuncia en {product_name}", + "body": "Hola:\n\nNuestro equipo de seguridad ha revisado tu denuncia conforme a la Ley de Servicios Digitales (ID: {reportId}) y ha tomado una decisión.{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nNo compartimos detalles sobre las medidas adoptadas contra la cuenta de otra persona, porque son sus datos personales.\n\nSi no estás de acuerdo con esta decisión, puedes presentar una apelación de forma gratuita en un plazo de 60 días. Envía un correo electrónico a {appeals_email} desde esta dirección de correo electrónico, incluye el ID de tu denuncia y explica por qué crees que la decisión es incorrecta. Si te encuentras en la UE, también puedes someter el litigio a un órgano certificado de resolución extrajudicial de litigios. Nada de esto afecta a tu derecho a acudir a los tribunales.\n\n– Equipo de seguridad de {product_name}" + }, "dsa_report_verification": { "subject": "Verifica tu correo electrónico para enviar una denuncia conforme a la Ley de Servicios Digitales", "body": "Hola:\n\nUsa el siguiente código de verificación para enviar tu denuncia conforme a la Ley de Servicios Digitales en {product_name}:\n\n{code}\n\nEste código caduca el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste esto, puedes ignorar este correo electrónico.\n\n– Equipo de seguridad de {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_ES_ES_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Tu registro en {product_name} ha sido aprobado", "body": "Hola {username}:\n\nBuenas noticias: tu registro en {product_name} ha sido aprobado.\n\nAhora puedes iniciar sesión en la aplicación de {product_name} aquí:\n{channelsUrl}\n\nBienvenido a la comunidad de {product_name}.\n\n– Equipo de {product_name}" }, + "report_received": { + "subject": "Hemos recibido tu denuncia en {product_name}", + "body": "Hola:\n\nHemos recibido tu denuncia conforme a la Ley de Servicios Digitales sobre {targetKind, select, message {un mensaje} user {una cuenta} guild {una comunidad} other {contenido}} en {product_name}.\n\nID de la denuncia: {reportId}\n\nNuestro equipo de seguridad revisará tu denuncia y te escribiremos a esta dirección cuando hayamos tomado una decisión. Guarda este correo electrónico para tus registros.\n\n– Equipo de seguridad de {product_name}" + }, "report_resolved": { "subject": "Se ha revisado tu denuncia en {product_name}", "body": "Hola {username}:\n\nNuestro equipo de seguridad ha revisado tu denuncia (ID: {reportId}).{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nGracias por ayudarnos a mantener {product_name} seguro para todos. Nos tomamos todas las denuncias en serio y agradecemos tu contribución a la comunidad.\n\nSi tienes alguna pregunta o inquietud sobre este resultado, ponte en contacto con {safety_email}.\n\n– Equipo de seguridad de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/fi.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/fi.ts index fa9f3f92e..5ae47a24e 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/fi.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/fi.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_FI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Hallitse {product_name}-lahjoituksiasi", "body": "Hei,\n\nNapsauta alla olevaa linkkiä päästäksesi lahjoittajaportaaliisi:\n\n{manageUrl}\n\nPortaalissa voit hallinnoida tilauksia, ladata laskuja ja tarkastella lahjoitushistoriaasi.\n\nTämä linkki vanhenee {expiresAt, date, full} klo {expiresAt, time, short}.\n\nJos et pyytänyt tätä linkkiä, voit jättää tämän sähköpostin turvallisesti huomiotta.\n\n– {product_name}-tiimi" }, + "dsa_report_resolved": { + "subject": "Teimme päätöksen {product_name}-ilmoituksestasi", + "body": "Hei,\n\nTurvallisuustiimimme on käsitellyt digipalvelusäädöksen mukaisen ilmoituksesi (ID: {reportId}) ja tehnyt päätöksen.{hasComment, select, yes {\n\nTurvallisuustiimin vastaus:\n{publicComment}} other {}}\n\nEmme kerro toisen henkilön tiliin kohdistuneista toimista, koska ne ovat hänen henkilötietojaan.\n\nJos olet eri mieltä päätöksestä, voit valittaa siitä maksutta 60 päivän kuluessa. Lähetä sähköpostia osoitteeseen {appeals_email} tästä sähköpostiosoitteesta, kerro ilmoituksesi tunnus ja selitä, miksi pidät päätöstä virheellisenä. Jos olet EU:ssa, voit myös viedä riidan sertifioidun tuomioistuimen ulkopuolisen riidanratkaisuelimen käsiteltäväksi. Mikään tästä ei vaikuta oikeuteesi viedä asia tuomioistuimeen.\n\n– {product_name}-turvallisuustiimi" + }, "dsa_report_verification": { "subject": "Vahvista sähköpostiosoitteesi DSA-ilmoitusta varten", "body": "Hei,\n\nKäytä alla olevaa vahvistuskoodia lähettääksesi digipalvelusäädöksen mukaisen ilmoituksen {product_name}-palveluun:\n\n{code}\n\nTämä koodi vanhenee {expiresAt, date, full} klo {expiresAt, time, short}.\n\nJos et pyytänyt tätä, voit jättää tämän sähköpostin huomiotta.\n\n– {product_name}-turvallisuustiimi" @@ -83,6 +87,10 @@ const EMAIL_I18N_FI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name}-rekisteröitymisesi on hyväksytty", "body": "Hei {username},\n\nHyviä uutisia: {product_name}-rekisteröitymisesi on hyväksytty.\n\nVoit nyt kirjautua {product_name}-sovellukseen täältä:\n{channelsUrl}\n\nTervetuloa {product_name}-yhteisöön.\n\n– {product_name}-tiimi" }, + "report_received": { + "subject": "Vastaanotimme {product_name}-ilmoituksesi", + "body": "Hei,\n\nVastaanotimme digipalvelusäädöksen mukaisen ilmoituksesi, joka koskee {targetKind, select, message {viestiä} user {tiliä} guild {yhteisöä} other {sisältöä}} {product_name}-palvelussa.\n\nIlmoituksen tunnus: {reportId}\n\nTurvallisuustiimimme käsittelee ilmoituksesi, ja lähetämme sinulle sähköpostia tähän osoitteeseen, kun olemme tehneet päätöksen. Säilytä tämä sähköposti myöhempää tarvetta varten.\n\n– {product_name}-turvallisuustiimi" + }, "report_resolved": { "subject": "{product_name}-ilmoituksesi on käsitelty", "body": "Hei {username},\n\nTurvallisuustiimimme on käsitellyt ilmoituksesi (ID: {reportId}).{hasComment, select, yes {\n\nTurvallisuustiimin vastaus:\n{publicComment}} other {}}\n\nKiitos, että autat pitämään {product_name}-palvelun turvallisena kaikille. Otamme kaikki ilmoitukset vakavasti ja arvostamme panostasi yhteisöön.\n\nJos sinulla on kysyttävää tai huolenaiheita tästä päätöksestä, ota yhteyttä osoitteeseen {safety_email}.\n\n– {product_name}-turvallisuustiimi" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/fr.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/fr.ts index 9f846e34d..9693d7654 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/fr.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/fr.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_FR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Gérer vos dons à {product_name}", "body": "Bonjour,\n\nCliquez sur le lien ci-dessous pour accéder à votre portail de donateur :\n\n{manageUrl}\n\nVous pouvez y gérer vos abonnements, télécharger des factures et consulter l’historique de vos dons.\n\nCe lien expire le {expiresAt, date, full} à {expiresAt, time, short}.\n\nSi vous n’avez pas demandé ce lien, vous pouvez ignorer cet e-mail.\n\n– L’équipe {product_name}" }, + "dsa_report_resolved": { + "subject": "Nous avons pris une décision concernant votre signalement sur {product_name}", + "body": "Bonjour,\n\nNotre équipe de sécurité a examiné votre signalement au titre du règlement sur les services numériques (ID : {reportId}) et a pris une décision.{hasComment, select, yes {\n\nRéponse de l’équipe de sécurité :\n{publicComment}} other {}}\n\nNous ne communiquons pas le détail des mesures prises à l’encontre du compte d’une autre personne, car il s’agit de ses données personnelles.\n\nSi vous n’êtes pas d’accord avec cette décision, vous pouvez déposer un recours gratuitement dans un délai de 60 jours. Écrivez à {appeals_email} depuis cette adresse e-mail, indiquez l’ID de votre signalement et expliquez pourquoi vous estimez que la décision est incorrecte. Si vous êtes dans l’UE, vous pouvez également soumettre le litige à un organe certifié de règlement extrajudiciaire des litiges. Rien de tout cela n’affecte votre droit de saisir un tribunal.\n\n– L’équipe de sécurité de {product_name}" + }, "dsa_report_verification": { "subject": "Vérifiez votre e-mail pour un signalement DSA", "body": "Bonjour,\n\nUtilisez le code ci-dessous pour envoyer votre signalement au titre du règlement sur les services numériques (DSA) sur {product_name} :\n\n{code}\n\nCe code expire le {expiresAt, date, full} à {expiresAt, time, short}.\n\nSi vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer cet e-mail.\n\n– L’équipe de sécurité de {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_FR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Votre inscription à {product_name} a été approuvée", "body": "Bonjour {username},\n\nBonne nouvelle : votre inscription à {product_name} a été approuvée.\n\nVous pouvez maintenant vous connecter à l’application {product_name} ici :\n{channelsUrl}\n\nBienvenue dans la communauté {product_name}.\n\n– L’équipe {product_name}" }, + "report_received": { + "subject": "Nous avons bien reçu votre signalement sur {product_name}", + "body": "Bonjour,\n\nNous avons bien reçu votre signalement au titre du règlement sur les services numériques (DSA) concernant {targetKind, select, message {un message} user {un compte} guild {une communauté} other {du contenu}} sur {product_name}.\n\nID du signalement : {reportId}\n\nNotre équipe de sécurité examinera votre signalement et nous vous écrirons à cette adresse dès qu’une décision aura été prise. Conservez cet e-mail pour vos archives.\n\n– L’équipe de sécurité de {product_name}" + }, "report_resolved": { "subject": "Votre signalement sur {product_name} a été examiné", "body": "Bonjour {username},\n\nVotre signalement (ID : {reportId}) a été examiné par notre équipe de sécurité.{hasComment, select, yes {\n\nRéponse de l’équipe de sécurité :\n{publicComment}} other {}}\n\nMerci de nous aider à préserver la sécurité de {product_name} pour tous. Nous prenons tous les signalements au sérieux et apprécions votre contribution à la communauté.\n\nPour toute question ou préoccupation concernant cette décision, contactez {safety_email}.\n\n– L’équipe de sécurité de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/he.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/he.ts index 68b9c79ed..7f96263e8 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/he.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/he.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_HE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "ניהול התרומות שלכם ל-{product_name}", "body": "שלום,\n\nלחצו על הקישור למטה כדי לגשת לפורטל התורמים שלכם:\n\n{manageUrl}\n\nבפורטל, אתם יכולים לנהל מנויים, להוריד חשבוניות ולצפות בהיסטוריית התרומות שלכם.\n\nקישור זה יפוג בתאריך {expiresAt, date, full} בשעה {expiresAt, time, short}.\n\nאם לא ביקשתם קישור זה, אתם יכולים להתעלם בבטחה מאימייל זה.\n\nצוות {product_name}" }, + "dsa_report_resolved": { + "subject": "קיבלנו החלטה בנוגע לדיווח שלכם ב-{product_name}", + "body": "שלום,\n\nצוות הבטיחות שלנו בדק את הדיווח שלכם לפי חוק השירותים הדיגיטליים (מזהה: {reportId}) וקיבל החלטה.{hasComment, select, yes {\n\nתגובה מצוות הבטיחות:\n{publicComment}} other {}}\n\nאיננו משתפים פרטים על פעולות שננקטו נגד חשבון של אדם אחר, מכיוון שאלה נתונים אישיים שלו.\n\nאם אינכם מסכימים עם ההחלטה, תוכלו להגיש ערעור ללא תשלום בתוך 60 יום. שלחו אימייל לכתובת {appeals_email} מכתובת האימייל הזו, ציינו את מזהה הדיווח והסבירו מדוע לדעתכם ההחלטה שגויה. אם אתם נמצאים באיחוד האירופי, תוכלו גם להפנות את המחלוקת לגוף מוסמך ליישוב סכסוכים מחוץ לבית המשפט. אין בכך כדי לפגוע בזכותכם לפנות לבית המשפט.\n\nצוות הבטיחות של {product_name}" + }, "dsa_report_verification": { "subject": "אימות האימייל שלכם לדיווח DSA", "body": "שלום,\n\nהשתמשו בקוד האימות למטה כדי להגיש את הדיווח שלכם לפי חוק השירותים הדיגיטליים ב-{product_name}:\n\n{code}\n\nקוד זה יפוג בתאריך {expiresAt, date, full} בשעה {expiresAt, time, short}.\n\nאם לא ביקשתם זאת, אתם יכולים להתעלם מאימייל זה.\n\nצוות הבטיחות של {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_HE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "ההרשמה שלכם ל-{product_name} אושרה", "body": "שלום {username},\n\nחדשות טובות: ההרשמה שלכם ל-{product_name} אושרה.\n\nכעת אתם יכולים להתחבר לאפליקציית {product_name} כאן:\n{channelsUrl}\n\nברוכים הבאים לקהילת {product_name}.\n\nצוות {product_name}" }, + "report_received": { + "subject": "קיבלנו את הדיווח שלכם ב-{product_name}", + "body": "שלום,\n\nקיבלנו את הדיווח שלכם לפי חוק השירותים הדיגיטליים על {targetKind, select, message {הודעה} user {חשבון} guild {קהילה} other {תוכן}} ב-{product_name}.\n\nמזהה הדיווח: {reportId}\n\nצוות הבטיחות שלנו יבדוק את הדיווח, ונשלח לכם אימייל לכתובת זו כשנקבל החלטה. שמרו את האימייל הזה לתיעוד.\n\nצוות הבטיחות של {product_name}" + }, "report_resolved": { "subject": "הדיווח שלכם ב-{product_name} נבדק", "body": "שלום {username},\n\nהדיווח שלכם (מזהה: {reportId}) נבדק על ידי צוות הבטיחות שלנו.{hasComment, select, yes {\n\nתגובה מצוות הבטיחות:\n{publicComment}} other {}}\n\nתודה שעזרתם לשמור על {product_name} כמקום בטוח לכולם. אנו מתייחסים לכל הדיווחים ברצינות ומעריכים את תרומתכם לקהילה.\n\nאם יש לכם שאלות או חששות לגבי תוצאה זו, אנא צרו קשר עם {safety_email}.\n\nצוות הבטיחות של {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/hi.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/hi.ts index 60d10f2ca..694066e7c 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/hi.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/hi.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_HI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "अपने {product_name} डोनेशन मैनेज करें", "body": "नमस्ते,\n\nअपना डोनर पोर्टल एक्सेस करने के लिए नीचे दिए गए लिंक पर क्लिक करें:\n\n{manageUrl}\n\nपोर्टल में, आप सब्सक्रिप्शन मैनेज कर सकते हैं, इनवॉइस डाउनलोड कर सकते हैं और अपने डोनेशन का इतिहास देख सकते हैं।\n\nयह लिंक {expiresAt, date, full} को {expiresAt, time, short} पर एक्सपायर हो जाएगा।\n\nअगर आपने इस लिंक का अनुरोध नहीं किया था, तो आप इस ईमेल को बेझिझक अनदेखा कर सकते हैं।\n\n– {product_name} टीम" }, + "dsa_report_resolved": { + "subject": "हमने आपकी {product_name} रिपोर्ट पर फैसला ले लिया है", + "body": "नमस्ते,\n\nहमारी सेफ्टी टीम ने आपकी Digital Services Act रिपोर्ट (ID: {reportId}) का रिव्यू करके फैसला ले लिया है।{hasComment, select, yes {\n\nसेफ्टी टीम का जवाब:\n{publicComment}} other {}}\n\nहम किसी दूसरे व्यक्ति के अकाउंट पर की गई कार्रवाई की जानकारी शेयर नहीं करते, क्योंकि वह उनका निजी डेटा है।\n\nअगर आप इस फैसले से सहमत नहीं हैं, तो आप 60 दिनों के अंदर मुफ़्त में अपील कर सकते हैं। इस ईमेल पते से {appeals_email} पर ईमेल करें, अपनी रिपोर्ट ID शामिल करें और बताएं कि आपको फैसला गलत क्यों लगता है। अगर आप EU में हैं, तो आप इस विवाद को अदालत के बाहर विवाद निपटाने वाली किसी प्रमाणित संस्था के पास भी ले जा सकते हैं। इनमें से किसी भी बात का आपके अदालत जाने के अधिकार पर कोई असर नहीं पड़ता।\n\n– {product_name} सेफ्टी टीम" + }, "dsa_report_verification": { "subject": "DSA रिपोर्ट के लिए अपना ईमेल वेरिफ़ाई करें", "body": "नमस्ते,\n\n{product_name} पर अपनी Digital Services Act रिपोर्ट सबमिट करने के लिए नीचे दिए गए वेरिफ़िकेशन कोड का इस्तेमाल करें:\n\n{code}\n\nयह कोड {expiresAt, date, full} को {expiresAt, time, short} पर एक्सपायर हो जाएगा।\n\nअगर आपने इसका अनुरोध नहीं किया था, तो आप इस ईमेल को अनदेखा कर सकते हैं।\n\n– {product_name} सेफ्टी टीम" @@ -83,6 +87,10 @@ const EMAIL_I18N_HI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "आपका {product_name} रजिस्ट्रेशन अप्रूव हो गया है", "body": "नमस्ते {username},\n\nअच्छी खबर: आपका {product_name} रजिस्ट्रेशन अप्रूव हो गया है।\n\nअब आप {product_name} ऐप में यहाँ लॉगिन कर सकते हैं:\n{channelsUrl}\n\n{product_name} कम्युनिटी में आपका स्वागत है।\n\n– {product_name} टीम" }, + "report_received": { + "subject": "हमें आपकी {product_name} रिपोर्ट मिल गई है", + "body": "नमस्ते,\n\nहमें {product_name} पर {targetKind, select, message {एक मैसेज} user {एक अकाउंट} guild {एक कम्युनिटी} other {सामग्री}} के बारे में आपकी Digital Services Act रिपोर्ट मिल गई है।\n\nरिपोर्ट ID: {reportId}\n\nहमारी सेफ्टी टीम आपकी रिपोर्ट का रिव्यू करेगी और फैसला लेने के बाद हम आपको इसी पते पर ईमेल करेंगे। इस ईमेल को अपने रिकॉर्ड के लिए संभालकर रखें।\n\n– {product_name} सेफ्टी टीम" + }, "report_resolved": { "subject": "आपकी {product_name} रिपोर्ट का रिव्यू कर लिया गया है", "body": "नमस्ते {username},\n\nआपकी रिपोर्ट (ID: {reportId}) का हमारी सेफ्टी टीम ने रिव्यू कर लिया है।{hasComment, select, yes {\n\nसेफ्टी टीम का जवाब:\n{publicComment}} other {}}\n\n{product_name} को सभी के लिए सुरक्षित रखने में मदद करने के लिए धन्यवाद। हम हर रिपोर्ट को गंभीरता से लेते हैं और कम्युनिटी में आपके योगदान की सराहना करते हैं।\n\nअगर आपको इस नतीजे के बारे में कोई सवाल या चिंता है, तो कृपया {safety_email} पर संपर्क करें।\n\n– {product_name} सेफ्टी टीम" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/hr.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/hr.ts index def902073..215fa9cce 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/hr.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/hr.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_HR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Upravljanje donacijama za {product_name}", "body": "Pozdrav,\n\nKlikni na poveznicu ispod za pristup svom portalu za donatore:\n\n{manageUrl}\n\nNa portalu možeš upravljati pretplatama, preuzimati račune i pregledavati povijest svojih donacija.\n\nOva poveznica istječe {expiresAt, date, full} u {expiresAt, time, short}.\n\nAko ovaj zahtjev ne dolazi od tebe, slobodno zanemari ovu e-poštu.\n\n– Tim {product_name}a" }, + "dsa_report_resolved": { + "subject": "Donijeli smo odluku o tvojoj prijavi na platformi {product_name}", + "body": "Pozdrav,\n\nNaš sigurnosni tim pregledao je tvoju prijavu prema Zakonu o digitalnim uslugama (ID: {reportId}) i donio odluku.{hasComment, select, yes {\n\nOdgovor sigurnosnog tima:\n{publicComment}} other {}}\n\nNe dijelimo pojedinosti o mjerama poduzetima protiv računa druge osobe jer su to njezini osobni podaci.\n\nAko se ne slažeš s ovom odlukom, možeš besplatno podnijeti žalbu u roku od 60 dana. Pošalji e-poštu na {appeals_email} s ove adrese e-pošte, navedi ID svoje prijave i objasni zašto smatraš da je odluka pogrešna. Ako se nalaziš u EU-u, spor možeš uputiti i certificiranom tijelu za izvansudsko rješavanje sporova. Ništa od navedenog ne utječe na tvoje pravo da se obratiš sudu.\n\n– Sigurnosni tim {product_name}a" + }, "dsa_report_verification": { "subject": "Potvrdi svoju e-poštu za prijavu prema Zakonu o digitalnim uslugama", "body": "Pozdrav,\n\nZa podnošenje prijave prema Zakonu o digitalnim uslugama na {product_name}u upotrijebi kod za potvrdu u nastavku:\n\n{code}\n\nOvaj kod istječe {expiresAt, date, full} u {expiresAt, time, short}.\n\nAko ovaj zahtjev ne dolazi od tebe, zanemari ovu e-poštu.\n\n– Sigurnosni tim {product_name}a" @@ -83,6 +87,10 @@ const EMAIL_I18N_HR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Tvoja registracija za {product_name} je odobrena", "body": "Pozdrav {username},\n\nDobre vijesti: tvoja registracija za {product_name} je odobrena.\n\nSada se možeš prijaviti u aplikaciju {product_name} ovdje:\n{channelsUrl}\n\nDobro došli u zajednicu {product_name}a.\n\n– Tim {product_name}a" }, + "report_received": { + "subject": "Primili smo tvoju prijavu na platformi {product_name}", + "body": "Pozdrav,\n\nPrimili smo tvoju prijavu prema Zakonu o digitalnim uslugama koja se odnosi na {targetKind, select, message {poruku} user {račun} guild {zajednicu} other {sadržaj}} na platformi {product_name}.\n\nID prijave: {reportId}\n\nNaš sigurnosni tim pregledat će tvoju prijavu, a mi ćemo ti poslati e-poštu na ovu adresu kada donesemo odluku. Sačuvaj ovu e-poštu za svoju evidenciju.\n\n– Sigurnosni tim {product_name}a" + }, "report_resolved": { "subject": "Tvoja prijava na {product_name}u je pregledana", "body": "Pozdrav {username},\n\nTvoju prijavu (ID: {reportId}) pregledao je naš sigurnosni tim.{hasComment, select, yes {\n\nOdgovor sigurnosnog tima:\n{publicComment}} other {}}\n\nHvala ti što pomažeš da {product_name} bude siguran za sve. Sve prijave shvaćamo ozbiljno i cijenimo tvoj doprinos zajednici.\n\nAko imaš bilo kakvih pitanja ili nedoumica u vezi s ovim ishodom, kontaktiraj {safety_email}.\n\n– Sigurnosni tim {product_name}a" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/hu.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/hu.ts index ce15cacf3..b0bccf00e 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/hu.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/hu.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_HU_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "A {product_name} működését támogató adományaid kezelése", "body": "Szia!\n\nKattints az alábbi linkre az adományozói portálod eléréséhez:\n\n{manageUrl}\n\nA portálon kezelheted az előfizetéseket, letöltheted a számlákat, és megtekintheted az adománytörténetedet.\n\nEz a link {expiresAt, date, full} {expiresAt, time, short} időpontban jár le.\n\nHa nem kérted ezt a linket, nyugodtan figyelmen kívül hagyhatod ezt az e-mailt.\n\n– {product_name} csapata" }, + "dsa_report_resolved": { + "subject": "Döntést hoztunk a {product_name} felületén tett bejelentésedről", + "body": "Szia!\n\nBiztonsági csapatunk elbírálta a digitális szolgáltatásokról szóló rendelet szerinti bejelentésedet (azonosító: {reportId}), és döntést hozott.{hasComment, select, yes {\n\nA biztonsági csapat válasza:\n{publicComment}} other {}}\n\nMás személy fiókjával szemben tett intézkedések részleteit nem osztjuk meg, mert azok az ő személyes adatai.\n\nHa nem értesz egyet a döntéssel, 60 napon belül díjmentesen fellebbezhetsz. Erről az e-mail-címről írj a következő címre: {appeals_email}, add meg a bejelentésed azonosítóját, és fejtsd ki, miért tartod hibásnak a döntést. Ha az EU-ban tartózkodsz, a vitát tanúsított peren kívüli vitarendezési testület elé is viheted. Mindez nem érinti azt a jogodat, hogy bírósághoz fordulj.\n\n– {product_name} biztonsági csapata" + }, "dsa_report_verification": { "subject": "Erősítsd meg e-mail-címedet a DSA-bejelentéshez", "body": "Szia!\n\nAz alábbi ellenőrző kóddal küldheted el a digitális szolgáltatásokról szóló rendelet (DSA) szerinti bejelentésedet a {product_name} felületén:\n\n{code}\n\nA kód lejárati időpontja: {expiresAt, date, full} {expiresAt, time, short}.\n\nHa nem te kérted ezt a kódot, figyelmen kívül hagyhatod ezt az e-mailt.\n\n– {product_name} biztonsági csapata" @@ -83,6 +87,10 @@ const EMAIL_I18N_HU_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Jóváhagytuk a regisztrációdat a {product_name} felületén", "body": "Szia, {username}!\n\nJó hír: jóváhagytuk a regisztrációdat a {product_name} felületén.\n\nMost már bejelentkezhetsz az alkalmazásba:\n{channelsUrl}\n\nÜdvözlünk a {product_name} közösségében!\n\n– {product_name} csapata" }, + "report_received": { + "subject": "Megkaptuk a {product_name} felületén tett bejelentésedet", + "body": "Szia!\n\nMegkaptuk a digitális szolgáltatásokról szóló rendelet (DSA) szerinti bejelentésedet a {product_name} felületén. A bejelentés tárgya: {targetKind, select, message {egy üzenet} user {egy fiók} guild {egy közösség} other {tartalom}}.\n\nBejelentés azonosítója: {reportId}\n\nBiztonsági csapatunk elbírálja a bejelentésedet, és erre a címre írunk neked, amint döntést hoztunk. Őrizd meg ezt az e-mailt, hogy később is meglegyen.\n\n– {product_name} biztonsági csapata" + }, "report_resolved": { "subject": "Elbíráltuk a {product_name} felületén tett bejelentésedet", "body": "Szia, {username}!\n\nBiztonsági csapatunk elbírálta a bejelentésedet (azonosító: {reportId}).{hasComment, select, yes {\n\nA biztonsági csapat válasza:\n{publicComment}} other {}}\n\nKöszönjük, hogy segítesz mindenki számára biztonságossá tenni a {product_name} közösségét. Minden bejelentést komolyan veszünk, és nagyra értékeljük, hogy segíted a közösséget.\n\nHa kérdésed vagy aggályod van az eredménnyel kapcsolatban, írj erre a címre: {safety_email}.\n\n– {product_name} biztonsági csapata" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/id.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/id.ts index 1dce811e7..1509843d4 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/id.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/id.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_ID_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Kelola donasimu untuk {product_name}", "body": "Halo,\n\nKlik tautan di bawah untuk mengakses portal donaturmu:\n\n{manageUrl}\n\nDi portal itu, kamu bisa mengelola langganan, mengunduh faktur, dan melihat riwayat donasimu.\n\nTautan ini kedaluwarsa pada {expiresAt, date, full} pukul {expiresAt, time, short}.\n\nJika kamu tidak meminta tautan ini, kamu bisa mengabaikan email ini dengan aman.\n\n– Tim {product_name}" }, + "dsa_report_resolved": { + "subject": "Kami telah mengambil keputusan atas laporanmu di {product_name}", + "body": "Halo,\n\nTim Keamanan kami telah meninjau laporan Digital Services Act kamu (ID: {reportId}) dan mengambil keputusan.{hasComment, select, yes {\n\nTanggapan dari Tim Keamanan:\n{publicComment}} other {}}\n\nKami tidak membagikan detail tindakan yang diambil terhadap akun orang lain, karena itu adalah data pribadi mereka.\n\nJika kamu tidak setuju dengan keputusan ini, kamu bisa mengajukan banding secara gratis dalam waktu 60 hari. Kirim email ke {appeals_email} dari alamat email ini, sertakan ID laporanmu, dan jelaskan kenapa menurutmu keputusan ini keliru. Jika kamu berada di Uni Eropa, kamu juga bisa membawa sengketa ini ke badan penyelesaian sengketa di luar pengadilan yang bersertifikat. Semua ini tidak memengaruhi hakmu untuk menempuh jalur pengadilan.\n\n– Tim Keamanan {product_name}" + }, "dsa_report_verification": { "subject": "Verifikasi emailmu untuk laporan DSA", "body": "Halo,\n\nGunakan kode verifikasi di bawah ini untuk mengirimkan laporan Digital Services Act kamu di {product_name}:\n\n{code}\n\nKode ini kedaluwarsa pada {expiresAt, date, full} pukul {expiresAt, time, short}.\n\nJika kamu tidak meminta ini, kamu bisa mengabaikan email ini.\n\n– Tim Keamanan {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_ID_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Pendaftaranmu di {product_name} telah disetujui", "body": "Halo {username},\n\nKabar baik: pendaftaranmu di {product_name} telah disetujui.\n\nKamu sekarang bisa masuk ke aplikasi {product_name} di sini:\n{channelsUrl}\n\nSelamat datang di komunitas {product_name}.\n\n– Tim {product_name}" }, + "report_received": { + "subject": "Kami telah menerima laporanmu di {product_name}", + "body": "Halo,\n\nKami telah menerima laporan Digital Services Act kamu tentang {targetKind, select, message {sebuah pesan} user {sebuah akun} guild {sebuah komunitas} other {konten}} di {product_name}.\n\nID laporan: {reportId}\n\nTim Keamanan kami akan meninjau laporanmu dan kami akan mengirim email ke alamat ini setelah mengambil keputusan. Simpan email ini sebagai arsip.\n\n– Tim Keamanan {product_name}" + }, "report_resolved": { "subject": "Laporanmu di {product_name} telah ditinjau", "body": "Halo {username},\n\nLaporanmu (ID: {reportId}) telah ditinjau oleh Tim Keamanan kami.{hasComment, select, yes {\n\nTanggapan dari Tim Keamanan:\n{publicComment}} other {}}\n\nTerima kasih telah membantu menjaga {product_name} tetap aman untuk semua orang. Kami menanggapi semua laporan dengan serius dan menghargai kontribusimu bagi komunitas.\n\nJika kamu punya pertanyaan atau kekhawatiran tentang hasil ini, silakan hubungi {safety_email}.\n\n– Tim Keamanan {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/it.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/it.ts index 596b1e8b8..6af014db4 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/it.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/it.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_IT_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Gestisci le tue donazioni a {product_name}", "body": "Ciao,\n\nClicca sul link qui sotto per accedere al tuo portale donatori:\n\n{manageUrl}\n\nNel portale, puoi gestire gli abbonamenti, scaricare le fatture e visualizzare la cronologia delle tue donazioni.\n\nQuesto link scade il {expiresAt, date, full} alle {expiresAt, time, short}.\n\nSe non hai richiesto questo link, puoi ignorare tranquillamente questa email.\n\n– Il team di {product_name}" }, + "dsa_report_resolved": { + "subject": "Abbiamo preso una decisione sulla tua segnalazione su {product_name}", + "body": "Ciao,\n\nIl nostro team per la sicurezza ha esaminato la tua segnalazione ai sensi del Digital Services Act (ID: {reportId}) e ha preso una decisione.{hasComment, select, yes {\n\nRisposta dal team per la sicurezza:\n{publicComment}} other {}}\n\nNon condividiamo i dettagli delle misure adottate nei confronti dell'account di un'altra persona, perché si tratta dei suoi dati personali.\n\nSe non sei d'accordo con questa decisione, puoi presentare un ricorso gratuitamente entro 60 giorni. Invia un'email a {appeals_email} da questo indirizzo email, indica l'ID della tua segnalazione e spiega perché ritieni che la decisione sia scorretta. Se ti trovi nell'UE, puoi anche sottoporre la controversia a un organismo certificato di risoluzione extragiudiziale delle controversie. Tutto questo non pregiudica il tuo diritto di rivolgerti a un tribunale.\n\n– Il team per la sicurezza di {product_name}" + }, "dsa_report_verification": { "subject": "Verifica la tua email per una segnalazione DSA", "body": "Ciao,\n\nUsa il codice di verifica qui sotto per inviare la tua segnalazione ai sensi del Digital Services Act su {product_name}:\n\n{code}\n\nQuesto codice scade il {expiresAt, date, full} alle {expiresAt, time, short}.\n\nSe non hai richiesto questa operazione, puoi ignorare questa email.\n\n– Il team per la sicurezza di {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_IT_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "La tua registrazione a {product_name} è stata approvata", "body": "Ciao {username},\n\nBuone notizie: la tua registrazione a {product_name} è stata approvata.\n\nOra puoi accedere all'app {product_name} qui:\n{channelsUrl}\n\nBenvenuto nella community di {product_name}.\n\n– Il team di {product_name}" }, + "report_received": { + "subject": "Abbiamo ricevuto la tua segnalazione su {product_name}", + "body": "Ciao,\n\nAbbiamo ricevuto la tua segnalazione ai sensi del Digital Services Act relativa a {targetKind, select, message {un messaggio} user {un account} guild {una community} other {un contenuto}} su {product_name}.\n\nID segnalazione: {reportId}\n\nIl nostro team per la sicurezza esaminerà la tua segnalazione e ti scriveremo a questo indirizzo quando avremo preso una decisione. Conserva questa email per riferimento futuro.\n\n– Il team per la sicurezza di {product_name}" + }, "report_resolved": { "subject": "La tua segnalazione {product_name} è stata esaminata", "body": "Ciao {username},\n\nLa tua segnalazione (ID: {reportId}) è stata esaminata dal nostro team per la sicurezza.{hasComment, select, yes {\n\nRisposta dal team per la sicurezza:\n{publicComment}} other {}}\n\nGrazie per aver contribuito a mantenere {product_name} sicuro per tutti. Prendiamo sul serio tutte le segnalazioni e apprezziamo il tuo contributo alla community.\n\nSe hai domande o preoccupazioni riguardo a questo esito, contatta {safety_email}.\n\n– Il team per la sicurezza di {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/ja.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/ja.ts index f2161f941..603dc806a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/ja.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/ja.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_JA_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name}への寄付を管理", "body": "こんにちは。\n\n以下のリンクをクリックして、寄付者ポータルにアクセスしてください。\n\n{manageUrl}\n\nポータルでは、サブスクリプションの管理、請求書のダウンロード、寄付履歴の表示ができます。\n\nこのリンクの有効期限は{expiresAt, date, full} {expiresAt, time, short}です。\n\nこのリンクをリクエストしていない場合は、このメールを無視して問題ありません。\n\n– {product_name}チーム" }, + "dsa_report_resolved": { + "subject": "{product_name}への報告について決定しました", + "body": "こんにちは。\n\nデジタルサービス法に基づくご報告(ID: {reportId})を安全チームが審査し、決定を行いました。{hasComment, select, yes {\n\n安全チームからの回答:\n{publicComment}} other {}}\n\n他の方のアカウントに対して行った措置の詳細は、その方の個人データにあたるため、お伝えしていません。\n\nこの決定に同意できない場合は、60日以内に無料で異議申し立てを行えます。このメールアドレスから{appeals_email}までメールを送信し、報告IDを記載のうえ、決定が誤っていると考える理由を説明してください。EU域内にお住まいの場合は、認定を受けた裁判外紛争解決機関に紛争を付託することもできます。これらはいずれも、裁判所に訴える権利に影響しません。\n\n– {product_name}安全チーム" + }, "dsa_report_verification": { "subject": "DSA報告のためのメールアドレスを確認", "body": "こんにちは。\n\n以下の確認コードを使用して、{product_name}でデジタルサービス法に基づく報告を提出してください。\n\n{code}\n\nこのコードの有効期限は{expiresAt, date, full} {expiresAt, time, short}です。\n\nご自身でリクエストしていない場合は、このメールを無視して問題ありません。\n\n– {product_name}安全チーム" @@ -83,6 +87,10 @@ const EMAIL_I18N_JA_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name}の登録が承認されました", "body": "こんにちは、{username}さん\n\n良いお知らせです。{product_name}の登録が承認されました。\n\nこちらから{product_name}アプリにログインできます。\n{channelsUrl}\n\n{product_name}コミュニティへようこそ。\n\n– {product_name}チーム" }, + "report_received": { + "subject": "{product_name}への報告を受け付けました", + "body": "こんにちは。\n\n{product_name}上の{targetKind, select, message {メッセージ} user {アカウント} guild {コミュニティ} other {コンテンツ}}に関する、デジタルサービス法に基づく報告を受け付けました。\n\n報告ID: {reportId}\n\n安全チームが報告を審査し、決定が出ましたらこのメールアドレス宛にご連絡します。このメールは記録として保管してください。\n\n– {product_name}安全チーム" + }, "report_resolved": { "subject": "{product_name}への報告の審査が完了しました", "body": "こんにちは、{username}さん\n\nご報告いただいた内容(ID: {reportId})を安全チームが審査しました。{hasComment, select, yes {\n\n安全チームからの回答:\n{publicComment}} other {}}\n\n{product_name}をすべての人にとって安全に保つためのご協力ありがとうございます。すべての報告を真剣に受け止め、コミュニティへのご貢献に感謝します。\n\nこの結果についてご質問やご不明な点がございましたら、{safety_email}までお問い合わせください。\n\n– {product_name}安全チーム" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/ko.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/ko.ts index a9e749f1f..3831c0536 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/ko.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/ko.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_KO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name} 후원 내역 관리", "body": "안녕하세요,\n\n아래 링크를 클릭하여 후원자 포털에 접속해 주세요:\n\n{manageUrl}\n\n포털에서 구독을 관리하고, 인보이스를 다운로드하고, 후원 내역을 확인할 수 있어요.\n\n이 링크는 {expiresAt, date, full} {expiresAt, time, short}에 만료돼요.\n\n이 링크를 요청하지 않았다면 이 이메일을 무시해도 괜찮아요.\n\n– {product_name} 팀" }, + "dsa_report_resolved": { + "subject": "{product_name} 신고에 대한 결정이 내려졌어요", + "body": "안녕하세요,\n\n안전팀에서 디지털 서비스법 신고(ID: {reportId})를 검토하고 결정을 내렸어요.{hasComment, select, yes {\n\n안전팀의 답변:\n{publicComment}} other {}}\n\n다른 사람의 계정에 취한 조치의 세부 내용은 그 사람의 개인 정보이므로 공유하지 않아요.\n\n이 결정에 동의하지 않는다면 60일 이내에 무료로 이의를 제기할 수 있어요. 이 이메일 주소에서 {appeals_email}으로 이메일을 보내 신고 ID를 적고 결정이 잘못되었다고 생각하는 이유를 설명해 주세요. EU에 거주하고 있다면 인증된 법원 외 분쟁 해결 기관에 분쟁을 회부할 수도 있어요. 이 내용은 법원에 소송을 제기할 권리에 영향을 주지 않아요.\n\n– {product_name} 안전팀" + }, "dsa_report_verification": { "subject": "DSA 신고를 위한 이메일 인증", "body": "안녕하세요,\n\n{product_name}에서 디지털 서비스법 신고를 제출하려면 아래 인증 코드를 사용해 주세요:\n\n{code}\n\n이 코드는 {expiresAt, date, full} {expiresAt, time, short}에 만료돼요.\n\n요청하지 않으셨다면 이 이메일을 무시해도 괜찮아요.\n\n– {product_name} 안전팀" @@ -83,6 +87,10 @@ const EMAIL_I18N_KO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name} 가입이 승인되었어요", "body": "안녕하세요, {username}님.\n\n좋은 소식이에요: {product_name} 가입이 승인되었어요.\n\n이제 여기에서 {product_name} 앱에 로그인할 수 있어요:\n{channelsUrl}\n\n{product_name} 커뮤니티에 오신 것을 환영해요.\n\n– {product_name} 팀" }, + "report_received": { + "subject": "{product_name} 신고가 접수되었어요", + "body": "안녕하세요,\n\n{product_name}의 {targetKind, select, message {메시지} user {계정} guild {커뮤니티} other {콘텐츠}}에 대한 디지털 서비스법 신고가 접수되었어요.\n\n신고 ID: {reportId}\n\n안전팀에서 신고를 검토한 뒤 결정이 내려지면 이 이메일 주소로 알려 드릴게요. 이 이메일은 기록용으로 보관해 주세요.\n\n– {product_name} 안전팀" + }, "report_resolved": { "subject": "{product_name} 신고 검토가 완료되었어요", "body": "안녕하세요, {username}님.\n\n접수하신 신고(ID: {reportId})를 안전팀에서 검토했어요.{hasComment, select, yes {\n\n안전팀의 답변:\n{publicComment}} other {}}\n\n모두를 위해 {product_name}를 안전하게 유지하는 데 도움을 주셔서 감사해요. 모든 신고를 진지하게 검토하고 있으며, 커뮤니티에 기여해 주셔서 감사해요.\n\n이 결과에 대해 궁금한 점이나 우려 사항이 있다면 {safety_email}으로 문의해 주세요.\n\n– {product_name} 안전팀" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/lt.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/lt.ts index e9e252347..b0db69e5d 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/lt.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/lt.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_LT_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Tvarkyk savo {product_name} paramą", "body": "Sveiki,\n\nSpustelėk žemiau esančią nuorodą, kad pasiektum savo rėmėjo portalą:\n\n{manageUrl}\n\nPortale gali valdyti prenumeratas, atsisiųsti sąskaitas faktūras ir peržiūrėti savo paramos istoriją.\n\nŠi nuoroda galioja iki {expiresAt, date, full} {expiresAt, time, short}.\n\nJei neprašei šios nuorodos, gali saugiai ignoruoti šį el. laišką.\n\n– {product_name} komanda" }, + "dsa_report_resolved": { + "subject": "Priėmėme sprendimą dėl tavo {product_name} pranešimo", + "body": "Sveiki,\n\nMūsų saugos komanda peržiūrėjo tavo pranešimą pagal Skaitmeninių paslaugų aktą (ID: {reportId}) ir priėmė sprendimą.{hasComment, select, yes {\n\nSaugos komandos atsakymas:\n{publicComment}} other {}}\n\nNesidalijame informacija apie veiksmus, kurių imtasi dėl kito asmens paskyros, nes tai yra jo asmens duomenys.\n\nJei nesutinki su šiuo sprendimu, per 60 dienų gali nemokamai pateikti apeliaciją. Iš šio el. pašto adreso siųsk el. laišką adresu {appeals_email}, nurodyk savo pranešimo ID ir paaiškink, kodėl manai, kad sprendimas neteisingas. Jei esi ES, ginčą taip pat gali perduoti sertifikuotai neteisminio ginčų sprendimo įstaigai. Visa tai neturi įtakos tavo teisei kreiptis į teismą.\n\n– {product_name} saugos komanda" + }, "dsa_report_verification": { "subject": "Patvirtink savo el. paštą DSA pranešimui pateikti", "body": "Sveiki,\n\nNaudok žemiau esantį patvirtinimo kodą, kad {product_name} platformoje pateiktum pranešimą pagal Skaitmeninių paslaugų aktą:\n\n{code}\n\nŠis kodas galioja iki {expiresAt, date, full} {expiresAt, time, short}.\n\nJei to neprašei, gali ignoruoti šį el. laišką.\n\n– {product_name} saugos komanda" @@ -83,6 +87,10 @@ const EMAIL_I18N_LT_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Tavo {product_name} registracija patvirtinta", "body": "Sveiki, {username},\n\nGeros naujienos: tavo {product_name} registracija patvirtinta.\n\nDabar gali prisijungti prie {product_name} programėlės čia:\n{channelsUrl}\n\nSveiki atvykę į {product_name} bendruomenę.\n\n– {product_name} komanda" }, + "report_received": { + "subject": "Gavome tavo {product_name} pranešimą", + "body": "Sveiki,\n\nGavome tavo pranešimą pagal Skaitmeninių paslaugų aktą apie {targetKind, select, message {žinutę} user {paskyrą} guild {bendruomenę} other {turinį}} {product_name} platformoje.\n\nPranešimo ID: {reportId}\n\nMūsų saugos komanda peržiūrės tavo pranešimą, o priėmę sprendimą parašysime tau šiuo adresu. Išsaugok šį el. laišką, kad turėtum jį ateičiai.\n\n– {product_name} saugos komanda" + }, "report_resolved": { "subject": "Tavo {product_name} pranešimas peržiūrėtas", "body": "Sveiki, {username},\n\nTavo pranešimą (ID: {reportId}) peržiūrėjo mūsų saugos komanda.{hasComment, select, yes {\n\nSaugos komandos atsakymas:\n{publicComment}} other {}}\n\nDėkojame, kad padedi užtikrinti {product_name} saugumą visiems. Visus pranešimus vertiname rimtai ir esame dėkingi už tavo indėlį į bendruomenę.\n\nJei turi klausimų ar abejonių dėl šio sprendimo, rašyk adresu {safety_email}.\n\n– {product_name} saugos komanda" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/nl.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/nl.ts index c76778ff9..20641df7f 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/nl.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/nl.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_NL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Beheer je {product_name}-donaties", "body": "Hallo,\n\nKlik op de onderstaande link om toegang te krijgen tot je donateursportaal:\n\n{manageUrl}\n\nIn het portaal kun je abonnementen beheren, facturen downloaden en je donatiegeschiedenis bekijken.\n\nDeze link verloopt op {expiresAt, date, full} om {expiresAt, time, short}.\n\nAls je deze link niet hebt aangevraagd, kun je deze e-mail veilig negeren.\n\n– Het team van {product_name}" }, + "dsa_report_resolved": { + "subject": "We hebben een beslissing genomen over je melding op {product_name}", + "body": "Hallo,\n\nOns veiligheidsteam heeft je melding op grond van de Digital Services Act (ID: {reportId}) beoordeeld en een beslissing genomen.{hasComment, select, yes {\n\nReactie van het veiligheidsteam:\n{publicComment}} other {}}\n\nWe delen geen details over maatregelen tegen het account van iemand anders, omdat dat persoonsgegevens van die persoon zijn.\n\nAls je het niet eens bent met deze beslissing, kun je binnen 60 dagen kosteloos bezwaar maken. Stuur een e-mail naar {appeals_email} vanaf dit e-mailadres, vermeld je meldings-ID en leg uit waarom je vindt dat de beslissing onjuist is. Als je in de EU bent, kun je het geschil ook voorleggen aan een gecertificeerd orgaan voor buitengerechtelijke geschillenbeslechting. Dit alles doet niets af aan je recht om naar de rechter te stappen.\n\n– Het veiligheidsteam van {product_name}" + }, "dsa_report_verification": { "subject": "Verifieer je e-mailadres voor een DSA-melding", "body": "Hallo,\n\nGebruik de onderstaande verificatiecode om je melding op grond van de Digital Services Act op {product_name} in te dienen:\n\n{code}\n\nDeze code verloopt op {expiresAt, date, full} om {expiresAt, time, short}.\n\nAls je dit niet hebt aangevraagd, kun je deze e-mail negeren.\n\n– Het veiligheidsteam van {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_NL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Je {product_name}-registratie is goedgekeurd", "body": "Hallo {username},\n\nGoed nieuws: je {product_name}-registratie is goedgekeurd.\n\nJe kunt nu inloggen op de {product_name}-app via:\n{channelsUrl}\n\nWelkom bij de {product_name}-community.\n\n– Het team van {product_name}" }, + "report_received": { + "subject": "We hebben je melding op {product_name} ontvangen", + "body": "Hallo,\n\nWe hebben je melding op grond van de Digital Services Act over {targetKind, select, message {een bericht} user {een account} guild {een community} other {inhoud}} op {product_name} ontvangen.\n\nMeldings-ID: {reportId}\n\nOns veiligheidsteam beoordeelt je melding en we mailen je op dit adres zodra we een beslissing hebben genomen. Bewaar deze e-mail voor je eigen administratie.\n\n– Het veiligheidsteam van {product_name}" + }, "report_resolved": { "subject": "Je melding op {product_name} is beoordeeld", "body": "Hallo {username},\n\nJe melding (ID: {reportId}) is beoordeeld door ons veiligheidsteam.{hasComment, select, yes {\n\nReactie van het veiligheidsteam:\n{publicComment}} other {}}\n\nBedankt dat je helpt {product_name} veilig te houden voor iedereen. We nemen alle meldingen serieus en waarderen je bijdrage aan de community.\n\nAls je vragen of opmerkingen hebt over deze uitkomst, neem dan contact op met {safety_email}.\n\n– Het veiligheidsteam van {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/no.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/no.ts index 84cef595d..b53a2a683 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/no.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/no.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_NO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Administrer {product_name}-bidragene dine", "body": "Hei,\n\nKlikk på lenken nedenfor for å få tilgang til giverportalen din:\n\n{manageUrl}\n\nI portalen kan du administrere abonnementer, laste ned fakturaer og se bidragshistorikken din.\n\nDenne lenken utløper {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke ba om denne lenken, kan du trygt ignorere denne e-posten.\n\n– {product_name}-teamet" }, + "dsa_report_resolved": { + "subject": "Vi har tatt en avgjørelse om {product_name}-rapporten din", + "body": "Hei,\n\nSikkerhetsteamet vårt har gjennomgått rapporten din i henhold til Digital Services Act (ID: {reportId}) og tatt en avgjørelse.{hasComment, select, yes {\n\nSvar fra sikkerhetsteamet:\n{publicComment}} other {}}\n\nVi deler ikke detaljer om tiltak mot en annen persons konto, fordi det er personopplysningene til den personen.\n\nHvis du er uenig i avgjørelsen, kan du klage gratis innen 60 dager. Send en e-post til {appeals_email} fra denne e-postadressen, oppgi rapport-ID-en din, og forklar hvorfor du mener avgjørelsen er feil. Hvis du befinner deg i EU, kan du også bringe tvisten inn for et sertifisert organ for utenrettslig tvisteløsning. Ingenting av dette påvirker retten din til å gå til domstolene.\n\n– Sikkerhetsteamet hos {product_name}" + }, "dsa_report_verification": { "subject": "Bekreft e-postadressen din for en DSA-rapport", "body": "Hei,\n\nBruk bekreftelseskoden nedenfor for å sende inn rapporten din i henhold til Digital Services Act på {product_name}:\n\n{code}\n\nDenne koden utløper {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke ba om dette, kan du se bort fra denne e-posten.\n\n– Sikkerhetsteamet hos {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_NO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name}-registreringen din er godkjent", "body": "Hei {username},\n\nGode nyheter! Registreringen din hos {product_name} er godkjent.\n\nDu kan nå logge inn på {product_name}-appen her:\n{channelsUrl}\n\nVelkommen til {product_name}-fellesskapet.\n\n– {product_name}-teamet" }, + "report_received": { + "subject": "Vi har mottatt {product_name}-rapporten din", + "body": "Hei,\n\nVi har mottatt rapporten din i henhold til Digital Services Act om {targetKind, select, message {en melding} user {en konto} guild {et fellesskap} other {innhold}} på {product_name}.\n\nRapport-ID: {reportId}\n\nSikkerhetsteamet vårt går gjennom rapporten din, og vi sender deg en e-post på denne adressen når vi har tatt en avgjørelse. Ta vare på denne e-posten.\n\n– Sikkerhetsteamet hos {product_name}" + }, "report_resolved": { "subject": "{product_name}-rapporten din er gjennomgått", "body": "Hei {username},\n\nRapporten din (ID: {reportId}) er gjennomgått av sikkerhetsteamet vårt.{hasComment, select, yes {\n\nSvar fra sikkerhetsteamet:\n{publicComment}} other {}}\n\nTakk for at du bidrar til å holde {product_name} trygt for alle. Vi tar alle rapporter på alvor og setter pris på bidraget ditt til fellesskapet.\n\nHvis du har spørsmål eller er bekymret for utfallet, kan du kontakte {safety_email}.\n\n– Sikkerhetsteamet hos {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/pl.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/pl.ts index b24e3216a..7b9d77453 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/pl.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/pl.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_PL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Zarządzaj darowiznami dla {product_name}", "body": "Witaj,\n\nKliknij poniższy link, aby przejść do portalu darczyńcy:\n\n{manageUrl}\n\nW portalu możesz zarządzać subskrypcjami, pobierać faktury i przeglądać historię swoich darowizn.\n\nTen link wygasa {expiresAt, date, full} o {expiresAt, time, short}.\n\nJeśli nie prosiłeś o ten link, możesz bezpiecznie zignorować tę wiadomość e-mail.\n\n– Zespół {product_name}" }, + "dsa_report_resolved": { + "subject": "Podjęliśmy decyzję w sprawie Twojego zgłoszenia w {product_name}", + "body": "Witaj,\n\nNasz zespół ds. bezpieczeństwa rozpatrzył Twoje zgłoszenie w ramach aktu o usługach cyfrowych (ID: {reportId}) i podjął decyzję.{hasComment, select, yes {\n\nOdpowiedź od zespołu ds. bezpieczeństwa:\n{publicComment}} other {}}\n\nNie udostępniamy szczegółów działań podjętych wobec konta innej osoby, ponieważ są to jej dane osobowe.\n\nJeśli nie zgadzasz się z tą decyzją, możesz bezpłatnie złożyć odwołanie w ciągu 60 dni. Wyślij e-mail na adres {appeals_email} z tego adresu e-mail, podaj ID zgłoszenia i wyjaśnij, dlaczego uważasz, że decyzja jest błędna. Jeśli przebywasz w UE, możesz też skierować spór do certyfikowanego organu pozasądowego rozstrzygania sporów. Nic z tego nie wpływa na Twoje prawo do skierowania sprawy do sądu.\n\n– Zespół ds. bezpieczeństwa {product_name}" + }, "dsa_report_verification": { "subject": "Zweryfikuj adres e-mail na potrzeby zgłoszenia DSA", "body": "Witaj,\n\nUżyj poniższego kodu weryfikacyjnego, aby przesłać zgłoszenie w ramach aktu o usługach cyfrowych (DSA) w {product_name}:\n\n{code}\n\nTen kod wygasa {expiresAt, date, full} o {expiresAt, time, short}.\n\nJeśli nie prosiłeś o ten kod, możesz zignorować tę wiadomość e-mail.\n\n– Zespół ds. bezpieczeństwa {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_PL_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Twoja rejestracja w {product_name} została zatwierdzona", "body": "Witaj {username},\n\nDobre wieści: Twoja rejestracja w {product_name} została zatwierdzona.\n\nMożesz teraz zalogować się do aplikacji {product_name} tutaj:\n{channelsUrl}\n\nWitaj w społeczności {product_name}.\n\n– Zespół {product_name}" }, + "report_received": { + "subject": "Otrzymaliśmy Twoje zgłoszenie w {product_name}", + "body": "Witaj,\n\nOtrzymaliśmy Twoje zgłoszenie w ramach aktu o usługach cyfrowych (DSA) dotyczące {targetKind, select, message {wiadomości} user {konta} guild {społeczności} other {treści}} w {product_name}.\n\nID zgłoszenia: {reportId}\n\nNasz zespół ds. bezpieczeństwa rozpatrzy Twoje zgłoszenie, a gdy podejmiemy decyzję, napiszemy do Ciebie na ten adres. Zachowaj tę wiadomość e-mail na przyszłość.\n\n– Zespół ds. bezpieczeństwa {product_name}" + }, "report_resolved": { "subject": "Twoje zgłoszenie w {product_name} zostało rozpatrzone", "body": "Witaj {username},\n\nTwoje zgłoszenie (ID: {reportId}) zostało rozpatrzone przez nasz zespół ds. bezpieczeństwa.{hasComment, select, yes {\n\nOdpowiedź od zespołu ds. bezpieczeństwa:\n{publicComment}} other {}}\n\nDziękujemy za pomoc w utrzymaniu bezpieczeństwa {product_name} dla wszystkich. Traktujemy wszystkie zgłoszenia poważnie i doceniamy Twój wkład w społeczność.\n\nJeśli masz pytania lub wątpliwości dotyczące tej decyzji, skontaktuj się z {safety_email}.\n\n– Zespół ds. bezpieczeństwa {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/pt-BR.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/pt-BR.ts index e34e5213b..6e44c664c 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/pt-BR.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/pt-BR.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_PT_BR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Gerencie suas doações ao {product_name}", "body": "Olá,\n\nClique no link abaixo para acessar seu portal de doadores:\n\n{manageUrl}\n\nNo portal, você pode gerenciar assinaturas, baixar faturas e visualizar seu histórico de doações.\n\nEste link expira em {expiresAt, date, full} às {expiresAt, time, short}.\n\nSe você não solicitou este link, pode ignorar este e-mail com segurança.\n\n– Equipe do {product_name}" }, + "dsa_report_resolved": { + "subject": "Tomamos uma decisão sobre sua denúncia no {product_name}", + "body": "Olá,\n\nNossa equipe de segurança analisou sua denúncia nos termos da Lei dos Serviços Digitais (ID: {reportId}) e tomou uma decisão.{hasComment, select, yes {\n\nResposta da equipe de segurança:\n{publicComment}} other {}}\n\nNão compartilhamos detalhes de medidas tomadas contra a conta de outra pessoa, pois são dados pessoais dela.\n\nSe você não concordar com esta decisão, pode enviar um recurso gratuitamente em até 60 dias. Envie um e-mail para {appeals_email} a partir deste endereço de e-mail, inclua o ID da sua denúncia e explique por que você acredita que a decisão está incorreta. Se você estiver na UE, também pode encaminhar a disputa a um órgão certificado de resolução extrajudicial de litígios. Nada disso afeta seu direito de recorrer à Justiça.\n\n– equipe de segurança do {product_name}" + }, "dsa_report_verification": { "subject": "Verifique seu e-mail para enviar uma denúncia nos termos do DSA", "body": "Olá,\n\nUse o código de verificação abaixo para enviar sua denúncia ao {product_name} nos termos da Lei dos Serviços Digitais (DSA):\n\n{code}\n\nEste código expira em {expiresAt, date, full} às {expiresAt, time, short}.\n\nSe você não solicitou isso, pode ignorar este e-mail.\n\n– equipe de segurança do {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_PT_BR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Seu cadastro no {product_name} foi aprovado", "body": "Olá, {username},\n\nBoas notícias: seu cadastro no {product_name} foi aprovado.\n\nAgora você pode entrar no aplicativo do {product_name} aqui:\n{channelsUrl}\n\nBem-vindo à comunidade do {product_name}.\n\n– Equipe do {product_name}" }, + "report_received": { + "subject": "Recebemos sua denúncia no {product_name}", + "body": "Olá,\n\nRecebemos sua denúncia nos termos da Lei dos Serviços Digitais (DSA) sobre {targetKind, select, message {uma mensagem} user {uma conta} guild {uma comunidade} other {conteúdo}} no {product_name}.\n\nID da denúncia: {reportId}\n\nNossa equipe de segurança analisará sua denúncia e enviaremos um e-mail para este endereço quando tomarmos uma decisão. Guarde este e-mail para seus registros.\n\n– equipe de segurança do {product_name}" + }, "report_resolved": { "subject": "Sua denúncia no {product_name} foi analisada", "body": "Olá, {username},\n\nSua denúncia (ID: {reportId}) foi analisada por nossa equipe de segurança.{hasComment, select, yes {\n\nResposta da equipe de segurança:\n{publicComment}} other {}}\n\nAgradecemos por ajudar a manter o {product_name} seguro para todos. Levamos todas as denúncias a sério e agradecemos sua contribuição para a comunidade.\n\nSe você tiver alguma dúvida ou preocupação sobre este resultado, entre em contato com {safety_email}.\n\n– equipe de segurança do {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/ro.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/ro.ts index 6c17dcb5b..f99023964 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/ro.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/ro.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_RO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Gestionează-ți donațiile către {product_name}", "body": "Salut,\n\nApasă pe linkul de mai jos pentru a accesa portalul tău de donator:\n\n{manageUrl}\n\nÎn portal, poți gestiona abonamentele, descărca facturi și vizualiza istoricul donațiilor tale.\n\nAcest link expiră la data de {expiresAt, date, full} la ora {expiresAt, time, short}.\n\nDacă nu ai solicitat acest link, poți ignora în siguranță acest e-mail.\n\n– Echipa {product_name}" }, + "dsa_report_resolved": { + "subject": "Am luat o decizie cu privire la raportul tău de pe {product_name}", + "body": "Salut,\n\nEchipa noastră de siguranță a analizat raportul tău conform Digital Services Act (ID: {reportId}) și a luat o decizie.{hasComment, select, yes {\n\nRăspuns de la echipa de siguranță:\n{publicComment}} other {}}\n\nNu oferim detalii despre măsurile luate împotriva contului altei persoane, deoarece acestea sunt datele sale personale.\n\nDacă nu ești de acord cu această decizie, poți depune gratuit o contestație în termen de 60 de zile. Trimite un e-mail la {appeals_email} de la această adresă, include ID-ul raportului tău și explică de ce crezi că decizia este incorectă. Dacă te afli în UE, poți, de asemenea, să înaintezi litigiul unui organism certificat de soluționare extrajudiciară a litigiilor. Nimic din toate acestea nu îți afectează dreptul de a te adresa instanței.\n\n– Echipa de siguranță {product_name}" + }, "dsa_report_verification": { "subject": "Verifică-ți e-mailul pentru un raport DSA", "body": "Salut,\n\nFolosește codul de verificare de mai jos pentru a trimite raportul tău conform Digital Services Act pe {product_name}:\n\n{code}\n\nAcest cod expiră la data de {expiresAt, date, full} la ora {expiresAt, time, short}.\n\nDacă nu ai solicitat acest lucru, poți ignora acest e-mail.\n\n– Echipa de siguranță {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_RO_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Înregistrarea ta pentru {product_name} a fost aprobată", "body": "Salut {username},\n\nVești bune: înregistrarea ta pentru {product_name} a fost aprobată.\n\nAcum te poți conecta la aplicația {product_name} aici:\n{channelsUrl}\n\nBun venit în comunitatea {product_name}.\n\n– Echipa {product_name}" }, + "report_received": { + "subject": "Am primit raportul tău de pe {product_name}", + "body": "Salut,\n\nAm primit raportul tău conform Digital Services Act despre {targetKind, select, message {un mesaj} user {un cont} guild {o comunitate} other {conținut}} de pe {product_name}.\n\nID raport: {reportId}\n\nEchipa noastră de siguranță va analiza raportul tău și îți vom scrie la această adresă după ce luăm o decizie. Păstrează acest e-mail pentru evidența ta.\n\n– Echipa de siguranță {product_name}" + }, "report_resolved": { "subject": "Raportul tău de pe {product_name} a fost analizat", "body": "Salut {username},\n\nRaportul tău (ID: {reportId}) a fost analizat de echipa noastră de siguranță.{hasComment, select, yes {\n\nRăspuns de la echipa de siguranță:\n{publicComment}} other {}}\n\nÎți mulțumim că ne ajuți să păstrăm {product_name} în siguranță pentru toată lumea. Luăm în serios toate rapoartele și apreciem contribuția ta la comunitate.\n\nDacă ai întrebări sau nelămuriri cu privire la acest rezultat, te rugăm să scrii la {safety_email}.\n\n– Echipa de siguranță {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/ru.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/ru.ts index 2ad2b94f0..369320603 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/ru.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/ru.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_RU_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Управляй своими пожертвованиями для {product_name}", "body": "Привет,\n\nПерейди по ссылке ниже, чтобы открыть личный кабинет жертвователя:\n\n{manageUrl}\n\nВ личном кабинете ты можешь управлять подписками, скачивать счета и просматривать историю своих пожертвований.\n\nСрок действия ссылки истекает {expiresAt, date, full} в {expiresAt, time, short}.\n\nЕсли ты не запрашивал эту ссылку, можешь смело проигнорировать это письмо.\n\n– Команда {product_name}" }, + "dsa_report_resolved": { + "subject": "Мы приняли решение по твоей жалобе в {product_name}", + "body": "Привет,\n\nНаша команда безопасности рассмотрела твою жалобу по Закону о цифровых услугах (ID: {reportId}) и приняла решение.{hasComment, select, yes {\n\nОтвет команды безопасности:\n{publicComment}} other {}}\n\nМы не раскрываем подробности мер, принятых в отношении аккаунта другого человека, так как это его персональные данные.\n\nЕсли ты не согласен с этим решением, ты можешь бесплатно подать апелляцию в течение 60 дней. Отправь письмо на {appeals_email} с этого адреса электронной почты, укажи ID жалобы и объясни, почему считаешь решение неверным. Если ты находишься в ЕС, ты также можешь передать спор в сертифицированный орган по внесудебному урегулированию споров. Всё это не влияет на твоё право обратиться в суд.\n\n– Команда безопасности {product_name}" + }, "dsa_report_verification": { "subject": "Подтверди свой адрес электронной почты для жалобы по DSA", "body": "Привет,\n\nИспользуй код подтверждения ниже, чтобы отправить в {product_name} жалобу по Закону о цифровых услугах (DSA):\n\n{code}\n\nСрок действия кода истекает {expiresAt, date, full} в {expiresAt, time, short}.\n\nЕсли ты не запрашивал это, можешь смело проигнорировать это письмо.\n\n– Команда безопасности {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_RU_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Твоя регистрация в {product_name} одобрена", "body": "Привет, {username},\n\nХорошие новости: твоя регистрация в {product_name} одобрена.\n\nТеперь ты можешь войти в приложение {product_name} здесь:\n{channelsUrl}\n\nДобро пожаловать в сообщество {product_name}.\n\n– Команда {product_name}" }, + "report_received": { + "subject": "Мы получили твою жалобу в {product_name}", + "body": "Привет,\n\nМы получили твою жалобу по Закону о цифровых услугах (DSA) на {targetKind, select, message {сообщение} user {аккаунт} guild {сообщество} other {контент}} в {product_name}.\n\nID жалобы: {reportId}\n\nНаша команда безопасности рассмотрит твою жалобу, и мы напишем тебе на этот адрес, когда примем решение. Сохрани это письмо на будущее.\n\n– Команда безопасности {product_name}" + }, "report_resolved": { "subject": "Твоя жалоба в {product_name} рассмотрена", "body": "Привет, {username},\n\nТвоя жалоба (ID: {reportId}) была рассмотрена нашей командой безопасности.{hasComment, select, yes {\n\nОтвет команды безопасности:\n{publicComment}} other {}}\n\nСпасибо за помощь в обеспечении безопасности {product_name} для всех. Мы серьёзно относимся ко всем жалобам и ценим твой вклад в сообщество.\n\nЕсли у тебя есть вопросы или сомнения по поводу этого результата, пожалуйста, напиши на {safety_email}.\n\n– Команда безопасности {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/sv-SE.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/sv-SE.ts index 3bc181747..2a673ce27 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/sv-SE.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/sv-SE.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_SV_SE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Hantera dina donationer till {product_name}", "body": "Hej,\n\nKlicka på länken nedan för att komma åt din donationsportal:\n\n{manageUrl}\n\nI portalen kan du hantera prenumerationer, ladda ner fakturor och se din donationshistorik.\n\nDen här länken upphör att gälla {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nOm du inte begärde denna länk kan du tryggt ignorera det här mejlet.\n\n– {product_name}-teamet" }, + "dsa_report_resolved": { + "subject": "Vi har fattat ett beslut om din anmälan på {product_name}", + "body": "Hej,\n\nVårt säkerhetsteam har granskat din anmälan enligt förordningen om digitala tjänster (ID: {reportId}) och fattat ett beslut.{hasComment, select, yes {\n\nSvar från säkerhetsteamet:\n{publicComment}} other {}}\n\nVi delar inte uppgifter om åtgärder mot någon annans konto, eftersom det är den personens personuppgifter.\n\nOm du inte håller med om beslutet kan du överklaga kostnadsfritt inom 60 dagar. Mejla {appeals_email} från den här e-postadressen, ange ditt anmälnings-ID och förklara varför du anser att beslutet är felaktigt. Om du befinner dig i EU kan du också hänskjuta tvisten till ett certifierat organ för tvistlösning utanför domstol. Inget av detta påverkar din rätt att vända dig till domstol.\n\n– Säkerhetsteamet på {product_name}" + }, "dsa_report_verification": { "subject": "Verifiera din e-postadress för en DSA-anmälan", "body": "Hej,\n\nAnvänd verifieringskoden nedan för att skicka in din anmälan enligt förordningen om digitala tjänster på {product_name}:\n\n{code}\n\nDen här koden upphör att gälla {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nOm du inte begärde detta kan du ignorera det här mejlet.\n\n– Säkerhetsteamet på {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_SV_SE_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Din registrering på {product_name} har godkänts", "body": "Hej {username},\n\nGoda nyheter: din registrering på {product_name} har godkänts.\n\nDu kan nu logga in i {product_name}-appen här:\n{channelsUrl}\n\nVälkommen till {product_name}-communityn.\n\n– {product_name}-teamet" }, + "report_received": { + "subject": "Vi har tagit emot din anmälan på {product_name}", + "body": "Hej,\n\nVi har tagit emot din anmälan enligt förordningen om digitala tjänster om {targetKind, select, message {ett meddelande} user {ett konto} guild {en community} other {innehåll}} på {product_name}.\n\nAnmälnings-ID: {reportId}\n\nVårt säkerhetsteam granskar din anmälan och vi mejlar dig på den här adressen när vi har fattat ett beslut. Spara det här mejlet så att du har det kvar.\n\n– Säkerhetsteamet på {product_name}" + }, "report_resolved": { "subject": "Din anmälan på {product_name} har granskats", "body": "Hej {username},\n\nDin anmälan (ID: {reportId}) har granskats av vårt säkerhetsteam.{hasComment, select, yes {\n\nSvar från säkerhetsteamet:\n{publicComment}} other {}}\n\nTack för att du hjälper till att göra {product_name} tryggt för alla. Vi tar alla anmälningar på allvar och uppskattar ditt bidrag till communityn.\n\nOm du har några frågor eller funderingar kring detta resultat, kontakta oss på {safety_email}.\n\n– Säkerhetsteamet på {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/th.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/th.ts index e45c742c1..0727e2f11 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/th.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/th.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_TH_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "จัดการการบริจาคให้ {product_name}", "body": "สวัสดี,\n\nคลิกลิงก์ด้านล่างเพื่อเข้าถึงพอร์ทัลผู้บริจาค:\n\n{manageUrl}\n\nในพอร์ทัล คุณสามารถจัดการการสมัครสมาชิก ดาวน์โหลดใบแจ้งหนี้ และดูประวัติการบริจาคของคุณได้\n\nลิงก์นี้จะหมดอายุในวันที่ {expiresAt, date, full} เวลา {expiresAt, time, short}\n\nหากคุณไม่ได้ร้องขอลิงก์นี้ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้อย่างปลอดภัย\n\n– ทีม {product_name}" }, + "dsa_report_resolved": { + "subject": "เราได้ตัดสินใจเกี่ยวกับรายงานของคุณใน {product_name} แล้ว", + "body": "สวัสดี,\n\nทีมความปลอดภัยของเราได้ตรวจสอบรายงาน Digital Services Act ของคุณ (ID: {reportId}) และตัดสินใจแล้ว{hasComment, select, yes {\n\nการตอบกลับจากทีมความปลอดภัย:\n{publicComment}} other {}}\n\nเราไม่เปิดเผยรายละเอียดการดำเนินการกับบัญชีของบุคคลอื่น เนื่องจากเป็นข้อมูลส่วนบุคคลของบุคคลนั้น\n\nหากคุณไม่เห็นด้วยกับการตัดสินใจนี้ คุณสามารถยื่นอุทธรณ์ได้โดยไม่มีค่าใช้จ่ายภายใน 60 วัน ส่งอีเมลไปที่ {appeals_email} จากที่อยู่อีเมลนี้ ระบุ ID รายงานของคุณ และอธิบายว่าทำไมคุณถึงคิดว่าการตัดสินใจนั้นไม่ถูกต้อง หากคุณอยู่ในสหภาพยุโรป คุณยังสามารถส่งข้อพิพาทไปยังหน่วยงานระงับข้อพิพาทนอกศาลที่ได้รับการรับรองได้ ทั้งหมดนี้ไม่กระทบต่อสิทธิ์ของคุณในการฟ้องร้องต่อศาล\n\n– ทีมความปลอดภัย {product_name}" + }, "dsa_report_verification": { "subject": "ยืนยันอีเมลสำหรับการรายงาน DSA", "body": "สวัสดี,\n\nใช้รหัสยืนยันด้านล่างเพื่อส่งรายงาน Digital Services Act ของคุณบน {product_name}:\n\n{code}\n\nรหัสนี้จะหมดอายุในวันที่ {expiresAt, date, full} เวลา {expiresAt, time, short}\n\nหากคุณไม่ได้ร้องขอ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้\n\n– ทีมความปลอดภัย {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_TH_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "การลงทะเบียนสำหรับ {product_name} ได้รับการอนุมัติแล้ว", "body": "สวัสดี {username},\n\nข่าวดี: การลงทะเบียน {product_name} ของคุณได้รับการอนุมัติแล้ว\n\nตอนนี้คุณสามารถเข้าสู่ระบบแอป {product_name} ได้ที่นี่:\n{channelsUrl}\n\nยินดีต้อนรับสู่คอมมูนิตี้ {product_name}\n\n– ทีม {product_name}" }, + "report_received": { + "subject": "เราได้รับรายงานของคุณใน {product_name} แล้ว", + "body": "สวัสดี,\n\nเราได้รับรายงานตามกฎหมายบริการดิจิทัล (Digital Services Act) ของคุณเกี่ยวกับ{targetKind, select, message {ข้อความ} user {บัญชี} guild {คอมมูนิตี้} other {เนื้อหา}}บน {product_name} แล้ว\n\nID รายงาน: {reportId}\n\nทีมความปลอดภัยของเราจะตรวจสอบรายงานของคุณ และเราจะส่งอีเมลถึงคุณตามที่อยู่นี้เมื่อตัดสินใจแล้ว โปรดเก็บอีเมลนี้ไว้เป็นหลักฐาน\n\n– ทีมความปลอดภัย {product_name}" + }, "report_resolved": { "subject": "รายงานของคุณใน {product_name} ได้รับการตรวจสอบแล้ว", "body": "สวัสดี {username},\n\nทีมความปลอดภัยของเราได้ตรวจสอบรายงานของคุณ (ID: {reportId}) แล้ว{hasComment, select, yes {\n\nการตอบกลับจากทีมความปลอดภัย:\n{publicComment}} other {}}\n\nขอบคุณที่ช่วยให้ {product_name} ปลอดภัยสำหรับทุกคน เราให้ความสำคัญกับรายงานทั้งหมดและขอขอบคุณสำหรับการมีส่วนร่วมของคุณในคอมมูนิตี้\n\nหากคุณมีคำถามหรือข้อกังวลใด ๆ เกี่ยวกับผลลัพธ์นี้ โปรดติดต่อ {safety_email}\n\n– ทีมความปลอดภัย {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/tr.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/tr.ts index 14f62ddc3..520f7b924 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/tr.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/tr.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_TR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name} bağışlarını yönet", "body": "Merhaba,\n\nBağışçı portalına erişmek için aşağıdaki bağlantıya tıkla:\n\n{manageUrl}\n\nPortalda aboneliklerini yönetebilir, faturaları indirebilir ve bağış geçmişini görüntüleyebilirsin.\n\nBu bağlantı {expiresAt, date, full} {expiresAt, time, short} tarihinde sona erecektir.\n\nBu bağlantıyı sen talep etmediysen, bu e-postayı güvenle yok sayabilirsin.\n\n– {product_name} Ekibi" }, + "dsa_report_resolved": { + "subject": "{product_name} raporun hakkında karar verdik", + "body": "Merhaba,\n\nGüvenlik Ekibimiz Dijital Hizmetler Yasası raporunu (Kimlik: {reportId}) inceledi ve bir karar verdi.{hasComment, select, yes {\n\nGüvenlik Ekibinin yanıtı:\n{publicComment}} other {}}\n\nBaşka bir kişinin hesabına uygulanan işlemlerin ayrıntılarını paylaşmıyoruz çünkü bunlar o kişinin kişisel verileridir.\n\nBu karara katılmıyorsan 60 gün içinde ücretsiz olarak itiraz edebilirsin. Bu e-posta adresinden {appeals_email} adresine e-posta gönder, rapor kimliğini ekle ve kararın neden yanlış olduğunu düşündüğünü açıkla. AB'deysen anlaşmazlığı sertifikalı bir mahkeme dışı uyuşmazlık çözüm kuruluşuna da götürebilirsin. Bunların hiçbiri mahkemeye başvurma hakkını etkilemez.\n\n– {product_name} Güvenlik Ekibi" + }, "dsa_report_verification": { "subject": "DSA raporu için e-postanı doğrula", "body": "Merhaba,\n\n{product_name}'daki Dijital Hizmetler Yasası raporunu göndermek için aşağıdaki doğrulama kodunu kullan:\n\n{code}\n\nBu kod {expiresAt, date, full} {expiresAt, time, short} tarihinde sona erecektir.\n\nBunu sen talep etmediysen, bu e-postayı güvenle yok sayabilirsin.\n\n– {product_name} Güvenlik Ekibi" @@ -83,6 +87,10 @@ const EMAIL_I18N_TR_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "{product_name} kaydın onaylandı", "body": "Merhaba {username},\n\nİyi haber: {product_name} kaydın onaylandı.\n\nArtık {product_name} uygulamasına buradan giriş yapabilirsin:\n{channelsUrl}\n\n{product_name} topluluğuna hoş geldin.\n\n– {product_name} Ekibi" }, + "report_received": { + "subject": "{product_name} raporunu aldık", + "body": "Merhaba,\n\n{product_name} üzerindeki {targetKind, select, message {bir mesaj} user {bir hesap} guild {bir topluluk} other {içerik}} hakkındaki Dijital Hizmetler Yasası raporunu aldık.\n\nRapor Kimliği: {reportId}\n\nGüvenlik Ekibimiz raporunu inceleyecek ve bir karar verdiğimizde sana bu adrese e-posta göndereceğiz. Bu e-postayı kayıtların için sakla.\n\n– {product_name} Güvenlik Ekibi" + }, "report_resolved": { "subject": "{product_name} raporun incelendi", "body": "Merhaba {username},\n\nRaporun (Kimlik: {reportId}) Güvenlik Ekibimiz tarafından incelendi.{hasComment, select, yes {\n\nGüvenlik Ekibinin yanıtı:\n{publicComment}} other {}}\n\n{product_name}'ı herkes için güvenli tutmaya yardımcı olduğun için teşekkür ederiz. Tüm raporları ciddiye alıyoruz ve topluluğa katkını takdir ediyoruz.\n\nBu sonuç hakkında herhangi bir sorun veya endişen varsa, lütfen {safety_email} adresine ulaş.\n\n– {product_name} Güvenlik Ekibi" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/uk.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/uk.ts index 9b364276b..6cf899557 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/uk.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/uk.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_UK_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Керуй своїми пожертвами для {product_name}", "body": "Привіт,\n\nНатисни посилання нижче, щоб отримати доступ до порталу керування пожертвами:\n\n{manageUrl}\n\nНа порталі ти можеш керувати підписками, завантажувати рахунки та переглядати історію своїх пожертв.\n\nЦе посилання діє до {expiresAt, date, full} о {expiresAt, time, short}.\n\nЯкщо цей запит не від тебе, можеш сміливо проігнорувати цей лист.\n\n– Команда {product_name}" }, + "dsa_report_resolved": { + "subject": "Ми ухвалили рішення щодо твого звіту в {product_name}", + "body": "Привіт,\n\nНаша команда безпеки розглянула твій звіт за Законом про цифрові послуги (ID: {reportId}) та ухвалила рішення.{hasComment, select, yes {\n\nВідповідь команди безпеки:\n{publicComment}} other {}}\n\nМи не розголошуємо подробиць заходів, ужитих щодо акаунта іншої людини, оскільки це її персональні дані.\n\nЯкщо ти не погоджуєшся з цим рішенням, ти можеш безкоштовно подати апеляцію протягом 60 днів. Надішли електронний лист на {appeals_email} з цієї електронної адреси, вкажи ID свого звіту та поясни, чому вважаєш рішення неправильним. Якщо ти перебуваєш у ЄС, ти також можеш передати спір до сертифікованого органу позасудового врегулювання спорів. Усе це не впливає на твоє право звернутися до суду.\n\n– Команда безпеки {product_name}" + }, "dsa_report_verification": { "subject": "Підтвердь свою електронну адресу для звіту DSA", "body": "Привіт,\n\nВикористай код підтвердження нижче, щоб подати звіт за Законом про цифрові послуги (DSA) для {product_name}:\n\n{code}\n\nЦей код діє до {expiresAt, date, full} о {expiresAt, time, short}.\n\nЯкщо цей запит не від тебе, можеш проігнорувати цей лист.\n\n– Команда безпеки {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_UK_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Твою реєстрацію в {product_name} схвалено", "body": "Привіт, {username},\n\nГарні новини: твою реєстрацію в {product_name} схвалено.\n\nТепер ти можеш увійти до застосунку {product_name} тут:\n{channelsUrl}\n\nЛаскаво просимо до спільноти {product_name}.\n\n– Команда {product_name}" }, + "report_received": { + "subject": "Ми отримали твій звіт у {product_name}", + "body": "Привіт,\n\nМи отримали твій звіт за Законом про цифрові послуги (DSA) щодо {targetKind, select, message {повідомлення} user {акаунта} guild {спільноти} other {вмісту}} у {product_name}.\n\nID звіту: {reportId}\n\nНаша команда безпеки розгляне твій звіт, і ми напишемо тобі на цю адресу, коли ухвалимо рішення. Збережи цей лист на майбутнє.\n\n– Команда безпеки {product_name}" + }, "report_resolved": { "subject": "Твій звіт у {product_name} розглянуто", "body": "Привіт, {username},\n\nНаша команда безпеки розглянула твій звіт (ID: {reportId}).{hasComment, select, yes {\n\nВідповідь команди безпеки:\n{publicComment}} other {}}\n\nДякуємо, що допомагаєш зберігати {product_name} безпечним для всіх. Ми серйозно ставимося до кожного звіту та цінуємо твій внесок у спільноту.\n\nЯкщо у тебе є запитання чи зауваження щодо цього рішення, напиши на {safety_email}.\n\n– Команда безпеки {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/vi.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/vi.ts index e7fc3ea0c..b684acba1 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/vi.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/vi.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_VI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Quản lý các khoản ủng hộ {product_name} của bạn", "body": "Xin chào,\n\nNhấp vào liên kết bên dưới để truy cập cổng thông tin người ủng hộ của bạn:\n\n{manageUrl}\n\nTrong cổng thông tin, bạn có thể quản lý gói đăng ký, tải xuống hóa đơn và xem lịch sử ủng hộ của mình.\n\nLiên kết này hết hạn vào {expiresAt, date, full} lúc {expiresAt, time, short}.\n\nNếu bạn không yêu cầu liên kết này, bạn có thể bỏ qua email này.\n\n– Đội ngũ {product_name}" }, + "dsa_report_resolved": { + "subject": "Chúng tôi đã có quyết định về báo cáo của bạn trên {product_name}", + "body": "Xin chào,\n\nĐội ngũ An toàn của chúng tôi đã xem xét báo cáo theo Đạo luật Dịch vụ kỹ thuật số của bạn (ID: {reportId}) và đã đưa ra quyết định.{hasComment, select, yes {\n\nPhản hồi từ Đội ngũ An toàn:\n{publicComment}} other {}}\n\nChúng tôi không chia sẻ chi tiết về biện pháp áp dụng với tài khoản của người khác, vì đó là dữ liệu cá nhân của họ.\n\nNếu không đồng ý với quyết định này, bạn có thể gửi khiếu nại miễn phí trong vòng 60 ngày. Gửi email đến {appeals_email} từ địa chỉ email này, ghi rõ ID báo cáo của bạn và giải thích lý do bạn cho rằng quyết định đó không chính xác. Nếu bạn ở EU, bạn cũng có thể đưa tranh chấp đến một cơ quan giải quyết tranh chấp ngoài tòa án đã được chứng nhận. Những điều này không ảnh hưởng đến quyền khởi kiện ra tòa của bạn.\n\n– Đội ngũ An toàn {product_name}" + }, "dsa_report_verification": { "subject": "Xác minh email của bạn cho báo cáo DSA", "body": "Xin chào,\n\nSử dụng mã xác minh bên dưới để gửi báo cáo Đạo luật Dịch vụ kỹ thuật số của bạn trên {product_name}:\n\n{code}\n\nMã này hết hạn vào {expiresAt, date, full} lúc {expiresAt, time, short}.\n\nNếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này.\n\n– Đội ngũ An toàn {product_name}" @@ -83,6 +87,10 @@ const EMAIL_I18N_VI_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "Đăng ký {product_name} của bạn đã được chấp thuận", "body": "Xin chào {username},\n\nTin tốt: đăng ký {product_name} của bạn đã được chấp thuận.\n\nBây giờ bạn có thể đăng nhập vào ứng dụng {product_name} tại đây:\n{channelsUrl}\n\nChào mừng bạn đến với cộng đồng {product_name}.\n\n– Đội ngũ {product_name}" }, + "report_received": { + "subject": "Chúng tôi đã nhận được báo cáo của bạn trên {product_name}", + "body": "Xin chào,\n\nChúng tôi đã nhận được báo cáo theo Đạo luật Dịch vụ kỹ thuật số của bạn về {targetKind, select, message {một tin nhắn} user {một tài khoản} guild {một cộng đồng} other {nội dung}} trên {product_name}.\n\nID báo cáo: {reportId}\n\nĐội ngũ An toàn của chúng tôi sẽ xem xét báo cáo của bạn và chúng tôi sẽ gửi email đến địa chỉ này khi có quyết định. Hãy giữ lại email này để tiện tra cứu.\n\n– Đội ngũ An toàn {product_name}" + }, "report_resolved": { "subject": "Báo cáo {product_name} của bạn đã được xem xét", "body": "Xin chào {username},\n\nBáo cáo của bạn (ID: {reportId}) đã được Đội ngũ An toàn của chúng tôi xem xét.{hasComment, select, yes {\n\nPhản hồi từ Đội ngũ An toàn:\n{publicComment}} other {}}\n\nCảm ơn bạn đã giúp giữ cho {product_name} an toàn cho mọi người. Chúng tôi xem xét nghiêm túc mọi báo cáo và đánh giá cao đóng góp của bạn cho cộng đồng.\n\nNếu bạn có bất kỳ câu hỏi hoặc lo ngại nào về kết quả này, vui lòng liên hệ {safety_email}.\n\n– Đội ngũ An toàn {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/zh-CN.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/zh-CN.ts index 2ba515be4..d6e208747 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/zh-CN.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/zh-CN.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_ZH_CN_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "管理你的 {product_name} 捐赠", "body": "你好,\n\n点击下方链接访问你的捐赠者门户:\n\n{manageUrl}\n\n在门户中,你可以管理订阅、下载发票和查看捐赠历史。\n\n此链接将于 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果你未请求此链接,可以放心忽略此邮件。\n\n– {product_name} 团队" }, + "dsa_report_resolved": { + "subject": "我们已对你的 {product_name} 举报做出决定", + "body": "你好,\n\n我们的安全团队已审核你根据《数字服务法》提交的举报(ID:{reportId})并做出决定。{hasComment, select, yes {\n\n安全团队的回复:\n{publicComment}} other {}}\n\n我们不会透露对他人账号所采取措施的详情,因为这属于对方的个人数据。\n\n如果你不同意此决定,可以在 60 天内免费提交申诉。请使用此邮箱地址发送邮件至 {appeals_email},注明你的举报 ID,并说明你认为该决定不正确的原因。如果你身在欧盟,还可以将争议提交给经认证的庭外争议解决机构。以上内容均不影响你向法院提起诉讼的权利。\n\n– {product_name} 安全团队" + }, "dsa_report_verification": { "subject": "验证邮箱以提交 DSA 举报", "body": "你好,\n\n请使用以下验证码在 {product_name} 上提交你的《数字服务法》举报:\n\n{code}\n\n此验证码将于 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果你未请求此操作,可以忽略此邮件。\n\n– {product_name} 安全团队" @@ -83,6 +87,10 @@ const EMAIL_I18N_ZH_CN_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "你的 {product_name} 注册已通过", "body": "你好 {username},\n\n好消息:你的 {product_name} 注册已通过。\n\n你现在可以登录 {product_name} 应用:\n{channelsUrl}\n\n欢迎加入 {product_name} 社区。\n\n– {product_name} 团队" }, + "report_received": { + "subject": "我们已收到你的 {product_name} 举报", + "body": "你好,\n\n我们已收到你根据《数字服务法》提交的关于 {product_name} 上{targetKind, select, message {一条消息} user {一个账号} guild {一个社区} other {内容}}的举报。\n\n举报 ID:{reportId}\n\n我们的安全团队会审核你的举报,并在做出决定后发送邮件至此邮箱地址。请保留此邮件以备查阅。\n\n– {product_name} 安全团队" + }, "report_resolved": { "subject": "你的 {product_name} 举报已完成审核", "body": "你好 {username},\n\n你的举报(ID:{reportId})已由我们的安全团队完成审核。{hasComment, select, yes {\n\n安全团队的回复:\n{publicComment}} other {}}\n\n感谢你帮助维护 {product_name} 的安全环境。我们会认真对待每一份举报,也感谢你为社区做出的贡献。\n\n如果你对此结果有任何疑问或意见,请联系 {safety_email}。\n\n– {product_name} 安全团队" diff --git a/fluxer_api/pkgs/email/src/email_i18n/locales/zh-TW.ts b/fluxer_api/pkgs/email/src/email_i18n/locales/zh-TW.ts index ef1fc6863..e061b792a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/locales/zh-TW.ts +++ b/fluxer_api/pkgs/email/src/email_i18n/locales/zh-TW.ts @@ -31,6 +31,10 @@ const EMAIL_I18N_ZH_TW_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "管理您的 {product_name} 捐款", "body": "哈囉,\n\n點擊下方連結以存取您的捐款者入口網站:\n\n{manageUrl}\n\n在入口網站中,您可以管理訂閱、下載發票並查看您的捐款紀錄。\n\n此連結將於 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果您沒有要求此連結,可以直接忽略這封電子郵件。\n\n– {product_name} 團隊" }, + "dsa_report_resolved": { + "subject": "我們已對您的 {product_name} 檢舉做出決定", + "body": "哈囉,\n\n我們的安全團隊已審核您依據數位服務法提出的檢舉(ID:{reportId})並做出決定。{hasComment, select, yes {\n\n安全團隊的回覆:\n{publicComment}} other {}}\n\n我們不會透露對他人帳號所採取措施的細節,因為這屬於對方的個人資料。\n\n如果您不同意此決定,可以在 60 天內免費提交申訴。請使用此電子郵件地址寄信至 {appeals_email},註明您的檢舉 ID,並說明您認為此決定不正確的原因。如果您身在歐盟,也可以將爭議提交給經認證的訴訟外爭議解決機構。以上內容均不影響您向法院提起訴訟的權利。\n\n– {product_name} 安全團隊" + }, "dsa_report_verification": { "subject": "驗證您的電子郵件以送出 DSA 檢舉", "body": "哈囉,\n\n請使用以下驗證碼,在 {product_name} 上送出您的數位服務法檢舉:\n\n{code}\n\n此驗證碼將於 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果您沒有要求此驗證碼,可以忽略這封電子郵件。\n\n– {product_name} 安全團隊" @@ -83,6 +87,10 @@ const EMAIL_I18N_ZH_TW_MESSAGES = defineEmailI18nLocaleMessages({ "subject": "您的 {product_name} 註冊已獲核准", "body": "哈囉 {username},\n\n好消息:您的 {product_name} 註冊已獲核准。\n\n您現在可以從這裡登入 {product_name} 應用程式:\n{channelsUrl}\n\n歡迎加入 {product_name} 社群。\n\n– {product_name} 團隊" }, + "report_received": { + "subject": "我們已收到您的 {product_name} 檢舉", + "body": "哈囉,\n\n我們已收到您依據數位服務法提出、關於 {product_name} 上{targetKind, select, message {一則訊息} user {一個帳號} guild {一個社群} other {內容}}的檢舉。\n\n檢舉 ID:{reportId}\n\n我們的安全團隊會審核您的檢舉,並在做出決定後寄信至此電子郵件地址。請保留這封電子郵件以供日後查閱。\n\n– {product_name} 安全團隊" + }, "report_resolved": { "subject": "您的 {product_name} 檢舉已審核完成", "body": "哈囉 {username},\n\n您的檢舉(ID:{reportId})已由我們的安全團隊審核。{hasComment, select, yes {\n\n安全團隊的回覆:\n{publicComment}} other {}}\n\n感謝您協助維護 {product_name} 的安全。我們會認真看待每一則檢舉,並感謝您對社群的貢獻。\n\n如果您對此結果有任何疑問或疑慮,請聯絡 {safety_email}。\n\n– {product_name} 安全團隊" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ar.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ar.json index 891326f18..b2dfd4977 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ar.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ar.json @@ -27,6 +27,10 @@ "subject": "إدارة تبرعاتك لـ{product_name}", "body": "مرحبًا،\n\nانقر على الرابط أدناه للوصول إلى بوابة المتبرعين الخاصة بك:\n\n{manageUrl}\n\nفي البوابة، يمكنك إدارة الاشتراكات، وتنزيل الفواتير، وعرض سجل تبرعاتك.\n\nتنتهي صلاحية هذا الرابط في {expiresAt, date, full} الساعة {expiresAt, time, short}.\n\nإذا لم تطلب هذا الرابط، يمكنك تجاهل هذا البريد الإلكتروني بأمان.\n\n– فريق {product_name}" }, + "dsa_report_resolved": { + "subject": "اتخذنا قرارًا بشأن بلاغك في {product_name}", + "body": "مرحبًا،\n\nراجع فريق الأمان لدينا بلاغك بموجب قانون الخدمات الرقمية (المعرف: {reportId}) واتخذ قرارًا.{hasComment, select, yes {\n\nرد فريق الأمان:\n{publicComment}} other {}}\n\nلا نشارك تفاصيل أي إجراء يُتخذ بحق حساب شخص آخر، لأنها بياناته الشخصية.\n\nإذا كنت لا توافق على هذا القرار، يمكنك تقديم استئناف مجانًا خلال 60 يومًا. أرسل بريدًا إلكترونيًا إلى {appeals_email} من عنوان البريد الإلكتروني هذا، واذكر معرف بلاغك، واشرح سبب اعتقادك أن القرار غير صحيح. إذا كنت في الاتحاد الأوروبي، يمكنك أيضًا إحالة النزاع إلى هيئة معتمدة لتسوية المنازعات خارج المحكمة. لا يؤثر أي من ذلك على حقك في اللجوء إلى القضاء.\n\n– فريق أمان {product_name}" + }, "dsa_report_verification": { "subject": "تحقق من بريدك الإلكتروني لتقديم بلاغ DSA", "body": "مرحبًا،\n\nاستخدم رمز التحقق أدناه لتقديم بلاغك بموجب قانون الخدمات الرقمية على {product_name}:\n\n{code}\n\nتنتهي صلاحية هذا الرمز في {expiresAt, date, full} الساعة {expiresAt, time, short}.\n\nإذا لم تطلب هذا، يمكنك تجاهل هذا البريد الإلكتروني.\n\n– فريق أمان {product_name}" @@ -79,6 +83,10 @@ "subject": "تمت الموافقة على تسجيلك في {product_name}", "body": "مرحبًا {username}،\n\nأخبار سارة: تمت الموافقة على تسجيلك في {product_name}.\n\nيمكنك الآن تسجيل الدخول إلى تطبيق {product_name} من هنا:\n{channelsUrl}\n\nمرحبًا بك في مجتمع {product_name}.\n\n– فريق {product_name}" }, + "report_received": { + "subject": "لقد استلمنا بلاغك في {product_name}", + "body": "مرحبًا،\n\nلقد استلمنا بلاغك بموجب قانون الخدمات الرقمية بشأن {targetKind, select, message {رسالة} user {حساب} guild {مجتمع} other {محتوى}} على {product_name}.\n\nمعرف البلاغ: {reportId}\n\nسيراجع فريق الأمان لدينا بلاغك وسنراسلك على هذا العنوان عندما نتخذ قرارًا. احتفظ بهذه الرسالة للرجوع إليها.\n\n– فريق أمان {product_name}" + }, "report_resolved": { "subject": "تمت مراجعة بلاغك في {product_name}", "body": "مرحبًا {username}،\n\nتمت مراجعة بلاغك (المعرف: {reportId}) من قبل فريق الأمان لدينا.{hasComment, select, yes {\n\nرد فريق الأمان:\n{publicComment}} other {}}\n\nشكرًا لمساعدتك في الحفاظ على {product_name} آمنًا للجميع. نحن نأخذ جميع البلاغات على محمل الجد ونقدر مساهمتك في المجتمع.\n\nإذا كان لديك أي أسئلة أو مخاوف بشأن هذه النتيجة، يرجى الاتصال بـ{safety_email}.\n\n– فريق أمان {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/bg.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/bg.json index 2d63289cc..808a0f07a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/bg.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/bg.json @@ -27,6 +27,10 @@ "subject": "Управлявай даренията си за {product_name}", "body": "Здравей,\n\nКликни върху линка по-долу, за да получиш достъп до портала за дарители:\n\n{manageUrl}\n\nВ портала можеш да управляваш абонаменти, да изтегляш фактури и да преглеждаш историята на даренията си.\n\nТози линк изтича на {expiresAt, date, full} в {expiresAt, time, short}.\n\nАко не си поискал този линк, можеш спокойно да игнорираш този имейл.\n\n– Екип на {product_name}" }, + "dsa_report_resolved": { + "subject": "Взехме решение по сигнала ти във {product_name}", + "body": "Здравей,\n\nНашият екип за безопасност прегледа сигнала ти по Закона за цифровите услуги (ID: {reportId}) и взе решение.{hasComment, select, yes {\n\nОтговор от екипа за безопасност:\n{publicComment}} other {}}\n\nНе споделяме подробности за действия, предприети срещу акаунта на друг човек, защото това са негови лични данни.\n\nАко не си съгласен с това решение, можеш да го обжалваш безплатно в срок от 60 дни. Изпрати имейл на {appeals_email} от този имейл адрес, посочи ID на сигнала си и обясни защо смяташ, че решението е неправилно. Ако се намираш в ЕС, можеш също да отнесеш спора към сертифициран орган за извънсъдебно решаване на спорове. Нищо от това не засяга правото ти да се обърнеш към съда.\n\n– Екип за безопасност на {product_name}" + }, "dsa_report_verification": { "subject": "Потвърди имейла си за сигнал по DSA", "body": "Здравей,\n\nИзползвай кода за потвърждение по-долу, за да подадеш сигнала си по Закона за цифровите услуги във {product_name}:\n\n{code}\n\nТози код изтича на {expiresAt, date, full} в {expiresAt, time, short}.\n\nАко не си го поискал, можеш да игнорираш този имейл.\n\n– Екип за безопасност на {product_name}" @@ -79,6 +83,10 @@ "subject": "Регистрацията ти във {product_name} е одобрена", "body": "Здравей, {username},\n\nДобра новина: регистрацията ти във {product_name} е одобрена.\n\nВече можеш да влезеш в приложението {product_name} тук:\n{channelsUrl}\n\nДобре дошъл в общността на {product_name}.\n\n– Екип на {product_name}" }, + "report_received": { + "subject": "Получихме сигнала ти във {product_name}", + "body": "Здравей,\n\nПолучихме сигнала ти по Закона за цифровите услуги относно {targetKind, select, message {съобщение} user {акаунт} guild {общност} other {съдържание}} във {product_name}.\n\nID на сигнала: {reportId}\n\nНашият екип за безопасност ще прегледа сигнала ти и ще ти пишем на този адрес, когато вземем решение. Запази този имейл за справка.\n\n– Екип за безопасност на {product_name}" + }, "report_resolved": { "subject": "Сигналът ти във {product_name} е прегледан", "body": "Здравей, {username},\n\nСигналът ти (ID: {reportId}) е прегледан от нашия екип за безопасност.{hasComment, select, yes {\n\nОтговор от екипа за безопасност:\n{publicComment}} other {}}\n\nБлагодарим ти, че помагаш на {product_name} да остане безопасно място за всички. Приемаме всички сигнали сериозно и ценим приноса ти към общността.\n\nАко имаш въпроси или притеснения относно този резултат, свържи се с {safety_email}.\n\n– Екип за безопасност на {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/cs.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/cs.json index 6d994127d..8cc12004c 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/cs.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/cs.json @@ -27,6 +27,10 @@ "subject": "Spravujte své dary pro {product_name}", "body": "Dobrý den,\n\nKliknutím na odkaz níže otevřete portál pro dárce:\n\n{manageUrl}\n\nNa portálu můžete spravovat předplatná, stahovat faktury a prohlížet si historii svých darů.\n\nPlatnost tohoto odkazu vyprší dne {expiresAt, date, full} v {expiresAt, time, short}.\n\nPokud jste si tento odkaz nevyžádali, můžete tento e-mail bez obav ignorovat.\n\n– Tým {product_name}" }, + "dsa_report_resolved": { + "subject": "Rozhodli jsme o vašem nahlášení na {product_name}", + "body": "Dobrý den,\n\nNáš bezpečnostní tým přezkoumal vaše nahlášení podle nařízení o digitálních službách (ID: {reportId}) a rozhodl o něm.{hasComment, select, yes {\n\nOdpověď bezpečnostního týmu:\n{publicComment}} other {}}\n\nPodrobnosti o opatřeních přijatých vůči účtu jiné osoby nesdělujeme, protože jde o její osobní údaje.\n\nPokud s tímto rozhodnutím nesouhlasíte, můžete se do 60 dnů bezplatně odvolat. Pošlete e-mail na {appeals_email} z této e-mailové adresy, uveďte ID svého nahlášení a vysvětlete, proč považujete rozhodnutí za nesprávné. Pokud jste v EU, můžete spor také předložit certifikovanému subjektu pro mimosoudní řešení sporů. Nic z toho nemá vliv na vaše právo obrátit se na soud.\n\n– Bezpečnostní tým {product_name}" + }, "dsa_report_verification": { "subject": "Ověřte svůj e-mail pro nahlášení podle DSA", "body": "Dobrý den,\n\nPomocí ověřovacího kódu níže odešlete své nahlášení podle nařízení o digitálních službách na {product_name}:\n\n{code}\n\nPlatnost tohoto kódu vyprší dne {expiresAt, date, full} v {expiresAt, time, short}.\n\nPokud jste si tento kód nevyžádali, můžete tento e-mail ignorovat.\n\n– Bezpečnostní tým {product_name}" @@ -79,6 +83,10 @@ "subject": "Vaše registrace do {product_name} byla schválena", "body": "Dobrý den, {username},\n\nDobrá zpráva: vaše registrace do {product_name} byla schválena.\n\nNyní se můžete přihlásit do aplikace {product_name} zde:\n{channelsUrl}\n\nVítejte v komunitě {product_name}.\n\n– Tým {product_name}" }, + "report_received": { + "subject": "Obdrželi jsme vaše nahlášení na {product_name}", + "body": "Dobrý den,\n\nObdrželi jsme vaše nahlášení podle nařízení o digitálních službách, které se týká {targetKind, select, message {zprávy} user {účtu} guild {komunity} other {obsahu}} na {product_name}.\n\nID nahlášení: {reportId}\n\nNáš bezpečnostní tým vaše nahlášení přezkoumá a jakmile rozhodneme, napíšeme vám na tuto adresu. Tento e-mail si uschovejte pro své záznamy.\n\n– Bezpečnostní tým {product_name}" + }, "report_resolved": { "subject": "Vaše nahlášení na {product_name} bylo přezkoumáno", "body": "Dobrý den, {username},\n\nNáš bezpečnostní tým přezkoumal vaše nahlášení (ID: {reportId}).{hasComment, select, yes {\n\nOdpověď bezpečnostního týmu:\n{publicComment}} other {}}\n\nDěkujeme, že pomáháte udržovat {product_name} bezpečný pro všechny. Všechna nahlášení bereme vážně a vážíme si vašeho přínosu komunitě.\n\nPokud máte k tomuto výsledku jakékoli dotazy nebo výhrady, kontaktujte {safety_email}.\n\n– Bezpečnostní tým {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/da.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/da.json index b5d888278..ffa7d3ad6 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/da.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/da.json @@ -27,6 +27,10 @@ "subject": "Administrer dine {product_name}-donationer", "body": "Hej,\n\nKlik på linket nedenfor for at få adgang til din donorportal:\n\n{manageUrl}\n\nI portalen kan du administrere abonnementer, downloade fakturaer og se din donationshistorik.\n\nDette link udløber den {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke har anmodet om dette link, kan du trygt ignorere denne e-mail.\n\n– Teamet bag {product_name}" }, + "dsa_report_resolved": { + "subject": "Vi har truffet en afgørelse om din anmeldelse på {product_name}", + "body": "Hej,\n\nVores sikkerhedsteam har behandlet din anmeldelse i henhold til Digital Services Act (ID: {reportId}) og truffet en afgørelse.{hasComment, select, yes {\n\nSvar fra sikkerhedsteamet:\n{publicComment}} other {}}\n\nVi deler ikke oplysninger om tiltag mod en anden persons konto, fordi det er den persons personoplysninger.\n\nHvis du er uenig i afgørelsen, kan du klage gratis inden for 60 dage. Send en e-mail til {appeals_email} fra denne e-mailadresse, oplys dit anmeldelses-ID, og forklar, hvorfor du mener, at afgørelsen er forkert. Hvis du befinder dig i EU, kan du også indbringe tvisten for et certificeret organ for udenretslig tvistbilæggelse. Intet af dette påvirker din ret til at gå til domstolene.\n\n– Sikkerhedsteamet hos {product_name}" + }, "dsa_report_verification": { "subject": "Bekræft din e-mailadresse til en DSA-anmeldelse", "body": "Hej,\n\nBrug bekræftelseskoden nedenfor til at indsende din anmeldelse i henhold til Digital Services Act på {product_name}:\n\n{code}\n\nDenne kode udløber den {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke har anmodet om dette, kan du ignorere denne e-mail.\n\n– Sikkerhedsteamet hos {product_name}" @@ -79,6 +83,10 @@ "subject": "Din tilmelding til {product_name} er godkendt", "body": "Hej {username},\n\nGode nyheder: Din tilmelding til {product_name} er godkendt.\n\nDu kan nu logge ind på {product_name}-appen her:\n{channelsUrl}\n\nVelkommen til fællesskabet på {product_name}.\n\n– Teamet bag {product_name}" }, + "report_received": { + "subject": "Vi har modtaget din anmeldelse på {product_name}", + "body": "Hej,\n\nVi har modtaget din anmeldelse i henhold til Digital Services Act om {targetKind, select, message {en besked} user {en konto} guild {et fællesskab} other {indhold}} på {product_name}.\n\nAnmeldelses-ID: {reportId}\n\nVores sikkerhedsteam gennemgår din anmeldelse, og vi sender dig en e-mail på denne adresse, når vi har truffet en afgørelse. Gem denne e-mail, så du har den til senere.\n\n– Sikkerhedsteamet hos {product_name}" + }, "report_resolved": { "subject": "Din anmeldelse på {product_name} er blevet behandlet", "body": "Hej {username},\n\nDin anmeldelse (ID: {reportId}) er blevet behandlet af vores sikkerhedsteam.{hasComment, select, yes {\n\nSvar fra sikkerhedsteamet:\n{publicComment}} other {}}\n\nTak for din hjælp til at holde {product_name} sikkert for alle. Vi tager alle anmeldelser alvorligt og værdsætter dit bidrag til fællesskabet.\n\nHvis du har spørgsmål eller bekymringer vedrørende dette resultat, kan du kontakte {safety_email}.\n\n– Sikkerhedsteamet hos {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/de.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/de.json index 0efc531df..d38c86ab5 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/de.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/de.json @@ -27,6 +27,10 @@ "subject": "Verwalte deine {product_name}-Spenden", "body": "Hallo,\n\nklicke auf den Link unten, um auf dein Spendenportal zuzugreifen:\n\n{manageUrl}\n\nIm Portal kannst du Abonnements verwalten, Rechnungen herunterladen und deine Spendenübersicht einsehen.\n\nDieser Link läuft am {expiresAt, date, full} um {expiresAt, time, short} ab.\n\nWenn du diesen Link nicht angefordert hast, kannst du diese E-Mail ignorieren.\n\n– {product_name}-Team" }, + "dsa_report_resolved": { + "subject": "Wir haben über deine {product_name}-Meldung entschieden", + "body": "Hallo,\n\nunser Sicherheitsteam hat deine Meldung nach dem Digital Services Act (ID: {reportId}) geprüft und eine Entscheidung getroffen.{hasComment, select, yes {\n\nAntwort vom Sicherheitsteam:\n{publicComment}} other {}}\n\nWir geben keine Einzelheiten zu Maßnahmen gegen den Account einer anderen Person weiter, da es sich um deren personenbezogene Daten handelt.\n\nWenn du mit dieser Entscheidung nicht einverstanden bist, kannst du innerhalb von 60 Tagen kostenlos Einspruch einlegen. Sende eine E-Mail von dieser E-Mail-Adresse an {appeals_email}, gib deine Meldungs-ID an und erkläre, warum du die Entscheidung für falsch hältst. Wenn du dich in der EU befindest, kannst du die Streitigkeit außerdem einer zertifizierten außergerichtlichen Streitbeilegungsstelle vorlegen. Dein Recht, vor Gericht zu gehen, bleibt davon unberührt.\n\n– {product_name}-Sicherheitsteam" + }, "dsa_report_verification": { "subject": "Bestätige deine E-Mail-Adresse für eine DSA-Meldung", "body": "Hallo,\n\nverwende den untenstehenden Bestätigungscode, um deine Meldung nach dem Digital Services Act (DSA) auf {product_name} einzureichen:\n\n{code}\n\nDieser Code läuft am {expiresAt, date, full} um {expiresAt, time, short} ab.\n\nWenn du dies nicht angefordert hast, kannst du diese E-Mail ignorieren.\n\n– {product_name}-Sicherheitsteam" @@ -79,6 +83,10 @@ "subject": "Deine {product_name}-Registrierung wurde genehmigt", "body": "Hallo {username},\n\ngute Nachrichten: Deine {product_name}-Registrierung wurde genehmigt.\n\nDu kannst dich jetzt hier in die {product_name}-App einloggen:\n{channelsUrl}\n\nWillkommen in der {product_name}-Community.\n\n– {product_name}-Team" }, + "report_received": { + "subject": "Wir haben deine {product_name}-Meldung erhalten", + "body": "Hallo,\n\nwir haben deine Meldung nach dem Digital Services Act (DSA) über {targetKind, select, message {eine Nachricht} user {einen Account} guild {eine Community} other {Inhalte}} auf {product_name} erhalten.\n\nMeldungs-ID: {reportId}\n\nUnser Sicherheitsteam prüft deine Meldung. Sobald wir eine Entscheidung getroffen haben, schreiben wir dir an diese E-Mail-Adresse. Bitte bewahre diese E-Mail für deine Unterlagen auf.\n\n– {product_name}-Sicherheitsteam" + }, "report_resolved": { "subject": "Deine {product_name}-Meldung wurde geprüft", "body": "Hallo {username},\n\ndeine Meldung (ID: {reportId}) wurde von unserem Sicherheitsteam geprüft.{hasComment, select, yes {\n\nAntwort vom Sicherheitsteam:\n{publicComment}} other {}}\n\nDanke, dass du hilfst, {product_name} für alle sicher zu halten. Wir nehmen alle Meldungen ernst und schätzen deinen Beitrag zur Community.\n\nWenn du Fragen oder Bedenken zu diesem Ergebnis hast, kontaktiere bitte {safety_email}.\n\n– {product_name}-Sicherheitsteam" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/el.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/el.json index 596d42e71..b1debf56a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/el.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/el.json @@ -27,6 +27,10 @@ "subject": "Διαχειρίσου τις δωρεές σου στο {product_name}", "body": "Γεια σου,\n\nΚάνε κλικ στον παρακάτω σύνδεσμο για να αποκτήσεις πρόσβαση στην πύλη δωρητών σου:\n\n{manageUrl}\n\nΣτην πύλη μπορείς να διαχειριστείς τις συνδρομές, να κατεβάσεις τιμολόγια και να δεις το ιστορικό των δωρεών σου.\n\nΑυτός ο σύνδεσμος λήγει στις {expiresAt, date, full} και ώρα {expiresAt, time, short}.\n\nΕάν δεν ζήτησες αυτόν τον σύνδεσμο, μπορείς να αγνοήσεις με ασφάλεια αυτό το email.\n\n– Η ομάδα του {product_name}" }, + "dsa_report_resolved": { + "subject": "Λάβαμε απόφαση για την αναφορά σου στο {product_name}", + "body": "Γεια σου,\n\nΗ ομάδα ασφαλείας μας εξέτασε την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες (ID: {reportId}) και έλαβε απόφαση.{hasComment, select, yes {\n\nΑπάντηση από την ομάδα ασφαλείας:\n{publicComment}} other {}}\n\nΔεν κοινοποιούμε λεπτομέρειες για ενέργειες που έγιναν σε βάρος του λογαριασμού άλλου ατόμου, επειδή πρόκειται για δικά του προσωπικά δεδομένα.\n\nΕάν διαφωνείς με αυτήν την απόφαση, μπορείς να υποβάλεις προσφυγή δωρεάν εντός 60 ημερών. Στείλε email στο {appeals_email} από αυτήν τη διεύθυνση email, ανάφερε το ID της αναφοράς σου και εξήγησε γιατί πιστεύεις ότι η απόφαση είναι λανθασμένη. Εάν βρίσκεσαι στην ΕΕ, μπορείς επίσης να παραπέμψεις τη διαφορά σε πιστοποιημένο όργανο εξωδικαστικής επίλυσης διαφορών. Τίποτα από αυτά δεν επηρεάζει το δικαίωμά σου να προσφύγεις στα δικαστήρια.\n\n– Η ομάδα ασφαλείας του {product_name}" + }, "dsa_report_verification": { "subject": "Επαλήθευσε το email σου για αναφορά DSA", "body": "Γεια σου,\n\nΧρησιμοποίησε τον παρακάτω κωδικό επαλήθευσης για να υποβάλεις την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες στο {product_name}:\n\n{code}\n\nΑυτός ο κωδικός λήγει στις {expiresAt, date, full} και ώρα {expiresAt, time, short}.\n\nΕάν δεν το ζήτησες, μπορείς να αγνοήσεις αυτό το email.\n\n– Η ομάδα ασφαλείας του {product_name}" @@ -79,6 +83,10 @@ "subject": "Η εγγραφή σου στο {product_name} έχει εγκριθεί", "body": "Γεια σου {username},\n\nΚαλά νέα: η εγγραφή σου στο {product_name} έχει εγκριθεί.\n\nΜπορείς τώρα να συνδεθείς στην εφαρμογή του {product_name} εδώ:\n{channelsUrl}\n\nΚαλώς ήρθες στην κοινότητα του {product_name}.\n\n– Η ομάδα του {product_name}" }, + "report_received": { + "subject": "Λάβαμε την αναφορά σου στο {product_name}", + "body": "Γεια σου,\n\nΛάβαμε την αναφορά σου βάσει της Πράξης για τις ψηφιακές υπηρεσίες σχετικά με {targetKind, select, message {ένα μήνυμα} user {έναν λογαριασμό} guild {μια κοινότητα} other {περιεχόμενο}} στο {product_name}.\n\nID αναφοράς: {reportId}\n\nΗ ομάδα ασφαλείας μας θα εξετάσει την αναφορά σου και θα σου στείλουμε email σε αυτήν τη διεύθυνση μόλις λάβουμε απόφαση. Κράτησε αυτό το email για το αρχείο σου.\n\n– Η ομάδα ασφαλείας του {product_name}" + }, "report_resolved": { "subject": "Η αναφορά σου στο {product_name} έχει εξεταστεί", "body": "Γεια σου {username},\n\nΗ αναφορά σου (ID: {reportId}) εξετάστηκε από την ομάδα ασφαλείας μας.{hasComment, select, yes {\n\nΑπάντηση από την ομάδα ασφαλείας:\n{publicComment}} other {}}\n\nΕυχαριστούμε που βοηθάς να παραμείνει το {product_name} ασφαλές για όλους. Λαμβάνουμε σοβαρά υπόψη κάθε αναφορά και εκτιμούμε τη συμβολή σου στην κοινότητα.\n\nΕάν έχεις ερωτήσεις ή απορίες σχετικά με αυτό το αποτέλεσμα, στείλε email στο {safety_email}.\n\n– Η ομάδα ασφαλείας του {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/en-GB.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/en-GB.json index 1b437bac0..c59da4aa4 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/en-GB.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/en-GB.json @@ -27,6 +27,10 @@ "subject": "Manage your {product_name} donations", "body": "Hello,\n\nClick the link below to access your donor portal:\n\n{manageUrl}\n\nIn the portal, you can manage subscriptions, download invoices, and view your donation history.\n\nThis link expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you did not request this link, you can safely ignore this email.\n\n– {product_name} Team" }, + "dsa_report_resolved": { + "subject": "We made a decision on your {product_name} report", + "body": "Hello,\n\nOur Safety Team has reviewed your Digital Services Act report (ID: {reportId}) and made a decision.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nWe don't share details of any action taken against another person's account, because that is their personal data.\n\nIf you disagree with this decision, you can appeal free of charge within 60 days. Email {appeals_email} from this email address, include your report ID, and explain why you think the decision is wrong. If you are in the EU, you can also refer the dispute to a certified out-of-court dispute settlement body. None of this affects your right to go to court.\n\n– {product_name} Safety Team" + }, "dsa_report_verification": { "subject": "Verify your email for a DSA report", "body": "Hello,\n\nUse the verification code below to submit your Digital Services Act report on {product_name}:\n\n{code}\n\nThis code expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you didn't request this, you can ignore this email.\n\n– {product_name} Safety Team" @@ -79,6 +83,10 @@ "subject": "Your {product_name} registration has been approved", "body": "Hello {username},\n\nGood news: your {product_name} registration has been approved.\n\nYou can now log in to the {product_name} app here:\n{channelsUrl}\n\nWelcome to the {product_name} community.\n\n– {product_name} Team" }, + "report_received": { + "subject": "We received your {product_name} report", + "body": "Hello,\n\nWe received your Digital Services Act report about {targetKind, select, message {a message} user {an account} guild {a community} other {content}} on {product_name}.\n\nReport ID: {reportId}\n\nOur Safety Team will review your report and email you at this address once we have made a decision. Keep this email for your records.\n\n– {product_name} Safety Team" + }, "report_resolved": { "subject": "Your {product_name} report has been reviewed", "body": "Hello {username},\n\nYour report (ID: {reportId}) has been reviewed by our Safety Team.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nThanks for helping keep {product_name} safe for everyone. We take all reports seriously and appreciate your contribution to the community.\n\nIf you have any questions or concerns about this outcome, please contact {safety_email}.\n\n– {product_name} Safety Team" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-419.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-419.json index 8b9841a9a..624c6fccc 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-419.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-419.json @@ -27,6 +27,10 @@ "subject": "Administra tus donaciones a {product_name}", "body": "Hola:\n\nHaz clic en el siguiente enlace para acceder a tu portal de donantes:\n\n{manageUrl}\n\nEn el portal, puedes administrar suscripciones, descargar facturas y ver tu historial de donaciones.\n\nEste enlace vence el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste este enlace, puedes ignorar este correo electrónico de forma segura.\n\n– Equipo de {product_name}" }, + "dsa_report_resolved": { + "subject": "Tomamos una decisión sobre tu reporte en {product_name}", + "body": "Hola:\n\nNuestro equipo de seguridad revisó tu reporte conforme a la Ley de Servicios Digitales (ID: {reportId}) y tomó una decisión.{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nNo compartimos detalles sobre las medidas tomadas contra la cuenta de otra persona, porque son sus datos personales.\n\nSi no estás de acuerdo con esta decisión, puedes apelar sin costo dentro de un plazo de 60 días. Envía un correo electrónico a {appeals_email} desde esta dirección de correo electrónico, incluye el ID de tu reporte y explica por qué crees que la decisión es incorrecta. Si te encuentras en la UE, también puedes remitir la disputa a un órgano certificado de resolución extrajudicial de litigios. Nada de esto afecta tu derecho a acudir a los tribunales.\n\n– Equipo de seguridad de {product_name}" + }, "dsa_report_verification": { "subject": "Verifica tu correo electrónico para enviar un reporte conforme a la Ley de Servicios Digitales", "body": "Hola:\n\nUsa el código de verificación a continuación para enviar tu reporte conforme a la Ley de Servicios Digitales en {product_name}:\n\n{code}\n\nEste código vence el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste esto, puedes ignorar este correo electrónico.\n\n– Equipo de seguridad de {product_name}" @@ -79,6 +83,10 @@ "subject": "Tu registro en {product_name} ha sido aprobado", "body": "Hola {username}:\n\nBuenas noticias: tu registro en {product_name} ha sido aprobado.\n\nAhora puedes iniciar sesión en la aplicación de {product_name} aquí:\n{channelsUrl}\n\nBienvenido a la comunidad de {product_name}.\n\n– Equipo de {product_name}" }, + "report_received": { + "subject": "Recibimos tu reporte en {product_name}", + "body": "Hola:\n\nRecibimos tu reporte conforme a la Ley de Servicios Digitales sobre {targetKind, select, message {un mensaje} user {una cuenta} guild {una comunidad} other {contenido}} en {product_name}.\n\nID del reporte: {reportId}\n\nNuestro equipo de seguridad revisará tu reporte y te escribiremos a esta dirección cuando hayamos tomado una decisión. Guarda este correo electrónico para tus registros.\n\n– Equipo de seguridad de {product_name}" + }, "report_resolved": { "subject": "Se revisó tu reporte en {product_name}", "body": "Hola {username}:\n\nNuestro equipo de seguridad revisó tu reporte (ID: {reportId}).{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nGracias por ayudar a mantener {product_name} seguro para todos. Nos tomamos todos los reportes en serio y agradecemos tu contribución a la comunidad.\n\nSi tienes alguna pregunta o inquietud sobre este resultado, comunícate con {safety_email}.\n\n– Equipo de seguridad de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-ES.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-ES.json index afa323853..63a8ca087 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-ES.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/es-ES.json @@ -27,6 +27,10 @@ "subject": "Gestiona tus donaciones a {product_name}", "body": "Hola:\n\nHaz clic en el siguiente enlace para acceder a tu portal de donantes:\n\n{manageUrl}\n\nEn el portal, puedes gestionar suscripciones, descargar facturas y ver tu historial de donaciones.\n\nEste enlace caduca el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste este enlace, puedes ignorar este correo electrónico de forma segura.\n\n– Equipo de {product_name}" }, + "dsa_report_resolved": { + "subject": "Hemos tomado una decisión sobre tu denuncia en {product_name}", + "body": "Hola:\n\nNuestro equipo de seguridad ha revisado tu denuncia conforme a la Ley de Servicios Digitales (ID: {reportId}) y ha tomado una decisión.{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nNo compartimos detalles sobre las medidas adoptadas contra la cuenta de otra persona, porque son sus datos personales.\n\nSi no estás de acuerdo con esta decisión, puedes presentar una apelación de forma gratuita en un plazo de 60 días. Envía un correo electrónico a {appeals_email} desde esta dirección de correo electrónico, incluye el ID de tu denuncia y explica por qué crees que la decisión es incorrecta. Si te encuentras en la UE, también puedes someter el litigio a un órgano certificado de resolución extrajudicial de litigios. Nada de esto afecta a tu derecho a acudir a los tribunales.\n\n– Equipo de seguridad de {product_name}" + }, "dsa_report_verification": { "subject": "Verifica tu correo electrónico para enviar una denuncia conforme a la Ley de Servicios Digitales", "body": "Hola:\n\nUsa el siguiente código de verificación para enviar tu denuncia conforme a la Ley de Servicios Digitales en {product_name}:\n\n{code}\n\nEste código caduca el {expiresAt, date, full} a las {expiresAt, time, short}.\n\nSi no solicitaste esto, puedes ignorar este correo electrónico.\n\n– Equipo de seguridad de {product_name}" @@ -79,6 +83,10 @@ "subject": "Tu registro en {product_name} ha sido aprobado", "body": "Hola {username}:\n\nBuenas noticias: tu registro en {product_name} ha sido aprobado.\n\nAhora puedes iniciar sesión en la aplicación de {product_name} aquí:\n{channelsUrl}\n\nBienvenido a la comunidad de {product_name}.\n\n– Equipo de {product_name}" }, + "report_received": { + "subject": "Hemos recibido tu denuncia en {product_name}", + "body": "Hola:\n\nHemos recibido tu denuncia conforme a la Ley de Servicios Digitales sobre {targetKind, select, message {un mensaje} user {una cuenta} guild {una comunidad} other {contenido}} en {product_name}.\n\nID de la denuncia: {reportId}\n\nNuestro equipo de seguridad revisará tu denuncia y te escribiremos a esta dirección cuando hayamos tomado una decisión. Guarda este correo electrónico para tus registros.\n\n– Equipo de seguridad de {product_name}" + }, "report_resolved": { "subject": "Se ha revisado tu denuncia en {product_name}", "body": "Hola {username}:\n\nNuestro equipo de seguridad ha revisado tu denuncia (ID: {reportId}).{hasComment, select, yes {\n\nRespuesta del equipo de seguridad:\n{publicComment}} other {}}\n\nGracias por ayudarnos a mantener {product_name} seguro para todos. Nos tomamos todas las denuncias en serio y agradecemos tu contribución a la comunidad.\n\nSi tienes alguna pregunta o inquietud sobre este resultado, ponte en contacto con {safety_email}.\n\n– Equipo de seguridad de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fi.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fi.json index 096e13b4f..f4d6e52f3 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fi.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fi.json @@ -27,6 +27,10 @@ "subject": "Hallitse {product_name}-lahjoituksiasi", "body": "Hei,\n\nNapsauta alla olevaa linkkiä päästäksesi lahjoittajaportaaliisi:\n\n{manageUrl}\n\nPortaalissa voit hallinnoida tilauksia, ladata laskuja ja tarkastella lahjoitushistoriaasi.\n\nTämä linkki vanhenee {expiresAt, date, full} klo {expiresAt, time, short}.\n\nJos et pyytänyt tätä linkkiä, voit jättää tämän sähköpostin turvallisesti huomiotta.\n\n– {product_name}-tiimi" }, + "dsa_report_resolved": { + "subject": "Teimme päätöksen {product_name}-ilmoituksestasi", + "body": "Hei,\n\nTurvallisuustiimimme on käsitellyt digipalvelusäädöksen mukaisen ilmoituksesi (ID: {reportId}) ja tehnyt päätöksen.{hasComment, select, yes {\n\nTurvallisuustiimin vastaus:\n{publicComment}} other {}}\n\nEmme kerro toisen henkilön tiliin kohdistuneista toimista, koska ne ovat hänen henkilötietojaan.\n\nJos olet eri mieltä päätöksestä, voit valittaa siitä maksutta 60 päivän kuluessa. Lähetä sähköpostia osoitteeseen {appeals_email} tästä sähköpostiosoitteesta, kerro ilmoituksesi tunnus ja selitä, miksi pidät päätöstä virheellisenä. Jos olet EU:ssa, voit myös viedä riidan sertifioidun tuomioistuimen ulkopuolisen riidanratkaisuelimen käsiteltäväksi. Mikään tästä ei vaikuta oikeuteesi viedä asia tuomioistuimeen.\n\n– {product_name}-turvallisuustiimi" + }, "dsa_report_verification": { "subject": "Vahvista sähköpostiosoitteesi DSA-ilmoitusta varten", "body": "Hei,\n\nKäytä alla olevaa vahvistuskoodia lähettääksesi digipalvelusäädöksen mukaisen ilmoituksen {product_name}-palveluun:\n\n{code}\n\nTämä koodi vanhenee {expiresAt, date, full} klo {expiresAt, time, short}.\n\nJos et pyytänyt tätä, voit jättää tämän sähköpostin huomiotta.\n\n– {product_name}-turvallisuustiimi" @@ -79,6 +83,10 @@ "subject": "{product_name}-rekisteröitymisesi on hyväksytty", "body": "Hei {username},\n\nHyviä uutisia: {product_name}-rekisteröitymisesi on hyväksytty.\n\nVoit nyt kirjautua {product_name}-sovellukseen täältä:\n{channelsUrl}\n\nTervetuloa {product_name}-yhteisöön.\n\n– {product_name}-tiimi" }, + "report_received": { + "subject": "Vastaanotimme {product_name}-ilmoituksesi", + "body": "Hei,\n\nVastaanotimme digipalvelusäädöksen mukaisen ilmoituksesi, joka koskee {targetKind, select, message {viestiä} user {tiliä} guild {yhteisöä} other {sisältöä}} {product_name}-palvelussa.\n\nIlmoituksen tunnus: {reportId}\n\nTurvallisuustiimimme käsittelee ilmoituksesi, ja lähetämme sinulle sähköpostia tähän osoitteeseen, kun olemme tehneet päätöksen. Säilytä tämä sähköposti myöhempää tarvetta varten.\n\n– {product_name}-turvallisuustiimi" + }, "report_resolved": { "subject": "{product_name}-ilmoituksesi on käsitelty", "body": "Hei {username},\n\nTurvallisuustiimimme on käsitellyt ilmoituksesi (ID: {reportId}).{hasComment, select, yes {\n\nTurvallisuustiimin vastaus:\n{publicComment}} other {}}\n\nKiitos, että autat pitämään {product_name}-palvelun turvallisena kaikille. Otamme kaikki ilmoitukset vakavasti ja arvostamme panostasi yhteisöön.\n\nJos sinulla on kysyttävää tai huolenaiheita tästä päätöksestä, ota yhteyttä osoitteeseen {safety_email}.\n\n– {product_name}-turvallisuustiimi" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fr.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fr.json index 774acb86f..7c2ab16fc 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fr.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/fr.json @@ -27,6 +27,10 @@ "subject": "Gérer vos dons à {product_name}", "body": "Bonjour,\n\nCliquez sur le lien ci-dessous pour accéder à votre portail de donateur :\n\n{manageUrl}\n\nVous pouvez y gérer vos abonnements, télécharger des factures et consulter l’historique de vos dons.\n\nCe lien expire le {expiresAt, date, full} à {expiresAt, time, short}.\n\nSi vous n’avez pas demandé ce lien, vous pouvez ignorer cet e-mail.\n\n– L’équipe {product_name}" }, + "dsa_report_resolved": { + "subject": "Nous avons pris une décision concernant votre signalement sur {product_name}", + "body": "Bonjour,\n\nNotre équipe de sécurité a examiné votre signalement au titre du règlement sur les services numériques (ID : {reportId}) et a pris une décision.{hasComment, select, yes {\n\nRéponse de l’équipe de sécurité :\n{publicComment}} other {}}\n\nNous ne communiquons pas le détail des mesures prises à l’encontre du compte d’une autre personne, car il s’agit de ses données personnelles.\n\nSi vous n’êtes pas d’accord avec cette décision, vous pouvez déposer un recours gratuitement dans un délai de 60 jours. Écrivez à {appeals_email} depuis cette adresse e-mail, indiquez l’ID de votre signalement et expliquez pourquoi vous estimez que la décision est incorrecte. Si vous êtes dans l’UE, vous pouvez également soumettre le litige à un organe certifié de règlement extrajudiciaire des litiges. Rien de tout cela n’affecte votre droit de saisir un tribunal.\n\n– L’équipe de sécurité de {product_name}" + }, "dsa_report_verification": { "subject": "Vérifiez votre e-mail pour un signalement DSA", "body": "Bonjour,\n\nUtilisez le code ci-dessous pour envoyer votre signalement au titre du règlement sur les services numériques (DSA) sur {product_name} :\n\n{code}\n\nCe code expire le {expiresAt, date, full} à {expiresAt, time, short}.\n\nSi vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer cet e-mail.\n\n– L’équipe de sécurité de {product_name}" @@ -79,6 +83,10 @@ "subject": "Votre inscription à {product_name} a été approuvée", "body": "Bonjour {username},\n\nBonne nouvelle : votre inscription à {product_name} a été approuvée.\n\nVous pouvez maintenant vous connecter à l’application {product_name} ici :\n{channelsUrl}\n\nBienvenue dans la communauté {product_name}.\n\n– L’équipe {product_name}" }, + "report_received": { + "subject": "Nous avons bien reçu votre signalement sur {product_name}", + "body": "Bonjour,\n\nNous avons bien reçu votre signalement au titre du règlement sur les services numériques (DSA) concernant {targetKind, select, message {un message} user {un compte} guild {une communauté} other {du contenu}} sur {product_name}.\n\nID du signalement : {reportId}\n\nNotre équipe de sécurité examinera votre signalement et nous vous écrirons à cette adresse dès qu’une décision aura été prise. Conservez cet e-mail pour vos archives.\n\n– L’équipe de sécurité de {product_name}" + }, "report_resolved": { "subject": "Votre signalement sur {product_name} a été examiné", "body": "Bonjour {username},\n\nVotre signalement (ID : {reportId}) a été examiné par notre équipe de sécurité.{hasComment, select, yes {\n\nRéponse de l’équipe de sécurité :\n{publicComment}} other {}}\n\nMerci de nous aider à préserver la sécurité de {product_name} pour tous. Nous prenons tous les signalements au sérieux et apprécions votre contribution à la communauté.\n\nPour toute question ou préoccupation concernant cette décision, contactez {safety_email}.\n\n– L’équipe de sécurité de {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/he.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/he.json index 5a871a165..38934cf2f 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/he.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/he.json @@ -27,6 +27,10 @@ "subject": "ניהול התרומות שלכם ל-{product_name}", "body": "שלום,\n\nלחצו על הקישור למטה כדי לגשת לפורטל התורמים שלכם:\n\n{manageUrl}\n\nבפורטל, אתם יכולים לנהל מנויים, להוריד חשבוניות ולצפות בהיסטוריית התרומות שלכם.\n\nקישור זה יפוג בתאריך {expiresAt, date, full} בשעה {expiresAt, time, short}.\n\nאם לא ביקשתם קישור זה, אתם יכולים להתעלם בבטחה מאימייל זה.\n\nצוות {product_name}" }, + "dsa_report_resolved": { + "subject": "קיבלנו החלטה בנוגע לדיווח שלכם ב-{product_name}", + "body": "שלום,\n\nצוות הבטיחות שלנו בדק את הדיווח שלכם לפי חוק השירותים הדיגיטליים (מזהה: {reportId}) וקיבל החלטה.{hasComment, select, yes {\n\nתגובה מצוות הבטיחות:\n{publicComment}} other {}}\n\nאיננו משתפים פרטים על פעולות שננקטו נגד חשבון של אדם אחר, מכיוון שאלה נתונים אישיים שלו.\n\nאם אינכם מסכימים עם ההחלטה, תוכלו להגיש ערעור ללא תשלום בתוך 60 יום. שלחו אימייל לכתובת {appeals_email} מכתובת האימייל הזו, ציינו את מזהה הדיווח והסבירו מדוע לדעתכם ההחלטה שגויה. אם אתם נמצאים באיחוד האירופי, תוכלו גם להפנות את המחלוקת לגוף מוסמך ליישוב סכסוכים מחוץ לבית המשפט. אין בכך כדי לפגוע בזכותכם לפנות לבית המשפט.\n\nצוות הבטיחות של {product_name}" + }, "dsa_report_verification": { "subject": "אימות האימייל שלכם לדיווח DSA", "body": "שלום,\n\nהשתמשו בקוד האימות למטה כדי להגיש את הדיווח שלכם לפי חוק השירותים הדיגיטליים ב-{product_name}:\n\n{code}\n\nקוד זה יפוג בתאריך {expiresAt, date, full} בשעה {expiresAt, time, short}.\n\nאם לא ביקשתם זאת, אתם יכולים להתעלם מאימייל זה.\n\nצוות הבטיחות של {product_name}" @@ -79,6 +83,10 @@ "subject": "ההרשמה שלכם ל-{product_name} אושרה", "body": "שלום {username},\n\nחדשות טובות: ההרשמה שלכם ל-{product_name} אושרה.\n\nכעת אתם יכולים להתחבר לאפליקציית {product_name} כאן:\n{channelsUrl}\n\nברוכים הבאים לקהילת {product_name}.\n\nצוות {product_name}" }, + "report_received": { + "subject": "קיבלנו את הדיווח שלכם ב-{product_name}", + "body": "שלום,\n\nקיבלנו את הדיווח שלכם לפי חוק השירותים הדיגיטליים על {targetKind, select, message {הודעה} user {חשבון} guild {קהילה} other {תוכן}} ב-{product_name}.\n\nמזהה הדיווח: {reportId}\n\nצוות הבטיחות שלנו יבדוק את הדיווח, ונשלח לכם אימייל לכתובת זו כשנקבל החלטה. שמרו את האימייל הזה לתיעוד.\n\nצוות הבטיחות של {product_name}" + }, "report_resolved": { "subject": "הדיווח שלכם ב-{product_name} נבדק", "body": "שלום {username},\n\nהדיווח שלכם (מזהה: {reportId}) נבדק על ידי צוות הבטיחות שלנו.{hasComment, select, yes {\n\nתגובה מצוות הבטיחות:\n{publicComment}} other {}}\n\nתודה שעזרתם לשמור על {product_name} כמקום בטוח לכולם. אנו מתייחסים לכל הדיווחים ברצינות ומעריכים את תרומתכם לקהילה.\n\nאם יש לכם שאלות או חששות לגבי תוצאה זו, אנא צרו קשר עם {safety_email}.\n\nצוות הבטיחות של {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hi.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hi.json index e19d9a08f..4271ea854 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hi.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hi.json @@ -27,6 +27,10 @@ "subject": "अपने {product_name} डोनेशन मैनेज करें", "body": "नमस्ते,\n\nअपना डोनर पोर्टल एक्सेस करने के लिए नीचे दिए गए लिंक पर क्लिक करें:\n\n{manageUrl}\n\nपोर्टल में, आप सब्सक्रिप्शन मैनेज कर सकते हैं, इनवॉइस डाउनलोड कर सकते हैं और अपने डोनेशन का इतिहास देख सकते हैं।\n\nयह लिंक {expiresAt, date, full} को {expiresAt, time, short} पर एक्सपायर हो जाएगा।\n\nअगर आपने इस लिंक का अनुरोध नहीं किया था, तो आप इस ईमेल को बेझिझक अनदेखा कर सकते हैं।\n\n– {product_name} टीम" }, + "dsa_report_resolved": { + "subject": "हमने आपकी {product_name} रिपोर्ट पर फैसला ले लिया है", + "body": "नमस्ते,\n\nहमारी सेफ्टी टीम ने आपकी Digital Services Act रिपोर्ट (ID: {reportId}) का रिव्यू करके फैसला ले लिया है।{hasComment, select, yes {\n\nसेफ्टी टीम का जवाब:\n{publicComment}} other {}}\n\nहम किसी दूसरे व्यक्ति के अकाउंट पर की गई कार्रवाई की जानकारी शेयर नहीं करते, क्योंकि वह उनका निजी डेटा है।\n\nअगर आप इस फैसले से सहमत नहीं हैं, तो आप 60 दिनों के अंदर मुफ़्त में अपील कर सकते हैं। इस ईमेल पते से {appeals_email} पर ईमेल करें, अपनी रिपोर्ट ID शामिल करें और बताएं कि आपको फैसला गलत क्यों लगता है। अगर आप EU में हैं, तो आप इस विवाद को अदालत के बाहर विवाद निपटाने वाली किसी प्रमाणित संस्था के पास भी ले जा सकते हैं। इनमें से किसी भी बात का आपके अदालत जाने के अधिकार पर कोई असर नहीं पड़ता।\n\n– {product_name} सेफ्टी टीम" + }, "dsa_report_verification": { "subject": "DSA रिपोर्ट के लिए अपना ईमेल वेरिफ़ाई करें", "body": "नमस्ते,\n\n{product_name} पर अपनी Digital Services Act रिपोर्ट सबमिट करने के लिए नीचे दिए गए वेरिफ़िकेशन कोड का इस्तेमाल करें:\n\n{code}\n\nयह कोड {expiresAt, date, full} को {expiresAt, time, short} पर एक्सपायर हो जाएगा।\n\nअगर आपने इसका अनुरोध नहीं किया था, तो आप इस ईमेल को अनदेखा कर सकते हैं।\n\n– {product_name} सेफ्टी टीम" @@ -79,6 +83,10 @@ "subject": "आपका {product_name} रजिस्ट्रेशन अप्रूव हो गया है", "body": "नमस्ते {username},\n\nअच्छी खबर: आपका {product_name} रजिस्ट्रेशन अप्रूव हो गया है।\n\nअब आप {product_name} ऐप में यहाँ लॉगिन कर सकते हैं:\n{channelsUrl}\n\n{product_name} कम्युनिटी में आपका स्वागत है।\n\n– {product_name} टीम" }, + "report_received": { + "subject": "हमें आपकी {product_name} रिपोर्ट मिल गई है", + "body": "नमस्ते,\n\nहमें {product_name} पर {targetKind, select, message {एक मैसेज} user {एक अकाउंट} guild {एक कम्युनिटी} other {सामग्री}} के बारे में आपकी Digital Services Act रिपोर्ट मिल गई है।\n\nरिपोर्ट ID: {reportId}\n\nहमारी सेफ्टी टीम आपकी रिपोर्ट का रिव्यू करेगी और फैसला लेने के बाद हम आपको इसी पते पर ईमेल करेंगे। इस ईमेल को अपने रिकॉर्ड के लिए संभालकर रखें।\n\n– {product_name} सेफ्टी टीम" + }, "report_resolved": { "subject": "आपकी {product_name} रिपोर्ट का रिव्यू कर लिया गया है", "body": "नमस्ते {username},\n\nआपकी रिपोर्ट (ID: {reportId}) का हमारी सेफ्टी टीम ने रिव्यू कर लिया है।{hasComment, select, yes {\n\nसेफ्टी टीम का जवाब:\n{publicComment}} other {}}\n\n{product_name} को सभी के लिए सुरक्षित रखने में मदद करने के लिए धन्यवाद। हम हर रिपोर्ट को गंभीरता से लेते हैं और कम्युनिटी में आपके योगदान की सराहना करते हैं।\n\nअगर आपको इस नतीजे के बारे में कोई सवाल या चिंता है, तो कृपया {safety_email} पर संपर्क करें।\n\n– {product_name} सेफ्टी टीम" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hr.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hr.json index caad2c534..a75a7c9be 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hr.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hr.json @@ -27,6 +27,10 @@ "subject": "Upravljanje donacijama za {product_name}", "body": "Pozdrav,\n\nKlikni na poveznicu ispod za pristup svom portalu za donatore:\n\n{manageUrl}\n\nNa portalu možeš upravljati pretplatama, preuzimati račune i pregledavati povijest svojih donacija.\n\nOva poveznica istječe {expiresAt, date, full} u {expiresAt, time, short}.\n\nAko ovaj zahtjev ne dolazi od tebe, slobodno zanemari ovu e-poštu.\n\n– Tim {product_name}a" }, + "dsa_report_resolved": { + "subject": "Donijeli smo odluku o tvojoj prijavi na platformi {product_name}", + "body": "Pozdrav,\n\nNaš sigurnosni tim pregledao je tvoju prijavu prema Zakonu o digitalnim uslugama (ID: {reportId}) i donio odluku.{hasComment, select, yes {\n\nOdgovor sigurnosnog tima:\n{publicComment}} other {}}\n\nNe dijelimo pojedinosti o mjerama poduzetima protiv računa druge osobe jer su to njezini osobni podaci.\n\nAko se ne slažeš s ovom odlukom, možeš besplatno podnijeti žalbu u roku od 60 dana. Pošalji e-poštu na {appeals_email} s ove adrese e-pošte, navedi ID svoje prijave i objasni zašto smatraš da je odluka pogrešna. Ako se nalaziš u EU-u, spor možeš uputiti i certificiranom tijelu za izvansudsko rješavanje sporova. Ništa od navedenog ne utječe na tvoje pravo da se obratiš sudu.\n\n– Sigurnosni tim {product_name}a" + }, "dsa_report_verification": { "subject": "Potvrdi svoju e-poštu za prijavu prema Zakonu o digitalnim uslugama", "body": "Pozdrav,\n\nZa podnošenje prijave prema Zakonu o digitalnim uslugama na {product_name}u upotrijebi kod za potvrdu u nastavku:\n\n{code}\n\nOvaj kod istječe {expiresAt, date, full} u {expiresAt, time, short}.\n\nAko ovaj zahtjev ne dolazi od tebe, zanemari ovu e-poštu.\n\n– Sigurnosni tim {product_name}a" @@ -79,6 +83,10 @@ "subject": "Tvoja registracija za {product_name} je odobrena", "body": "Pozdrav {username},\n\nDobre vijesti: tvoja registracija za {product_name} je odobrena.\n\nSada se možeš prijaviti u aplikaciju {product_name} ovdje:\n{channelsUrl}\n\nDobro došli u zajednicu {product_name}a.\n\n– Tim {product_name}a" }, + "report_received": { + "subject": "Primili smo tvoju prijavu na platformi {product_name}", + "body": "Pozdrav,\n\nPrimili smo tvoju prijavu prema Zakonu o digitalnim uslugama koja se odnosi na {targetKind, select, message {poruku} user {račun} guild {zajednicu} other {sadržaj}} na platformi {product_name}.\n\nID prijave: {reportId}\n\nNaš sigurnosni tim pregledat će tvoju prijavu, a mi ćemo ti poslati e-poštu na ovu adresu kada donesemo odluku. Sačuvaj ovu e-poštu za svoju evidenciju.\n\n– Sigurnosni tim {product_name}a" + }, "report_resolved": { "subject": "Tvoja prijava na {product_name}u je pregledana", "body": "Pozdrav {username},\n\nTvoju prijavu (ID: {reportId}) pregledao je naš sigurnosni tim.{hasComment, select, yes {\n\nOdgovor sigurnosnog tima:\n{publicComment}} other {}}\n\nHvala ti što pomažeš da {product_name} bude siguran za sve. Sve prijave shvaćamo ozbiljno i cijenimo tvoj doprinos zajednici.\n\nAko imaš bilo kakvih pitanja ili nedoumica u vezi s ovim ishodom, kontaktiraj {safety_email}.\n\n– Sigurnosni tim {product_name}a" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hu.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hu.json index d9a060569..be0b84ab2 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hu.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/hu.json @@ -27,6 +27,10 @@ "subject": "A {product_name} működését támogató adományaid kezelése", "body": "Szia!\n\nKattints az alábbi linkre az adományozói portálod eléréséhez:\n\n{manageUrl}\n\nA portálon kezelheted az előfizetéseket, letöltheted a számlákat, és megtekintheted az adománytörténetedet.\n\nEz a link {expiresAt, date, full} {expiresAt, time, short} időpontban jár le.\n\nHa nem kérted ezt a linket, nyugodtan figyelmen kívül hagyhatod ezt az e-mailt.\n\n– {product_name} csapata" }, + "dsa_report_resolved": { + "subject": "Döntést hoztunk a {product_name} felületén tett bejelentésedről", + "body": "Szia!\n\nBiztonsági csapatunk elbírálta a digitális szolgáltatásokról szóló rendelet szerinti bejelentésedet (azonosító: {reportId}), és döntést hozott.{hasComment, select, yes {\n\nA biztonsági csapat válasza:\n{publicComment}} other {}}\n\nMás személy fiókjával szemben tett intézkedések részleteit nem osztjuk meg, mert azok az ő személyes adatai.\n\nHa nem értesz egyet a döntéssel, 60 napon belül díjmentesen fellebbezhetsz. Erről az e-mail-címről írj a következő címre: {appeals_email}, add meg a bejelentésed azonosítóját, és fejtsd ki, miért tartod hibásnak a döntést. Ha az EU-ban tartózkodsz, a vitát tanúsított peren kívüli vitarendezési testület elé is viheted. Mindez nem érinti azt a jogodat, hogy bírósághoz fordulj.\n\n– {product_name} biztonsági csapata" + }, "dsa_report_verification": { "subject": "Erősítsd meg e-mail-címedet a DSA-bejelentéshez", "body": "Szia!\n\nAz alábbi ellenőrző kóddal küldheted el a digitális szolgáltatásokról szóló rendelet (DSA) szerinti bejelentésedet a {product_name} felületén:\n\n{code}\n\nA kód lejárati időpontja: {expiresAt, date, full} {expiresAt, time, short}.\n\nHa nem te kérted ezt a kódot, figyelmen kívül hagyhatod ezt az e-mailt.\n\n– {product_name} biztonsági csapata" @@ -79,6 +83,10 @@ "subject": "Jóváhagytuk a regisztrációdat a {product_name} felületén", "body": "Szia, {username}!\n\nJó hír: jóváhagytuk a regisztrációdat a {product_name} felületén.\n\nMost már bejelentkezhetsz az alkalmazásba:\n{channelsUrl}\n\nÜdvözlünk a {product_name} közösségében!\n\n– {product_name} csapata" }, + "report_received": { + "subject": "Megkaptuk a {product_name} felületén tett bejelentésedet", + "body": "Szia!\n\nMegkaptuk a digitális szolgáltatásokról szóló rendelet (DSA) szerinti bejelentésedet a {product_name} felületén. A bejelentés tárgya: {targetKind, select, message {egy üzenet} user {egy fiók} guild {egy közösség} other {tartalom}}.\n\nBejelentés azonosítója: {reportId}\n\nBiztonsági csapatunk elbírálja a bejelentésedet, és erre a címre írunk neked, amint döntést hoztunk. Őrizd meg ezt az e-mailt, hogy később is meglegyen.\n\n– {product_name} biztonsági csapata" + }, "report_resolved": { "subject": "Elbíráltuk a {product_name} felületén tett bejelentésedet", "body": "Szia, {username}!\n\nBiztonsági csapatunk elbírálta a bejelentésedet (azonosító: {reportId}).{hasComment, select, yes {\n\nA biztonsági csapat válasza:\n{publicComment}} other {}}\n\nKöszönjük, hogy segítesz mindenki számára biztonságossá tenni a {product_name} közösségét. Minden bejelentést komolyan veszünk, és nagyra értékeljük, hogy segíted a közösséget.\n\nHa kérdésed vagy aggályod van az eredménnyel kapcsolatban, írj erre a címre: {safety_email}.\n\n– {product_name} biztonsági csapata" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/id.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/id.json index 271e24115..2a7fde276 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/id.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/id.json @@ -27,6 +27,10 @@ "subject": "Kelola donasimu untuk {product_name}", "body": "Halo,\n\nKlik tautan di bawah untuk mengakses portal donaturmu:\n\n{manageUrl}\n\nDi portal itu, kamu bisa mengelola langganan, mengunduh faktur, dan melihat riwayat donasimu.\n\nTautan ini kedaluwarsa pada {expiresAt, date, full} pukul {expiresAt, time, short}.\n\nJika kamu tidak meminta tautan ini, kamu bisa mengabaikan email ini dengan aman.\n\n– Tim {product_name}" }, + "dsa_report_resolved": { + "subject": "Kami telah mengambil keputusan atas laporanmu di {product_name}", + "body": "Halo,\n\nTim Keamanan kami telah meninjau laporan Digital Services Act kamu (ID: {reportId}) dan mengambil keputusan.{hasComment, select, yes {\n\nTanggapan dari Tim Keamanan:\n{publicComment}} other {}}\n\nKami tidak membagikan detail tindakan yang diambil terhadap akun orang lain, karena itu adalah data pribadi mereka.\n\nJika kamu tidak setuju dengan keputusan ini, kamu bisa mengajukan banding secara gratis dalam waktu 60 hari. Kirim email ke {appeals_email} dari alamat email ini, sertakan ID laporanmu, dan jelaskan kenapa menurutmu keputusan ini keliru. Jika kamu berada di Uni Eropa, kamu juga bisa membawa sengketa ini ke badan penyelesaian sengketa di luar pengadilan yang bersertifikat. Semua ini tidak memengaruhi hakmu untuk menempuh jalur pengadilan.\n\n– Tim Keamanan {product_name}" + }, "dsa_report_verification": { "subject": "Verifikasi emailmu untuk laporan DSA", "body": "Halo,\n\nGunakan kode verifikasi di bawah ini untuk mengirimkan laporan Digital Services Act kamu di {product_name}:\n\n{code}\n\nKode ini kedaluwarsa pada {expiresAt, date, full} pukul {expiresAt, time, short}.\n\nJika kamu tidak meminta ini, kamu bisa mengabaikan email ini.\n\n– Tim Keamanan {product_name}" @@ -79,6 +83,10 @@ "subject": "Pendaftaranmu di {product_name} telah disetujui", "body": "Halo {username},\n\nKabar baik: pendaftaranmu di {product_name} telah disetujui.\n\nKamu sekarang bisa masuk ke aplikasi {product_name} di sini:\n{channelsUrl}\n\nSelamat datang di komunitas {product_name}.\n\n– Tim {product_name}" }, + "report_received": { + "subject": "Kami telah menerima laporanmu di {product_name}", + "body": "Halo,\n\nKami telah menerima laporan Digital Services Act kamu tentang {targetKind, select, message {sebuah pesan} user {sebuah akun} guild {sebuah komunitas} other {konten}} di {product_name}.\n\nID laporan: {reportId}\n\nTim Keamanan kami akan meninjau laporanmu dan kami akan mengirim email ke alamat ini setelah mengambil keputusan. Simpan email ini sebagai arsip.\n\n– Tim Keamanan {product_name}" + }, "report_resolved": { "subject": "Laporanmu di {product_name} telah ditinjau", "body": "Halo {username},\n\nLaporanmu (ID: {reportId}) telah ditinjau oleh Tim Keamanan kami.{hasComment, select, yes {\n\nTanggapan dari Tim Keamanan:\n{publicComment}} other {}}\n\nTerima kasih telah membantu menjaga {product_name} tetap aman untuk semua orang. Kami menanggapi semua laporan dengan serius dan menghargai kontribusimu bagi komunitas.\n\nJika kamu punya pertanyaan atau kekhawatiran tentang hasil ini, silakan hubungi {safety_email}.\n\n– Tim Keamanan {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/it.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/it.json index dda833de7..93e7a979f 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/it.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/it.json @@ -27,6 +27,10 @@ "subject": "Gestisci le tue donazioni a {product_name}", "body": "Ciao,\n\nClicca sul link qui sotto per accedere al tuo portale donatori:\n\n{manageUrl}\n\nNel portale, puoi gestire gli abbonamenti, scaricare le fatture e visualizzare la cronologia delle tue donazioni.\n\nQuesto link scade il {expiresAt, date, full} alle {expiresAt, time, short}.\n\nSe non hai richiesto questo link, puoi ignorare tranquillamente questa email.\n\n– Il team di {product_name}" }, + "dsa_report_resolved": { + "subject": "Abbiamo preso una decisione sulla tua segnalazione su {product_name}", + "body": "Ciao,\n\nIl nostro team per la sicurezza ha esaminato la tua segnalazione ai sensi del Digital Services Act (ID: {reportId}) e ha preso una decisione.{hasComment, select, yes {\n\nRisposta dal team per la sicurezza:\n{publicComment}} other {}}\n\nNon condividiamo i dettagli delle misure adottate nei confronti dell'account di un'altra persona, perché si tratta dei suoi dati personali.\n\nSe non sei d'accordo con questa decisione, puoi presentare un ricorso gratuitamente entro 60 giorni. Invia un'email a {appeals_email} da questo indirizzo email, indica l'ID della tua segnalazione e spiega perché ritieni che la decisione sia scorretta. Se ti trovi nell'UE, puoi anche sottoporre la controversia a un organismo certificato di risoluzione extragiudiziale delle controversie. Tutto questo non pregiudica il tuo diritto di rivolgerti a un tribunale.\n\n– Il team per la sicurezza di {product_name}" + }, "dsa_report_verification": { "subject": "Verifica la tua email per una segnalazione DSA", "body": "Ciao,\n\nUsa il codice di verifica qui sotto per inviare la tua segnalazione ai sensi del Digital Services Act su {product_name}:\n\n{code}\n\nQuesto codice scade il {expiresAt, date, full} alle {expiresAt, time, short}.\n\nSe non hai richiesto questa operazione, puoi ignorare questa email.\n\n– Il team per la sicurezza di {product_name}" @@ -79,6 +83,10 @@ "subject": "La tua registrazione a {product_name} è stata approvata", "body": "Ciao {username},\n\nBuone notizie: la tua registrazione a {product_name} è stata approvata.\n\nOra puoi accedere all'app {product_name} qui:\n{channelsUrl}\n\nBenvenuto nella community di {product_name}.\n\n– Il team di {product_name}" }, + "report_received": { + "subject": "Abbiamo ricevuto la tua segnalazione su {product_name}", + "body": "Ciao,\n\nAbbiamo ricevuto la tua segnalazione ai sensi del Digital Services Act relativa a {targetKind, select, message {un messaggio} user {un account} guild {una community} other {un contenuto}} su {product_name}.\n\nID segnalazione: {reportId}\n\nIl nostro team per la sicurezza esaminerà la tua segnalazione e ti scriveremo a questo indirizzo quando avremo preso una decisione. Conserva questa email per riferimento futuro.\n\n– Il team per la sicurezza di {product_name}" + }, "report_resolved": { "subject": "La tua segnalazione {product_name} è stata esaminata", "body": "Ciao {username},\n\nLa tua segnalazione (ID: {reportId}) è stata esaminata dal nostro team per la sicurezza.{hasComment, select, yes {\n\nRisposta dal team per la sicurezza:\n{publicComment}} other {}}\n\nGrazie per aver contribuito a mantenere {product_name} sicuro per tutti. Prendiamo sul serio tutte le segnalazioni e apprezziamo il tuo contributo alla community.\n\nSe hai domande o preoccupazioni riguardo a questo esito, contatta {safety_email}.\n\n– Il team per la sicurezza di {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ja.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ja.json index 4b2c64a12..226738358 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ja.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ja.json @@ -27,6 +27,10 @@ "subject": "{product_name}への寄付を管理", "body": "こんにちは。\n\n以下のリンクをクリックして、寄付者ポータルにアクセスしてください。\n\n{manageUrl}\n\nポータルでは、サブスクリプションの管理、請求書のダウンロード、寄付履歴の表示ができます。\n\nこのリンクの有効期限は{expiresAt, date, full} {expiresAt, time, short}です。\n\nこのリンクをリクエストしていない場合は、このメールを無視して問題ありません。\n\n– {product_name}チーム" }, + "dsa_report_resolved": { + "subject": "{product_name}への報告について決定しました", + "body": "こんにちは。\n\nデジタルサービス法に基づくご報告(ID: {reportId})を安全チームが審査し、決定を行いました。{hasComment, select, yes {\n\n安全チームからの回答:\n{publicComment}} other {}}\n\n他の方のアカウントに対して行った措置の詳細は、その方の個人データにあたるため、お伝えしていません。\n\nこの決定に同意できない場合は、60日以内に無料で異議申し立てを行えます。このメールアドレスから{appeals_email}までメールを送信し、報告IDを記載のうえ、決定が誤っていると考える理由を説明してください。EU域内にお住まいの場合は、認定を受けた裁判外紛争解決機関に紛争を付託することもできます。これらはいずれも、裁判所に訴える権利に影響しません。\n\n– {product_name}安全チーム" + }, "dsa_report_verification": { "subject": "DSA報告のためのメールアドレスを確認", "body": "こんにちは。\n\n以下の確認コードを使用して、{product_name}でデジタルサービス法に基づく報告を提出してください。\n\n{code}\n\nこのコードの有効期限は{expiresAt, date, full} {expiresAt, time, short}です。\n\nご自身でリクエストしていない場合は、このメールを無視して問題ありません。\n\n– {product_name}安全チーム" @@ -79,6 +83,10 @@ "subject": "{product_name}の登録が承認されました", "body": "こんにちは、{username}さん\n\n良いお知らせです。{product_name}の登録が承認されました。\n\nこちらから{product_name}アプリにログインできます。\n{channelsUrl}\n\n{product_name}コミュニティへようこそ。\n\n– {product_name}チーム" }, + "report_received": { + "subject": "{product_name}への報告を受け付けました", + "body": "こんにちは。\n\n{product_name}上の{targetKind, select, message {メッセージ} user {アカウント} guild {コミュニティ} other {コンテンツ}}に関する、デジタルサービス法に基づく報告を受け付けました。\n\n報告ID: {reportId}\n\n安全チームが報告を審査し、決定が出ましたらこのメールアドレス宛にご連絡します。このメールは記録として保管してください。\n\n– {product_name}安全チーム" + }, "report_resolved": { "subject": "{product_name}への報告の審査が完了しました", "body": "こんにちは、{username}さん\n\nご報告いただいた内容(ID: {reportId})を安全チームが審査しました。{hasComment, select, yes {\n\n安全チームからの回答:\n{publicComment}} other {}}\n\n{product_name}をすべての人にとって安全に保つためのご協力ありがとうございます。すべての報告を真剣に受け止め、コミュニティへのご貢献に感謝します。\n\nこの結果についてご質問やご不明な点がございましたら、{safety_email}までお問い合わせください。\n\n– {product_name}安全チーム" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ko.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ko.json index 5713dcba4..b4a826c4a 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ko.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ko.json @@ -27,6 +27,10 @@ "subject": "{product_name} 후원 내역 관리", "body": "안녕하세요,\n\n아래 링크를 클릭하여 후원자 포털에 접속해 주세요:\n\n{manageUrl}\n\n포털에서 구독을 관리하고, 인보이스를 다운로드하고, 후원 내역을 확인할 수 있어요.\n\n이 링크는 {expiresAt, date, full} {expiresAt, time, short}에 만료돼요.\n\n이 링크를 요청하지 않았다면 이 이메일을 무시해도 괜찮아요.\n\n– {product_name} 팀" }, + "dsa_report_resolved": { + "subject": "{product_name} 신고에 대한 결정이 내려졌어요", + "body": "안녕하세요,\n\n안전팀에서 디지털 서비스법 신고(ID: {reportId})를 검토하고 결정을 내렸어요.{hasComment, select, yes {\n\n안전팀의 답변:\n{publicComment}} other {}}\n\n다른 사람의 계정에 취한 조치의 세부 내용은 그 사람의 개인 정보이므로 공유하지 않아요.\n\n이 결정에 동의하지 않는다면 60일 이내에 무료로 이의를 제기할 수 있어요. 이 이메일 주소에서 {appeals_email}으로 이메일을 보내 신고 ID를 적고 결정이 잘못되었다고 생각하는 이유를 설명해 주세요. EU에 거주하고 있다면 인증된 법원 외 분쟁 해결 기관에 분쟁을 회부할 수도 있어요. 이 내용은 법원에 소송을 제기할 권리에 영향을 주지 않아요.\n\n– {product_name} 안전팀" + }, "dsa_report_verification": { "subject": "DSA 신고를 위한 이메일 인증", "body": "안녕하세요,\n\n{product_name}에서 디지털 서비스법 신고를 제출하려면 아래 인증 코드를 사용해 주세요:\n\n{code}\n\n이 코드는 {expiresAt, date, full} {expiresAt, time, short}에 만료돼요.\n\n요청하지 않으셨다면 이 이메일을 무시해도 괜찮아요.\n\n– {product_name} 안전팀" @@ -79,6 +83,10 @@ "subject": "{product_name} 가입이 승인되었어요", "body": "안녕하세요, {username}님.\n\n좋은 소식이에요: {product_name} 가입이 승인되었어요.\n\n이제 여기에서 {product_name} 앱에 로그인할 수 있어요:\n{channelsUrl}\n\n{product_name} 커뮤니티에 오신 것을 환영해요.\n\n– {product_name} 팀" }, + "report_received": { + "subject": "{product_name} 신고가 접수되었어요", + "body": "안녕하세요,\n\n{product_name}의 {targetKind, select, message {메시지} user {계정} guild {커뮤니티} other {콘텐츠}}에 대한 디지털 서비스법 신고가 접수되었어요.\n\n신고 ID: {reportId}\n\n안전팀에서 신고를 검토한 뒤 결정이 내려지면 이 이메일 주소로 알려 드릴게요. 이 이메일은 기록용으로 보관해 주세요.\n\n– {product_name} 안전팀" + }, "report_resolved": { "subject": "{product_name} 신고 검토가 완료되었어요", "body": "안녕하세요, {username}님.\n\n접수하신 신고(ID: {reportId})를 안전팀에서 검토했어요.{hasComment, select, yes {\n\n안전팀의 답변:\n{publicComment}} other {}}\n\n모두를 위해 {product_name}를 안전하게 유지하는 데 도움을 주셔서 감사해요. 모든 신고를 진지하게 검토하고 있으며, 커뮤니티에 기여해 주셔서 감사해요.\n\n이 결과에 대해 궁금한 점이나 우려 사항이 있다면 {safety_email}으로 문의해 주세요.\n\n– {product_name} 안전팀" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/lt.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/lt.json index bf8db4098..be997d9de 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/lt.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/lt.json @@ -27,6 +27,10 @@ "subject": "Tvarkyk savo {product_name} paramą", "body": "Sveiki,\n\nSpustelėk žemiau esančią nuorodą, kad pasiektum savo rėmėjo portalą:\n\n{manageUrl}\n\nPortale gali valdyti prenumeratas, atsisiųsti sąskaitas faktūras ir peržiūrėti savo paramos istoriją.\n\nŠi nuoroda galioja iki {expiresAt, date, full} {expiresAt, time, short}.\n\nJei neprašei šios nuorodos, gali saugiai ignoruoti šį el. laišką.\n\n– {product_name} komanda" }, + "dsa_report_resolved": { + "subject": "Priėmėme sprendimą dėl tavo {product_name} pranešimo", + "body": "Sveiki,\n\nMūsų saugos komanda peržiūrėjo tavo pranešimą pagal Skaitmeninių paslaugų aktą (ID: {reportId}) ir priėmė sprendimą.{hasComment, select, yes {\n\nSaugos komandos atsakymas:\n{publicComment}} other {}}\n\nNesidalijame informacija apie veiksmus, kurių imtasi dėl kito asmens paskyros, nes tai yra jo asmens duomenys.\n\nJei nesutinki su šiuo sprendimu, per 60 dienų gali nemokamai pateikti apeliaciją. Iš šio el. pašto adreso siųsk el. laišką adresu {appeals_email}, nurodyk savo pranešimo ID ir paaiškink, kodėl manai, kad sprendimas neteisingas. Jei esi ES, ginčą taip pat gali perduoti sertifikuotai neteisminio ginčų sprendimo įstaigai. Visa tai neturi įtakos tavo teisei kreiptis į teismą.\n\n– {product_name} saugos komanda" + }, "dsa_report_verification": { "subject": "Patvirtink savo el. paštą DSA pranešimui pateikti", "body": "Sveiki,\n\nNaudok žemiau esantį patvirtinimo kodą, kad {product_name} platformoje pateiktum pranešimą pagal Skaitmeninių paslaugų aktą:\n\n{code}\n\nŠis kodas galioja iki {expiresAt, date, full} {expiresAt, time, short}.\n\nJei to neprašei, gali ignoruoti šį el. laišką.\n\n– {product_name} saugos komanda" @@ -79,6 +83,10 @@ "subject": "Tavo {product_name} registracija patvirtinta", "body": "Sveiki, {username},\n\nGeros naujienos: tavo {product_name} registracija patvirtinta.\n\nDabar gali prisijungti prie {product_name} programėlės čia:\n{channelsUrl}\n\nSveiki atvykę į {product_name} bendruomenę.\n\n– {product_name} komanda" }, + "report_received": { + "subject": "Gavome tavo {product_name} pranešimą", + "body": "Sveiki,\n\nGavome tavo pranešimą pagal Skaitmeninių paslaugų aktą apie {targetKind, select, message {žinutę} user {paskyrą} guild {bendruomenę} other {turinį}} {product_name} platformoje.\n\nPranešimo ID: {reportId}\n\nMūsų saugos komanda peržiūrės tavo pranešimą, o priėmę sprendimą parašysime tau šiuo adresu. Išsaugok šį el. laišką, kad turėtum jį ateičiai.\n\n– {product_name} saugos komanda" + }, "report_resolved": { "subject": "Tavo {product_name} pranešimas peržiūrėtas", "body": "Sveiki, {username},\n\nTavo pranešimą (ID: {reportId}) peržiūrėjo mūsų saugos komanda.{hasComment, select, yes {\n\nSaugos komandos atsakymas:\n{publicComment}} other {}}\n\nDėkojame, kad padedi užtikrinti {product_name} saugumą visiems. Visus pranešimus vertiname rimtai ir esame dėkingi už tavo indėlį į bendruomenę.\n\nJei turi klausimų ar abejonių dėl šio sprendimo, rašyk adresu {safety_email}.\n\n– {product_name} saugos komanda" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/nl.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/nl.json index 0f7a134b5..d5f183e3f 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/nl.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/nl.json @@ -27,6 +27,10 @@ "subject": "Beheer je {product_name}-donaties", "body": "Hallo,\n\nKlik op de onderstaande link om toegang te krijgen tot je donateursportaal:\n\n{manageUrl}\n\nIn het portaal kun je abonnementen beheren, facturen downloaden en je donatiegeschiedenis bekijken.\n\nDeze link verloopt op {expiresAt, date, full} om {expiresAt, time, short}.\n\nAls je deze link niet hebt aangevraagd, kun je deze e-mail veilig negeren.\n\n– Het team van {product_name}" }, + "dsa_report_resolved": { + "subject": "We hebben een beslissing genomen over je melding op {product_name}", + "body": "Hallo,\n\nOns veiligheidsteam heeft je melding op grond van de Digital Services Act (ID: {reportId}) beoordeeld en een beslissing genomen.{hasComment, select, yes {\n\nReactie van het veiligheidsteam:\n{publicComment}} other {}}\n\nWe delen geen details over maatregelen tegen het account van iemand anders, omdat dat persoonsgegevens van die persoon zijn.\n\nAls je het niet eens bent met deze beslissing, kun je binnen 60 dagen kosteloos bezwaar maken. Stuur een e-mail naar {appeals_email} vanaf dit e-mailadres, vermeld je meldings-ID en leg uit waarom je vindt dat de beslissing onjuist is. Als je in de EU bent, kun je het geschil ook voorleggen aan een gecertificeerd orgaan voor buitengerechtelijke geschillenbeslechting. Dit alles doet niets af aan je recht om naar de rechter te stappen.\n\n– Het veiligheidsteam van {product_name}" + }, "dsa_report_verification": { "subject": "Verifieer je e-mailadres voor een DSA-melding", "body": "Hallo,\n\nGebruik de onderstaande verificatiecode om je melding op grond van de Digital Services Act op {product_name} in te dienen:\n\n{code}\n\nDeze code verloopt op {expiresAt, date, full} om {expiresAt, time, short}.\n\nAls je dit niet hebt aangevraagd, kun je deze e-mail negeren.\n\n– Het veiligheidsteam van {product_name}" @@ -79,6 +83,10 @@ "subject": "Je {product_name}-registratie is goedgekeurd", "body": "Hallo {username},\n\nGoed nieuws: je {product_name}-registratie is goedgekeurd.\n\nJe kunt nu inloggen op de {product_name}-app via:\n{channelsUrl}\n\nWelkom bij de {product_name}-community.\n\n– Het team van {product_name}" }, + "report_received": { + "subject": "We hebben je melding op {product_name} ontvangen", + "body": "Hallo,\n\nWe hebben je melding op grond van de Digital Services Act over {targetKind, select, message {een bericht} user {een account} guild {een community} other {inhoud}} op {product_name} ontvangen.\n\nMeldings-ID: {reportId}\n\nOns veiligheidsteam beoordeelt je melding en we mailen je op dit adres zodra we een beslissing hebben genomen. Bewaar deze e-mail voor je eigen administratie.\n\n– Het veiligheidsteam van {product_name}" + }, "report_resolved": { "subject": "Je melding op {product_name} is beoordeeld", "body": "Hallo {username},\n\nJe melding (ID: {reportId}) is beoordeeld door ons veiligheidsteam.{hasComment, select, yes {\n\nReactie van het veiligheidsteam:\n{publicComment}} other {}}\n\nBedankt dat je helpt {product_name} veilig te houden voor iedereen. We nemen alle meldingen serieus en waarderen je bijdrage aan de community.\n\nAls je vragen of opmerkingen hebt over deze uitkomst, neem dan contact op met {safety_email}.\n\n– Het veiligheidsteam van {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/no.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/no.json index e5ea5dc17..59a958563 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/no.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/no.json @@ -27,6 +27,10 @@ "subject": "Administrer {product_name}-bidragene dine", "body": "Hei,\n\nKlikk på lenken nedenfor for å få tilgang til giverportalen din:\n\n{manageUrl}\n\nI portalen kan du administrere abonnementer, laste ned fakturaer og se bidragshistorikken din.\n\nDenne lenken utløper {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke ba om denne lenken, kan du trygt ignorere denne e-posten.\n\n– {product_name}-teamet" }, + "dsa_report_resolved": { + "subject": "Vi har tatt en avgjørelse om {product_name}-rapporten din", + "body": "Hei,\n\nSikkerhetsteamet vårt har gjennomgått rapporten din i henhold til Digital Services Act (ID: {reportId}) og tatt en avgjørelse.{hasComment, select, yes {\n\nSvar fra sikkerhetsteamet:\n{publicComment}} other {}}\n\nVi deler ikke detaljer om tiltak mot en annen persons konto, fordi det er personopplysningene til den personen.\n\nHvis du er uenig i avgjørelsen, kan du klage gratis innen 60 dager. Send en e-post til {appeals_email} fra denne e-postadressen, oppgi rapport-ID-en din, og forklar hvorfor du mener avgjørelsen er feil. Hvis du befinner deg i EU, kan du også bringe tvisten inn for et sertifisert organ for utenrettslig tvisteløsning. Ingenting av dette påvirker retten din til å gå til domstolene.\n\n– Sikkerhetsteamet hos {product_name}" + }, "dsa_report_verification": { "subject": "Bekreft e-postadressen din for en DSA-rapport", "body": "Hei,\n\nBruk bekreftelseskoden nedenfor for å sende inn rapporten din i henhold til Digital Services Act på {product_name}:\n\n{code}\n\nDenne koden utløper {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nHvis du ikke ba om dette, kan du se bort fra denne e-posten.\n\n– Sikkerhetsteamet hos {product_name}" @@ -79,6 +83,10 @@ "subject": "{product_name}-registreringen din er godkjent", "body": "Hei {username},\n\nGode nyheter! Registreringen din hos {product_name} er godkjent.\n\nDu kan nå logge inn på {product_name}-appen her:\n{channelsUrl}\n\nVelkommen til {product_name}-fellesskapet.\n\n– {product_name}-teamet" }, + "report_received": { + "subject": "Vi har mottatt {product_name}-rapporten din", + "body": "Hei,\n\nVi har mottatt rapporten din i henhold til Digital Services Act om {targetKind, select, message {en melding} user {en konto} guild {et fellesskap} other {innhold}} på {product_name}.\n\nRapport-ID: {reportId}\n\nSikkerhetsteamet vårt går gjennom rapporten din, og vi sender deg en e-post på denne adressen når vi har tatt en avgjørelse. Ta vare på denne e-posten.\n\n– Sikkerhetsteamet hos {product_name}" + }, "report_resolved": { "subject": "{product_name}-rapporten din er gjennomgått", "body": "Hei {username},\n\nRapporten din (ID: {reportId}) er gjennomgått av sikkerhetsteamet vårt.{hasComment, select, yes {\n\nSvar fra sikkerhetsteamet:\n{publicComment}} other {}}\n\nTakk for at du bidrar til å holde {product_name} trygt for alle. Vi tar alle rapporter på alvor og setter pris på bidraget ditt til fellesskapet.\n\nHvis du har spørsmål eller er bekymret for utfallet, kan du kontakte {safety_email}.\n\n– Sikkerhetsteamet hos {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pl.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pl.json index 2355ee3d2..4a78c7b1b 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pl.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pl.json @@ -27,6 +27,10 @@ "subject": "Zarządzaj darowiznami dla {product_name}", "body": "Witaj,\n\nKliknij poniższy link, aby przejść do portalu darczyńcy:\n\n{manageUrl}\n\nW portalu możesz zarządzać subskrypcjami, pobierać faktury i przeglądać historię swoich darowizn.\n\nTen link wygasa {expiresAt, date, full} o {expiresAt, time, short}.\n\nJeśli nie prosiłeś o ten link, możesz bezpiecznie zignorować tę wiadomość e-mail.\n\n– Zespół {product_name}" }, + "dsa_report_resolved": { + "subject": "Podjęliśmy decyzję w sprawie Twojego zgłoszenia w {product_name}", + "body": "Witaj,\n\nNasz zespół ds. bezpieczeństwa rozpatrzył Twoje zgłoszenie w ramach aktu o usługach cyfrowych (ID: {reportId}) i podjął decyzję.{hasComment, select, yes {\n\nOdpowiedź od zespołu ds. bezpieczeństwa:\n{publicComment}} other {}}\n\nNie udostępniamy szczegółów działań podjętych wobec konta innej osoby, ponieważ są to jej dane osobowe.\n\nJeśli nie zgadzasz się z tą decyzją, możesz bezpłatnie złożyć odwołanie w ciągu 60 dni. Wyślij e-mail na adres {appeals_email} z tego adresu e-mail, podaj ID zgłoszenia i wyjaśnij, dlaczego uważasz, że decyzja jest błędna. Jeśli przebywasz w UE, możesz też skierować spór do certyfikowanego organu pozasądowego rozstrzygania sporów. Nic z tego nie wpływa na Twoje prawo do skierowania sprawy do sądu.\n\n– Zespół ds. bezpieczeństwa {product_name}" + }, "dsa_report_verification": { "subject": "Zweryfikuj adres e-mail na potrzeby zgłoszenia DSA", "body": "Witaj,\n\nUżyj poniższego kodu weryfikacyjnego, aby przesłać zgłoszenie w ramach aktu o usługach cyfrowych (DSA) w {product_name}:\n\n{code}\n\nTen kod wygasa {expiresAt, date, full} o {expiresAt, time, short}.\n\nJeśli nie prosiłeś o ten kod, możesz zignorować tę wiadomość e-mail.\n\n– Zespół ds. bezpieczeństwa {product_name}" @@ -79,6 +83,10 @@ "subject": "Twoja rejestracja w {product_name} została zatwierdzona", "body": "Witaj {username},\n\nDobre wieści: Twoja rejestracja w {product_name} została zatwierdzona.\n\nMożesz teraz zalogować się do aplikacji {product_name} tutaj:\n{channelsUrl}\n\nWitaj w społeczności {product_name}.\n\n– Zespół {product_name}" }, + "report_received": { + "subject": "Otrzymaliśmy Twoje zgłoszenie w {product_name}", + "body": "Witaj,\n\nOtrzymaliśmy Twoje zgłoszenie w ramach aktu o usługach cyfrowych (DSA) dotyczące {targetKind, select, message {wiadomości} user {konta} guild {społeczności} other {treści}} w {product_name}.\n\nID zgłoszenia: {reportId}\n\nNasz zespół ds. bezpieczeństwa rozpatrzy Twoje zgłoszenie, a gdy podejmiemy decyzję, napiszemy do Ciebie na ten adres. Zachowaj tę wiadomość e-mail na przyszłość.\n\n– Zespół ds. bezpieczeństwa {product_name}" + }, "report_resolved": { "subject": "Twoje zgłoszenie w {product_name} zostało rozpatrzone", "body": "Witaj {username},\n\nTwoje zgłoszenie (ID: {reportId}) zostało rozpatrzone przez nasz zespół ds. bezpieczeństwa.{hasComment, select, yes {\n\nOdpowiedź od zespołu ds. bezpieczeństwa:\n{publicComment}} other {}}\n\nDziękujemy za pomoc w utrzymaniu bezpieczeństwa {product_name} dla wszystkich. Traktujemy wszystkie zgłoszenia poważnie i doceniamy Twój wkład w społeczność.\n\nJeśli masz pytania lub wątpliwości dotyczące tej decyzji, skontaktuj się z {safety_email}.\n\n– Zespół ds. bezpieczeństwa {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pt-BR.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pt-BR.json index bfe148ed8..b9355d18d 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pt-BR.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/pt-BR.json @@ -27,6 +27,10 @@ "subject": "Gerencie suas doações ao {product_name}", "body": "Olá,\n\nClique no link abaixo para acessar seu portal de doadores:\n\n{manageUrl}\n\nNo portal, você pode gerenciar assinaturas, baixar faturas e visualizar seu histórico de doações.\n\nEste link expira em {expiresAt, date, full} às {expiresAt, time, short}.\n\nSe você não solicitou este link, pode ignorar este e-mail com segurança.\n\n– Equipe do {product_name}" }, + "dsa_report_resolved": { + "subject": "Tomamos uma decisão sobre sua denúncia no {product_name}", + "body": "Olá,\n\nNossa equipe de segurança analisou sua denúncia nos termos da Lei dos Serviços Digitais (ID: {reportId}) e tomou uma decisão.{hasComment, select, yes {\n\nResposta da equipe de segurança:\n{publicComment}} other {}}\n\nNão compartilhamos detalhes de medidas tomadas contra a conta de outra pessoa, pois são dados pessoais dela.\n\nSe você não concordar com esta decisão, pode enviar um recurso gratuitamente em até 60 dias. Envie um e-mail para {appeals_email} a partir deste endereço de e-mail, inclua o ID da sua denúncia e explique por que você acredita que a decisão está incorreta. Se você estiver na UE, também pode encaminhar a disputa a um órgão certificado de resolução extrajudicial de litígios. Nada disso afeta seu direito de recorrer à Justiça.\n\n– equipe de segurança do {product_name}" + }, "dsa_report_verification": { "subject": "Verifique seu e-mail para enviar uma denúncia nos termos do DSA", "body": "Olá,\n\nUse o código de verificação abaixo para enviar sua denúncia ao {product_name} nos termos da Lei dos Serviços Digitais (DSA):\n\n{code}\n\nEste código expira em {expiresAt, date, full} às {expiresAt, time, short}.\n\nSe você não solicitou isso, pode ignorar este e-mail.\n\n– equipe de segurança do {product_name}" @@ -79,6 +83,10 @@ "subject": "Seu cadastro no {product_name} foi aprovado", "body": "Olá, {username},\n\nBoas notícias: seu cadastro no {product_name} foi aprovado.\n\nAgora você pode entrar no aplicativo do {product_name} aqui:\n{channelsUrl}\n\nBem-vindo à comunidade do {product_name}.\n\n– Equipe do {product_name}" }, + "report_received": { + "subject": "Recebemos sua denúncia no {product_name}", + "body": "Olá,\n\nRecebemos sua denúncia nos termos da Lei dos Serviços Digitais (DSA) sobre {targetKind, select, message {uma mensagem} user {uma conta} guild {uma comunidade} other {conteúdo}} no {product_name}.\n\nID da denúncia: {reportId}\n\nNossa equipe de segurança analisará sua denúncia e enviaremos um e-mail para este endereço quando tomarmos uma decisão. Guarde este e-mail para seus registros.\n\n– equipe de segurança do {product_name}" + }, "report_resolved": { "subject": "Sua denúncia no {product_name} foi analisada", "body": "Olá, {username},\n\nSua denúncia (ID: {reportId}) foi analisada por nossa equipe de segurança.{hasComment, select, yes {\n\nResposta da equipe de segurança:\n{publicComment}} other {}}\n\nAgradecemos por ajudar a manter o {product_name} seguro para todos. Levamos todas as denúncias a sério e agradecemos sua contribuição para a comunidade.\n\nSe você tiver alguma dúvida ou preocupação sobre este resultado, entre em contato com {safety_email}.\n\n– equipe de segurança do {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ro.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ro.json index 736dbf4d3..d884eb8a7 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ro.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ro.json @@ -27,6 +27,10 @@ "subject": "Gestionează-ți donațiile către {product_name}", "body": "Salut,\n\nApasă pe linkul de mai jos pentru a accesa portalul tău de donator:\n\n{manageUrl}\n\nÎn portal, poți gestiona abonamentele, descărca facturi și vizualiza istoricul donațiilor tale.\n\nAcest link expiră la data de {expiresAt, date, full} la ora {expiresAt, time, short}.\n\nDacă nu ai solicitat acest link, poți ignora în siguranță acest e-mail.\n\n– Echipa {product_name}" }, + "dsa_report_resolved": { + "subject": "Am luat o decizie cu privire la raportul tău de pe {product_name}", + "body": "Salut,\n\nEchipa noastră de siguranță a analizat raportul tău conform Digital Services Act (ID: {reportId}) și a luat o decizie.{hasComment, select, yes {\n\nRăspuns de la echipa de siguranță:\n{publicComment}} other {}}\n\nNu oferim detalii despre măsurile luate împotriva contului altei persoane, deoarece acestea sunt datele sale personale.\n\nDacă nu ești de acord cu această decizie, poți depune gratuit o contestație în termen de 60 de zile. Trimite un e-mail la {appeals_email} de la această adresă, include ID-ul raportului tău și explică de ce crezi că decizia este incorectă. Dacă te afli în UE, poți, de asemenea, să înaintezi litigiul unui organism certificat de soluționare extrajudiciară a litigiilor. Nimic din toate acestea nu îți afectează dreptul de a te adresa instanței.\n\n– Echipa de siguranță {product_name}" + }, "dsa_report_verification": { "subject": "Verifică-ți e-mailul pentru un raport DSA", "body": "Salut,\n\nFolosește codul de verificare de mai jos pentru a trimite raportul tău conform Digital Services Act pe {product_name}:\n\n{code}\n\nAcest cod expiră la data de {expiresAt, date, full} la ora {expiresAt, time, short}.\n\nDacă nu ai solicitat acest lucru, poți ignora acest e-mail.\n\n– Echipa de siguranță {product_name}" @@ -79,6 +83,10 @@ "subject": "Înregistrarea ta pentru {product_name} a fost aprobată", "body": "Salut {username},\n\nVești bune: înregistrarea ta pentru {product_name} a fost aprobată.\n\nAcum te poți conecta la aplicația {product_name} aici:\n{channelsUrl}\n\nBun venit în comunitatea {product_name}.\n\n– Echipa {product_name}" }, + "report_received": { + "subject": "Am primit raportul tău de pe {product_name}", + "body": "Salut,\n\nAm primit raportul tău conform Digital Services Act despre {targetKind, select, message {un mesaj} user {un cont} guild {o comunitate} other {conținut}} de pe {product_name}.\n\nID raport: {reportId}\n\nEchipa noastră de siguranță va analiza raportul tău și îți vom scrie la această adresă după ce luăm o decizie. Păstrează acest e-mail pentru evidența ta.\n\n– Echipa de siguranță {product_name}" + }, "report_resolved": { "subject": "Raportul tău de pe {product_name} a fost analizat", "body": "Salut {username},\n\nRaportul tău (ID: {reportId}) a fost analizat de echipa noastră de siguranță.{hasComment, select, yes {\n\nRăspuns de la echipa de siguranță:\n{publicComment}} other {}}\n\nÎți mulțumim că ne ajuți să păstrăm {product_name} în siguranță pentru toată lumea. Luăm în serios toate rapoartele și apreciem contribuția ta la comunitate.\n\nDacă ai întrebări sau nelămuriri cu privire la acest rezultat, te rugăm să scrii la {safety_email}.\n\n– Echipa de siguranță {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ru.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ru.json index 122c2fadf..1e5e54e83 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ru.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/ru.json @@ -27,6 +27,10 @@ "subject": "Управляй своими пожертвованиями для {product_name}", "body": "Привет,\n\nПерейди по ссылке ниже, чтобы открыть личный кабинет жертвователя:\n\n{manageUrl}\n\nВ личном кабинете ты можешь управлять подписками, скачивать счета и просматривать историю своих пожертвований.\n\nСрок действия ссылки истекает {expiresAt, date, full} в {expiresAt, time, short}.\n\nЕсли ты не запрашивал эту ссылку, можешь смело проигнорировать это письмо.\n\n– Команда {product_name}" }, + "dsa_report_resolved": { + "subject": "Мы приняли решение по твоей жалобе в {product_name}", + "body": "Привет,\n\nНаша команда безопасности рассмотрела твою жалобу по Закону о цифровых услугах (ID: {reportId}) и приняла решение.{hasComment, select, yes {\n\nОтвет команды безопасности:\n{publicComment}} other {}}\n\nМы не раскрываем подробности мер, принятых в отношении аккаунта другого человека, так как это его персональные данные.\n\nЕсли ты не согласен с этим решением, ты можешь бесплатно подать апелляцию в течение 60 дней. Отправь письмо на {appeals_email} с этого адреса электронной почты, укажи ID жалобы и объясни, почему считаешь решение неверным. Если ты находишься в ЕС, ты также можешь передать спор в сертифицированный орган по внесудебному урегулированию споров. Всё это не влияет на твоё право обратиться в суд.\n\n– Команда безопасности {product_name}" + }, "dsa_report_verification": { "subject": "Подтверди свой адрес электронной почты для жалобы по DSA", "body": "Привет,\n\nИспользуй код подтверждения ниже, чтобы отправить в {product_name} жалобу по Закону о цифровых услугах (DSA):\n\n{code}\n\nСрок действия кода истекает {expiresAt, date, full} в {expiresAt, time, short}.\n\nЕсли ты не запрашивал это, можешь смело проигнорировать это письмо.\n\n– Команда безопасности {product_name}" @@ -79,6 +83,10 @@ "subject": "Твоя регистрация в {product_name} одобрена", "body": "Привет, {username},\n\nХорошие новости: твоя регистрация в {product_name} одобрена.\n\nТеперь ты можешь войти в приложение {product_name} здесь:\n{channelsUrl}\n\nДобро пожаловать в сообщество {product_name}.\n\n– Команда {product_name}" }, + "report_received": { + "subject": "Мы получили твою жалобу в {product_name}", + "body": "Привет,\n\nМы получили твою жалобу по Закону о цифровых услугах (DSA) на {targetKind, select, message {сообщение} user {аккаунт} guild {сообщество} other {контент}} в {product_name}.\n\nID жалобы: {reportId}\n\nНаша команда безопасности рассмотрит твою жалобу, и мы напишем тебе на этот адрес, когда примем решение. Сохрани это письмо на будущее.\n\n– Команда безопасности {product_name}" + }, "report_resolved": { "subject": "Твоя жалоба в {product_name} рассмотрена", "body": "Привет, {username},\n\nТвоя жалоба (ID: {reportId}) была рассмотрена нашей командой безопасности.{hasComment, select, yes {\n\nОтвет команды безопасности:\n{publicComment}} other {}}\n\nСпасибо за помощь в обеспечении безопасности {product_name} для всех. Мы серьёзно относимся ко всем жалобам и ценим твой вклад в сообщество.\n\nЕсли у тебя есть вопросы или сомнения по поводу этого результата, пожалуйста, напиши на {safety_email}.\n\n– Команда безопасности {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/sv-SE.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/sv-SE.json index e4ebc8144..05611b779 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/sv-SE.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/sv-SE.json @@ -27,6 +27,10 @@ "subject": "Hantera dina donationer till {product_name}", "body": "Hej,\n\nKlicka på länken nedan för att komma åt din donationsportal:\n\n{manageUrl}\n\nI portalen kan du hantera prenumerationer, ladda ner fakturor och se din donationshistorik.\n\nDen här länken upphör att gälla {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nOm du inte begärde denna länk kan du tryggt ignorera det här mejlet.\n\n– {product_name}-teamet" }, + "dsa_report_resolved": { + "subject": "Vi har fattat ett beslut om din anmälan på {product_name}", + "body": "Hej,\n\nVårt säkerhetsteam har granskat din anmälan enligt förordningen om digitala tjänster (ID: {reportId}) och fattat ett beslut.{hasComment, select, yes {\n\nSvar från säkerhetsteamet:\n{publicComment}} other {}}\n\nVi delar inte uppgifter om åtgärder mot någon annans konto, eftersom det är den personens personuppgifter.\n\nOm du inte håller med om beslutet kan du överklaga kostnadsfritt inom 60 dagar. Mejla {appeals_email} från den här e-postadressen, ange ditt anmälnings-ID och förklara varför du anser att beslutet är felaktigt. Om du befinner dig i EU kan du också hänskjuta tvisten till ett certifierat organ för tvistlösning utanför domstol. Inget av detta påverkar din rätt att vända dig till domstol.\n\n– Säkerhetsteamet på {product_name}" + }, "dsa_report_verification": { "subject": "Verifiera din e-postadress för en DSA-anmälan", "body": "Hej,\n\nAnvänd verifieringskoden nedan för att skicka in din anmälan enligt förordningen om digitala tjänster på {product_name}:\n\n{code}\n\nDen här koden upphör att gälla {expiresAt, date, full} kl. {expiresAt, time, short}.\n\nOm du inte begärde detta kan du ignorera det här mejlet.\n\n– Säkerhetsteamet på {product_name}" @@ -79,6 +83,10 @@ "subject": "Din registrering på {product_name} har godkänts", "body": "Hej {username},\n\nGoda nyheter: din registrering på {product_name} har godkänts.\n\nDu kan nu logga in i {product_name}-appen här:\n{channelsUrl}\n\nVälkommen till {product_name}-communityn.\n\n– {product_name}-teamet" }, + "report_received": { + "subject": "Vi har tagit emot din anmälan på {product_name}", + "body": "Hej,\n\nVi har tagit emot din anmälan enligt förordningen om digitala tjänster om {targetKind, select, message {ett meddelande} user {ett konto} guild {en community} other {innehåll}} på {product_name}.\n\nAnmälnings-ID: {reportId}\n\nVårt säkerhetsteam granskar din anmälan och vi mejlar dig på den här adressen när vi har fattat ett beslut. Spara det här mejlet så att du har det kvar.\n\n– Säkerhetsteamet på {product_name}" + }, "report_resolved": { "subject": "Din anmälan på {product_name} har granskats", "body": "Hej {username},\n\nDin anmälan (ID: {reportId}) har granskats av vårt säkerhetsteam.{hasComment, select, yes {\n\nSvar från säkerhetsteamet:\n{publicComment}} other {}}\n\nTack för att du hjälper till att göra {product_name} tryggt för alla. Vi tar alla anmälningar på allvar och uppskattar ditt bidrag till communityn.\n\nOm du har några frågor eller funderingar kring detta resultat, kontakta oss på {safety_email}.\n\n– Säkerhetsteamet på {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/th.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/th.json index 631c7cacc..193070e2e 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/th.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/th.json @@ -27,6 +27,10 @@ "subject": "จัดการการบริจาคให้ {product_name}", "body": "สวัสดี,\n\nคลิกลิงก์ด้านล่างเพื่อเข้าถึงพอร์ทัลผู้บริจาค:\n\n{manageUrl}\n\nในพอร์ทัล คุณสามารถจัดการการสมัครสมาชิก ดาวน์โหลดใบแจ้งหนี้ และดูประวัติการบริจาคของคุณได้\n\nลิงก์นี้จะหมดอายุในวันที่ {expiresAt, date, full} เวลา {expiresAt, time, short}\n\nหากคุณไม่ได้ร้องขอลิงก์นี้ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้อย่างปลอดภัย\n\n– ทีม {product_name}" }, + "dsa_report_resolved": { + "subject": "เราได้ตัดสินใจเกี่ยวกับรายงานของคุณใน {product_name} แล้ว", + "body": "สวัสดี,\n\nทีมความปลอดภัยของเราได้ตรวจสอบรายงาน Digital Services Act ของคุณ (ID: {reportId}) และตัดสินใจแล้ว{hasComment, select, yes {\n\nการตอบกลับจากทีมความปลอดภัย:\n{publicComment}} other {}}\n\nเราไม่เปิดเผยรายละเอียดการดำเนินการกับบัญชีของบุคคลอื่น เนื่องจากเป็นข้อมูลส่วนบุคคลของบุคคลนั้น\n\nหากคุณไม่เห็นด้วยกับการตัดสินใจนี้ คุณสามารถยื่นอุทธรณ์ได้โดยไม่มีค่าใช้จ่ายภายใน 60 วัน ส่งอีเมลไปที่ {appeals_email} จากที่อยู่อีเมลนี้ ระบุ ID รายงานของคุณ และอธิบายว่าทำไมคุณถึงคิดว่าการตัดสินใจนั้นไม่ถูกต้อง หากคุณอยู่ในสหภาพยุโรป คุณยังสามารถส่งข้อพิพาทไปยังหน่วยงานระงับข้อพิพาทนอกศาลที่ได้รับการรับรองได้ ทั้งหมดนี้ไม่กระทบต่อสิทธิ์ของคุณในการฟ้องร้องต่อศาล\n\n– ทีมความปลอดภัย {product_name}" + }, "dsa_report_verification": { "subject": "ยืนยันอีเมลสำหรับการรายงาน DSA", "body": "สวัสดี,\n\nใช้รหัสยืนยันด้านล่างเพื่อส่งรายงาน Digital Services Act ของคุณบน {product_name}:\n\n{code}\n\nรหัสนี้จะหมดอายุในวันที่ {expiresAt, date, full} เวลา {expiresAt, time, short}\n\nหากคุณไม่ได้ร้องขอ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้\n\n– ทีมความปลอดภัย {product_name}" @@ -79,6 +83,10 @@ "subject": "การลงทะเบียนสำหรับ {product_name} ได้รับการอนุมัติแล้ว", "body": "สวัสดี {username},\n\nข่าวดี: การลงทะเบียน {product_name} ของคุณได้รับการอนุมัติแล้ว\n\nตอนนี้คุณสามารถเข้าสู่ระบบแอป {product_name} ได้ที่นี่:\n{channelsUrl}\n\nยินดีต้อนรับสู่คอมมูนิตี้ {product_name}\n\n– ทีม {product_name}" }, + "report_received": { + "subject": "เราได้รับรายงานของคุณใน {product_name} แล้ว", + "body": "สวัสดี,\n\nเราได้รับรายงานตามกฎหมายบริการดิจิทัล (Digital Services Act) ของคุณเกี่ยวกับ{targetKind, select, message {ข้อความ} user {บัญชี} guild {คอมมูนิตี้} other {เนื้อหา}}บน {product_name} แล้ว\n\nID รายงาน: {reportId}\n\nทีมความปลอดภัยของเราจะตรวจสอบรายงานของคุณ และเราจะส่งอีเมลถึงคุณตามที่อยู่นี้เมื่อตัดสินใจแล้ว โปรดเก็บอีเมลนี้ไว้เป็นหลักฐาน\n\n– ทีมความปลอดภัย {product_name}" + }, "report_resolved": { "subject": "รายงานของคุณใน {product_name} ได้รับการตรวจสอบแล้ว", "body": "สวัสดี {username},\n\nทีมความปลอดภัยของเราได้ตรวจสอบรายงานของคุณ (ID: {reportId}) แล้ว{hasComment, select, yes {\n\nการตอบกลับจากทีมความปลอดภัย:\n{publicComment}} other {}}\n\nขอบคุณที่ช่วยให้ {product_name} ปลอดภัยสำหรับทุกคน เราให้ความสำคัญกับรายงานทั้งหมดและขอขอบคุณสำหรับการมีส่วนร่วมของคุณในคอมมูนิตี้\n\nหากคุณมีคำถามหรือข้อกังวลใด ๆ เกี่ยวกับผลลัพธ์นี้ โปรดติดต่อ {safety_email}\n\n– ทีมความปลอดภัย {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/tr.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/tr.json index 1c22007d2..d43b5ee34 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/tr.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/tr.json @@ -27,6 +27,10 @@ "subject": "{product_name} bağışlarını yönet", "body": "Merhaba,\n\nBağışçı portalına erişmek için aşağıdaki bağlantıya tıkla:\n\n{manageUrl}\n\nPortalda aboneliklerini yönetebilir, faturaları indirebilir ve bağış geçmişini görüntüleyebilirsin.\n\nBu bağlantı {expiresAt, date, full} {expiresAt, time, short} tarihinde sona erecektir.\n\nBu bağlantıyı sen talep etmediysen, bu e-postayı güvenle yok sayabilirsin.\n\n– {product_name} Ekibi" }, + "dsa_report_resolved": { + "subject": "{product_name} raporun hakkında karar verdik", + "body": "Merhaba,\n\nGüvenlik Ekibimiz Dijital Hizmetler Yasası raporunu (Kimlik: {reportId}) inceledi ve bir karar verdi.{hasComment, select, yes {\n\nGüvenlik Ekibinin yanıtı:\n{publicComment}} other {}}\n\nBaşka bir kişinin hesabına uygulanan işlemlerin ayrıntılarını paylaşmıyoruz çünkü bunlar o kişinin kişisel verileridir.\n\nBu karara katılmıyorsan 60 gün içinde ücretsiz olarak itiraz edebilirsin. Bu e-posta adresinden {appeals_email} adresine e-posta gönder, rapor kimliğini ekle ve kararın neden yanlış olduğunu düşündüğünü açıkla. AB'deysen anlaşmazlığı sertifikalı bir mahkeme dışı uyuşmazlık çözüm kuruluşuna da götürebilirsin. Bunların hiçbiri mahkemeye başvurma hakkını etkilemez.\n\n– {product_name} Güvenlik Ekibi" + }, "dsa_report_verification": { "subject": "DSA raporu için e-postanı doğrula", "body": "Merhaba,\n\n{product_name}'daki Dijital Hizmetler Yasası raporunu göndermek için aşağıdaki doğrulama kodunu kullan:\n\n{code}\n\nBu kod {expiresAt, date, full} {expiresAt, time, short} tarihinde sona erecektir.\n\nBunu sen talep etmediysen, bu e-postayı güvenle yok sayabilirsin.\n\n– {product_name} Güvenlik Ekibi" @@ -79,6 +83,10 @@ "subject": "{product_name} kaydın onaylandı", "body": "Merhaba {username},\n\nİyi haber: {product_name} kaydın onaylandı.\n\nArtık {product_name} uygulamasına buradan giriş yapabilirsin:\n{channelsUrl}\n\n{product_name} topluluğuna hoş geldin.\n\n– {product_name} Ekibi" }, + "report_received": { + "subject": "{product_name} raporunu aldık", + "body": "Merhaba,\n\n{product_name} üzerindeki {targetKind, select, message {bir mesaj} user {bir hesap} guild {bir topluluk} other {içerik}} hakkındaki Dijital Hizmetler Yasası raporunu aldık.\n\nRapor Kimliği: {reportId}\n\nGüvenlik Ekibimiz raporunu inceleyecek ve bir karar verdiğimizde sana bu adrese e-posta göndereceğiz. Bu e-postayı kayıtların için sakla.\n\n– {product_name} Güvenlik Ekibi" + }, "report_resolved": { "subject": "{product_name} raporun incelendi", "body": "Merhaba {username},\n\nRaporun (Kimlik: {reportId}) Güvenlik Ekibimiz tarafından incelendi.{hasComment, select, yes {\n\nGüvenlik Ekibinin yanıtı:\n{publicComment}} other {}}\n\n{product_name}'ı herkes için güvenli tutmaya yardımcı olduğun için teşekkür ederiz. Tüm raporları ciddiye alıyoruz ve topluluğa katkını takdir ediyoruz.\n\nBu sonuç hakkında herhangi bir sorun veya endişen varsa, lütfen {safety_email} adresine ulaş.\n\n– {product_name} Güvenlik Ekibi" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/uk.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/uk.json index a07539cfc..ceba8d43e 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/uk.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/uk.json @@ -27,6 +27,10 @@ "subject": "Керуй своїми пожертвами для {product_name}", "body": "Привіт,\n\nНатисни посилання нижче, щоб отримати доступ до порталу керування пожертвами:\n\n{manageUrl}\n\nНа порталі ти можеш керувати підписками, завантажувати рахунки та переглядати історію своїх пожертв.\n\nЦе посилання діє до {expiresAt, date, full} о {expiresAt, time, short}.\n\nЯкщо цей запит не від тебе, можеш сміливо проігнорувати цей лист.\n\n– Команда {product_name}" }, + "dsa_report_resolved": { + "subject": "Ми ухвалили рішення щодо твого звіту в {product_name}", + "body": "Привіт,\n\nНаша команда безпеки розглянула твій звіт за Законом про цифрові послуги (ID: {reportId}) та ухвалила рішення.{hasComment, select, yes {\n\nВідповідь команди безпеки:\n{publicComment}} other {}}\n\nМи не розголошуємо подробиць заходів, ужитих щодо акаунта іншої людини, оскільки це її персональні дані.\n\nЯкщо ти не погоджуєшся з цим рішенням, ти можеш безкоштовно подати апеляцію протягом 60 днів. Надішли електронний лист на {appeals_email} з цієї електронної адреси, вкажи ID свого звіту та поясни, чому вважаєш рішення неправильним. Якщо ти перебуваєш у ЄС, ти також можеш передати спір до сертифікованого органу позасудового врегулювання спорів. Усе це не впливає на твоє право звернутися до суду.\n\n– Команда безпеки {product_name}" + }, "dsa_report_verification": { "subject": "Підтвердь свою електронну адресу для звіту DSA", "body": "Привіт,\n\nВикористай код підтвердження нижче, щоб подати звіт за Законом про цифрові послуги (DSA) для {product_name}:\n\n{code}\n\nЦей код діє до {expiresAt, date, full} о {expiresAt, time, short}.\n\nЯкщо цей запит не від тебе, можеш проігнорувати цей лист.\n\n– Команда безпеки {product_name}" @@ -79,6 +83,10 @@ "subject": "Твою реєстрацію в {product_name} схвалено", "body": "Привіт, {username},\n\nГарні новини: твою реєстрацію в {product_name} схвалено.\n\nТепер ти можеш увійти до застосунку {product_name} тут:\n{channelsUrl}\n\nЛаскаво просимо до спільноти {product_name}.\n\n– Команда {product_name}" }, + "report_received": { + "subject": "Ми отримали твій звіт у {product_name}", + "body": "Привіт,\n\nМи отримали твій звіт за Законом про цифрові послуги (DSA) щодо {targetKind, select, message {повідомлення} user {акаунта} guild {спільноти} other {вмісту}} у {product_name}.\n\nID звіту: {reportId}\n\nНаша команда безпеки розгляне твій звіт, і ми напишемо тобі на цю адресу, коли ухвалимо рішення. Збережи цей лист на майбутнє.\n\n– Команда безпеки {product_name}" + }, "report_resolved": { "subject": "Твій звіт у {product_name} розглянуто", "body": "Привіт, {username},\n\nНаша команда безпеки розглянула твій звіт (ID: {reportId}).{hasComment, select, yes {\n\nВідповідь команди безпеки:\n{publicComment}} other {}}\n\nДякуємо, що допомагаєш зберігати {product_name} безпечним для всіх. Ми серйозно ставимося до кожного звіту та цінуємо твій внесок у спільноту.\n\nЯкщо у тебе є запитання чи зауваження щодо цього рішення, напиши на {safety_email}.\n\n– Команда безпеки {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/vi.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/vi.json index 68610c13b..3ae2d4fff 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/vi.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/vi.json @@ -27,6 +27,10 @@ "subject": "Quản lý các khoản ủng hộ {product_name} của bạn", "body": "Xin chào,\n\nNhấp vào liên kết bên dưới để truy cập cổng thông tin người ủng hộ của bạn:\n\n{manageUrl}\n\nTrong cổng thông tin, bạn có thể quản lý gói đăng ký, tải xuống hóa đơn và xem lịch sử ủng hộ của mình.\n\nLiên kết này hết hạn vào {expiresAt, date, full} lúc {expiresAt, time, short}.\n\nNếu bạn không yêu cầu liên kết này, bạn có thể bỏ qua email này.\n\n– Đội ngũ {product_name}" }, + "dsa_report_resolved": { + "subject": "Chúng tôi đã có quyết định về báo cáo của bạn trên {product_name}", + "body": "Xin chào,\n\nĐội ngũ An toàn của chúng tôi đã xem xét báo cáo theo Đạo luật Dịch vụ kỹ thuật số của bạn (ID: {reportId}) và đã đưa ra quyết định.{hasComment, select, yes {\n\nPhản hồi từ Đội ngũ An toàn:\n{publicComment}} other {}}\n\nChúng tôi không chia sẻ chi tiết về biện pháp áp dụng với tài khoản của người khác, vì đó là dữ liệu cá nhân của họ.\n\nNếu không đồng ý với quyết định này, bạn có thể gửi khiếu nại miễn phí trong vòng 60 ngày. Gửi email đến {appeals_email} từ địa chỉ email này, ghi rõ ID báo cáo của bạn và giải thích lý do bạn cho rằng quyết định đó không chính xác. Nếu bạn ở EU, bạn cũng có thể đưa tranh chấp đến một cơ quan giải quyết tranh chấp ngoài tòa án đã được chứng nhận. Những điều này không ảnh hưởng đến quyền khởi kiện ra tòa của bạn.\n\n– Đội ngũ An toàn {product_name}" + }, "dsa_report_verification": { "subject": "Xác minh email của bạn cho báo cáo DSA", "body": "Xin chào,\n\nSử dụng mã xác minh bên dưới để gửi báo cáo Đạo luật Dịch vụ kỹ thuật số của bạn trên {product_name}:\n\n{code}\n\nMã này hết hạn vào {expiresAt, date, full} lúc {expiresAt, time, short}.\n\nNếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này.\n\n– Đội ngũ An toàn {product_name}" @@ -79,6 +83,10 @@ "subject": "Đăng ký {product_name} của bạn đã được chấp thuận", "body": "Xin chào {username},\n\nTin tốt: đăng ký {product_name} của bạn đã được chấp thuận.\n\nBây giờ bạn có thể đăng nhập vào ứng dụng {product_name} tại đây:\n{channelsUrl}\n\nChào mừng bạn đến với cộng đồng {product_name}.\n\n– Đội ngũ {product_name}" }, + "report_received": { + "subject": "Chúng tôi đã nhận được báo cáo của bạn trên {product_name}", + "body": "Xin chào,\n\nChúng tôi đã nhận được báo cáo theo Đạo luật Dịch vụ kỹ thuật số của bạn về {targetKind, select, message {một tin nhắn} user {một tài khoản} guild {một cộng đồng} other {nội dung}} trên {product_name}.\n\nID báo cáo: {reportId}\n\nĐội ngũ An toàn của chúng tôi sẽ xem xét báo cáo của bạn và chúng tôi sẽ gửi email đến địa chỉ này khi có quyết định. Hãy giữ lại email này để tiện tra cứu.\n\n– Đội ngũ An toàn {product_name}" + }, "report_resolved": { "subject": "Báo cáo {product_name} của bạn đã được xem xét", "body": "Xin chào {username},\n\nBáo cáo của bạn (ID: {reportId}) đã được Đội ngũ An toàn của chúng tôi xem xét.{hasComment, select, yes {\n\nPhản hồi từ Đội ngũ An toàn:\n{publicComment}} other {}}\n\nCảm ơn bạn đã giúp giữ cho {product_name} an toàn cho mọi người. Chúng tôi xem xét nghiêm túc mọi báo cáo và đánh giá cao đóng góp của bạn cho cộng đồng.\n\nNếu bạn có bất kỳ câu hỏi hoặc lo ngại nào về kết quả này, vui lòng liên hệ {safety_email}.\n\n– Đội ngũ An toàn {product_name}" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-CN.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-CN.json index 28f6cd39c..e2abf4a57 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-CN.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-CN.json @@ -27,6 +27,10 @@ "subject": "管理你的 {product_name} 捐赠", "body": "你好,\n\n点击下方链接访问你的捐赠者门户:\n\n{manageUrl}\n\n在门户中,你可以管理订阅、下载发票和查看捐赠历史。\n\n此链接将于 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果你未请求此链接,可以放心忽略此邮件。\n\n– {product_name} 团队" }, + "dsa_report_resolved": { + "subject": "我们已对你的 {product_name} 举报做出决定", + "body": "你好,\n\n我们的安全团队已审核你根据《数字服务法》提交的举报(ID:{reportId})并做出决定。{hasComment, select, yes {\n\n安全团队的回复:\n{publicComment}} other {}}\n\n我们不会透露对他人账号所采取措施的详情,因为这属于对方的个人数据。\n\n如果你不同意此决定,可以在 60 天内免费提交申诉。请使用此邮箱地址发送邮件至 {appeals_email},注明你的举报 ID,并说明你认为该决定不正确的原因。如果你身在欧盟,还可以将争议提交给经认证的庭外争议解决机构。以上内容均不影响你向法院提起诉讼的权利。\n\n– {product_name} 安全团队" + }, "dsa_report_verification": { "subject": "验证邮箱以提交 DSA 举报", "body": "你好,\n\n请使用以下验证码在 {product_name} 上提交你的《数字服务法》举报:\n\n{code}\n\n此验证码将于 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果你未请求此操作,可以忽略此邮件。\n\n– {product_name} 安全团队" @@ -79,6 +83,10 @@ "subject": "你的 {product_name} 注册已通过", "body": "你好 {username},\n\n好消息:你的 {product_name} 注册已通过。\n\n你现在可以登录 {product_name} 应用:\n{channelsUrl}\n\n欢迎加入 {product_name} 社区。\n\n– {product_name} 团队" }, + "report_received": { + "subject": "我们已收到你的 {product_name} 举报", + "body": "你好,\n\n我们已收到你根据《数字服务法》提交的关于 {product_name} 上{targetKind, select, message {一条消息} user {一个账号} guild {一个社区} other {内容}}的举报。\n\n举报 ID:{reportId}\n\n我们的安全团队会审核你的举报,并在做出决定后发送邮件至此邮箱地址。请保留此邮件以备查阅。\n\n– {product_name} 安全团队" + }, "report_resolved": { "subject": "你的 {product_name} 举报已完成审核", "body": "你好 {username},\n\n你的举报(ID:{reportId})已由我们的安全团队完成审核。{hasComment, select, yes {\n\n安全团队的回复:\n{publicComment}} other {}}\n\n感谢你帮助维护 {product_name} 的安全环境。我们会认真对待每一份举报,也感谢你为社区做出的贡献。\n\n如果你对此结果有任何疑问或意见,请联系 {safety_email}。\n\n– {product_name} 安全团队" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-TW.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-TW.json index 9a46f4b96..346030167 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-TW.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/locales/zh-TW.json @@ -27,6 +27,10 @@ "subject": "管理您的 {product_name} 捐款", "body": "哈囉,\n\n點擊下方連結以存取您的捐款者入口網站:\n\n{manageUrl}\n\n在入口網站中,您可以管理訂閱、下載發票並查看您的捐款紀錄。\n\n此連結將於 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果您沒有要求此連結,可以直接忽略這封電子郵件。\n\n– {product_name} 團隊" }, + "dsa_report_resolved": { + "subject": "我們已對您的 {product_name} 檢舉做出決定", + "body": "哈囉,\n\n我們的安全團隊已審核您依據數位服務法提出的檢舉(ID:{reportId})並做出決定。{hasComment, select, yes {\n\n安全團隊的回覆:\n{publicComment}} other {}}\n\n我們不會透露對他人帳號所採取措施的細節,因為這屬於對方的個人資料。\n\n如果您不同意此決定,可以在 60 天內免費提交申訴。請使用此電子郵件地址寄信至 {appeals_email},註明您的檢舉 ID,並說明您認為此決定不正確的原因。如果您身在歐盟,也可以將爭議提交給經認證的訴訟外爭議解決機構。以上內容均不影響您向法院提起訴訟的權利。\n\n– {product_name} 安全團隊" + }, "dsa_report_verification": { "subject": "驗證您的電子郵件以送出 DSA 檢舉", "body": "哈囉,\n\n請使用以下驗證碼,在 {product_name} 上送出您的數位服務法檢舉:\n\n{code}\n\n此驗證碼將於 {expiresAt, date, full} {expiresAt, time, short} 失效。\n\n如果您沒有要求此驗證碼,可以忽略這封電子郵件。\n\n– {product_name} 安全團隊" @@ -79,6 +83,10 @@ "subject": "您的 {product_name} 註冊已獲核准", "body": "哈囉 {username},\n\n好消息:您的 {product_name} 註冊已獲核准。\n\n您現在可以從這裡登入 {product_name} 應用程式:\n{channelsUrl}\n\n歡迎加入 {product_name} 社群。\n\n– {product_name} 團隊" }, + "report_received": { + "subject": "我們已收到您的 {product_name} 檢舉", + "body": "哈囉,\n\n我們已收到您依據數位服務法提出、關於 {product_name} 上{targetKind, select, message {一則訊息} user {一個帳號} guild {一個社群} other {內容}}的檢舉。\n\n檢舉 ID:{reportId}\n\n我們的安全團隊會審核您的檢舉,並在做出決定後寄信至此電子郵件地址。請保留這封電子郵件以供日後查閱。\n\n– {product_name} 安全團隊" + }, "report_resolved": { "subject": "您的 {product_name} 檢舉已審核完成", "body": "哈囉 {username},\n\n您的檢舉(ID:{reportId})已由我們的安全團隊審核。{hasComment, select, yes {\n\n安全團隊的回覆:\n{publicComment}} other {}}\n\n感謝您協助維護 {product_name} 的安全。我們會認真看待每一則檢舉,並感謝您對社群的貢獻。\n\n如果您對此結果有任何疑問或疑慮,請聯絡 {safety_email}。\n\n– {product_name} 安全團隊" diff --git a/fluxer_api/pkgs/email/src/email_i18n/weblate/messages.json b/fluxer_api/pkgs/email/src/email_i18n/weblate/messages.json index 8bb2d2853..e5a58e08b 100644 --- a/fluxer_api/pkgs/email/src/email_i18n/weblate/messages.json +++ b/fluxer_api/pkgs/email/src/email_i18n/weblate/messages.json @@ -27,6 +27,10 @@ "subject": "Manage your {product_name} donations", "body": "Hello,\n\nClick the link below to access your donor portal:\n\n{manageUrl}\n\nIn the portal, you can manage subscriptions, download invoices, and view your donation history.\n\nThis link expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you did not request this link, you can safely ignore this email.\n\n– {product_name} Team" }, + "dsa_report_resolved": { + "subject": "We made a decision on your {product_name} report", + "body": "Hello,\n\nOur Safety Team has reviewed your Digital Services Act report (ID: {reportId}) and made a decision.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nWe don't share details of any action taken against another person's account, because that is their personal data.\n\nIf you disagree with this decision, you can appeal free of charge within 60 days. Email {appeals_email} from this email address, include your report ID, and explain why you think the decision is wrong. If you are in the EU, you can also refer the dispute to a certified out-of-court dispute settlement body. None of this affects your right to go to court.\n\n– {product_name} Safety Team" + }, "dsa_report_verification": { "subject": "Verify your email for a DSA report", "body": "Hello,\n\nUse the verification code below to submit your Digital Services Act report on {product_name}:\n\n{code}\n\nThis code expires on {expiresAt, date, full} at {expiresAt, time, short}.\n\nIf you didn't request this, you can ignore this email.\n\n– {product_name} Safety Team" @@ -79,6 +83,10 @@ "subject": "Your {product_name} registration has been approved", "body": "Hello {username},\n\nGood news: your {product_name} registration has been approved.\n\nYou can now log in to the {product_name} app here:\n{channelsUrl}\n\nWelcome to the {product_name} community.\n\n– {product_name} Team" }, + "report_received": { + "subject": "We received your {product_name} report", + "body": "Hello,\n\nWe received your Digital Services Act report about {targetKind, select, message {a message} user {an account} guild {a community} other {content}} on {product_name}.\n\nReport ID: {reportId}\n\nOur Safety Team will review your report and email you at this address once we have made a decision. Keep this email for your records.\n\n– {product_name} Safety Team" + }, "report_resolved": { "subject": "Your {product_name} report has been reviewed", "body": "Hello {username},\n\nYour report (ID: {reportId}) has been reviewed by our Safety Team.{hasComment, select, yes {\n\nResponse from the Safety Team:\n{publicComment}} other {}}\n\nThanks for helping keep {product_name} safe for everyone. We take all reports seriously and appreciate your contribution to the community.\n\nIf you have any questions or concerns about this outcome, please contact {safety_email}.\n\n– {product_name} Safety Team" diff --git a/fluxer_api/pkgs/rate_limit/package.json b/fluxer_api/pkgs/rate_limit/package.json index 880882f74..4f4dcec77 100644 --- a/fluxer_api/pkgs/rate_limit/package.json +++ b/fluxer_api/pkgs/rate_limit/package.json @@ -7,6 +7,8 @@ "./*": "./*" }, "scripts": { + "test": "vitest run", + "test:watch": "vitest", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -14,6 +16,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "typescript": "catalog:ts7" + "typescript": "catalog:ts7", + "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/rate_limit/src/RateLimitService.ts b/fluxer_api/pkgs/rate_limit/src/RateLimitService.ts index ecc275cd9..a9f7546e0 100644 --- a/fluxer_api/pkgs/rate_limit/src/RateLimitService.ts +++ b/fluxer_api/pkgs/rate_limit/src/RateLimitService.ts @@ -42,6 +42,12 @@ function createRateLimitResult(result: KVRateLimitResult, global?: boolean): Rat }; } +function peekRetryAfterMs(result: KVRateLimitResult, windowMs: number): number { + const capacity = result.limit; + const leakWindowMs = Math.max(1, Math.floor(windowMs)); + return Math.max(1, Math.ceil(result.resetAfterMs - ((capacity - 1) * leakWindowMs) / capacity)); +} + export class RateLimitService implements IRateLimitService { private static readonly DEFAULT_GLOBAL_WINDOW_MS = 1000; private readonly keyFactory = new RateLimitKeyFactory(); @@ -64,7 +70,15 @@ export class RateLimitService implements IRateLimitService { async peekLimit(config: RateLimitConfig): Promise { const key = this.keyFactory.getIdentifierKey(config.identifier); const result = await this.store.checkLeakyBucketLimit(key, config.maxAttempts, config.windowMs, 0); - return createRateLimitResult(result); + if (result.remaining >= 1) { + return createRateLimitResult(result); + } + return createRateLimitResult({ + ...result, + allowed: false, + remaining: 0, + retryAfterMs: peekRetryAfterMs(result, config.windowMs), + }); } async checkBucketLimit(bucket: string, config: BucketConfig): Promise { diff --git a/fluxer_api/pkgs/rate_limit/src/__tests__/RateLimitService.test.ts b/fluxer_api/pkgs/rate_limit/src/__tests__/RateLimitService.test.ts new file mode 100644 index 000000000..6815b9b66 --- /dev/null +++ b/fluxer_api/pkgs/rate_limit/src/__tests__/RateLimitService.test.ts @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {KVRateLimitResult} from '@pkgs/kv_client/src/IKVProvider'; +import type {RateLimitConfig, RateLimitResult} from '@pkgs/rate_limit/src/IRateLimitService'; +import {RateLimitService} from '@pkgs/rate_limit/src/RateLimitService'; +import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; + +interface BucketState { + level: number; + updatedAt: number; +} + +class LeakyBucketStore { + readonly buckets = new Map(); + + async checkLeakyBucketLimit(key: string, limit: number, windowMs: number, cost: number): Promise { + const nowMs = Date.now(); + const capacity = Math.max(1, Math.floor(limit)); + const leakWindowMs = Math.max(1, Math.floor(windowMs)); + const leakPerMs = capacity / leakWindowMs; + const state = this.buckets.get(key) ?? {level: 0, updatedAt: nowMs}; + const elapsed = nowMs - state.updatedAt; + let level = state.level; + if (elapsed > 0) { + level = Math.max(0, level - elapsed * leakPerMs); + } + const resetAfter = (current: number) => (current <= 0 ? 0 : Math.max(0, Math.ceil(current / leakPerMs))); + const result = (allowed: boolean, remaining: number, resetAfterMs: number, retryAfterMs: number) => ({ + allowed, + limit: capacity, + remaining, + resetAfterMs, + resetAtMs: nowMs + resetAfterMs, + retryAfterMs, + }); + if (cost === 0) { + this.save(key, level, nowMs); + return result(true, Math.max(0, Math.floor(capacity - level)), resetAfter(level), 0); + } + if (level + cost > capacity) { + const retryAfterMs = Math.max(1, Math.ceil((level + cost - capacity) / leakPerMs)); + const ttlMs = Math.max(1, resetAfter(level), retryAfterMs); + this.save(key, level, nowMs); + return result(false, 0, ttlMs, retryAfterMs); + } + level += cost; + this.save(key, level, nowMs); + return result(true, Math.max(0, Math.floor(capacity - level)), resetAfter(level), 0); + } + + async del(...keys: Array): Promise { + let deleted = 0; + for (const key of keys) { + if (this.buckets.delete(key)) deleted += 1; + } + return deleted; + } + + async scan(pattern: string, _count: number): Promise> { + const prefix = pattern.replace(/\*$/, '').replace(/\\(.)/g, '$1'); + return [...this.buckets.keys()].filter((key) => key.startsWith(prefix)); + } + + private save(key: string, level: number, nowMs: number): void { + if (level > 0) { + this.buckets.set(key, {level, updatedAt: nowMs}); + } else { + this.buckets.delete(key); + } + } +} + +const CONFIG: RateLimitConfig = {identifier: 'report:target:1', maxAttempts: 5, windowMs: 60_000}; + +function retryAfterMs(result: RateLimitResult): number { + return Math.round((result.retryAfterDecimal ?? 0) * 1000); +} + +function expectPeekMatchesCheck(peek: RateLimitResult, check: RateLimitResult): void { + expect(check.allowed).toBe(false); + expect(peek).toMatchObject({allowed: false, remaining: 0, limit: check.limit}); + expect(peek.retryAfter).toBe(check.retryAfter); + expect(retryAfterMs(peek) - retryAfterMs(check)).toBeGreaterThanOrEqual(0); + expect(retryAfterMs(peek) - retryAfterMs(check)).toBeLessThanOrEqual(1); +} + +async function fill(service: RateLimitService, config: RateLimitConfig): Promise { + for (let attempt = 0; attempt < config.maxAttempts; attempt += 1) { + expect((await service.checkLimit(config)).allowed).toBe(true); + } +} + +describe('RateLimitService.peekLimit', () => { + let store: LeakyBucketStore; + let service: RateLimitService; + + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-10-04T12:00:00.000Z')); + store = new LeakyBucketStore(); + service = new RateLimitService(store); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it('allows an empty bucket without spending it', async () => { + const peek = await service.peekLimit(CONFIG); + expect(peek).toMatchObject({allowed: true, limit: 5, remaining: 5}); + expect(peek.retryAfter).toBeUndefined(); + expect(peek.retryAfterDecimal).toBeUndefined(); + expect(store.buckets.size).toBe(0); + }); + + it('allows while capacity remains and reports the remaining count', async () => { + await service.checkLimit(CONFIG); + await service.checkLimit(CONFIG); + const peek = await service.peekLimit(CONFIG); + expect(peek).toMatchObject({allowed: true, remaining: 3}); + expect(peek.retryAfter).toBeUndefined(); + expect((await service.peekLimit(CONFIG)).remaining).toBe(3); + }); + + it('rejects a full bucket with the retry-after a consuming check would report', async () => { + await fill(service, CONFIG); + const peek = await service.peekLimit(CONFIG); + const check = await service.checkLimit(CONFIG); + expectPeekMatchesCheck(peek, check); + expect(retryAfterMs(peek)).toBe(12_000); + expect(peek.retryAfter).toBe(12); + }); + + it('keeps rejecting while less than one slot has leaked', async () => { + await fill(service, CONFIG); + vi.advanceTimersByTime(6_000); + const peek = await service.peekLimit(CONFIG); + const check = await service.checkLimit(CONFIG); + expectPeekMatchesCheck(peek, check); + expect(retryAfterMs(peek)).toBe(6_000); + expect(peek.retryAfter).toBe(6); + }); + + it('does not spend budget when it rejects', async () => { + await fill(service, CONFIG); + for (let attempt = 0; attempt < 3; attempt += 1) { + expect((await service.peekLimit(CONFIG)).allowed).toBe(false); + } + vi.advanceTimersByTime(12_000); + expect(await service.peekLimit(CONFIG)).toMatchObject({allowed: true, remaining: 1}); + expect((await service.checkLimit(CONFIG)).allowed).toBe(true); + expect((await service.peekLimit(CONFIG)).allowed).toBe(false); + }); + + it('matches the consuming check on a single-slot bucket', async () => { + const config: RateLimitConfig = {identifier: 'slowmode:1:2', maxAttempts: 1, windowMs: 10_000}; + await service.checkLimit(config); + vi.advanceTimersByTime(2_500); + const peek = await service.peekLimit(config); + const check = await service.checkLimit(config); + expectPeekMatchesCheck(peek, check); + expect(peek.retryAfterDecimal).toBe(7.5); + expect(peek.retryAfter).toBe(8); + expect(peek.resetTime.getTime()).toBe(Date.now() + 7_500); + }); + + it('agrees with the consuming check at every point of a draining bucket', async () => { + const config: RateLimitConfig = {identifier: 'crosspost:edit:1', maxAttempts: 3, windowMs: 1_000}; + await fill(service, config); + for (let step = 0; step < 12; step += 1) { + vi.advanceTimersByTime(37); + const peek = await service.peekLimit(config); + const check = await service.checkLimit(config); + expect(peek.allowed).toBe(check.allowed); + if (!check.allowed) { + expectPeekMatchesCheck(peek, check); + } + } + }); +}); diff --git a/fluxer_api/pkgs/rate_limit/vitest.config.ts b/fluxer_api/pkgs/rate_limit/vitest.config.ts new file mode 100644 index 000000000..f94671ff6 --- /dev/null +++ b/fluxer_api/pkgs/rate_limit/vitest.config.ts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {defineConfig} from 'vitest/config'; + +export default defineConfig({ + resolve: {tsconfigPaths: true}, + test: { + globals: true, + environment: 'node', + include: ['**/*.{test,spec}.{ts,tsx}'], + exclude: ['node_modules', 'dist'], + coverage: { + provider: 'v8', + reporter: ['text', 'json', 'html'], + exclude: ['**/*.test.tsx', '**/*.spec.tsx', 'node_modules/'], + }, + }, +}); diff --git a/fluxer_api/src/api/Tables.ts b/fluxer_api/src/api/Tables.ts index a59f51bf3..9d2c8930d 100644 --- a/fluxer_api/src/api/Tables.ts +++ b/fluxer_api/src/api/Tables.ts @@ -255,10 +255,14 @@ import { DSA_REPORT_TICKET_COLUMNS, type DSAReportEmailVerificationRow, type DSAReportTicketRow, + GUILD_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, + type GuildReportSubmissionByReporterRow, IAR_SUBMISSION_COLUMNS, type IARSubmissionRow, MESSAGE_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, type MessageReportSubmissionByReporterRow, + USER_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, + type UserReportSubmissionByReporterRow, } from '@app/api/database/types/ReportTypes'; import { STORE_ACCOUNT_TOKEN_BY_USER_COLUMNS, @@ -925,16 +929,41 @@ export const MessageReportSubmissionsByReporter = defineTable< columns: MESSAGE_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, primaryKey: ['reporter_id', 'channel_id', 'message_id'], partitionKey: ['reporter_id'], + defaultTtlSeconds: seconds('365 days'), +}); +export const UserReportSubmissionsByReporter = defineTable< + UserReportSubmissionByReporterRow, + 'reporter_id' | 'reported_user_id', + 'reporter_id' +>({ + name: 'user_report_submissions_by_reporter', + columns: USER_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, + primaryKey: ['reporter_id', 'reported_user_id'], + partitionKey: ['reporter_id'], + defaultTtlSeconds: seconds('24 hours'), +}); +export const GuildReportSubmissionsByReporter = defineTable< + GuildReportSubmissionByReporterRow, + 'reporter_id' | 'reported_guild_id', + 'reporter_id' +>({ + name: 'guild_report_submissions_by_reporter', + columns: GUILD_REPORT_SUBMISSION_BY_REPORTER_COLUMNS, + primaryKey: ['reporter_id', 'reported_guild_id'], + partitionKey: ['reporter_id'], + defaultTtlSeconds: seconds('24 hours'), }); export const DSAReportEmailVerifications = defineTable({ name: 'dsa_report_email_verifications', columns: DSA_REPORT_EMAIL_VERIFICATION_COLUMNS, primaryKey: ['email_lower'], + defaultTtlSeconds: seconds('10 minutes'), }); export const DSAReportTickets = defineTable({ name: 'dsa_report_tickets', columns: DSA_REPORT_TICKET_COLUMNS, primaryKey: ['ticket'], + defaultTtlSeconds: seconds('1 hour'), }); export const EmailVerificationTokens = defineTable({ name: 'email_verification_tokens', diff --git a/fluxer_api/src/api/admin/AdminAuditActions.ts b/fluxer_api/src/api/admin/AdminAuditActions.ts index eecc163be..84ad71890 100644 --- a/fluxer_api/src/api/admin/AdminAuditActions.ts +++ b/fluxer_api/src/api/admin/AdminAuditActions.ts @@ -39,6 +39,7 @@ export const AdminAuditReadActions = { LIST_GUILD_MEMORY_STATS: 'list_guild_memory_stats', LIST_GUILD_STICKERS: 'list_guild_stickers', LIST_GUILD_THREADS: 'list_guild_threads', + LIST_REPORT_REASONS: 'list_report_reasons', LIST_USER_APPLICATIONS: 'list_user_applications', LIST_USER_CHANGE_LOG: 'list_user_change_log', LIST_USER_DM_CHANNELS: 'list_user_dm_channels', diff --git a/fluxer_api/src/api/admin/AdminService.ts b/fluxer_api/src/api/admin/AdminService.ts index 08bb0e992..ebcd1319b 100644 --- a/fluxer_api/src/api/admin/AdminService.ts +++ b/fluxer_api/src/api/admin/AdminService.ts @@ -16,6 +16,7 @@ import {AdminSearchService} from '@app/api/admin/services/AdminSearchService'; import {AdminUserRelationshipService} from '@app/api/admin/services/AdminUserRelationshipService'; import {AdminUserService} from '@app/api/admin/services/AdminUserService'; import {AdminVoiceService} from '@app/api/admin/services/AdminVoiceService'; +import {ReporterResolutionNotifier} from '@app/api/admin/services/ReporterResolutionNotifier'; import type {UserID} from '@app/api/BrandedTypes'; import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; import type {ChannelService} from '@app/api/channel/services/ChannelService'; @@ -93,6 +94,14 @@ export class AdminService { adminRepository: this.adminRepository, auditService: this.auditService, }); + const reporterResolutionNotifier = new ReporterResolutionNotifier({ + apiContext: this.apiContext, + systemDm: { + channelService: this.channelService, + userChannelService: this.runtimeUserService.channelService, + userCacheService: this.userCacheService, + }, + }); this.userService = new AdminUserService({ apiContext: this.apiContext, guildRepository: this.guildRepository, @@ -107,6 +116,7 @@ export class AdminService { stripe: this.stripe, reportService: this.reportService, storeEntitlementService: this.storeEntitlementService, + reporterResolutionNotifier, }); this.guildServiceAggregate = new AdminGuildService({ guildRepository: this.guildRepository, @@ -146,12 +156,11 @@ export class AdminService { reportService: this.reportService, guildRepository: this.guildRepository, channelRepository: this.channelRepository, - channelService: this.channelService, storageService: this.storageService, auditService: this.auditService, userCacheService: this.userCacheService, - userChannelService: this.runtimeUserService.channelService, ncmecSubmissionService: getNcmecSubmissionService(), + reporterResolutionNotifier, }); this.voiceService = new AdminVoiceService({ apiContext: this.apiContext, diff --git a/fluxer_api/src/api/admin/controllers/ReportAdminController.ts b/fluxer_api/src/api/admin/controllers/ReportAdminController.ts index 171c16b83..455c1adbe 100644 --- a/fluxer_api/src/api/admin/controllers/ReportAdminController.ts +++ b/fluxer_api/src/api/admin/controllers/ReportAdminController.ts @@ -6,12 +6,19 @@ import {createReportID} from '@app/api/BrandedTypes'; import {requireAdminACL} from '@app/api/middleware/AdminMiddleware'; import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware'; import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware'; +import {getReportRepository} from '@app/api/middleware/ServiceSingletons'; import {RateLimitConfigs} from '@app/api/RateLimitConfig'; import type {HonoApp} from '@app/api/types/HonoEnv'; import {Validator} from '@app/api/Validator'; import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError'; +import { + ReportLegalHoldRequest, + ReportLegalHoldResponse, +} from '@fluxer/schema/src/domains/admin/AdminReportLegalHoldSchemas'; import { AdminReportListResponse, + AdminReportReasonsResponse, ListReportsQuery, ReportAdminResponseSchema, ResolveReportResponse, @@ -42,8 +49,10 @@ function usesReportSearchIndex(query: ListReportsQuery): boolean { query.q !== undefined || query.report_type !== undefined || query.category !== undefined || + query.reason !== undefined || query.reporter_id !== undefined || query.reported_user_id !== undefined || + query.reported_webhook_id !== undefined || query.reported_guild_id !== undefined || query.reported_channel_id !== undefined || query.guild_context_id !== undefined || @@ -60,7 +69,9 @@ function toSearchReportsRequest(query: ListReportsQuery): SearchReportsRequest { status: query.status === undefined ? undefined : REPORT_STATUS_BY_FILTER[query.status], report_type: query.report_type === undefined ? undefined : REPORT_TYPE_BY_FILTER[query.report_type], category: query.category, + reason: query.reason, reported_user_id: query.reported_user_id, + reported_webhook_id: query.reported_webhook_id, reported_guild_id: query.reported_guild_id, reported_channel_id: query.reported_channel_id, guild_context_id: query.guild_context_id, @@ -80,7 +91,7 @@ export function ReportAdminController(app: HonoApp) { operationId: 'list_admin_reports', summary: 'List reports', description: - 'Lists user and content reports with pagination. Filtering by status alone reads them straight from the database; supplying a free-text query or any of the entity, category and resolver filters searches the report index instead and adds the total, offset and limit of the page to the response. Reporter contact details are redacted unless the caller also holds REPORT_VIEW_REPORTER_PII. Requires REPORT_VIEW permission.', + 'Lists user and content reports from the report search index with pagination. Without a status filter the list covers reports of every status. A request that filters by status alone lists the reports with that status newest first and ignores sort_by and sort_order. A free-text query and the entity, category, reason and resolver filters narrow the results. Every response includes the total, offset and limit of the page. Reporter contact details are redacted unless the caller also holds REPORT_VIEW_REPORTER_PII. Requires REPORT_VIEW permission.', responseSchema: AdminReportListResponse, statusCode: 200, security: 'adminApiKey', @@ -108,8 +119,11 @@ export function ReportAdminController(app: HonoApp) { has_query: query.q === undefined ? undefined : true, status, report_type: query.report_type, + category: query.category, + reason: query.reason, reporter_user_id: query.reporter_id, reported_user_id: query.reported_user_id, + reported_webhook_id: query.reported_webhook_id, reported_guild_id: query.reported_guild_id, reported_channel_id: query.reported_channel_id, context_guild_id: query.guild_context_id, @@ -125,6 +139,32 @@ export function ReportAdminController(app: HonoApp) { return ctx.json(response); }, ); + app.get( + '/admin/report-reasons', + RateLimitMiddleware(RateLimitConfigs.ADMIN_LOOKUP), + requireAdminACL(AdminACLs.REPORT_VIEW), + OpenAPI({ + operationId: 'list_admin_report_reasons', + summary: 'List report reasons', + description: + 'Lists every reason key a report filed through a report flow can carry, with its English label, whether it is a highest-priority reason, and the legacy category it maps to for message, user and community reports. Requires REPORT_VIEW permission.', + responseSchema: AdminReportReasonsResponse, + statusCode: 200, + security: 'adminApiKey', + tags: 'Admin', + }), + async (ctx) => { + const adminService = ctx.get('adminService'); + const response = adminService.reportServiceAggregate.listReportReasons(); + await recordAdminRead(ctx, { + targetType: 'report', + targetId: 0n, + action: AdminAuditReadActions.LIST_REPORT_REASONS, + metadata: {result_count: response.reasons.length}, + }); + return ctx.json(response); + }, + ); app.get( '/admin/reports/:report_id', RateLimitMiddleware(RateLimitConfigs.ADMIN_LOOKUP), @@ -134,7 +174,7 @@ export function ReportAdminController(app: HonoApp) { operationId: 'get_admin_report', summary: 'Get report', description: - 'Retrieves detailed information about a specific report including content, reporter, reason, and the message context captured when it was filed. Requires REPORT_VIEW permission.', + 'Retrieves detailed information about a specific report including content, reporter, reason, and the message context and profile snapshot captured when it was filed. Requires REPORT_VIEW permission.', responseSchema: ReportAdminResponseSchema, statusCode: 200, security: 'adminApiKey', @@ -167,7 +207,7 @@ export function ReportAdminController(app: HonoApp) { operationId: 'update_admin_report', summary: 'Update report', description: - 'Moves a report to the resolved status with an optional public comment shown to the reporter. Marks the report as handled, notifies the reporter by system DM and email unless notify_reporter is false, and creates an audit log entry. Requires REPORT_RESOLVE permission.', + 'Moves a report to the resolved status. The reporter is always told the report was reviewed: an account reporter by system DM and email, a Digital Services Act notifier by email. notify_reporter false leaves the public comment out of that notice. Nothing is sent when the reporter account is deleted or barred from reporting. Creates an audit log entry. Requires REPORT_RESOLVE permission.', responseSchema: ResolveReportResponse, statusCode: 200, security: 'adminApiKey', @@ -191,4 +231,62 @@ export function ReportAdminController(app: HonoApp) { ); }, ); + app.post( + '/admin/reports/:report_id/legal-hold', + RateLimitMiddleware(RateLimitConfigs.ADMIN_LOOKUP), + requireAdminACL(AdminACLs.REPORT_RESOLVE), + Validator('param', ReportIdParam), + Validator('json', ReportLegalHoldRequest), + OpenAPI({ + operationId: 'set_admin_report_legal_hold', + summary: 'Set report legal hold', + description: + 'Places or clears a legal hold on a report. Reports are deleted 365 days after they were filed, together with their stored evidence, unless a hold that ends later is in place. A hold needs an end time in the future and a reason. A null legal_hold_until clears the hold. Creates an audit log entry. Requires REPORT_RESOLVE permission.', + responseSchema: ReportLegalHoldResponse, + statusCode: 200, + security: 'adminApiKey', + tags: 'Admin', + }), + async (ctx) => { + const adminService = ctx.get('adminService'); + const {report_id} = ctx.req.valid('param'); + const {legal_hold_until, legal_hold_reason} = ctx.req.valid('json'); + const until = legal_hold_until === null ? null : new Date(legal_hold_until); + const reason = until === null ? null : (legal_hold_reason ?? null); + if (until !== null && until.getTime() <= Date.now()) { + throw InputValidationError.create('legal_hold_until', 'The hold must end in the future'); + } + if (until !== null && reason === null) { + throw InputValidationError.create('legal_hold_reason', 'A reason is required to place a hold'); + } + const reportId = createReportID(report_id); + const reportRepository = getReportRepository(); + const previous = await reportRepository.getReport(reportId); + const report = await reportRepository.setReportLegalHold(reportId, until, reason); + const metadata = new Map([ + ['report_id', reportId.toString()], + ['report_type', report.reportType.toString()], + ]); + if (until !== null && reason !== null) { + metadata.set('legal_hold_until', until.toISOString()); + metadata.set('legal_hold_reason', reason); + } + if (previous?.legalHoldUntil) { + metadata.set('previous_legal_hold_until', previous.legalHoldUntil.toISOString()); + } + await adminService.auditService.createAuditLog({ + adminUserId: ctx.get('adminUserId'), + targetType: 'report', + targetId: BigInt(reportId), + action: until === null ? 'clear_report_legal_hold' : 'set_report_legal_hold', + auditLogReason: ctx.get('auditLogReason'), + metadata, + }); + return ctx.json({ + report_id: reportId.toString(), + legal_hold_until: report.legalHoldUntil?.toISOString() ?? null, + legal_hold_reason: report.legalHoldReason, + }); + }, + ); } diff --git a/fluxer_api/src/api/admin/services/AdminReportService.ts b/fluxer_api/src/api/admin/services/AdminReportService.ts index 444835573..e85841f95 100644 --- a/fluxer_api/src/api/admin/services/AdminReportService.ts +++ b/fluxer_api/src/api/admin/services/AdminReportService.ts @@ -2,7 +2,10 @@ import type {ApiContext} from '@app/api/ApiContext'; import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService'; -import {trySendAdminNotification} from '@app/api/admin/services/AdminNotification'; +import { + describeReporterNotice, + type ReporterResolutionNotifier, +} from '@app/api/admin/services/ReporterResolutionNotifier'; import { type ChannelID, createReportID, @@ -13,7 +16,6 @@ import { } from '@app/api/BrandedTypes'; import {Config} from '@app/api/Config'; import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; -import type {ChannelService} from '@app/api/channel/services/ChannelService'; import {makeAttachmentCdnKey} from '@app/api/channel/services/message/MessageHelpers'; import { createMessageResponseDataService, @@ -22,29 +24,35 @@ import { messageResponseAccessForGuild, } from '@app/api/channel/services/message/MessageResponseDataService'; import {resolveNsfwScopeChannel} from '@app/api/channel/utils/ThreadNsfwScope'; -import {SYSTEM_USER_ID} from '@app/api/constants/Core'; import type {NcmecAttachmentStatusResponse, NcmecSubmissionService} from '@app/api/csam/NcmecSubmissionService'; import type {MessageAttachment} from '@app/api/database/types/MessageTypes'; -import {SYSTEM_THREAD_VIEWER} from '@app/api/experiment/ChannelThreadsGate'; import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate'; import type {IStorageService} from '@app/api/infrastructure/IStorageService'; import type {UserCacheService} from '@app/api/infrastructure/UserCacheService'; import {Logger} from '@app/api/Logger'; import type {RequestCache} from '@app/api/middleware/RequestCacheMiddleware'; import {createRequestCache} from '@app/api/middleware/RequestCacheMiddleware'; -import type {User} from '@app/api/models/User'; +import {describeReportFlowAnswers} from '@app/api/report/flows/ReportFlowRegistry'; +import {findReportReason, listReportReasons} from '@app/api/report/flows/ReportReasonCatalog'; import type {IARMessageContext, IARSubmission} from '@app/api/report/IReportRepository'; import type {ReportService} from '@app/api/report/ReportService'; import {getReportSearchService} from '@app/api/SearchFactory'; import {isHiddenPartial} from '@app/api/user/ProfileVisibility'; -import type {UserChannelService} from '@app/api/user/services/UserChannelService'; import {formatUserTag} from '@app/api/user/UserTag'; import {assertSafeByteSize} from '@app/api/utils/ByteSizeUtils'; import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {DELETED_USER_DISCRIMINATOR, DELETED_USER_USERNAME} from '@fluxer/constants/src/UserConstants'; import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError'; -import type {SearchReportsRequest, UpdateReportRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas'; +import {UnknownReportError} from '@fluxer/errors/src/domains/moderation/UnknownReportError'; +import type {ReportSearchFilters} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes'; +import type { + AdminReportReasonsResponse, + SearchReportsRequest, + UpdateReportRequest, +} from '@fluxer/schema/src/domains/admin/AdminSchemas'; import type {MessageResponse} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; -import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n'; +import type {ReportProfileAssetSnapshot} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import type {UserPartialResponse} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; import {seconds} from 'itty-time'; interface AdminReportServiceDeps { @@ -52,25 +60,68 @@ interface AdminReportServiceDeps { reportService: ReportService; guildRepository: IGuildRepositoryAggregate; channelRepository: IChannelRepository; - channelService: ChannelService; storageService: IStorageService; auditService: AdminAuditService; userCacheService: UserCacheService; - userChannelService: UserChannelService; ncmecSubmissionService: NcmecSubmissionService; + reporterResolutionNotifier: ReporterResolutionNotifier; } type StaffReportResolution = NonNullable; -interface ReportNsfwLookupCache { +interface ReportLookupCache { channelNsfwByChannelId: Map; guildNsfwLevelByGuildId: Map; + reporterEmailByReporterId: Map>; } -function createReportNsfwLookupCache(): ReportNsfwLookupCache { +function createReportLookupCache(): ReportLookupCache { return { channelNsfwByChannelId: new Map(), guildNsfwLevelByGuildId: new Map(), + reporterEmailByReporterId: new Map(), + }; +} + +function mapUserPartialBotFlag(user: UserPartialResponse): boolean | null { + if (user.bot) { + return true; + } + const isUnresolved = + user.username === DELETED_USER_USERNAME && + user.discriminator === DELETED_USER_DISCRIMINATOR.toString().padStart(4, '0'); + return isUnresolved ? null : false; +} + +function mapMissingAttachmentToResponse(attachment: MessageAttachment) { + return { + id: attachment.attachment_id.toString(), + filename: String(attachment.filename), + nsfw: attachment.nsfw ?? null, + content_type: attachment.content_type ?? null, + width: attachment.width ?? null, + height: attachment.height ?? null, + size: attachment.size != null ? assertSafeByteSize(attachment.size, 'admin report attachment size') : null, + }; +} + +function mapReportReasonFields(report: IARSubmission) { + const reason = report.reason ? findReportReason(report.reason) : null; + const flow = + report.flowSteps && report.flowRevision && report.flowSurface + ? describeReportFlowAnswers({ + revisionHash: report.flowRevision, + surface: report.flowSurface, + locale: report.flowLocale, + steps: report.flowSteps, + }) + : null; + return { + reason: report.reason, + reason_label: reason?.label ?? report.reason, + reason_highest_priority: reason?.highestPriority ?? null, + flow, + reporter_good_faith_confirmed: report.reporterGoodFaithConfirmed, }; } @@ -83,10 +134,10 @@ export class AdminReportService { const currentOffset = offset || 0; const {reports, total} = await reportService.listReportsByStatus(status, requestedLimit, currentOffset); const requestCache = createRequestCache(); - const reportNsfwLookupCache = createReportNsfwLookupCache(); + const reportLookupCache = createReportLookupCache(); const reportResponses = await Promise.all( reports.map((report: IARSubmission) => - this.mapReportToResponse(report, false, requestCache, acls, reportNsfwLookupCache), + this.mapReportToResponse(report, false, requestCache, acls, reportLookupCache), ), ); return { @@ -97,12 +148,25 @@ export class AdminReportService { }; } + listReportReasons(): AdminReportReasonsResponse { + return { + reasons: listReportReasons().map((reason) => ({ + key: reason.key, + label: reason.label, + highest_priority: reason.highestPriority, + legacy_category_message: reason.legacyCategories.message, + legacy_category_user: reason.legacyCategories.user, + legacy_category_guild: reason.legacyCategories.guild, + })), + }; + } + async getReport(reportId: ReportID, acls: ReadonlySet) { const {reportService} = this.deps; const report = await reportService.getReport(reportId); const requestCache = createRequestCache(); - const reportNsfwLookupCache = createReportNsfwLookupCache(); - return this.mapReportToResponse(report, true, requestCache, acls, reportNsfwLookupCache); + const reportLookupCache = createReportLookupCache(); + return this.mapReportToResponse(report, true, requestCache, acls, reportLookupCache); } async resolveReport( @@ -113,38 +177,14 @@ export class AdminReportService { notifyReporter: boolean, resolution?: StaffReportResolution, ) { - const {reportService, auditService} = this.deps; - const {users: userRepository, email: emailService} = this.deps.apiContext.services; - const resolvedReport = await reportService.resolveReport(reportId, adminUserId, publicComment, auditLogReason, { + const {reportService, auditService, reporterResolutionNotifier} = this.deps; + const sentComment = notifyReporter ? publicComment : null; + const internalComment = notifyReporter ? null : publicComment; + const resolvedReport = await reportService.resolveReport(reportId, adminUserId, sentComment, auditLogReason, { outcome: resolution, resolvedBy: 'staff', }); - let reporterDmSent = false; - let reporterEmailSent = false; - const reporter = - notifyReporter && resolvedReport.reporterId ? await userRepository.findUnique(resolvedReport.reporterId) : null; - if (reporter) { - const commentForTemplate = publicComment ?? ''; - reporterDmSent = await this.sendResolvedReportSystemDm({ - reporter, - reportId, - publicComment: commentForTemplate, - }); - const email = reporter.email; - if (email) { - reporterEmailSent = await trySendAdminNotification( - () => - emailService.sendReportResolvedEmail( - email, - reporter.username, - reportId.toString(), - commentForTemplate, - reporter.locale, - ), - {action: 'resolve_report', targetId: reportId.toString()}, - ); - } - } + const notice = await reporterResolutionNotifier.notifyReporterOfResolution(resolvedReport, sentComment); await auditService.createAuditLog({ adminUserId, targetType: 'report', @@ -155,8 +195,8 @@ export class AdminReportService { ['report_id', reportId.toString()], ['report_type', resolvedReport.reportType.toString()], ['notify_reporter', notifyReporter ? 'true' : 'false'], - ['reporter_dm_sent', reporterDmSent ? 'true' : 'false'], - ['reporter_email_sent', reporterEmailSent ? 'true' : 'false'], + ...(internalComment ? [['internal_comment', internalComment] as [string, string]] : []), + ...describeReporterNotice(notice), ...(resolution ? [['resolution', resolution] as [string, string]] : []), ]), }); @@ -168,135 +208,91 @@ export class AdminReportService { }; } - private async sendResolvedReportSystemDm({ - reporter, - reportId, - publicComment, - }: { - reporter: User; - reportId: ReportID; - publicComment: string; - }): Promise { - const {users: userRepository} = this.deps.apiContext.services; - const template = getEmailTemplate('report_resolved', reporter.locale, { - username: reporter.username, - reportId: reportId.toString(), - publicComment, - hasComment: publicComment ? 'yes' : 'no', - }); - if (!template.ok) { - Logger.warn( - { - reportId: reportId.toString(), - reporterId: reporter.id.toString(), - locale: reporter.locale, - error: template.error, - }, - 'Skipping report review system DM because the email template could not be resolved', - ); - return false; - } - const requestCache = createRequestCache(); - try { - const systemUser = await userRepository.findUniqueAssert(SYSTEM_USER_ID); - const dmChannel = await this.deps.userChannelService.ensureDmOpenForBothUsers({ - userId: systemUser.id, - recipientId: reporter.id, - userCacheService: this.deps.userCacheService, - requestCache, - }); - await this.deps.channelService.messages.send.sendMessage({ - user: systemUser, - viewer: SYSTEM_THREAD_VIEWER, - channelId: dmChannel.id, - data: { - content: template.value.body, - }, - requestCache, - }); - return true; - } catch (error) { - Logger.warn( - {reportId: reportId.toString(), reporterId: reporter.id.toString(), error}, - 'Failed to send report review system DM', - ); - return false; - } finally { - requestCache.clear(); - } - } - async searchReports(data: SearchReportsRequest, acls: ReadonlySet) { const reportSearchService = getReportSearchService(); if (!reportSearchService) { throw new FeatureTemporarilyDisabledError(); } - const filters: Record = {}; + const filters: ReportSearchFilters = {}; if (data.reporter_id !== undefined) { - filters['reporterId'] = data.reporter_id.toString(); + filters.reporterId = data.reporter_id.toString(); } if (data.status !== undefined) { - filters['status'] = data.status; + filters.status = data.status; } if (data.report_type !== undefined) { - filters['reportType'] = data.report_type; + filters.reportType = data.report_type; } if (data.category !== undefined) { - filters['category'] = data.category; + filters.category = data.category; + } + if (data.reason !== undefined) { + filters.reason = data.reason; } if (data.reported_user_id !== undefined) { - filters['reportedUserId'] = data.reported_user_id.toString(); + filters.reportedUserId = data.reported_user_id.toString(); + } + if (data.reported_webhook_id !== undefined) { + filters.reportedWebhookId = data.reported_webhook_id.toString(); } if (data.reported_guild_id !== undefined) { - filters['reportedGuildId'] = data.reported_guild_id.toString(); + filters.reportedGuildId = data.reported_guild_id.toString(); } if (data.reported_channel_id !== undefined) { - filters['reportedChannelId'] = data.reported_channel_id.toString(); + filters.reportedChannelId = data.reported_channel_id.toString(); } if (data.guild_context_id !== undefined) { - filters['guildContextId'] = data.guild_context_id.toString(); + filters.guildContextId = data.guild_context_id.toString(); } if (data.resolved_by_admin_id !== undefined) { - filters['resolvedByAdminId'] = data.resolved_by_admin_id.toString(); + filters.resolvedByAdminId = data.resolved_by_admin_id.toString(); } if (data.sort_by) { - filters['sortBy'] = data.sort_by; + filters.sortBy = data.sort_by; } if (data.sort_order) { - filters['sortOrder'] = data.sort_order; + filters.sortOrder = data.sort_order; } const {hits, total} = await reportSearchService.searchReports(data.query || '', filters, { limit: data.limit, offset: data.offset, }); const requestCache = createRequestCache(); - const reportNsfwLookupCache = createReportNsfwLookupCache(); - const orderedReports = await this.loadReportsInSearchOrder(hits.map((hit) => createReportID(BigInt(hit.id)))); + const reportLookupCache = createReportLookupCache(); + const reportIds = hits.map((hit) => createReportID(BigInt(hit.id))); + const loaded = await this.loadReportsInSearchOrder(reportIds); + const orderedReports = loaded.filter((report): report is IARSubmission => report !== null); + const orphanedReportIds = reportIds.filter((_, index) => loaded[index] === null).map((id) => id.toString()); + if (orphanedReportIds.length > 0) { + Logger.warn( + {orphanedReportIds}, + 'Report search index lists reports that are no longer stored, run refresh_search_index reports', + ); + } const reports = await Promise.all( - orderedReports.map((report) => - this.mapReportToResponse(report, false, requestCache, acls, reportNsfwLookupCache), - ), + orderedReports.map((report) => this.mapReportToResponse(report, false, requestCache, acls, reportLookupCache)), ); - const missingCount = hits.length - orderedReports.length; return { reports, - total: Math.max(0, total - missingCount), + total, offset: data.offset, limit: data.limit, }; } - private async loadReportsInSearchOrder(reportIds: Array): Promise> { - const reports = await Promise.all( + private loadReportsInSearchOrder(reportIds: Array): Promise> { + return Promise.all( reportIds.map(async (reportId) => { try { return await this.deps.reportService.getReport(reportId); - } catch (_error) { - return null; + } catch (error) { + if (error instanceof UnknownReportError) { + return null; + } + throw error; } }), ); - return reports.filter((report): report is IARSubmission => report !== null); } private async mapReportToResponse( @@ -304,7 +300,7 @@ export class AdminReportService { includeContext: boolean, requestCache: RequestCache, acls: ReadonlySet, - reportNsfwLookupCache: ReportNsfwLookupCache, + reportLookupCache: ReportLookupCache, ) { const reporterInfo = await this.buildUserTag(report.reporterId, requestCache); const reportedUserInfo = await this.buildUserTag(report.reportedUserId, requestCache); @@ -317,12 +313,12 @@ export class AdminReportService { : await this.getGuildNsfwLevelForContext( report.reportedChannelId, report.reportedGuildId ?? report.guildContextId ?? null, - reportNsfwLookupCache, + reportLookupCache, ); const reportedChannelNsfw = report.reportedChannelEffectiveNsfw !== null ? report.reportedChannelEffectiveNsfw - : await this.getChannelNsfwState(report.reportedChannelId, reportNsfwLookupCache); + : await this.getChannelNsfwState(report.reportedChannelId, reportLookupCache); const baseResponse = { report_id: report.reportId.toString(), reporter_id: report.reporterId?.toString() ?? null, @@ -330,13 +326,14 @@ export class AdminReportService { reporter_username: reporterInfo?.username ?? null, reporter_global_name: reporterInfo?.global_name ?? null, reporter_discriminator: reporterInfo?.discriminator ?? null, - reporter_email: canViewReporterPii ? report.reporterEmail : null, + reporter_email: canViewReporterPii ? await this.getReporterEmail(report, reportLookupCache) : null, reporter_full_legal_name: canViewReporterPii ? report.reporterFullLegalName : null, reporter_country_of_residence: canViewReporterPii ? report.reporterCountryOfResidence : null, reported_at: report.reportedAt.toISOString(), status: report.status, report_type: report.reportType, category: report.category, + ...mapReportReasonFields(report), additional_info: report.additionalInfo, reported_user_id: report.reportedUserId?.toString() ?? null, reported_user_tag: reportedUserInfo?.tag ?? null, @@ -344,6 +341,18 @@ export class AdminReportService { reported_user_global_name: reportedUserInfo?.global_name ?? null, reported_user_discriminator: reportedUserInfo?.discriminator ?? null, reported_user_avatar_hash: report.reportedUserAvatarHash, + reported_user_bot: reportedUserInfo?.bot ?? null, + reported_webhook_id: report.reportedWebhookId?.toString() ?? null, + reported_webhook_name: report.reportedWebhookName, + reported_webhook_avatar_hash: report.reportedWebhookAvatarHash, + reported_webhook_default_name: report.reportedWebhookDefaultName, + reported_webhook_default_avatar_hash: report.reportedWebhookDefaultAvatarHash, + reported_webhook_type: report.reportedWebhookType, + reported_webhook_application_id: report.reportedWebhookApplicationId?.toString() ?? null, + reported_webhook_channel_id: report.reportedWebhookChannelId?.toString() ?? null, + reported_webhook_guild_id: report.reportedWebhookGuildId?.toString() ?? null, + reported_webhook_created_at: report.reportedWebhookCreatedAt?.toISOString() ?? null, + ...mapWebhookCreatorFields(report), reported_guild_id: report.reportedGuildId?.toString() ?? null, reported_guild_name: report.reportedGuildName, reported_guild_icon_hash: report.reportedGuildIconHash, @@ -371,21 +380,22 @@ export class AdminReportService { } const attachmentStatusesById = await this.getAttachmentStatusesById(report); const priorReportsByAuthor = await this.getPriorReportsForContext(report); - const messageContext = - report.messageContext && report.messageContext.length > 0 - ? await Promise.all( - report.messageContext.map((message) => - this.mapReportMessageContextToResponse( - message, - report.reportedChannelId ?? null, - report.reportedGuildId ?? report.guildContextId ?? null, - reportNsfwLookupCache, - attachmentStatusesById, - priorReportsByAuthor, - ), - ), - ) - : []; + const authorBotFlags = await this.getContextAuthorBotFlags(report, requestCache); + const messageContext = ( + await Promise.all( + (report.messageContext ?? []).map((message) => + this.mapReportMessageContextToResponse( + message, + report.reportedChannelId ?? null, + report.reportedGuildId ?? report.guildContextId ?? null, + reportLookupCache, + attachmentStatusesById, + priorReportsByAuthor, + authorBotFlags, + ), + ), + ) + ).filter((message) => message !== null); const messageResponses = await this.getLiveMessageResponsesForContext(report); const mutualDmChannelId = await this.getMutualDmChannelId(report); return { @@ -393,9 +403,117 @@ export class AdminReportService { mutual_dm_channel_id: mutualDmChannelId, message_context: messageContext, message_responses: messageResponses, + reported_profile_snapshot: await this.mapProfileSnapshotToResponse(report), + legal_hold_until: report.legalHoldUntil?.toISOString() ?? null, + legal_hold_reason: report.legalHoldReason, }; } + private getReporterEmail(report: IARSubmission, reportLookupCache: ReportLookupCache): Promise { + const reporterId = report.reporterId; + if (!reporterId) { + return Promise.resolve(report.reporterEmail); + } + const key = reporterId.toString(); + const cached = reportLookupCache.reporterEmailByReporterId.get(key); + if (cached) { + return cached; + } + const email = this.deps.apiContext.services.users.findUnique(reporterId).then((user) => user?.email ?? null); + reportLookupCache.reporterEmailByReporterId.set(key, email); + return email; + } + + private async getContextAuthorBotFlags( + report: IARSubmission, + requestCache: RequestCache, + ): Promise> { + const authorIds = [ + ...new Set((report.messageContext ?? []).flatMap((message) => (message.authorId ? [message.authorId] : []))), + ]; + if (authorIds.length === 0) { + return new Map(); + } + try { + const partials = await this.deps.userCacheService.getUserPartialResponses(authorIds, requestCache); + return new Map([...partials].map(([userId, partial]) => [userId.toString(), mapUserPartialBotFlag(partial)])); + } catch (error) { + Logger.warn({reportId: report.reportId.toString(), error}, 'Failed to resolve author bot flags for report'); + return new Map(); + } + } + + private async mapProfileSnapshotToResponse(report: IARSubmission) { + const snapshot = report.reportedProfileSnapshot; + if (!snapshot) { + return null; + } + const asset = (value: ReportProfileAssetSnapshot | null) => this.mapProfileSnapshotAsset(report.reportId, value); + const {user, member, guild} = snapshot; + return { + captured_at: snapshot.captured_at, + user: user + ? { + id: user.id, + username: user.username, + discriminator: user.discriminator === null ? null : user.discriminator.toString().padStart(4, '0'), + global_name: user.global_name, + bio: user.bio, + pronouns: user.pronouns, + avatar: await asset(user.avatar), + banner: await asset(user.banner), + } + : null, + member: member + ? { + guild_id: member.guild_id, + nick: member.nick, + bio: member.bio, + pronouns: member.pronouns, + joined_at: member.joined_at, + avatar: await asset(member.avatar), + banner: await asset(member.banner), + } + : null, + guild: guild + ? { + id: guild.id, + name: guild.name, + vanity_url_code: guild.vanity_url_code, + icon: await asset(guild.icon), + banner: await asset(guild.banner), + splash: await asset(guild.splash), + } + : null, + }; + } + + private async mapProfileSnapshotAsset( + reportId: ReportID, + asset: ReportProfileAssetSnapshot | null, + ): Promise<{hash: string; url: string | null} | null> { + if (!asset) { + return null; + } + if (!asset.key) { + return {hash: asset.hash, url: null}; + } + try { + const url = await this.deps.storageService.getPresignedDownloadURL({ + bucket: Config.s3.buckets.reports, + key: asset.key, + expiresIn: seconds('5 minutes'), + }); + return {hash: asset.hash, url}; + } catch (error) { + Logger.error( + {error, reportId: reportId.toString(), key: asset.key}, + 'Failed to generate presigned URL for report profile asset', + ); + return {hash: asset.hash, url: null}; + } + } + private async getLiveMessageResponsesForContext(report: IARSubmission): Promise> { const contexts = report.messageContext ?? []; if (contexts.length === 0) return []; @@ -447,13 +565,18 @@ export class AdminReportService { message: IARMessageContext, fallbackChannelId: ChannelID | null, fallbackGuildId: GuildID | null, - reportNsfwLookupCache: ReportNsfwLookupCache, + reportLookupCache: ReportLookupCache, attachmentStatusesById: Map, priorReportsByAuthor: Map>, + authorBotFlags: Map, ) { const channelId = message.channelId ?? fallbackChannelId; - const channelNsfw = await this.getChannelNsfwState(channelId, reportNsfwLookupCache); - const guildNsfwLevel = await this.getGuildNsfwLevelForContext(channelId, fallbackGuildId, reportNsfwLookupCache); + if (!channelId) { + return null; + } + const authorId = (message.authorId ?? message.webhookId ?? 0n).toString(); + const channelNsfw = await this.getChannelNsfwState(channelId, reportLookupCache); + const guildNsfwLevel = await this.getGuildNsfwLevelForContext(channelId, fallbackGuildId, reportLookupCache); const attachments = message.attachments && message.attachments.length > 0 ? ( @@ -482,7 +605,7 @@ export class AdminReportService { : []; return { id: message.messageId.toString(), - channel_id: channelId ? channelId.toString() : '', + channel_id: channelId.toString(), channel_nsfw: channelNsfw, channel_content_warning_level: null, channel_content_warning_text: null, @@ -494,19 +617,24 @@ export class AdminReportService { content: message.content ?? '', timestamp: message.timestamp.toISOString(), attachments, - author_id: message.authorId.toString(), + author_id: authorId, author_username: message.authorUsername, author_global_name: null, author_discriminator: message.authorDiscriminator.toString().padStart(4, '0'), author_avatar: message.authorAvatarHash, - user_prior_ncmec_report_ids: priorReportsByAuthor.get(message.authorId.toString()) ?? [], + webhook_id: message.webhookId?.toString() ?? null, + author_bot: message.authorId ? (authorBotFlags.get(authorId) ?? null) : null, + missing_attachments: message.missingAttachments + .filter((attachment) => attachment.attachment_id != null && attachment.filename) + .map(mapMissingAttachmentToResponse), + user_prior_ncmec_report_ids: message.authorId ? (priorReportsByAuthor.get(authorId) ?? []) : [], }; } private async getPriorReportsForContext(report: IARSubmission): Promise>> { const authorIds = new Set(); for (const message of report.messageContext ?? []) { - authorIds.add(message.authorId.toString()); + if (message.authorId) authorIds.add(message.authorId.toString()); } if (report.reportedUserId) authorIds.add(report.reportedUserId.toString()); if (authorIds.size === 0) return new Map(); @@ -516,48 +644,48 @@ export class AdminReportService { private async getChannelNsfwState( channelId: ChannelID | null, - reportNsfwLookupCache: ReportNsfwLookupCache, + reportLookupCache: ReportLookupCache, ): Promise { if (!channelId) { return null; } const channelIdString = channelId.toString(); - if (reportNsfwLookupCache.channelNsfwByChannelId.has(channelIdString)) { - return reportNsfwLookupCache.channelNsfwByChannelId.get(channelIdString) ?? null; + if (reportLookupCache.channelNsfwByChannelId.has(channelIdString)) { + return reportLookupCache.channelNsfwByChannelId.get(channelIdString) ?? null; } const channel = await this.deps.channelRepository.findUnique(channelId); const scope = channel ? await resolveNsfwScopeChannel(channel, (id) => this.deps.channelRepository.findUnique(id)) : null; const channelNsfw = scope?.isNsfw ?? null; - reportNsfwLookupCache.channelNsfwByChannelId.set(channelIdString, channelNsfw); + reportLookupCache.channelNsfwByChannelId.set(channelIdString, channelNsfw); return channelNsfw; } private async getGuildNsfwLevel( guildId: GuildID | null, - reportNsfwLookupCache: ReportNsfwLookupCache, + reportLookupCache: ReportLookupCache, ): Promise { if (!guildId) { return null; } const guildIdString = guildId.toString(); - if (reportNsfwLookupCache.guildNsfwLevelByGuildId.has(guildIdString)) { - return reportNsfwLookupCache.guildNsfwLevelByGuildId.get(guildIdString) ?? null; + if (reportLookupCache.guildNsfwLevelByGuildId.has(guildIdString)) { + return reportLookupCache.guildNsfwLevelByGuildId.get(guildIdString) ?? null; } const guild = await this.deps.guildRepository.findUnique(guildId); const guildNsfwLevel = guild?.nsfwLevel ?? null; - reportNsfwLookupCache.guildNsfwLevelByGuildId.set(guildIdString, guildNsfwLevel); + reportLookupCache.guildNsfwLevelByGuildId.set(guildIdString, guildNsfwLevel); return guildNsfwLevel; } private async getGuildNsfwLevelForContext( channelId: ChannelID | null, fallbackGuildId: GuildID | null, - reportNsfwLookupCache: ReportNsfwLookupCache, + reportLookupCache: ReportLookupCache, ): Promise { if (fallbackGuildId) { - return this.getGuildNsfwLevel(fallbackGuildId, reportNsfwLookupCache); + return this.getGuildNsfwLevel(fallbackGuildId, reportLookupCache); } if (!channelId) { return null; @@ -566,7 +694,7 @@ export class AdminReportService { if (!channel?.guildId) { return null; } - return this.getGuildNsfwLevel(channel.guildId, reportNsfwLookupCache); + return this.getGuildNsfwLevel(channel.guildId, reportLookupCache); } private async mapReportAttachmentToResponse( @@ -637,6 +765,7 @@ export class AdminReportService { const stored = isHiddenPartial(cached) ? await this.deps.apiContext.services.users.findUnique(userId) : null; const user = stored ? { + ...cached, username: stored.username, global_name: stored.globalName, discriminator: stored.discriminator.toString(), @@ -653,6 +782,7 @@ export class AdminReportService { username: user.username, global_name: user.global_name ?? null, discriminator, + bot: mapUserPartialBotFlag(user), }; } catch (error) { Logger.warn({userId: userId.toString(), error}, 'Failed to resolve user tag for report'); @@ -661,9 +791,32 @@ export class AdminReportService { } } +function mapWebhookCreatorFields(report: IARSubmission) { + const creatorDiscriminator = report.reportedWebhookCreatorDiscriminator; + const discriminator = creatorDiscriminator === null ? null : creatorDiscriminator.toString().padStart(4, '0'); + const username = report.reportedWebhookCreatorUsername; + const creatorId = report.reportedWebhookCreatorId; + return { + reported_webhook_creator_id: creatorId?.toString() ?? null, + reported_webhook_creator_tag: + username !== null && creatorDiscriminator !== null + ? formatUserTag({ + username, + discriminator: creatorDiscriminator, + isBot: creatorId !== null && creatorId.toString() === report.reportedWebhookApplicationId?.toString(), + }) + : null, + reported_webhook_creator_username: username, + reported_webhook_creator_global_name: report.reportedWebhookCreatorGlobalName, + reported_webhook_creator_discriminator: discriminator, + reported_webhook_creator_avatar_hash: report.reportedWebhookCreatorAvatarHash, + }; +} + interface UserTagInfo { tag: string; username: string; global_name: string | null; discriminator: string; + bot: boolean | null; } diff --git a/fluxer_api/src/api/admin/services/AdminUserDeletionService.ts b/fluxer_api/src/api/admin/services/AdminUserDeletionService.ts index c80a11027..e9c515525 100644 --- a/fluxer_api/src/api/admin/services/AdminUserDeletionService.ts +++ b/fluxer_api/src/api/admin/services/AdminUserDeletionService.ts @@ -6,16 +6,16 @@ import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService' import type {AdminBanManagementService} from '@app/api/admin/services/AdminBanManagementService'; import {trySendAdminNotification} from '@app/api/admin/services/AdminNotification'; import type {AdminUserUpdatePropagator} from '@app/api/admin/services/AdminUserUpdatePropagator'; +import {type ReporterResolutionNotifier, wasReporterNotified} from '@app/api/admin/services/ReporterResolutionNotifier'; import * as AuthSession from '@app/api/auth/AuthSession'; import {createReportID, createUserID, type UserID} from '@app/api/BrandedTypes'; import type {BillingRepository} from '@app/api/billing/repositories/BillingRepository'; -import type {NcmecRepository} from '@app/api/csam/NcmecRepository'; import {emitAdminAction} from '@app/api/infrastructure/activity/AccountChangeEvents'; import type {KVAccountDeletionQueueService} from '@app/api/infrastructure/KVAccountDeletionQueueService'; import {Logger} from '@app/api/Logger'; import type {User} from '@app/api/models/User'; import type {OAuth2TokenRepository} from '@app/api/oauth/repositories/OAuth2TokenRepository'; -import {ReportStatus} from '@app/api/report/IReportRepository'; +import {type IARSubmission, ReportStatus} from '@app/api/report/IReportRepository'; import type {ReportService} from '@app/api/report/ReportService'; import {getReportSearchService} from '@app/api/SearchFactory'; import type {StoreEntitlementService} from '@app/api/store_billing/StoreEntitlementService'; @@ -46,7 +46,17 @@ interface AdminUserDeletionServiceDeps { billingRepository: BillingRepository; oauth2Tokens: Pick; storeEntitlementService: StoreEntitlementService; - ncmecRepository: Pick; + reporterResolutionNotifier: ReporterResolutionNotifier; +} + +type AutoResolveOutcome = 'completed' | 'search_unavailable' | 'enumeration_failed'; + +interface AutoResolveSummary { + outcome: AutoResolveOutcome; + foundCount: number; + resolvedCount: number; + failedCount: number; + notifiedCount: number; } const minUserRequestedDeletionDays = 14; @@ -409,22 +419,27 @@ export class AdminUserDeletionService { }): Promise { const {user, adminUserId, reasonCode} = params; const outcome = isEnforcementDeletionReason(reasonCode) ? 'actioned' : 'auto_resolved'; - const {reportService, auditService, ncmecRepository} = this.deps; - if (await ncmecRepository.getUserWorkflow(user.id)) { - return; - } + const {reportService, reporterResolutionNotifier} = this.deps; + const auditLogReason = 'auto-resolved on scheduled deletion of reported user'; + const summary: AutoResolveSummary = { + outcome: 'completed', + foundCount: 0, + resolvedCount: 0, + failedCount: 0, + notifiedCount: 0, + }; const reportSearchService = getReportSearchService(); if (!reportSearchService) { Logger.warn( {userId: user.id.toString()}, 'Report search is unavailable; pending reports were not auto-resolved on scheduled deletion', ); + summary.outcome = 'search_unavailable'; + await this.recordAutoResolveSummary({user, adminUserId, auditLogReason, summary}); return; } - const auditLogReason = 'auto-resolved on scheduled deletion of reported user'; const pageSize = 100; const pendingReportIds = new Set(); - let resolvedCount = 0; let offset = 0; try { while (true) { @@ -445,43 +460,66 @@ export class AdminUserDeletionService { if (hits.length < pageSize) break; } } catch (error) { + summary.outcome = 'enumeration_failed'; Logger.warn( {error, userId: user.id.toString()}, 'Failed to enumerate pending reports for auto-resolution on scheduled deletion', ); } + summary.foundCount = pendingReportIds.size; for (const hitId of pendingReportIds) { const reportId = createReportID(BigInt(hitId)); + let resolvedReport: IARSubmission; try { - await reportService.resolveReport(reportId, adminUserId, null, auditLogReason, { + resolvedReport = await reportService.resolveReport(reportId, adminUserId, null, auditLogReason, { outcome, resolvedBy: 'system', }); - resolvedCount++; } catch (error) { if (error instanceof ReportAlreadyResolvedError) continue; + summary.failedCount++; Logger.warn( {error, userId: user.id.toString(), reportId: reportId.toString()}, 'Failed to auto-resolve report on scheduled deletion', ); + continue; + } + summary.resolvedCount++; + const notice = await reporterResolutionNotifier.notifyReporterOfResolution(resolvedReport, null); + if (wasReporterNotified(notice)) { + summary.notifiedCount++; } } - if (resolvedCount > 0) { - await auditService - .createAuditLog({ - adminUserId, - targetType: 'user', - targetId: BigInt(user.id), - action: 'auto_resolve_reports_on_deletion', - auditLogReason, - metadata: new Map([['resolved_count', resolvedCount.toString()]]), - }) - .catch((error) => { - Logger.warn( - {error, userId: user.id.toString(), resolvedCount}, - 'Failed to write audit log for auto-resolved reports on scheduled deletion', - ); - }); - } + await this.recordAutoResolveSummary({user, adminUserId, auditLogReason, summary}); + } + + private async recordAutoResolveSummary(params: { + user: User; + adminUserId: UserID; + auditLogReason: string; + summary: AutoResolveSummary; + }): Promise { + const {user, adminUserId, auditLogReason, summary} = params; + await this.deps.auditService + .createAuditLog({ + adminUserId, + targetType: 'user', + targetId: BigInt(user.id), + action: 'auto_resolve_reports_on_deletion', + auditLogReason, + metadata: new Map([ + ['outcome', summary.outcome], + ['found_count', summary.foundCount.toString()], + ['resolved_count', summary.resolvedCount.toString()], + ['failed_count', summary.failedCount.toString()], + ['notified_count', summary.notifiedCount.toString()], + ]), + }) + .catch((error) => { + Logger.warn( + {error, userId: user.id.toString(), ...summary}, + 'Failed to write audit log for auto-resolved reports on scheduled deletion', + ); + }); } } diff --git a/fluxer_api/src/api/admin/services/AdminUserService.ts b/fluxer_api/src/api/admin/services/AdminUserService.ts index e40e27b5b..280136a91 100644 --- a/fluxer_api/src/api/admin/services/AdminUserService.ts +++ b/fluxer_api/src/api/admin/services/AdminUserService.ts @@ -10,9 +10,9 @@ import {AdminUserLookupService} from '@app/api/admin/services/AdminUserLookupSer import {AdminUserProfileService} from '@app/api/admin/services/AdminUserProfileService'; import {AdminUserSecurityService} from '@app/api/admin/services/AdminUserSecurityService'; import {AdminUserUpdatePropagator} from '@app/api/admin/services/AdminUserUpdatePropagator'; +import {ReporterResolutionNotifier} from '@app/api/admin/services/ReporterResolutionNotifier'; import {createChannelID, createUserID, type UserID} from '@app/api/BrandedTypes'; import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; -import {NcmecRepository} from '@app/api/csam/NcmecRepository'; import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate'; import type {IDiscriminatorService} from '@app/api/infrastructure/DiscriminatorService'; import type {EntityAssetService} from '@app/api/infrastructure/EntityAssetService'; @@ -50,6 +50,7 @@ interface AdminUserServiceDeps { stripe: Stripe | null; reportService: ReportService; storeEntitlementService: StoreEntitlementService; + reporterResolutionNotifier?: ReporterResolutionNotifier; } export class AdminUserService { @@ -113,7 +114,9 @@ export class AdminUserService { billingRepository: getBillingRepository(), oauth2Tokens: new OAuth2TokenRepository(), storeEntitlementService: deps.storeEntitlementService, - ncmecRepository: new NcmecRepository(), + reporterResolutionNotifier: + deps.reporterResolutionNotifier ?? + new ReporterResolutionNotifier({apiContext: deps.apiContext, systemDm: null}), }); this.contactChangeLogService = contactChangeLog; } diff --git a/fluxer_api/src/api/admin/services/ReporterResolutionNotifier.ts b/fluxer_api/src/api/admin/services/ReporterResolutionNotifier.ts new file mode 100644 index 000000000..898385434 --- /dev/null +++ b/fluxer_api/src/api/admin/services/ReporterResolutionNotifier.ts @@ -0,0 +1,161 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ApiContext} from '@app/api/ApiContext'; +import {trySendAdminNotification} from '@app/api/admin/services/AdminNotification'; +import type {UserID} from '@app/api/BrandedTypes'; +import type {ChannelService} from '@app/api/channel/services/ChannelService'; +import {SYSTEM_USER_ID} from '@app/api/constants/Core'; +import {SYSTEM_THREAD_VIEWER} from '@app/api/experiment/ChannelThreadsGate'; +import type {UserCacheService} from '@app/api/infrastructure/UserCacheService'; +import {Logger} from '@app/api/Logger'; +import {createRequestCache} from '@app/api/middleware/RequestCacheMiddleware'; +import type {User} from '@app/api/models/User'; +import type {IARSubmission} from '@app/api/report/IReportRepository'; +import type {UserChannelService} from '@app/api/user/services/UserChannelService'; +import {UserFlags} from '@fluxer/constants/src/UserConstants'; +import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n'; + +interface ReporterSystemDmDeps { + channelService: ChannelService; + userChannelService: UserChannelService; + userCacheService: UserCacheService; +} + +interface ReporterResolutionNotifierDeps { + apiContext: ApiContext; + systemDm: ReporterSystemDmDeps | null; +} + +type ReporterNoticeSkipReason = + | 'reporter_account_deleted' + | 'reporter_report_banned' + | 'reporter_lookup_failed' + | 'no_reporter_email'; + +interface ReporterNoticeResult { + dmSent: boolean; + emailSent: boolean; + dsaEmailSent: boolean; + skipped: ReporterNoticeSkipReason | null; +} + +function skippedNotice(reason: ReporterNoticeSkipReason): ReporterNoticeResult { + return {dmSent: false, emailSent: false, dsaEmailSent: false, skipped: reason}; +} + +export function wasReporterNotified(result: ReporterNoticeResult): boolean { + return result.dmSent || result.emailSent || result.dsaEmailSent; +} + +export function describeReporterNotice(result: ReporterNoticeResult): Array<[string, string]> { + return [ + ['reporter_dm_sent', result.dmSent ? 'true' : 'false'], + ['reporter_email_sent', result.emailSent ? 'true' : 'false'], + ['reporter_dsa_email_sent', result.dsaEmailSent ? 'true' : 'false'], + ...(result.skipped ? [['reporter_notice_skipped', result.skipped] as [string, string]] : []), + ]; +} + +export class ReporterResolutionNotifier { + constructor(private readonly deps: ReporterResolutionNotifierDeps) {} + + async notifyReporterOfResolution(report: IARSubmission, publicComment: string | null): Promise { + const comment = publicComment ?? ''; + if (report.reporterId) { + return this.notifyAccountReporter(report, report.reporterId, comment); + } + return this.notifyDsaReporter(report, comment); + } + + private async notifyAccountReporter( + report: IARSubmission, + reporterId: UserID, + comment: string, + ): Promise { + const {users: userRepository, email: emailService} = this.deps.apiContext.services; + const reportId = report.reportId.toString(); + let reporter: User | null; + try { + reporter = await userRepository.findUnique(reporterId); + } catch (error) { + Logger.warn( + {error, reportId, reporterId: reporterId.toString()}, + 'Failed to load the reporter of a resolved report', + ); + return skippedNotice('reporter_lookup_failed'); + } + if (!reporter || (reporter.flags & UserFlags.DELETED) !== 0n) { + return skippedNotice('reporter_account_deleted'); + } + if ((reporter.flags & UserFlags.REPORT_BANNED) !== 0n) { + return skippedNotice('reporter_report_banned'); + } + const dmSent = await this.sendSystemDm(reporter, reportId, comment); + const email = reporter.email; + const emailSent = email + ? await trySendAdminNotification( + () => emailService.sendReportResolvedEmail(email, reporter.username, reportId, comment, reporter.locale), + {action: 'resolve_report', targetId: reportId}, + ) + : false; + return {dmSent, emailSent, dsaEmailSent: false, skipped: null}; + } + + private async notifyDsaReporter(report: IARSubmission, comment: string): Promise { + const email = report.reporterEmail; + if (!email) { + return skippedNotice('no_reporter_email'); + } + const {email: emailService} = this.deps.apiContext.services; + const reportId = report.reportId.toString(); + const dsaEmailSent = await trySendAdminNotification( + () => emailService.sendDsaReportResolvedEmail(email, reportId, comment, report.flowLocale), + {action: 'resolve_report', targetId: reportId}, + ); + return {dmSent: false, emailSent: false, dsaEmailSent, skipped: null}; + } + + private async sendSystemDm(reporter: User, reportId: string, comment: string): Promise { + const systemDm = this.deps.systemDm; + if (!systemDm) { + return false; + } + const template = getEmailTemplate('report_resolved', reporter.locale, { + username: reporter.username, + reportId, + publicComment: comment, + hasComment: comment ? 'yes' : 'no', + }); + if (!template.ok) { + Logger.warn( + {reportId, reporterId: reporter.id.toString(), locale: reporter.locale, error: template.error}, + 'Skipping report review system DM because the email template could not be resolved', + ); + return false; + } + const {users: userRepository} = this.deps.apiContext.services; + const requestCache = createRequestCache(); + try { + const systemUser = await userRepository.findUniqueAssert(SYSTEM_USER_ID); + const dmChannel = await systemDm.userChannelService.ensureDmOpenForBothUsers({ + userId: systemUser.id, + recipientId: reporter.id, + userCacheService: systemDm.userCacheService, + requestCache, + }); + await systemDm.channelService.messages.send.sendMessage({ + user: systemUser, + viewer: SYSTEM_THREAD_VIEWER, + channelId: dmChannel.id, + data: {content: template.value.body}, + requestCache, + }); + return true; + } catch (error) { + Logger.warn({reportId, reporterId: reporter.id.toString(), error}, 'Failed to send report review system DM'); + return false; + } finally { + requestCache.clear(); + } + } +} diff --git a/fluxer_api/src/api/admin/tests/AdminReportLegalHold.test.ts b/fluxer_api/src/api/admin/tests/AdminReportLegalHold.test.ts new file mode 100644 index 000000000..5bc063b89 --- /dev/null +++ b/fluxer_api/src/api/admin/tests/AdminReportLegalHold.test.ts @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createTestAccount, setUserACLs, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createReportID, type ReportID} from '@app/api/BrandedTypes'; +import {IAR_SUBMISSION_COLUMNS, type IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {MockStorageService} from '@app/api/test/mocks/MockStorageService'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder} from '@app/api/test/TestRequestBuilder'; +import {processReportRetention} from '@app/api/worker/tasks/ExpireReportSnapshots'; +import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import type {ReportLegalHoldResponse} from '@fluxer/schema/src/domains/admin/AdminReportLegalHoldSchemas'; +import {ms} from 'itty-time'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; + +interface ValidationErrorResponse { + code: string; + errors?: Array<{path: string; message: string}>; +} + +const HOLD_UNTIL = '2099-01-01T00:00:00.000Z'; +let sequence = 1_497_000_000_000_000_000n; + +describe('report legal hold', () => { + let harness: ApiTestHarness; + let admin: TestAccount; + let repository: ReportRepository; + + beforeEach(async () => { + harness = await createApiTestHarness(); + admin = await setUserACLs(harness, await createTestAccount(harness), [ + 'admin:authenticate', + AdminACLs.REPORT_VIEW, + AdminACLs.REPORT_RESOLVE, + ]); + repository = new ReportRepository(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + async function seedReport(ageDays: number): Promise { + sequence += 1n; + await repository.createReport({ + ...Object.fromEntries(IAR_SUBMISSION_COLUMNS.map((column) => [column, null])), + report_id: sequence, + reported_at: new Date(Date.now() - ageDays * ms('1 day')), + status: 1, + report_type: 1, + category: 'harassment', + } as IARSubmissionRow); + return createReportID(sequence); + } + + function holdRequest(account: TestAccount, reportId: ReportID | string, body: unknown) { + return createBuilder(harness, account.token) + .post(`/admin/reports/${reportId}/legal-hold`) + .body(body); + } + + function reportDetail(reportId: ReportID) { + return createBuilder<{legal_hold_until?: string | null; legal_hold_reason?: string | null}>(harness, admin.token) + .get(`/admin/reports/${reportId}`) + .expect(HTTP_STATUS.OK) + .execute(); + } + + async function runRetention() { + return processReportRetention( + {reportRepository: repository, storageService: new MockStorageService(), reportSearchService: null}, + {now: new Date(), dryRun: false}, + ); + } + + test('a hold keeps an expired report until it is cleared', async () => { + const reportId = await seedReport(400); + + const placed = await holdRequest(admin, reportId, { + legal_hold_until: HOLD_UNTIL, + legal_hold_reason: ' Preservation request 42 ', + }) + .expect(HTTP_STATUS.OK) + .execute(); + + expect(placed).toEqual({ + report_id: reportId.toString(), + legal_hold_until: HOLD_UNTIL, + legal_hold_reason: 'Preservation request 42', + }); + const stored = await repository.getReport(reportId); + expect(stored?.legalHoldUntil?.toISOString()).toBe(HOLD_UNTIL); + expect(stored?.legalHoldReason).toBe('Preservation request 42'); + expect(await reportDetail(reportId)).toMatchObject({ + legal_hold_until: HOLD_UNTIL, + legal_hold_reason: 'Preservation request 42', + }); + expect(await runRetention()).toMatchObject({held: 1, deleted: 0}); + expect(await repository.getReport(reportId)).not.toBeNull(); + + const cleared = await holdRequest(admin, reportId, {legal_hold_until: null, legal_hold_reason: 'ignored'}) + .expect(HTTP_STATUS.OK) + .execute(); + + expect(cleared).toEqual({report_id: reportId.toString(), legal_hold_until: null, legal_hold_reason: null}); + expect(await reportDetail(reportId)).toMatchObject({legal_hold_until: null, legal_hold_reason: null}); + expect(await runRetention()).toMatchObject({held: 0, deleted: 1}); + expect(await repository.getReport(reportId)).toBeNull(); + }); + + test('a hold that ends in the past is refused', async () => { + const reportId = await seedReport(10); + + const response = await holdRequest(admin, reportId, { + legal_hold_until: new Date(Date.now() - ms('1 minute')).toISOString(), + legal_hold_reason: 'Preservation request', + }) + .expect(HTTP_STATUS.BAD_REQUEST, 'INVALID_FORM_BODY') + .execute(); + + expect(response.errors?.[0]?.path).toBe('legal_hold_until'); + expect((await repository.getReport(reportId))?.legalHoldUntil).toBeNull(); + }); + + test.each([[{legal_hold_until: HOLD_UNTIL}], [{legal_hold_until: HOLD_UNTIL, legal_hold_reason: null}]])( + 'a hold without a reason is refused (%j)', + async (body) => { + const reportId = await seedReport(10); + + const response = await holdRequest(admin, reportId, body) + .expect(HTTP_STATUS.BAD_REQUEST, 'INVALID_FORM_BODY') + .execute(); + + expect(response.errors?.[0]?.path).toBe('legal_hold_reason'); + expect((await repository.getReport(reportId))?.legalHoldUntil).toBeNull(); + }, + ); + + test('an end time that is not an ISO 8601 timestamp is refused', async () => { + const reportId = await seedReport(10); + + const response = await holdRequest(admin, reportId, {legal_hold_until: 'next year', legal_hold_reason: 'Request'}) + .expect(HTTP_STATUS.BAD_REQUEST, 'INVALID_FORM_BODY') + .execute(); + + expect(response.errors?.[0]?.path).toBe('legal_hold_until'); + }); + + test('an unknown report gives UNKNOWN_REPORT and stores nothing', async () => { + await holdRequest(admin, '1499999999999999999', {legal_hold_until: HOLD_UNTIL, legal_hold_reason: 'Request'}) + .expect(HTTP_STATUS.NOT_FOUND, 'UNKNOWN_REPORT') + .execute(); + + expect(await repository.getReport(createReportID(1499999999999999999n))).toBeNull(); + }); + + test('placing a hold needs REPORT_RESOLVE', async () => { + const reportId = await seedReport(10); + const viewer = await setUserACLs(harness, await createTestAccount(harness), [ + 'admin:authenticate', + AdminACLs.REPORT_VIEW, + ]); + + await holdRequest(viewer, reportId, {legal_hold_until: HOLD_UNTIL, legal_hold_reason: 'Request'}) + .expect(HTTP_STATUS.FORBIDDEN, 'MISSING_ACL') + .execute(); + + expect((await repository.getReport(reportId))?.legalHoldUntil).toBeNull(); + }); +}); diff --git a/fluxer_api/src/api/admin/tests/AdminReportServiceTotals.test.ts b/fluxer_api/src/api/admin/tests/AdminReportServiceTotals.test.ts new file mode 100644 index 000000000..07d8b096f --- /dev/null +++ b/fluxer_api/src/api/admin/tests/AdminReportServiceTotals.test.ts @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {AdminReportService} from '@app/api/admin/services/AdminReportService'; +import {createReportID, type ReportID} from '@app/api/BrandedTypes'; +import {Logger} from '@app/api/Logger'; +import {type IARSubmission, ReportStatus, ReportType} from '@app/api/report/IReportRepository'; +import type {ReportService} from '@app/api/report/ReportService'; +import {setInjectedSearchProvider} from '@app/api/SearchFactory'; +import type {IReportSearchService} from '@app/api/search/IReportSearchService'; +import type {ISearchProvider} from '@app/api/search/ISearchProvider'; +import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError'; +import {UnknownReportError} from '@fluxer/errors/src/domains/moderation/UnknownReportError'; +import type {ReportSearchFilters} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes'; +import {afterEach, describe, expect, test, vi} from 'vitest'; + +const REPORT_A = createReportID(101n); +const REPORT_B = createReportID(102n); +const ORPHAN = createReportID(999n); +const NO_ACLS: ReadonlySet = new Set(); + +interface SearchCall { + query: string; + filters: ReportSearchFilters; + options: {limit?: number; offset?: number} | undefined; +} + +function storedReport(reportId: ReportID): IARSubmission { + return { + reportId, + reporterId: null, + reporterEmail: null, + reportedUserId: null, + reportedAt: new Date('2026-10-01T12:00:00.000Z'), + status: ReportStatus.PENDING, + reportType: ReportType.GUILD, + category: 'other', + reportedGuildNsfw: false, + reportedChannelEffectiveNsfw: false, + reportedWebhookCreatorDiscriminator: null, + reportedWebhookCreatorUsername: null, + } as IARSubmission; +} + +function createService(options: { + hitIds: Array; + total: number; + getReport?: (reportId: ReportID) => Promise; +}): {service: AdminReportService; calls: Array; lookups: Array} { + const calls: Array = []; + const lookups: Array = []; + const stored = new Map([REPORT_A, REPORT_B].map((reportId) => [reportId, storedReport(reportId)])); + const getReport = + options.getReport ?? + (async (reportId: ReportID) => { + const report = stored.get(reportId); + if (!report) { + throw new UnknownReportError(); + } + return report; + }); + const reportSearchService = { + searchReports: async (query: string, filters: ReportSearchFilters, searchOptions?: SearchCall['options']) => { + calls.push({query, filters, options: searchOptions}); + return {hits: options.hitIds.map((reportId) => ({id: reportId.toString()})), total: options.total}; + }, + } as unknown as IReportSearchService; + setInjectedSearchProvider({getReportSearchService: () => reportSearchService} as unknown as ISearchProvider); + const reportService = { + getReport: async (reportId: ReportID) => { + lookups.push(reportId); + return getReport(reportId); + }, + } as unknown as ReportService; + const service = new AdminReportService({reportService} as ConstructorParameters[0]); + return {service, calls, lookups}; +} + +describe('Admin report search totals', () => { + afterEach(() => { + setInjectedSearchProvider(undefined); + vi.restoreAllMocks(); + }); + + test('a hit with no stored report is skipped and the index total is returned as is', async () => { + const warn = vi.spyOn(Logger.child({}), 'warn'); + const {service, calls, lookups} = createService({hitIds: [REPORT_A, ORPHAN, REPORT_B], total: 10}); + const result = await service.searchReports( + {query: 'spam', limit: 3, offset: 6, sort_by: 'reportedAt', sort_order: 'desc'}, + NO_ACLS, + ); + expect(result.reports.map((report) => report.report_id)).toEqual(['101', '102']); + expect(result.total).toBe(10); + expect(result.offset).toBe(6); + expect(result.limit).toBe(3); + expect(lookups).toEqual([REPORT_A, ORPHAN, REPORT_B]); + expect(calls).toEqual([ + {query: 'spam', filters: {sortBy: 'reportedAt', sortOrder: 'desc'}, options: {limit: 3, offset: 6}}, + ]); + expect(warn).toHaveBeenCalledTimes(1); + expect(warn.mock.calls[0]).toEqual([ + {orphanedReportIds: ['999']}, + 'Report search index lists reports that are no longer stored, run refresh_search_index reports', + ]); + }); + + test('a page with every report stored logs nothing', async () => { + const warn = vi.spyOn(Logger.child({}), 'warn'); + const {service} = createService({hitIds: [REPORT_B, REPORT_A], total: 2}); + const result = await service.searchReports( + {limit: 50, offset: 0, sort_by: 'reportedAt', sort_order: 'desc'}, + NO_ACLS, + ); + expect(result.reports.map((report) => report.report_id)).toEqual(['102', '101']); + expect(result.total).toBe(2); + expect(warn).not.toHaveBeenCalled(); + }); + + test('a page of only missing reports is empty and keeps the index total', async () => { + const {service} = createService({hitIds: [ORPHAN], total: 7}); + expect( + await service.searchReports({limit: 1, offset: 0, sort_by: 'reportedAt', sort_order: 'desc'}, NO_ACLS), + ).toEqual({reports: [], total: 7, offset: 0, limit: 1}); + }); + + test('a failed report lookup rejects the search', async () => { + const failure = new Error('report storage is unavailable'); + const {service} = createService({ + hitIds: [REPORT_A, ORPHAN, REPORT_B], + total: 10, + getReport: async (reportId) => { + if (reportId === ORPHAN) { + throw failure; + } + return storedReport(reportId); + }, + }); + await expect( + service.searchReports({limit: 3, offset: 0, sort_by: 'reportedAt', sort_order: 'desc'}, NO_ACLS), + ).rejects.toBe(failure); + }); + + test('every supplied filter reaches the index under its typed name', async () => { + const {service, calls} = createService({hitIds: [], total: 0}); + await service.searchReports( + { + limit: 50, + offset: 0, + reporter_id: 11n, + status: 1, + report_type: 0, + category: 'harassment', + reason: 'csam', + reported_user_id: 12n, + reported_webhook_id: 13n, + reported_guild_id: 14n, + reported_channel_id: 15n, + guild_context_id: 16n, + resolved_by_admin_id: 17n, + sort_by: 'resolvedAt', + sort_order: 'asc', + }, + NO_ACLS, + ); + const expected: Required> = { + reporterId: '11', + status: 1, + reportType: 0, + category: 'harassment', + reason: 'csam', + reportedUserId: '12', + reportedWebhookId: '13', + reportedGuildId: '14', + reportedChannelId: '15', + guildContextId: '16', + resolvedByAdminId: '17', + sortBy: 'resolvedAt', + sortOrder: 'asc', + }; + expect(calls).toEqual([{query: '', filters: expected, options: {limit: 50, offset: 0}}]); + }); + + test('the search is unavailable without a search service', async () => { + const {service} = createService({hitIds: [], total: 0}); + setInjectedSearchProvider(undefined); + await expect( + service.searchReports({limit: 50, offset: 0, sort_by: 'reportedAt', sort_order: 'desc'}, NO_ACLS), + ).rejects.toBeInstanceOf(FeatureTemporarilyDisabledError); + }); +}); diff --git a/fluxer_api/src/api/admin/tests/AdminSearchEndpoints.test.ts b/fluxer_api/src/api/admin/tests/AdminSearchEndpoints.test.ts index 285ec7dac..30941c3a5 100644 --- a/fluxer_api/src/api/admin/tests/AdminSearchEndpoints.test.ts +++ b/fluxer_api/src/api/admin/tests/AdminSearchEndpoints.test.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {createTestAccount, setUserACLs} from '@app/api/auth/tests/AuthTestUtils'; +import {createTestAccount, setUserACLs, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; import {createDmChannel, createFriendship, createGuild} from '@app/api/channel/tests/ChannelTestUtils'; import {getUserActivityBuffer} from '@app/api/middleware/ServiceSingletons'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; @@ -17,6 +17,38 @@ async function setLastActiveIp(harness: ApiTestHarness, token: string, ip: strin await getUserActivityBuffer().drainAndFlush(); } +interface ReportListResponse { + reports: Array<{report_id: string; status: number}>; + total: number; + offset: number; + limit: number; +} + +async function fileUserReport(harness: ApiTestHarness, reporter: TestAccount): Promise { + const reported = await createTestAccount(harness); + const report = await createBuilder<{report_id: string}>(harness, reporter.token) + .post('/reports/user') + .body({user_id: reported.userId, category: 'harassment'}) + .expect(HTTP_STATUS.OK) + .execute(); + return report.report_id; +} + +async function filePendingAndResolvedReports( + harness: ApiTestHarness, + admin: TestAccount, +): Promise<{pendingReportId: string; resolvedReportId: string}> { + const reporter = await createTestAccount(harness); + const pendingReportId = await fileUserReport(harness, reporter); + const resolvedReportId = await fileUserReport(harness, reporter); + await createBuilder(harness, admin.token) + .patch(`/admin/reports/${resolvedReportId}`) + .body({status: 'resolved'}) + .expect(HTTP_STATUS.OK) + .execute(); + return {pendingReportId, resolvedReportId}; +} + describe('Admin Search Endpoints', () => { let harness: ApiTestHarness; beforeEach(async () => { @@ -256,6 +288,51 @@ describe('Admin Search Endpoints', () => { .execute(); expect(Array.isArray(result.reports)).toBe(true); }); + test('a request with no query returns reports of every status with the page totals', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'report:view', 'report:resolve']); + const {pendingReportId, resolvedReportId} = await filePendingAndResolvedReports(harness, admin); + const result = await createBuilder(harness, admin.token) + .get('/admin/reports') + .expect(HTTP_STATUS.OK) + .execute(); + expect(new Map(result.reports.map((report) => [report.report_id, report.status]))).toEqual( + new Map([ + [pendingReportId, 0], + [resolvedReportId, 1], + ]), + ); + expect(result.reports).toHaveLength(2); + expect(result.total).toBe(2); + expect(result.offset).toBe(0); + expect(result.limit).toBe(50); + }); + test('a status filter alone returns only that status with the page totals', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'report:view', 'report:resolve']); + const {pendingReportId, resolvedReportId} = await filePendingAndResolvedReports(harness, admin); + const pending = await createBuilder(harness, admin.token) + .get('/admin/reports?status=pending') + .expect(HTTP_STATUS.OK) + .execute(); + expect(pending.reports.map((report) => [report.report_id, report.status])).toEqual([[pendingReportId, 0]]); + expect(pending.total).toBe(1); + expect(pending.offset).toBe(0); + expect(pending.limit).toBe(50); + const resolved = await createBuilder(harness, admin.token) + .get('/admin/reports?status=resolved&limit=10&offset=0') + .expect(HTTP_STATUS.OK) + .execute(); + expect(resolved.reports.map((report) => [report.report_id, report.status])).toEqual([[resolvedReportId, 1]]); + expect(resolved.total).toBe(1); + expect(resolved.offset).toBe(0); + expect(resolved.limit).toBe(10); + const pastTheEnd = await createBuilder(harness, admin.token) + .get('/admin/reports?status=pending&limit=10&offset=5') + .expect(HTTP_STATUS.OK) + .execute(); + expect(pastTheEnd).toEqual({reports: [], total: 1, offset: 5, limit: 10}); + }); }); describe('/admin/audit-logs (search)', () => { test('requires audit_log:view ACL', async () => { diff --git a/fluxer_api/src/api/admin/tests/AdminStaffNotifications.test.ts b/fluxer_api/src/api/admin/tests/AdminStaffNotifications.test.ts index dbd45e173..47567dd0c 100644 --- a/fluxer_api/src/api/admin/tests/AdminStaffNotifications.test.ts +++ b/fluxer_api/src/api/admin/tests/AdminStaffNotifications.test.ts @@ -4,17 +4,25 @@ import {scheduledDeletionEmailTemplate} from '@app/api/admin/services/AdminUserD import { clearTestEmails, createTestAccount, + createUniqueEmail, + findLastTestEmail, listTestEmails, setUserACLs, type TestAccount, } from '@app/api/auth/tests/AuthTestUtils'; -import {createUserID} from '@app/api/BrandedTypes'; +import {createReportID, createUserID} from '@app/api/BrandedTypes'; +import {setupTestGuildWithMembers} from '@app/api/channel/tests/ChannelTestUtils'; import {getAdminRepository, getUserRepository} from '@app/api/middleware/ServiceSingletons'; +import {getReportFlowVariant} from '@app/api/report/flows/ReportFlowRegistry'; +import {ReportRepository} from '@app/api/report/ReportRepository'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; -import {createBuilder} from '@app/api/test/TestRequestBuilder'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {deleteAccount, setPendingDeletionAt} from '@app/api/user/tests/UserTestUtils'; import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {DeletionReasons} from '@fluxer/constants/src/Core'; +import {UserFlags} from '@fluxer/constants/src/UserConstants'; import {afterEach, beforeEach, describe, expect, test} from 'vitest'; const DELETION_TEMPLATES = [ @@ -267,36 +275,218 @@ describe('Admin staff notifications', () => { return {reporter, reportId: report.report_id}; } + async function fileDsaGuildNotice(): Promise<{email: string; reportId: string}> { + const {guild} = await setupTestGuildWithMembers(harness, 1); + const email = createUniqueEmail('dsa-resolve'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness, {recipient: email}), 'dsa_report_verification') + ?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await createBuilderWithoutAuth<{report_id: string}>(harness) + .post('/reports/dsa') + .body({ + ticket, + report_type: 'guild', + guild_id: guild.id, + revision_hash: getReportFlowVariant('guild', 'dsa').revisionHash, + steps: [ + {screen_id: 'community_parts', item_ids: ['activity']}, + {screen_id: 'root_guild', option_id: 'abuse'}, + {screen_id: 'abuse_guild', option_id: 'raid'}, + ], + good_faith_confirmed: true, + additional_info: 'This community organizes raids on other communities.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'NL', + }) + .expect(HTTP_STATUS.OK) + .execute(); + return {email, reportId: report.report_id}; + } + + async function resolve(reportId: string, body: Record) { + await createBuilder(harness, admin.token) + .patch(`/admin/reports/${reportId}`) + .body({status: 'resolved', ...body}) + .expect(HTTP_STATUS.OK) + .execute(); + } + + async function setReporterFlag(reporter: TestAccount, flag: bigint) { + const users = getUserRepository(); + const user = (await users.findUnique(createUserID(BigInt(reporter.userId))))!; + await users.patchUpsert(user.id, {flags: user.flags | flag}, user.toRow()); + } + test('notifies the reporter by default', async () => { const {reporter, reportId} = await fileReport(); await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'Handled'}); + const sent = (await emailsTo(reporter)).filter((email) => email.type === 'report_resolved'); + expect(sent).toHaveLength(1); + expect(sent[0]?.metadata).toEqual({report_id: reportId, public_comment: 'Handled'}); + const dms = await systemDmMessages(reporter); + expect(dms).toHaveLength(1); + expect(dms[0]?.content).toContain('Handled'); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('notify_reporter')).toBe('true'); + expect(metadata?.get('reporter_dm_sent')).toBe('true'); + expect(metadata?.get('reporter_email_sent')).toBe('true'); + expect(metadata?.get('reporter_dsa_email_sent')).toBe('false'); + expect(metadata?.has('reporter_notice_skipped')).toBe(false); + expect(metadata?.has('internal_comment')).toBe(false); + const stored = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + expect(stored?.publicComment).toBe('Handled'); + }); + + test('notify_reporter false still sends the generic notice without the comment', async () => { + const {reporter, reportId} = await fileReport(); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'Staff only wording', notify_reporter: false}); + const sent = (await emailsTo(reporter)).filter((email) => email.type === 'report_resolved'); + expect(sent).toHaveLength(1); + expect(sent[0]?.metadata).toEqual({report_id: reportId, public_comment: ''}); + const dms = await systemDmMessages(reporter); + expect(dms).toHaveLength(1); + expect(dms[0]?.content).toContain(reportId); + expect(dms[0]?.content).not.toContain('Staff only wording'); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('notify_reporter')).toBe('false'); + expect(metadata?.get('reporter_dm_sent')).toBe('true'); + expect(metadata?.get('reporter_email_sent')).toBe('true'); + expect(metadata?.has('reporter_notice_skipped')).toBe(false); + expect(metadata?.get('internal_comment')).toBe('Staff only wording'); + const stored = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + expect(stored?.publicComment).toBeNull(); + const detail = await createBuilder<{public_comment: string | null}>(harness, admin.token) + .get(`/admin/reports/${reportId}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(detail.public_comment).toBeNull(); + }); + + test('a whitespace comment sends the generic notice', async () => { + const {reporter, reportId} = await fileReport(); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: ' '}); + const sent = (await emailsTo(reporter)).filter((email) => email.type === 'report_resolved'); + expect(sent.map((email) => email.metadata.public_comment)).toEqual(['']); + }); + + test('a DSA notice emails the verified address and sends no DM', async () => { + const {email, reportId} = await fileDsaGuildNotice(); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'We removed the community.'}); + const sent = await listTestEmails(harness); + expect(sent.map((entry) => [entry.to, entry.type])).toEqual([[email, 'dsa_report_resolved']]); + expect(sent[0]?.metadata).toEqual({report_id: reportId, public_comment: 'We removed the community.'}); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('report_type')).toBe('2'); + expect(metadata?.get('reporter_dm_sent')).toBe('false'); + expect(metadata?.get('reporter_email_sent')).toBe('false'); + expect(metadata?.get('reporter_dsa_email_sent')).toBe('true'); + expect(metadata?.has('reporter_notice_skipped')).toBe(false); + }); + + test('a DSA notice resolved with notify_reporter false gets the decision email without the comment', async () => { + const {email, reportId} = await fileDsaGuildNotice(); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'Staff only wording', notify_reporter: false}); + const sent = await listTestEmails(harness, {recipient: email}); + expect(sent.map((entry) => entry.type)).toEqual(['dsa_report_resolved']); + expect(sent[0]?.metadata).toEqual({report_id: reportId, public_comment: ''}); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('reporter_dsa_email_sent')).toBe('true'); + expect(metadata?.get('internal_comment')).toBe('Staff only wording'); + const stored = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + expect(stored?.publicComment).toBeNull(); + }); + + test('a deleted reporter gets nothing and the audit row says why', async () => { + const {reporter, reportId} = await fileReport(); + await deleteAccount(harness, reporter.token, reporter.password); + await setPendingDeletionAt(harness, reporter.userId, new Date(Date.now() - 60_000)); + await createBuilderWithoutAuth(harness) + .post(`/test/worker/process-pending-deletion/${reporter.userId}`) + .expect(HTTP_STATUS.OK) + .execute(); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'Handled'}); + expect((await listTestEmails(harness)).filter((email) => email.type === 'report_resolved')).toEqual([]); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('reporter_dm_sent')).toBe('false'); + expect(metadata?.get('reporter_email_sent')).toBe('false'); + expect(metadata?.get('reporter_dsa_email_sent')).toBe('false'); + expect(metadata?.get('reporter_notice_skipped')).toBe('reporter_account_deleted'); + }); + + test('a reporter barred from reporting gets nothing and the audit row says why', async () => { + const {reporter, reportId} = await fileReport(); + await setReporterFlag(reporter, UserFlags.REPORT_BANNED); + await clearTestEmails(harness); + await resolve(reportId, {public_comment: 'Handled'}); + expect((await emailsTo(reporter)).filter((email) => email.type === 'report_resolved')).toEqual([]); + expect(await systemDmMessages(reporter)).toEqual([]); + const metadata = await auditMetadata('resolve_report', reportId); + expect(metadata?.get('reporter_dm_sent')).toBe('false'); + expect(metadata?.get('reporter_email_sent')).toBe('false'); + expect(metadata?.get('reporter_notice_skipped')).toBe('reporter_report_banned'); + }); + + async function resolveAuditRows(reportId: string) { + const logs = await getAdminRepository().listAllAuditLogsPaginated(1000); + return logs.filter((log) => log.action === 'resolve_report' && log.targetId.toString() === reportId); + } + + test('two resolves at the same time apply once', async () => { + const {reporter, reportId} = await fileReport(); + await clearTestEmails(harness); + const attempts = await Promise.all( + ['First comment', 'Second comment'].map((comment) => + createBuilder<{public_comment: string | null; code?: string}>(harness, admin.token) + .patch(`/admin/reports/${reportId}`) + .body({status: 'resolved', public_comment: comment}) + .executeRaw(), + ), + ); + expect(attempts.map(({response}) => response.status).sort()).toEqual([HTTP_STATUS.OK, HTTP_STATUS.BAD_REQUEST]); + const winner = attempts.find(({response}) => response.status === HTTP_STATUS.OK)!; + const loser = attempts.find(({response}) => response.status === HTTP_STATUS.BAD_REQUEST)!; + expect(loser.json.code).toBe(APIErrorCodes.REPORT_ALREADY_RESOLVED); + const stored = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + expect(stored?.status).toBe(1); + expect(stored?.publicComment).toBe(winner.json.public_comment); + expect((await emailsTo(reporter)).filter((email) => email.type === 'report_resolved')).toHaveLength(1); + expect(await systemDmMessages(reporter)).toHaveLength(1); + expect(await resolveAuditRows(reportId)).toHaveLength(1); + }); + + test('resolving a resolved report fails and sends nothing more', async () => { + const {reporter, reportId} = await fileReport(); await createBuilder(harness, admin.token) .patch(`/admin/reports/${reportId}`) .body({status: 'resolved', public_comment: 'Handled'}) .expect(HTTP_STATUS.OK) .execute(); - expect((await emailsTo(reporter)).map((email) => email.type)).toContain('report_resolved'); - expect(await systemDmMessages(reporter)).toHaveLength(1); - const metadata = await auditMetadata('resolve_report', reportId); - expect(metadata?.get('notify_reporter')).toBe('true'); - expect(metadata?.get('reporter_dm_sent')).toBe('true'); - expect(metadata?.get('reporter_email_sent')).toBe('true'); - }); - - test('notify_reporter false sends neither DM nor email', async () => { - const {reporter, reportId} = await fileReport(); await clearTestEmails(harness); await createBuilder(harness, admin.token) .patch(`/admin/reports/${reportId}`) - .body({status: 'resolved', notify_reporter: false}) - .expect(HTTP_STATUS.OK) + .body({status: 'resolved', public_comment: 'Handled again'}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.REPORT_ALREADY_RESOLVED) .execute(); - expect((await emailsTo(reporter)).map((email) => email.type)).not.toContain('report_resolved'); - expect(await systemDmMessages(reporter)).toEqual([]); - const metadata = await auditMetadata('resolve_report', reportId); - expect(metadata?.get('notify_reporter')).toBe('false'); - expect(metadata?.get('reporter_dm_sent')).toBe('false'); - expect(metadata?.get('reporter_email_sent')).toBe('false'); + expect((await emailsTo(reporter)).filter((email) => email.type === 'report_resolved')).toEqual([]); + expect(await systemDmMessages(reporter)).toHaveLength(1); + expect(await resolveAuditRows(reportId)).toHaveLength(1); + const stored = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + expect(stored?.publicComment).toBe('Handled'); }); }); }); diff --git a/fluxer_api/src/api/admin/tests/audit_coverage/ReportAdminAuditCases.ts b/fluxer_api/src/api/admin/tests/audit_coverage/ReportAdminAuditCases.ts index bfc85da5c..c84835e6b 100644 --- a/fluxer_api/src/api/admin/tests/audit_coverage/ReportAdminAuditCases.ts +++ b/fluxer_api/src/api/admin/tests/audit_coverage/ReportAdminAuditCases.ts @@ -5,6 +5,9 @@ import type { AdminAuditCoverageContext, } from '@app/api/admin/tests/audit_coverage/AdminAuditCoverage'; import {createTestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createReportID} from '@app/api/BrandedTypes'; +import {getReportRepository} from '@app/api/middleware/ServiceSingletons'; +import {listReportReasons} from '@app/api/report/flows/ReportReasonCatalog'; import {createBuilder} from '@app/api/test/TestRequestBuilder'; interface FiledUserReport { @@ -12,6 +15,9 @@ interface FiledUserReport { reportedUserId: string; } +const HOLD_UNTIL = '2099-01-01T00:00:00.000Z'; +const PREVIOUS_HOLD_UNTIL = '2098-06-01T00:00:00.000Z'; + async function fileUserReport({harness}: AdminAuditCoverageContext): Promise { const reporter = await createTestAccount(harness); const reported = await createTestAccount(harness); @@ -79,6 +85,74 @@ export const ReportAdminAuditCases: ReadonlyArray = [ }; }, }, + { + method: 'GET', + route: '/admin/reports', + name: 'reason', + search: 'enabled', + async prepare(context) { + await fileUserReport(context); + return { + request: {path: '/admin/reports?status=pending&reason=csam'}, + expected: { + action: 'search_reports', + targetType: 'report', + targetId: '0', + metadata: { + status: 'pending', + reason: 'csam', + sort_by: 'reported_at', + sort_order: 'desc', + limit: '50', + offset: '0', + result_count: '0', + total: '0', + }, + }, + }; + }, + }, + { + method: 'GET', + route: '/admin/reports', + name: 'category', + search: 'enabled', + async prepare(context) { + await fileUserReport(context); + return { + request: {path: '/admin/reports?category=harassment'}, + expected: { + action: 'search_reports', + targetType: 'report', + targetId: '0', + metadata: { + category: 'harassment', + sort_by: 'reported_at', + sort_order: 'desc', + limit: '50', + offset: '0', + result_count: '1', + total: '1', + }, + }, + }; + }, + }, + { + method: 'GET', + route: '/admin/report-reasons', + async prepare() { + return { + request: {path: '/admin/report-reasons'}, + expected: { + action: 'list_report_reasons', + targetType: 'report', + targetId: '0', + metadata: {result_count: String(listReportReasons().length)}, + }, + }; + }, + }, { method: 'GET', route: '/admin/reports/:report_id', @@ -115,6 +189,88 @@ export const ReportAdminAuditCases: ReadonlyArray = [ notify_reporter: 'true', reporter_dm_sent: 'true', reporter_email_sent: 'true', + reporter_dsa_email_sent: 'false', + }, + }, + }; + }, + }, + { + method: 'PATCH', + route: '/admin/reports/:report_id', + name: 'generic notice', + async prepare(context) { + const {reportId} = await fileUserReport(context); + return { + request: { + path: `/admin/reports/${reportId}`, + body: {status: 'resolved', public_comment: 'Internal wording', notify_reporter: false}, + }, + expected: { + action: 'resolve_report', + targetType: 'report', + targetId: reportId, + metadata: { + report_id: reportId, + report_type: '1', + notify_reporter: 'false', + internal_comment: 'Internal wording', + reporter_dm_sent: 'true', + reporter_email_sent: 'true', + reporter_dsa_email_sent: 'false', + }, + }, + }; + }, + }, + { + method: 'POST', + route: '/admin/reports/:report_id/legal-hold', + async prepare(context) { + const {reportId} = await fileUserReport(context); + return { + request: { + path: `/admin/reports/${reportId}/legal-hold`, + body: {legal_hold_until: HOLD_UNTIL, legal_hold_reason: 'Preservation request 42'}, + }, + expected: { + action: 'set_report_legal_hold', + targetType: 'report', + targetId: reportId, + metadata: { + report_id: reportId, + report_type: '1', + legal_hold_until: HOLD_UNTIL, + legal_hold_reason: 'Preservation request 42', + }, + }, + }; + }, + }, + { + method: 'POST', + route: '/admin/reports/:report_id/legal-hold', + name: 'clear', + async prepare(context) { + const {reportId} = await fileUserReport(context); + await getReportRepository().setReportLegalHold( + createReportID(BigInt(reportId)), + new Date(PREVIOUS_HOLD_UNTIL), + 'Preservation request 41', + ); + return { + request: { + path: `/admin/reports/${reportId}/legal-hold`, + body: {legal_hold_until: null}, + }, + expected: { + action: 'clear_report_legal_hold', + targetType: 'report', + targetId: reportId, + metadata: { + report_id: reportId, + report_type: '1', + previous_legal_hold_until: PREVIOUS_HOLD_UNTIL, }, }, }; diff --git a/fluxer_api/src/api/channel/services/message/CrosspostPropagation.ts b/fluxer_api/src/api/channel/services/message/CrosspostPropagation.ts index 70ee87d43..a98237c2f 100644 --- a/fluxer_api/src/api/channel/services/message/CrosspostPropagation.ts +++ b/fluxer_api/src/api/channel/services/message/CrosspostPropagation.ts @@ -14,7 +14,7 @@ import { import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {ChannelTypes, MessageFlags} from '@fluxer/constants/src/ChannelConstants'; import {RateLimitError} from '@fluxer/errors/src/domains/core/RateLimitError'; -import type {IRateLimitService, RateLimitConfig, RateLimitResult} from '@pkgs/rate_limit/src/IRateLimitService'; +import type {IRateLimitService, RateLimitResult} from '@pkgs/rate_limit/src/IRateLimitService'; import type {IWorkerService} from '@pkgs/worker/src/contracts/IWorkerService'; import {z} from 'zod'; @@ -116,18 +116,6 @@ export async function isCrosspostSourcePurged(messageId: MessageID): Promise 0; } -export function withPeekRetryAfter(result: RateLimitResult, config: RateLimitConfig): RateLimitResult { - const leakPerMs = config.maxAttempts / config.windowMs; - const retryAfterMs = Math.max(1, Math.ceil(result.resetAfterDecimal * 1000 - (config.maxAttempts - 1) / leakPerMs)); - return { - ...result, - allowed: false, - remaining: 0, - retryAfter: Math.max(1, Math.ceil(retryAfterMs / 1000)), - retryAfterDecimal: retryAfterMs / 1000, - }; -} - export function createCrosspostRateLimitError(code: string, result: RateLimitResult): RateLimitError { return new RateLimitError({ code, @@ -251,11 +239,8 @@ export class CrosspostPropagation { } const config = {identifier: publishedEditRateLimitIdentifier(fresh.id), ...PUBLISHED_MESSAGE_EDIT_RATE_LIMIT}; const peek = await this.deps.rateLimitService.peekLimit(config); - if (peek.remaining < 1) { - throw createCrosspostRateLimitError( - APIErrorCodes.PUBLISHED_MESSAGE_EDIT_RATE_LIMITED, - withPeekRetryAfter(peek, config), - ); + if (!peek.allowed) { + throw createCrosspostRateLimitError(APIErrorCodes.PUBLISHED_MESSAGE_EDIT_RATE_LIMITED, peek); } const result = await write(); await this.deps.rateLimitService.checkLimit(config); diff --git a/fluxer_api/src/api/channel/services/message/MessageCrosspostService.ts b/fluxer_api/src/api/channel/services/message/MessageCrosspostService.ts index 45db87856..5f46037c0 100644 --- a/fluxer_api/src/api/channel/services/message/MessageCrosspostService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageCrosspostService.ts @@ -8,7 +8,6 @@ import { type CrosspostPropagation, createCrosspostRateLimitError, isCrosspostedMessage, - withPeekRetryAfter, } from '@app/api/channel/services/message/CrosspostPropagation'; import type {MessageChannelAuthService} from '@app/api/channel/services/message/MessageChannelAuthService'; import type {MessageDispatchService} from '@app/api/channel/services/message/MessageDispatchService'; @@ -189,11 +188,8 @@ export class MessageCrosspostService { private async assertBudgetAvailable(channelId: ChannelID): Promise { const config = this.channelBudgetConfig(channelId); const peek = await this.deps.rateLimitService.peekLimit(config); - if (peek.remaining < 1) { - throw createCrosspostRateLimitError( - APIErrorCodes.MESSAGE_CROSSPOST_RATE_LIMITED, - withPeekRetryAfter(peek, config), - ); + if (!peek.allowed) { + throw createCrosspostRateLimitError(APIErrorCodes.MESSAGE_CROSSPOST_RATE_LIMITED, peek); } } diff --git a/fluxer_api/src/api/content_i18n/ContentI18nMessages.ts b/fluxer_api/src/api/content_i18n/ContentI18nMessages.ts index 8cc448e99..d7f97f4a1 100644 --- a/fluxer_api/src/api/content_i18n/ContentI18nMessages.ts +++ b/fluxer_api/src/api/content_i18n/ContentI18nMessages.ts @@ -21,6 +21,216 @@ export const CONTENT_I18N_MESSAGES = { 'guild.default_category_voice': 'Voice channels', 'guild.default_channel_text': 'general', 'guild.default_channel_voice': 'General', + 'report_flow.description.name': 'Username, display name or community nickname', + 'report_flow.description.photo': 'What they use as avatar and banner', + 'report_flow.description.profile_text': 'Bio, custom status or pronouns', + 'report_flow.label.abuse': 'Abusive or harmful content', + 'report_flow.label.account_trading': 'Selling accounts, or stolen logins or card details', + 'report_flow.label.account_trading_communities': 'Buying or selling accounts or communities', + 'report_flow.label.address': 'Home address or workplace', + 'report_flow.label.adult_content_no_gate': 'Adult content without an 18+ age restriction', + 'report_flow.label.adult_content_profile': 'Explicit adult content in their profile', + 'report_flow.label.adult_content_unmarked': "Adult content in a community channel that isn't marked 18+", + 'report_flow.label.age_no_message': "No, it doesn't mention it", + 'report_flow.label.age_no_profile': "No, it doesn't mention it", + 'report_flow.label.age_yes_message': 'Yes, it mentions their age', + 'report_flow.label.age_yes_profile': 'Yes, their profile mentions their age', + 'report_flow.label.atrocity_denial': 'Denying or celebrating the Holocaust or other genocides', + 'report_flow.label.ban_evasion': 'Getting around a ban with another account', + 'report_flow.label.channel_names': 'Channel names', + 'report_flow.label.community_banner': 'Community banner', + 'report_flow.label.community_icon': 'Community icon', + 'report_flow.label.community_name': 'Community name', + 'report_flow.label.conversion_therapy': 'Promoting conversion therapy', + 'report_flow.label.copyright': 'Copyright or trademark complaint', + 'report_flow.label.crisis_lines': 'Crisis lines in your country', + 'report_flow.label.csam': 'Real or AI-generated images or videos of child sexual abuse', + 'report_flow.label.discovery_listing': 'Discovery listing', + 'report_flow.label.dislike': "It's just not for me", + 'report_flow.label.dsa': "Content that's illegal in the EU (Digital Services Act)", + 'report_flow.label.eating_disorder_promotion': 'Encouraging disordered eating', + 'report_flow.label.eating_disorder_promotion_profile': 'Their profile promotes eating disorders', + 'report_flow.label.email': 'Email address', + 'report_flow.label.emoji_stickers': 'Custom emoji or stickers', + 'report_flow.label.face_photo': 'Photo of their face', + 'report_flow.label.fake_account': 'Fake account, bot or automated abuse', + 'report_flow.label.fake_account_profile': 'A fake or deceptive account', + 'report_flow.label.false_claims': "Spreading lies to hurt a specific person's reputation", + 'report_flow.label.false_info': 'Spreading harmful false information', + 'report_flow.label.financial': 'Card, bank or other financial details', + 'report_flow.label.fraud': 'They are trying to con people out of money or accounts', + 'report_flow.label.fraud_guild': 'Conning people out of money or accounts', + 'report_flow.label.government_id': 'ID document or ID number', + 'report_flow.label.graphic_violence': 'Real violence shown to shock, like gore or animal cruelty', + 'report_flow.label.harassment': 'Bullying, harassment or stalking', + 'report_flow.label.harassment_direct': 'Repeatedly targeting someone with insults or abuse', + 'report_flow.label.harassment_guild': 'Harassing, bullying or stalking people', + 'report_flow.label.harassment_profile': 'Their profile harasses or targets me or someone else', + 'report_flow.label.harmful_false_claims': 'False claims that could cause serious real-world harm', + 'report_flow.label.hate': 'Hate or discrimination against people for who they are', + 'report_flow.label.hate_dehumanizing': + 'Comparing people to animals, disease or filth, or calling them less than human', + 'report_flow.label.hate_incitement': 'Calls for violence or exclusion against a group', + 'report_flow.label.hate_other': 'Other attacks on people for who they are', + 'report_flow.label.hate_slurs': 'Slurs, hateful symbols or demeaning stereotypes', + 'report_flow.label.hate_violence': 'Hate, violence or extremism', + 'report_flow.label.identity': 'Sexual orientation, gender identity or intersex status', + 'report_flow.label.illegal_activity': 'Other illegal activity', + 'report_flow.label.illegal_goods': 'Drug, weapon or other illegal sales', + 'report_flow.label.impersonation': 'Pretending to be someone, or scamming people', + 'report_flow.label.impersonation_guild': 'Pretending to be {product_name} or another organization', + 'report_flow.label.impersonation_organization': 'A company, brand or group', + 'report_flow.label.impersonation_person': 'Me or someone close to me', + 'report_flow.label.impersonation_public_figure': 'A well-known person, like a creator or politician', + 'report_flow.label.impersonation_staff': '{product_name} staff or support', + 'report_flow.label.intimate_image_abuse': + 'Intimate images shared without consent, including deepfakes, or a threat to share them', + 'report_flow.label.intimate_image_abuse_guild': 'Sharing intimate images without consent, including deepfakes', + 'report_flow.label.intimate_image_abuse_profile': + 'Intimate images of someone shared without consent, including deepfakes', + 'report_flow.label.intimate_photo': 'Intimate or nude photo', + 'report_flow.label.invite_splash': 'Invite splash', + 'report_flow.label.ip_address': 'IP address', + 'report_flow.label.learn_more': 'Read the {product_name} Community Guidelines', + 'report_flow.label.legal_name': 'Real or legal name', + 'report_flow.label.lgbtq_targeting': + 'Deliberately misgendering, deadnaming or outing someone, or denying their identity', + 'report_flow.label.malware_guild': 'Distributing malware or phishing links', + 'report_flow.label.malware_phishing': 'Phishing, malware or hacking attempts', + 'report_flow.label.member_activity': 'What members post or do there', + 'report_flow.label.metric_manipulation': 'Faking member or reaction counts', + 'report_flow.label.minor_contact': + 'Asking a minor to meet up, or for photos or personal details, in a way that seems predatory', + 'report_flow.label.minor_dating_community': 'It is a community for dating between minors', + 'report_flow.label.minor_fictional': 'Drawn, written or AI-generated sexual content of a fictional child', + 'report_flow.label.minor_grooming': 'Grooming or building inappropriate trust with a minor', + 'report_flow.label.minor_grooming_guild': 'Members groom or build inappropriate trust with minors', + 'report_flow.label.minor_in_adult_space': 'A minor is in an 18+ channel or community', + 'report_flow.label.minor_in_adult_space_guild': 'Minors are allowed in 18+ channels', + 'report_flow.label.minor_risk': 'Putting a minor at risk', + 'report_flow.label.minor_risk_guild': 'Putting minors at risk', + 'report_flow.label.minor_sexual': 'Sexualizing a minor', + 'report_flow.label.minor_sexual_contact': 'Flirting with a minor or messaging them sexually', + 'report_flow.label.minor_sexual_contact_guild': 'Members flirt with minors or message them sexually', + 'report_flow.label.minor_sexual_content': 'A minor is sharing sexual content themselves', + 'report_flow.label.minor_sexual_content_guild': 'Minors post or send sexual content', + 'report_flow.label.minor_sexual_content_profile': "A minor's profile with sexual content", + 'report_flow.label.minor_sexual_guild': 'Sexualizing minors', + 'report_flow.label.minor_sexualization': 'Sexual comments about minors', + 'report_flow.label.minor_sexualization_guild': 'Members make sexual comments about minors', + 'report_flow.label.minor_sexualization_profile': 'Sexual comments about minors in their profile', + 'report_flow.label.name': 'Names', + 'report_flow.label.other': 'Something not listed here', + 'report_flow.label.other_identifying': 'Other information that could identify or locate someone', + 'report_flow.label.permits_violations': 'It allows serious rule-breaking', + 'report_flow.label.phone': 'Phone number', + 'report_flow.label.photo': 'Pictures', + 'report_flow.label.platform_abuse': 'Scraping, automation or other platform abuse', + 'report_flow.label.private_conversation': 'Private messages, screenshots or call recordings', + 'report_flow.label.private_info': "Sharing someone's private details", + 'report_flow.label.private_info_profile': "Their profile shares someone's private details", + 'report_flow.label.profile_text': 'Profile text', + 'report_flow.label.raid': 'Organizing or joining a raid or pile-on', + 'report_flow.label.raid_guild': 'Organizing raids or pile-ons against people or communities', + 'report_flow.label.rude_language': 'Swearing or rude remarks', + 'report_flow.label.self_harm': 'Someone might hurt themselves, or is encouraging self-harm', + 'report_flow.label.self_harm_graphic': 'Graphic images of self-harm', + 'report_flow.label.self_harm_guild': 'Members push others to hurt themselves', + 'report_flow.label.self_harm_pressure': 'Pressuring or challenging someone to hurt themselves', + 'report_flow.label.self_harm_pressure_guild': 'Pressuring or challenging people to hurt themselves', + 'report_flow.label.self_harm_profile': 'Their profile suggests self-harm or encourages it', + 'report_flow.label.self_harm_promotion': 'Encouraging self-harm or sharing methods', + 'report_flow.label.self_harm_promotion_profile': 'Their profile encourages self-harm', + 'report_flow.label.sexual': 'Sexual content', + 'report_flow.label.sexual_exploitation': 'Sexual exploitation, coercion or trafficking', + 'report_flow.label.sexual_unwanted': "Sexual images or messages I didn't want", + 'report_flow.label.something_else': 'Something else', + 'report_flow.label.spam': 'Spam or unwanted ads', + 'report_flow.label.spam_bulk': 'Sending spam or advertising in bulk', + 'report_flow.label.spam_or_manipulation': 'Spam or platform manipulation', + 'report_flow.label.spam_profile': 'Their profile is used for spam or advertising', + 'report_flow.label.suicide_promotion': 'Encouraging suicide or sharing methods', + 'report_flow.label.suicide_promotion_profile': 'Their profile encourages suicide', + 'report_flow.label.synthetic_media': 'Fake or AI-made media presented as real', + 'report_flow.label.terrorism': 'Terrorism or violent extremism', + 'report_flow.label.terrorism_guild': 'Recruiting for or promoting terrorism or violent extremism', + 'report_flow.label.threat': 'Threats or calls for violence', + 'report_flow.label.threat_to_share': 'They are threatening to share it', + 'report_flow.label.too_young': "They're under the minimum age to use {product_name}", + 'report_flow.label.unwanted_contact': + 'Stalking or repeatedly contacting me or someone else after being asked to stop, blocked or removed', + 'report_flow.label.violence_glorification': 'Glorifying real-world violence', + 'report_flow.label.violence_incitement': 'Encouraging violence or explaining how to hurt people', + 'report_flow.label.violence_misinfo': 'Violence, extremism or harmful false information', + 'report_flow.label.violent_threat': 'Saying they will hurt someone', + 'report_flow.label.worried_profile': "I'm worried about their safety", + 'report_flow.label.worried_self_harm': "I'm afraid they might hurt themselves", + 'report_flow.label.worried_suicide': "I'm afraid they might attempt suicide", + 'report_flow.notice.need_more_info.body': + "To review this, we need a message where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message instead.", + 'report_flow.notice.need_more_info.title': "We can't act on this yet", + 'report_flow.notice.need_more_info_profile.body': + "To review this, we need to see where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message or profile instead.", + 'report_flow.screen.abuse.title': 'What does it involve?', + 'report_flow.screen.abuse_guild.title': 'What are people in this community doing?', + 'report_flow.screen.age_stated_message.title': 'Does this message say how old they are?', + 'report_flow.screen.age_stated_profile.title': 'Does their profile say how old they are?', + 'report_flow.screen.community_parts.subtitle': 'Pick as many as you need.', + 'report_flow.screen.community_parts.title': 'Which parts of the community are involved?', + 'report_flow.screen.crisis_support.subtitle': 'Crisis lines offer free, confidential support.', + 'report_flow.screen.crisis_support.title': 'Someone can help right now', + 'report_flow.screen.false_info.subtitle': + 'Opinions, satire and good-faith debate are allowed. Unlawful defamation can be reported under the Digital Services Act.', + 'report_flow.screen.false_info.subtitle_self_hosted': 'Opinions, satire and good-faith debate are allowed.', + 'report_flow.screen.false_info.title': "What's misleading about it?", + 'report_flow.screen.harassment.title': 'How is someone being targeted?', + 'report_flow.screen.hate.title': 'How does it attack people for who they are?', + 'report_flow.screen.impersonation.subtitle': 'Clearly labeled parody or roleplay is allowed.', + 'report_flow.screen.impersonation.title': "Who's being impersonated, or is it a scam?", + 'report_flow.screen.minor_risk.title': 'How is this person putting a minor at risk?', + 'report_flow.screen.minor_risk_guild.title': 'How does this community put minors at risk?', + 'report_flow.screen.minor_sexual.subtitle': + 'Drawn, written or AI content counts when a character is described as a minor or is clearly prepubescent, including lolicon, shotacon and cub.', + 'report_flow.screen.minor_sexual.title': 'What did you see involving a minor?', + 'report_flow.screen.minor_sexual_guild.title': 'What did you see involving minors?', + 'report_flow.screen.private_info.subtitle': + 'Pick as many as you need. If an intimate photo shows someone under 18, go back and report it under Sexualizing a minor.', + 'report_flow.screen.private_info.title': 'Which private details are involved?', + 'report_flow.screen.profile_abuse.title': "What's harmful about their profile?", + 'report_flow.screen.profile_hate_violence.title': 'What does their profile show or promote?', + 'report_flow.screen.profile_intro.options_heading': 'Learn more', + 'report_flow.screen.profile_intro.subtitle': + "Tell us what's wrong with this profile. They won't be told who reported them.", + 'report_flow.screen.profile_intro.title': 'Report profile', + 'report_flow.screen.profile_minor_sexual.title': 'What in their profile involves a minor?', + 'report_flow.screen.profile_parts.subtitle': 'Pick as many as you need.', + 'report_flow.screen.profile_parts.title': 'Which parts of their profile are a problem?', + 'report_flow.screen.profile_private_info.title': 'Which private details are in their profile?', + 'report_flow.screen.profile_sexual.title': 'Tell us about the sexual content in their profile', + 'report_flow.screen.profile_threat.title': 'How does their profile involve violence?', + 'report_flow.screen.root_guild.subtitle': 'Pick the closest match for what is going on in this community.', + 'report_flow.screen.root_guild.title': "What's wrong with this community?", + 'report_flow.screen.root_message.subtitle': 'Pick the closest match. You can check everything before it is sent.', + 'report_flow.screen.root_message.title': 'Report message', + 'report_flow.screen.root_user.subtitle': 'Pick the closest match for what is in their profile.', + 'report_flow.screen.root_user.title': "What's wrong with their profile?", + 'report_flow.screen.self_harm.subtitle': + 'Nobody is punished for saying they are struggling. Telling us you are worried helps us offer support.', + 'report_flow.screen.self_harm.title': 'What did they say or share?', + 'report_flow.screen.self_harm_guild.title': 'What are members encouraging?', + 'report_flow.screen.self_harm_profile.title': 'What does their profile say or show?', + 'report_flow.screen.sexual.subtitle': 'If anyone shown or involved is under 18, choose Sexualizing a minor.', + 'report_flow.screen.sexual.title': 'Tell us about the sexual content', + 'report_flow.screen.sexual_guild.subtitle': 'If anyone shown or involved is under 18, choose Sexualizing minors.', + 'report_flow.screen.sexual_guild.title': 'Tell us about the sexual content in this community', + 'report_flow.screen.something_else_guild.title': 'What else is going on in this community?', + 'report_flow.screen.something_else_message.title': 'What else is going on?', + 'report_flow.screen.something_else_user.title': 'What else is wrong with this profile?', + 'report_flow.screen.spam_kind_guild.title': 'How is this community abusing the platform?', + 'report_flow.screen.spam_profile.title': 'How is the account being misused?', + 'report_flow.screen.threat.title': 'How does it involve violence?', + 'report_flow.screen.violence_misinfo.title': 'Which of these matches it?', + 'report_flow.screen.violence_misinfo_guild.title': 'Which of these happens in this community?', } as const; export type ContentI18nCatalog = typeof CONTENT_I18N_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/ar.ts b/fluxer_api/src/api/content_i18n/locales/ar.ts index fd2c8166e..02837479c 100644 --- a/fluxer_api/src/api/content_i18n/locales/ar.ts +++ b/fluxer_api/src/api/content_i18n/locales/ar.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_AR_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "القنوات النصية", "guild.default_category_voice": "القنوات الصوتية", "guild.default_channel_text": "عام", - "guild.default_channel_voice": "عام" + "guild.default_channel_voice": "عام", + "report_flow.description.name": "اسم المستخدم أو اسم العرض أو الاسم المستعار في المجتمع", + "report_flow.description.photo": "الصورة الرمزية واللافتة التي يستخدمونها", + "report_flow.description.profile_text": "نبذة شخصية أو الحالة المخصصة أو الضمائر", + "report_flow.label.abuse": "محتوى مسيء أو ضار", + "report_flow.label.account_trading": "بيع الحسابات، أو بيانات تسجيل الدخول أو بيانات البطاقات المسروقة", + "report_flow.label.account_trading_communities": "شراء أو بيع الحسابات أو المجتمعات", + "report_flow.label.address": "عنوان المنزل أو مكان العمل", + "report_flow.label.adult_content_no_gate": "محتوى للبالغين بدون قيود عمرية 18+", + "report_flow.label.adult_content_profile": "محتوى صريح للبالغين في ملفهم الشخصي", + "report_flow.label.adult_content_unmarked": "محتوى للبالغين في قناة مجتمع غير مقيدة بالعمر (18+)", + "report_flow.label.age_no_message": "لا، الرسالة لا تذكر ذلك", + "report_flow.label.age_no_profile": "لا، لا يذكر ملفهم الشخصي ذلك", + "report_flow.label.age_yes_message": "نعم، تذكر الرسالة عمرهم", + "report_flow.label.age_yes_profile": "نعم، يذكر ملفهم الشخصي عمرهم", + "report_flow.label.atrocity_denial": "إنكار أو تمجيد الهولوكوست أو الإبادات الجماعية الأخرى", + "report_flow.label.ban_evasion": "التحايل على الحظر باستخدام حساب آخر", + "report_flow.label.channel_names": "أسماء القنوات", + "report_flow.label.community_banner": "لافتة المجتمع", + "report_flow.label.community_icon": "أيقونة المجتمع", + "report_flow.label.community_name": "اسم المجتمع", + "report_flow.label.conversion_therapy": "الترويج للعلاج التحويلي", + "report_flow.label.copyright": "شكوى حقوق الطبع والنشر أو العلامة التجارية", + "report_flow.label.crisis_lines": "خطوط المساعدة في حالات الأزمات في بلدك", + "report_flow.label.csam": "صور أو مقاطع فيديو حقيقية أو مولدة بالذكاء الاصطناعي تُظهر اعتداءً جنسيًا على الأطفال", + "report_flow.label.discovery_listing": "قائمة الاكتشاف", + "report_flow.label.dislike": "هذا ببساطة لا يناسبني", + "report_flow.label.dsa": "محتوى غير قانوني في الاتحاد الأوروبي (قانون الخدمات الرقمية)", + "report_flow.label.eating_disorder_promotion": "تشجيع سلوكيات الأكل المضطربة", + "report_flow.label.eating_disorder_promotion_profile": "ملفهم الشخصي يروج لاضطرابات الأكل", + "report_flow.label.email": "عنوان البريد الإلكتروني", + "report_flow.label.emoji_stickers": "رموز تعبيرية أو ملصقات مخصصة", + "report_flow.label.face_photo": "صورة وجههم", + "report_flow.label.fake_account": "حساب مزيف أو روبوت أو إساءة استخدام آلية", + "report_flow.label.fake_account_profile": "حساب مزيف أو خادع", + "report_flow.label.false_claims": "نشر أكاذيب للإضرار بسمعة شخص معين", + "report_flow.label.false_info": "نشر معلومات كاذبة ضارة", + "report_flow.label.financial": "تفاصيل البطاقة أو البنك أو التفاصيل المالية الأخرى", + "report_flow.label.fraud": "إنهم يحاولون خداع الناس للحصول على أموالهم أو حساباتهم", + "report_flow.label.fraud_guild": "خداع الناس للحصول على أموالهم أو حساباتهم", + "report_flow.label.government_id": "وثيقة هوية أو رقم هوية", + "report_flow.label.graphic_violence": "عنف حقيقي يُعرض لإثارة الصدمة، مثل المشاهد الدموية أو القسوة على الحيوانات", + "report_flow.label.harassment": "تنمر أو مضايقة أو مطاردة", + "report_flow.label.harassment_direct": "استهداف شخص ما بشكل متكرر بالإهانات أو الإساءة", + "report_flow.label.harassment_guild": "مضايقة الأشخاص أو التنمر عليهم أو مطاردتهم", + "report_flow.label.harassment_profile": "ملفهم الشخصي يضايقني أو يستهدفني، أو يضايق شخصًا آخر أو يستهدفه", + "report_flow.label.harmful_false_claims": "ادعاءات كاذبة قد تسبب ضررًا جسيمًا في العالم الحقيقي", + "report_flow.label.hate": "الكراهية أو التمييز ضد الأشخاص بسبب هويتهم", + "report_flow.label.hate_dehumanizing": "مقارنة الأشخاص بالحيوانات أو الأمراض أو القذارة، أو وصفهم بأنهم أقل من البشر", + "report_flow.label.hate_incitement": "دعوات للعنف أو الإقصاء ضد مجموعة", + "report_flow.label.hate_other": "هجمات أخرى على الأشخاص بسبب هويتهم", + "report_flow.label.hate_slurs": "شتائم أو رموز كراهية أو صور نمطية مهينة", + "report_flow.label.hate_violence": "كراهية أو عنف أو تطرف", + "report_flow.label.identity": "الميول الجنسية أو الهوية الجندرية أو حالة ثنائيي الجنس", + "report_flow.label.illegal_activity": "نشاط غير قانوني آخر", + "report_flow.label.illegal_goods": "بيع المخدرات أو الأسلحة أو غيرها من السلع غير القانونية", + "report_flow.label.impersonation": "انتحال شخصية شخص ما، أو الاحتيال على الناس", + "report_flow.label.impersonation_guild": "التظاهر بأنه {product_name} أو منظمة أخرى", + "report_flow.label.impersonation_organization": "شركة أو علامة تجارية أو مجموعة", + "report_flow.label.impersonation_person": "أنا أو شخص قريب مني", + "report_flow.label.impersonation_public_figure": "شخص مشهور، مثل صانع محتوى أو سياسي", + "report_flow.label.impersonation_staff": "موظفو {product_name} أو فريق الدعم", + "report_flow.label.intimate_image_abuse": "مشاركة صور حميمية بدون موافقة، بما في ذلك التزييف العميق، أو التهديد بمشاركتها", + "report_flow.label.intimate_image_abuse_guild": "مشاركة صور حميمية بدون موافقة، بما في ذلك التزييف العميق", + "report_flow.label.intimate_image_abuse_profile": "صور حميمية لشخص تمت مشاركتها بدون موافقة، بما في ذلك التزييف العميق", + "report_flow.label.intimate_photo": "صورة حميمية أو عارية", + "report_flow.label.invite_splash": "خلفية الدعوة", + "report_flow.label.ip_address": "عنوان IP", + "report_flow.label.learn_more": "اقرأ إرشادات مجتمع {product_name}", + "report_flow.label.legal_name": "الاسم الحقيقي أو القانوني", + "report_flow.label.lgbtq_targeting": "تعمّد مخاطبة شخص بغير جنسه الذي يعرّف به، أو استخدام اسمه السابق، أو الكشف عن ميوله أو هويته دون موافقته، أو إنكار هويته", + "report_flow.label.malware_guild": "توزيع برامج ضارة أو روابط تصيد احتيالي", + "report_flow.label.malware_phishing": "محاولات تصيد احتيالي أو برامج ضارة أو اختراق", + "report_flow.label.member_activity": "ما ينشره الأعضاء أو يفعلونه هناك", + "report_flow.label.metric_manipulation": "تزوير عدد الأعضاء أو التفاعلات", + "report_flow.label.minor_contact": "طلب لقاء من قاصر، أو طلب صور أو تفاصيل شخصية منه، بطريقة توحي بنية استغلالية", + "report_flow.label.minor_dating_community": "إنه مجتمع للمواعدة بين القاصرين", + "report_flow.label.minor_fictional": "محتوى جنسي مرسوم أو مكتوب أو تم إنشاؤه بواسطة الذكاء الاصطناعي لطفل خيالي", + "report_flow.label.minor_grooming": "استدراج قاصر أو بناء ثقة غير لائقة معه", + "report_flow.label.minor_grooming_guild": "يقوم الأعضاء باستدراج القاصرين أو بناء ثقة غير لائقة معهم", + "report_flow.label.minor_in_adult_space": "قاصر موجود في قناة أو مجتمع مخصص لمن هم 18 عامًا فأكثر", + "report_flow.label.minor_in_adult_space_guild": "يُسمح للقاصرين بدخول القنوات المقيدة بالعمر (18+)", + "report_flow.label.minor_risk": "تعريض قاصر للخطر", + "report_flow.label.minor_risk_guild": "تعريض القاصرين للخطر", + "report_flow.label.minor_sexual": "إضفاء طابع جنسي على قاصر", + "report_flow.label.minor_sexual_contact": "مغازلة قاصر أو مراسلته جنسيًا", + "report_flow.label.minor_sexual_contact_guild": "يقوم الأعضاء بمغازلة القاصرين أو مراسلتهم جنسيًا", + "report_flow.label.minor_sexual_content": "يقوم قاصر بمشاركة محتوى جنسي بنفسه", + "report_flow.label.minor_sexual_content_guild": "ينشر القاصرون أو يرسلون محتوى جنسيًا", + "report_flow.label.minor_sexual_content_profile": "ملف شخصي لقاصر يحتوي على محتوى جنسي", + "report_flow.label.minor_sexual_guild": "إضفاء طابع جنسي على قاصرين", + "report_flow.label.minor_sexualization": "تعليقات جنسية حول قاصرين", + "report_flow.label.minor_sexualization_guild": "يبدي الأعضاء تعليقات جنسية عن القاصرين", + "report_flow.label.minor_sexualization_profile": "تعليقات جنسية حول قاصرين في ملفهم الشخصي", + "report_flow.label.name": "الأسماء", + "report_flow.label.other": "شيء غير مدرج هنا", + "report_flow.label.other_identifying": "معلومات أخرى يمكن أن تحدد هوية شخص أو مكانه", + "report_flow.label.permits_violations": "يسمح بانتهاكات خطيرة للقواعد", + "report_flow.label.phone": "رقم الهاتف", + "report_flow.label.photo": "الصور", + "report_flow.label.platform_abuse": "كشط البيانات أو الأتمتة أو غير ذلك من إساءة استخدام المنصة", + "report_flow.label.private_conversation": "الرسائل الخاصة أو لقطات الشاشة أو تسجيلات المكالمات", + "report_flow.label.private_info": "مشاركة معلومات خاصة بشخص ما", + "report_flow.label.private_info_profile": "يشارك ملفهم الشخصي معلومات خاصة بشخص ما", + "report_flow.label.profile_text": "نص الملف الشخصي", + "report_flow.label.raid": "تنظيم أو الانضمام إلى هجوم أو مضايقة جماعية", + "report_flow.label.raid_guild": "تنظيم هجمات أو مضايقات جماعية ضد أشخاص أو مجتمعات", + "report_flow.label.rude_language": "شتائم أو عبارات فظة", + "report_flow.label.self_harm": "قد يؤذي شخص نفسه، أو هناك من يشجع على إيذاء النفس", + "report_flow.label.self_harm_graphic": "صور صريحة لإيذاء النفس", + "report_flow.label.self_harm_guild": "يدفع الأعضاء الآخرين لإيذاء أنفسهم", + "report_flow.label.self_harm_pressure": "الضغط على شخص أو تحديه لإيذاء نفسه", + "report_flow.label.self_harm_pressure_guild": "الضغط على الأشخاص أو تحديهم لإيذاء أنفسهم", + "report_flow.label.self_harm_profile": "يشير ملفهم الشخصي إلى إيذاء النفس أو يشجع عليه", + "report_flow.label.self_harm_promotion": "التشجيع على إيذاء النفس أو مشاركة طرقه", + "report_flow.label.self_harm_promotion_profile": "ملفهم الشخصي يشجع على إيذاء النفس", + "report_flow.label.sexual": "محتوى جنسي", + "report_flow.label.sexual_exploitation": "الاستغلال الجنسي أو الإكراه أو الاتجار بالبشر", + "report_flow.label.sexual_unwanted": "صور أو رسائل جنسية لم أكن أرغب بها", + "report_flow.label.something_else": "شيء آخر", + "report_flow.label.spam": "رسائل مزعجة أو إعلانات غير مرغوب فيها", + "report_flow.label.spam_bulk": "إرسال رسائل مزعجة أو إعلانات بكميات كبيرة", + "report_flow.label.spam_or_manipulation": "رسائل مزعجة أو تلاعب بالمنصة", + "report_flow.label.spam_profile": "ملفهم الشخصي يُستخدم لإرسال رسائل مزعجة أو إعلانات", + "report_flow.label.suicide_promotion": "التشجيع على الانتحار أو مشاركة طرقه", + "report_flow.label.suicide_promotion_profile": "ملفهم الشخصي يشجع على الانتحار", + "report_flow.label.synthetic_media": "وسائط مزيفة أو مصنوعة بالذكاء الاصطناعي تُقدم على أنها حقيقية", + "report_flow.label.terrorism": "الإرهاب أو التطرف العنيف", + "report_flow.label.terrorism_guild": "التجنيد أو الترويج للإرهاب أو التطرف العنيف", + "report_flow.label.threat": "تهديدات أو دعوات للعنف", + "report_flow.label.threat_to_share": "إنهم يهددون بمشاركتها", + "report_flow.label.too_young": "إنهم أصغر من الحد الأدنى للسن لاستخدام {product_name}", + "report_flow.label.unwanted_contact": "مطاردتي أو مراسلتي بشكل متكرر، أو مطاردة شخص آخر أو مراسلته، بعد طلب التوقف أو بعد الحظر أو الإزالة", + "report_flow.label.violence_glorification": "تمجيد العنف في العالم الحقيقي", + "report_flow.label.violence_incitement": "التشجيع على العنف أو شرح كيفية إيذاء الأشخاص", + "report_flow.label.violence_misinfo": "العنف أو التطرف أو معلومات خاطئة ضارة", + "report_flow.label.violent_threat": "قولهم إنهم سيؤذون شخصًا ما", + "report_flow.label.worried_profile": "أنا قلق بشأن سلامتهم", + "report_flow.label.worried_self_harm": "أخشى أن يؤذوا أنفسهم", + "report_flow.label.worried_suicide": "أخشى أن يحاولوا الانتحار", + "report_flow.notice.need_more_info.body": "لمراجعة هذا، نحتاج إلى رسالة يذكرون فيها أعمارهم أو يوضحون أنهم أصغر من الحد الأدنى لسن {product_name}. قم بالإبلاغ عن تلك الرسالة بدلاً من ذلك.", + "report_flow.notice.need_more_info.title": "لا يمكننا اتخاذ إجراء بشأن هذا بعد", + "report_flow.notice.need_more_info_profile.body": "لمراجعة هذا، نحتاج إلى رؤية المكان الذي يذكرون فيه أعمارهم أو يوضحون أنهم أصغر من الحد الأدنى لسن {product_name}. قم بالإبلاغ عن تلك الرسالة أو الملف الشخصي بدلاً من ذلك.", + "report_flow.screen.abuse.title": "ما الذي يتضمنه؟", + "report_flow.screen.abuse_guild.title": "ماذا يفعل الأشخاص في هذا المجتمع؟", + "report_flow.screen.age_stated_message.title": "هل تذكر هذه الرسالة عمرهم؟", + "report_flow.screen.age_stated_profile.title": "هل يذكر ملفهم الشخصي عمرهم؟", + "report_flow.screen.community_parts.subtitle": "يمكنك اختيار أكثر من خيار.", + "report_flow.screen.community_parts.title": "ما أجزاء المجتمع المعنية؟", + "report_flow.screen.crisis_support.subtitle": "تقدم خطوط المساعدة في حالات الأزمات دعمًا مجانيًا وسريًا.", + "report_flow.screen.crisis_support.title": "هناك من يمكنه مساعدتك الآن", + "report_flow.screen.false_info.subtitle": "الآراء والسخرية والنقاش بحسن نية مسموح بها. يمكن الإبلاغ عن التشهير غير القانوني بموجب قانون الخدمات الرقمية.", + "report_flow.screen.false_info.subtitle_self_hosted": "الآراء والسخرية والنقاش بحسن نية مسموح بها.", + "report_flow.screen.false_info.title": "ما الذي يجعله مضللًا؟", + "report_flow.screen.harassment.title": "كيف يُستهدف شخص ما؟", + "report_flow.screen.hate.title": "كيف يهاجم الناس بسبب هويتهم؟", + "report_flow.screen.impersonation.subtitle": "يُسمح بالمحاكاة الساخرة أو لعب الأدوار المحددة بوضوح.", + "report_flow.screen.impersonation.title": "من يتم انتحال شخصيته، أم أنها عملية احتيال؟", + "report_flow.screen.minor_risk.title": "كيف يعرض هذا الشخص قاصرًا للخطر؟", + "report_flow.screen.minor_risk_guild.title": "كيف يعرض هذا المجتمع القاصرين للخطر؟", + "report_flow.screen.minor_sexual.subtitle": "يُعدّ المحتوى المرسوم أو المكتوب أو المُنشأ بالذكاء الاصطناعي ضمن هذا التصنيف عندما تُوصف شخصية بأنها قاصر أو تبدو بوضوح قبل سن البلوغ، ويشمل ذلك lolicon وshotacon وcub.", + "report_flow.screen.minor_sexual.title": "ما الذي رأيته ويتعلق بقاصر؟", + "report_flow.screen.minor_sexual_guild.title": "ما الذي رأيته ويتعلق بقاصرين؟", + "report_flow.screen.private_info.subtitle": "يمكنك اختيار أكثر من خيار. إذا كانت صورة حميمية تُظهر شخصًا دون 18 عامًا، فارجع وأبلغ عنها ضمن «إضفاء طابع جنسي على قاصر».", + "report_flow.screen.private_info.title": "ما المعلومات الخاصة المعنية؟", + "report_flow.screen.profile_abuse.title": "ما الضار في ملفهم الشخصي؟", + "report_flow.screen.profile_hate_violence.title": "ماذا يُظهر ملفهم الشخصي أو يروّج له؟", + "report_flow.screen.profile_intro.options_heading": "معرفة المزيد", + "report_flow.screen.profile_intro.subtitle": "أخبرنا ما المشكلة في هذا الملف الشخصي. لن يعرفوا من أبلغ عنهم.", + "report_flow.screen.profile_intro.title": "الإبلاغ عن الملف الشخصي", + "report_flow.screen.profile_minor_sexual.title": "ما الذي في ملفهم الشخصي يتعلق بقاصر؟", + "report_flow.screen.profile_parts.subtitle": "يمكنك اختيار أكثر من خيار.", + "report_flow.screen.profile_parts.title": "ما هي أجزاء ملفهم الشخصي التي تمثل مشكلة؟", + "report_flow.screen.profile_private_info.title": "ما المعلومات الخاصة الموجودة في ملفهم الشخصي؟", + "report_flow.screen.profile_sexual.title": "أخبرنا عن المحتوى الجنسي في ملفهم الشخصي", + "report_flow.screen.profile_threat.title": "كيف يتضمن ملفهم الشخصي العنف؟", + "report_flow.screen.root_guild.subtitle": "اختر الخيار الأقرب لما يحدث في هذا المجتمع.", + "report_flow.screen.root_guild.title": "ما المشكلة في هذا المجتمع؟", + "report_flow.screen.root_message.subtitle": "اختر الخيار الأقرب. يمكنك مراجعة كل شيء قبل إرساله.", + "report_flow.screen.root_message.title": "الإبلاغ عن الرسالة", + "report_flow.screen.root_user.subtitle": "اختر الخيار الأقرب لما يوجد في ملفهم الشخصي.", + "report_flow.screen.root_user.title": "ما المشكلة في ملفهم الشخصي؟", + "report_flow.screen.self_harm.subtitle": "لا يُعاقب أحد على قوله إنه يعاني. إخبارنا بأنك قلق يساعدنا في تقديم الدعم.", + "report_flow.screen.self_harm.title": "ماذا قالوا أو شاركوا؟", + "report_flow.screen.self_harm_guild.title": "ما الذي يشجع عليه الأعضاء؟", + "report_flow.screen.self_harm_profile.title": "ماذا يقول أو يظهر ملفهم الشخصي؟", + "report_flow.screen.sexual.subtitle": "إذا كان أي شخص ظاهر أو متورط دون سن 18 عامًا، فاختر «إضفاء طابع جنسي على قاصر».", + "report_flow.screen.sexual.title": "أخبرنا عن المحتوى الجنسي", + "report_flow.screen.sexual_guild.subtitle": "إذا كان أي شخص ظاهر أو متورط دون سن 18 عامًا، فاختر «إضفاء طابع جنسي على قاصرين».", + "report_flow.screen.sexual_guild.title": "أخبرنا عن المحتوى الجنسي في هذا المجتمع", + "report_flow.screen.something_else_guild.title": "ما الذي يحدث أيضًا في هذا المجتمع؟", + "report_flow.screen.something_else_message.title": "ما الذي يحدث أيضًا؟", + "report_flow.screen.something_else_user.title": "ما المشكلة الأخرى في هذا الملف الشخصي؟", + "report_flow.screen.spam_kind_guild.title": "كيف يسيء هذا المجتمع استخدام المنصة؟", + "report_flow.screen.spam_profile.title": "كيف يُساء استخدام الحساب؟", + "report_flow.screen.threat.title": "كيف يتضمن ذلك عنفًا؟", + "report_flow.screen.violence_misinfo.title": "أي من هذه الخيارات ينطبق عليه؟", + "report_flow.screen.violence_misinfo_guild.title": "أي من هذه الخيارات يحدث في هذا المجتمع؟" }); export default CONTENT_I18N_AR_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/bg.ts b/fluxer_api/src/api/content_i18n/locales/bg.ts index 607928148..8280dbc2e 100644 --- a/fluxer_api/src/api/content_i18n/locales/bg.ts +++ b/fluxer_api/src/api/content_i18n/locales/bg.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_BG_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Текстови канали", "guild.default_category_voice": "Гласови канали", "guild.default_channel_text": "общ", - "guild.default_channel_voice": "Общ" + "guild.default_channel_voice": "Общ", + "report_flow.description.name": "Потребителско име, показвано име или прякор в общността", + "report_flow.description.photo": "Какво използват за аватар и банер", + "report_flow.description.profile_text": "Биография, персонализиран статус или местоимения", + "report_flow.label.abuse": "Обидно или вредно съдържание", + "report_flow.label.account_trading": "Продажба на акаунти или на откраднати данни за вход или за карти", + "report_flow.label.account_trading_communities": "Купуване или продаване на акаунти или общности", + "report_flow.label.address": "Домашен адрес или работно място", + "report_flow.label.adult_content_no_gate": "Съдържание за възрастни без възрастово ограничение 18+", + "report_flow.label.adult_content_profile": "Явно съдържание за възрастни в профила им", + "report_flow.label.adult_content_unmarked": "Съдържание за възрастни в канал в общност, който не е маркиран като 18+", + "report_flow.label.age_no_message": "Не, не се споменава", + "report_flow.label.age_no_profile": "Не, не се споменава", + "report_flow.label.age_yes_message": "Да, споменава възрастта им", + "report_flow.label.age_yes_profile": "Да, профилът им споменава възрастта им", + "report_flow.label.atrocity_denial": "Отричане или възхваляване на Холокоста или други геноциди", + "report_flow.label.ban_evasion": "Заобикаляне на забрана с друг акаунт", + "report_flow.label.channel_names": "Имена на канали", + "report_flow.label.community_banner": "Банер на общността", + "report_flow.label.community_icon": "Икона на общността", + "report_flow.label.community_name": "Име на общността", + "report_flow.label.conversion_therapy": "Насърчаване на конверсионна терапия", + "report_flow.label.copyright": "Жалба за авторски права или търговска марка", + "report_flow.label.crisis_lines": "Телефонни линии за кризисна помощ в твоята страна", + "report_flow.label.csam": "Реални или генерирани от изкуствен интелект изображения или видеоклипове на сексуално насилие над деца", + "report_flow.label.discovery_listing": "Списък за откриване", + "report_flow.label.dislike": "Просто не е за мен", + "report_flow.label.dsa": "Съдържание, което е незаконно в ЕС (Акт за цифровите услуги)", + "report_flow.label.eating_disorder_promotion": "Насърчаване на хранителни разстройства", + "report_flow.label.eating_disorder_promotion_profile": "Профилът им насърчава хранителни разстройства", + "report_flow.label.email": "Имейл адрес", + "report_flow.label.emoji_stickers": "Персонализирани емоджи или стикери", + "report_flow.label.face_photo": "Снимка на лицето им", + "report_flow.label.fake_account": "Фалшив акаунт, бот или автоматизирана злоупотреба", + "report_flow.label.fake_account_profile": "Фалшив или измамен акаунт", + "report_flow.label.false_claims": "Разпространение на лъжи, за да се навреди на репутацията на конкретен човек", + "report_flow.label.false_info": "Разпространяване на вредна невярна информация", + "report_flow.label.financial": "Карта, банка или други финансови данни", + "report_flow.label.fraud": "Опитват се да измамят хора и да им вземат пари или акаунти", + "report_flow.label.fraud_guild": "Измамване на хора с цел отнемане на пари или акаунти", + "report_flow.label.government_id": "Документ за самоличност или личен номер", + "report_flow.label.graphic_violence": "Реално насилие, показано с цел шокиране, като кървави сцени или жестокост към животни", + "report_flow.label.harassment": "Булинг, тормоз или преследване", + "report_flow.label.harassment_direct": "Многократно насочване на обиди или тормоз към някого", + "report_flow.label.harassment_guild": "Тормоз, булинг или преследване на хора", + "report_flow.label.harassment_profile": "Профилът им тормози или набелязва мен или някой друг", + "report_flow.label.harmful_false_claims": "Фалшиви твърдения, които биха могли да причинят сериозни вреди в реалния свят", + "report_flow.label.hate": "Омраза или дискриминация срещу хора заради това, което са", + "report_flow.label.hate_dehumanizing": "Сравняване на хора с животни, болести или мръсотия или твърдение, че са по-малко от хора", + "report_flow.label.hate_incitement": "Призиви за насилие или изключване на дадена група", + "report_flow.label.hate_other": "Други атаки срещу хора заради това, което са", + "report_flow.label.hate_slurs": "Обиди, символи на омраза или унизителни стереотипи", + "report_flow.label.hate_violence": "Език на омразата, насилие или екстремизъм", + "report_flow.label.identity": "Сексуална ориентация, полова идентичност или интерсексуален статус", + "report_flow.label.illegal_activity": "Друга незаконна дейност", + "report_flow.label.illegal_goods": "Продажба на наркотици, оръжия или други незаконни стоки", + "report_flow.label.impersonation": "Представяне за някой друг или измама на хора", + "report_flow.label.impersonation_guild": "Представяне за {product_name} или за друга организация", + "report_flow.label.impersonation_organization": "Компания, марка или група", + "report_flow.label.impersonation_person": "Мен или някой близък до мен", + "report_flow.label.impersonation_public_figure": "Известна личност, например създател на съдържание или политик", + "report_flow.label.impersonation_staff": "Служител или поддръжка на {product_name}", + "report_flow.label.intimate_image_abuse": "Интимни изображения, споделени без съгласие, включително дийпфейкове, или заплаха за споделянето им", + "report_flow.label.intimate_image_abuse_guild": "Споделяне на интимни изображения без съгласие, включително дийпфейкове", + "report_flow.label.intimate_image_abuse_profile": "Интимни изображения на някого, споделени без съгласие, включително дийпфейкове", + "report_flow.label.intimate_photo": "Снимка с интимно или голо съдържание", + "report_flow.label.invite_splash": "Фон на поканата", + "report_flow.label.ip_address": "IP адрес", + "report_flow.label.learn_more": "Прочети правилата на общността на {product_name}", + "report_flow.label.legal_name": "Истинско или официално име", + "report_flow.label.lgbtq_targeting": "Умишлено използване на грешен пол или старо име за някого, разкриване на нечия ориентация или идентичност или отричане на нечия идентичност", + "report_flow.label.malware_guild": "Разпространение на зловреден софтуер или фишинг линкове", + "report_flow.label.malware_phishing": "Фишинг, зловреден софтуер или опити за хакване", + "report_flow.label.member_activity": "Какво публикуват или правят членовете там", + "report_flow.label.metric_manipulation": "Фалшифициране на броя на членовете или реакциите", + "report_flow.label.minor_contact": "Канене на непълнолетен на среща или искане от него на снимки или лични данни по начин, който изглежда хищнически", + "report_flow.label.minor_dating_community": "Това е общност за запознанства между непълнолетни", + "report_flow.label.minor_fictional": "Нарисувано, написано или генерирано от изкуствен интелект сексуално съдържание на измислено дете", + "report_flow.label.minor_grooming": "Груминг или изграждане на неподходящо доверие у непълнолетен", + "report_flow.label.minor_grooming_guild": "Членовете извършват груминг или изграждат неподходящо доверие у непълнолетни", + "report_flow.label.minor_in_adult_space": "Непълнолетен е в канал или общност за 18+", + "report_flow.label.minor_in_adult_space_guild": "Непълнолетни лица са допуснати в канали 18+", + "report_flow.label.minor_risk": "Излагане на непълнолетен на риск", + "report_flow.label.minor_risk_guild": "Излагане на непълнолетни на риск", + "report_flow.label.minor_sexual": "Сексуализиране на непълнолетен", + "report_flow.label.minor_sexual_contact": "Флирт с непълнолетен или изпращане на сексуални съобщения до него", + "report_flow.label.minor_sexual_contact_guild": "Членове флиртуват с непълнолетни или им изпращат сексуални съобщения", + "report_flow.label.minor_sexual_content": "Непълнолетен сам споделя сексуално съдържание", + "report_flow.label.minor_sexual_content_guild": "Непълнолетни публикуват или изпращат сексуално съдържание", + "report_flow.label.minor_sexual_content_profile": "Профил на непълнолетен със сексуално съдържание", + "report_flow.label.minor_sexual_guild": "Сексуализиране на непълнолетни", + "report_flow.label.minor_sexualization": "Сексуални коментари за непълнолетни", + "report_flow.label.minor_sexualization_guild": "Членове правят сексуални коментари за непълнолетни", + "report_flow.label.minor_sexualization_profile": "Сексуални коментари за непълнолетни в профила им", + "report_flow.label.name": "Имена", + "report_flow.label.other": "Нещо, което не е посочено тук", + "report_flow.label.other_identifying": "Друга информация, която може да идентифицира някого или да разкрие къде се намира", + "report_flow.label.permits_violations": "Позволява се сериозно нарушаване на правилата", + "report_flow.label.phone": "Телефонен номер", + "report_flow.label.photo": "Изображения", + "report_flow.label.platform_abuse": "Извличане на данни, автоматизация или друга злоупотреба с платформата", + "report_flow.label.private_conversation": "Лични съобщения, екранни снимки или записи на разговори", + "report_flow.label.private_info": "Споделяне на лични данни на някого", + "report_flow.label.private_info_profile": "Профилът им споделя лични данни на някого", + "report_flow.label.profile_text": "Текст на профила", + "report_flow.label.raid": "Организиране или участие в рейд или групова атака", + "report_flow.label.raid_guild": "Организиране на рейдове или групови атаки срещу хора или общности", + "report_flow.label.rude_language": "Ругатни или груби забележки", + "report_flow.label.self_harm": "Някой може да се самонарани или насърчава самонараняване", + "report_flow.label.self_harm_graphic": "Натуралистични изображения на самонараняване", + "report_flow.label.self_harm_guild": "Членове подтикват други да се наранят", + "report_flow.label.self_harm_pressure": "Натиск или предизвикване на някого да се нарани", + "report_flow.label.self_harm_pressure_guild": "Натиск или предизвикване на хора да се наранят", + "report_flow.label.self_harm_profile": "Профилът им загатва за самонараняване или го насърчава", + "report_flow.label.self_harm_promotion": "Насърчаване на самонараняване или споделяне на методи", + "report_flow.label.self_harm_promotion_profile": "Профилът им насърчава самонараняване", + "report_flow.label.sexual": "Сексуално съдържание", + "report_flow.label.sexual_exploitation": "Сексуална експлоатация, принуда или трафик на хора", + "report_flow.label.sexual_unwanted": "Сексуални изображения или съобщения, които не исках", + "report_flow.label.something_else": "Нещо друго", + "report_flow.label.spam": "Спам или нежелани реклами", + "report_flow.label.spam_bulk": "Масово изпращане на спам или реклама", + "report_flow.label.spam_or_manipulation": "Спам или манипулация на платформата", + "report_flow.label.spam_profile": "Профилът им се използва за спам или реклама", + "report_flow.label.suicide_promotion": "Насърчаване на самоубийство или споделяне на методи", + "report_flow.label.suicide_promotion_profile": "Профилът им насърчава самоубийство", + "report_flow.label.synthetic_media": "Фалшиви или създадени с изкуствен интелект медии, представени като реални", + "report_flow.label.terrorism": "Тероризъм или насилствен екстремизъм", + "report_flow.label.terrorism_guild": "Вербуване за или насърчаване на тероризъм или насилствен екстремизъм", + "report_flow.label.threat": "Заплахи или призиви за насилие", + "report_flow.label.threat_to_share": "Заплашват да го споделят", + "report_flow.label.too_young": "Те са под минималната възраст за използване на {product_name}", + "report_flow.label.unwanted_contact": "Преследване или многократни опити за контакт с мен или с някой друг, след като е бил помолен да спре, блокиран или отстранен", + "report_flow.label.violence_glorification": "Възхваляване на насилие в реалния свят", + "report_flow.label.violence_incitement": "Насърчаване на насилие или обясняване как да се нараняват хора", + "report_flow.label.violence_misinfo": "Насилие, екстремизъм или вредна невярна информация", + "report_flow.label.violent_threat": "Казва, че ще нарани някого", + "report_flow.label.worried_profile": "Притеснявам се за безопасността на този човек", + "report_flow.label.worried_self_harm": "Страхувам се, че този човек може да се нарани", + "report_flow.label.worried_suicide": "Страхувам се, че този човек може да опита да се самоубие", + "report_flow.notice.need_more_info.body": "За да прегледаме това, ни трябва съобщение, в което посочват на колко години са или ясно показват, че са под минималната възраст за {product_name}. Вместо това докладвай съобщението.", + "report_flow.notice.need_more_info.title": "Все още не можем да предприемем действия по това", + "report_flow.notice.need_more_info_profile.body": "За да прегледаме това, трябва да видим къде посочват на колко години са или ясно показват, че са под минималната възраст за {product_name}. Вместо това докладвай съобщението или профила.", + "report_flow.screen.abuse.title": "Какво включва?", + "report_flow.screen.abuse_guild.title": "Какво правят хората в тази общност?", + "report_flow.screen.age_stated_message.title": "Казва ли се в това съобщение на колко години е?", + "report_flow.screen.age_stated_profile.title": "Профилът им посочва ли възрастта им?", + "report_flow.screen.community_parts.subtitle": "Избери колкото ти трябват.", + "report_flow.screen.community_parts.title": "Кои части на общността са замесени?", + "report_flow.screen.crisis_support.subtitle": "Телефонните линии за кризисна помощ предлагат безплатна и поверителна подкрепа.", + "report_flow.screen.crisis_support.title": "Има кой да помогне още сега", + "report_flow.screen.false_info.subtitle": "Мнения, сатира и добросъвестен дебат са разрешени. За незаконна клевета може да се подаде сигнал съгласно Акта за цифровите услуги (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Мнения, сатира и добросъвестен дебат са разрешени.", + "report_flow.screen.false_info.title": "Какво има подвеждащо в него?", + "report_flow.screen.harassment.title": "Как е насочено това към някого?", + "report_flow.screen.hate.title": "Как атакува хора заради това кои са те?", + "report_flow.screen.impersonation.subtitle": "Ясно обозначената пародия или ролева игра са разрешени.", + "report_flow.screen.impersonation.title": "За кого се представя човекът или е измама?", + "report_flow.screen.minor_risk.title": "Как този човек излага непълнолетен на риск?", + "report_flow.screen.minor_risk_guild.title": "Как тази общност излага непълнолетни на риск?", + "report_flow.screen.minor_sexual.subtitle": "Нарисувано, написано или генерирано от изкуствен интелект съдържание също се отчита, когато героят е описан като непълнолетен или очевидно е в предпубертетна възраст, включително lolicon, shotacon и cub.", + "report_flow.screen.minor_sexual.title": "Какво видя, свързано с непълнолетен?", + "report_flow.screen.minor_sexual_guild.title": "Какво видя, свързано с непълнолетни?", + "report_flow.screen.private_info.subtitle": "Избери колкото ти трябват. Ако интимна снимка показва човек под 18 години, върни се и я докладвай като „Сексуализиране на непълнолетен“.", + "report_flow.screen.private_info.title": "Какви лични данни са замесени?", + "report_flow.screen.profile_abuse.title": "Какво има вредно в профила им?", + "report_flow.screen.profile_hate_violence.title": "Какво показва или насърчава профилът им?", + "report_flow.screen.profile_intro.options_heading": "Научи повече", + "report_flow.screen.profile_intro.subtitle": "Кажи ни какво не е наред с този профил. Човекът няма да научи кой го е докладвал.", + "report_flow.screen.profile_intro.title": "Докладване на профил", + "report_flow.screen.profile_minor_sexual.title": "Какво в профила им е свързано с непълнолетен?", + "report_flow.screen.profile_parts.subtitle": "Избери колкото ти трябват.", + "report_flow.screen.profile_parts.title": "Кои части на профила им са проблемни?", + "report_flow.screen.profile_private_info.title": "Какви лични данни има в профила им?", + "report_flow.screen.profile_sexual.title": "Разкажи ни за сексуалното съдържание в профила им", + "report_flow.screen.profile_threat.title": "Как профилът им е свързан с насилие?", + "report_flow.screen.root_guild.subtitle": "Избери най-близкото съвпадение за случващото се в тази общност.", + "report_flow.screen.root_guild.title": "Какво не е наред с тази общност?", + "report_flow.screen.root_message.subtitle": "Избери най-близкото съвпадение. Можеш да прегледаш всичко, преди да бъде изпратено.", + "report_flow.screen.root_message.title": "Докладване на съобщение", + "report_flow.screen.root_user.subtitle": "Избери най-близкото съвпадение за съдържанието в профила им.", + "report_flow.screen.root_user.title": "Какво не е наред с профила им?", + "report_flow.screen.self_harm.subtitle": "Никой не се наказва за това, че споделя, че му е трудно. Ако ни кажеш, че се тревожиш, ни помагаш да предложим подкрепа.", + "report_flow.screen.self_harm.title": "Какво казаха или споделиха?", + "report_flow.screen.self_harm_guild.title": "Какво насърчават членовете?", + "report_flow.screen.self_harm_profile.title": "Какво казва или показва профилът им?", + "report_flow.screen.sexual.subtitle": "Ако някой от показаните или замесените е под 18 години, избери „Сексуализиране на непълнолетен“.", + "report_flow.screen.sexual.title": "Разкажи ни за сексуалното съдържание", + "report_flow.screen.sexual_guild.subtitle": "Ако някой от показаните или замесените е под 18 години, избери „Сексуализиране на непълнолетни“.", + "report_flow.screen.sexual_guild.title": "Разкажи ни за сексуалното съдържание в тази общност", + "report_flow.screen.something_else_guild.title": "Какво друго се случва в тази общност?", + "report_flow.screen.something_else_message.title": "Какво друго се случва?", + "report_flow.screen.something_else_user.title": "Какво друго не е наред с този профил?", + "report_flow.screen.spam_kind_guild.title": "Как тази общност злоупотребява с платформата?", + "report_flow.screen.spam_profile.title": "Как се злоупотребява с акаунта?", + "report_flow.screen.threat.title": "Как е свързано с насилие?", + "report_flow.screen.violence_misinfo.title": "Кое от тези съвпада?", + "report_flow.screen.violence_misinfo_guild.title": "Кое от това се случва в тази общност?" }); export default CONTENT_I18N_BG_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/cs.ts b/fluxer_api/src/api/content_i18n/locales/cs.ts index 7fcaca1a6..617221e54 100644 --- a/fluxer_api/src/api/content_i18n/locales/cs.ts +++ b/fluxer_api/src/api/content_i18n/locales/cs.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_CS_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Textové kanály", "guild.default_category_voice": "Hlasové kanály", "guild.default_channel_text": "obecný", - "guild.default_channel_voice": "Obecný" + "guild.default_channel_voice": "Obecný", + "report_flow.description.name": "Uživatelské jméno, zobrazované jméno nebo přezdívka v komunitě", + "report_flow.description.photo": "Co používají jako avatar a banner", + "report_flow.description.profile_text": "Popis, vlastní stav nebo zájmena", + "report_flow.label.abuse": "Zneužívající nebo škodlivý obsah", + "report_flow.label.account_trading": "Prodej účtů nebo ukradených přihlašovacích údajů či údajů o kartě", + "report_flow.label.account_trading_communities": "Nákup nebo prodej účtů či komunit", + "report_flow.label.address": "Domácí adresa nebo pracoviště", + "report_flow.label.adult_content_no_gate": "Obsah pro dospělé bez věkového omezení 18+", + "report_flow.label.adult_content_profile": "Explicitní obsah pro dospělé v jejich profilu", + "report_flow.label.adult_content_unmarked": "Obsah pro dospělé v komunitním kanálu, který není označen jako 18+", + "report_flow.label.age_no_message": "Ne, nezmiňuje se o tom", + "report_flow.label.age_no_profile": "Ne, nezmiňuje se o tom", + "report_flow.label.age_yes_message": "Ano, zmiňuje jejich věk", + "report_flow.label.age_yes_profile": "Ano, jejich profil zmiňuje jejich věk", + "report_flow.label.atrocity_denial": "Popírání nebo oslavování holokaustu či jiných genocid", + "report_flow.label.ban_evasion": "Obcházení zákazu pomocí jiného účtu", + "report_flow.label.channel_names": "Názvy kanálů", + "report_flow.label.community_banner": "Banner komunity", + "report_flow.label.community_icon": "Ikona komunity", + "report_flow.label.community_name": "Název komunity", + "report_flow.label.conversion_therapy": "Propagace konverzní terapie", + "report_flow.label.copyright": "Stížnost na porušení autorských práv nebo ochranné známky", + "report_flow.label.crisis_lines": "Krizové linky ve vaší zemi", + "report_flow.label.csam": "Skutečné nebo pomocí AI vytvořené obrázky či videa sexuálního zneužívání dětí", + "report_flow.label.discovery_listing": "Záznam v seznamu objevování", + "report_flow.label.dislike": "Prostě to není pro mě", + "report_flow.label.dsa": "Obsah, který je v EU nelegální (akt o digitálních službách)", + "report_flow.label.eating_disorder_promotion": "Nabádání k poruchám příjmu potravy", + "report_flow.label.eating_disorder_promotion_profile": "Jejich profil propaguje poruchy příjmu potravy", + "report_flow.label.email": "E-mailová adresa", + "report_flow.label.emoji_stickers": "Vlastní emoji nebo samolepky", + "report_flow.label.face_photo": "Fotografie jejich obličeje", + "report_flow.label.fake_account": "Falešný účet, bot nebo automatizované zneužívání", + "report_flow.label.fake_account_profile": "Falešný nebo podvodný účet", + "report_flow.label.false_claims": "Šíření lží s cílem poškodit pověst konkrétní osoby", + "report_flow.label.false_info": "Šíření škodlivých falešných informací", + "report_flow.label.financial": "Údaje o kartě, bankovním účtu nebo jiné finanční údaje", + "report_flow.label.fraud": "Snaží se od lidí podvodně vylákat peníze nebo účty", + "report_flow.label.fraud_guild": "Podvodné vylákávání peněz nebo účtů od lidí", + "report_flow.label.government_id": "Doklad totožnosti nebo číslo dokladu totožnosti", + "report_flow.label.graphic_violence": "Skutečné násilí zobrazené za účelem šokování, například krvavé záběry nebo týrání zvířat", + "report_flow.label.harassment": "Šikana, obtěžování nebo pronásledování", + "report_flow.label.harassment_direct": "Opakované napadání někoho urážkami nebo jiným špatným zacházením", + "report_flow.label.harassment_guild": "Obtěžování, šikana nebo pronásledování lidí", + "report_flow.label.harassment_profile": "Jejich profil obtěžuje nebo cílí na mě nebo někoho jiného", + "report_flow.label.harmful_false_claims": "Nepravdivá tvrzení, která by mohla způsobit vážnou újmu v reálném světě", + "report_flow.label.hate": "Nenávist nebo diskriminace lidí za to, kým jsou", + "report_flow.label.hate_dehumanizing": "Přirovnávání lidí ke zvířatům, nemocem nebo špíně, nebo tvrzení, že jsou méně než lidé", + "report_flow.label.hate_incitement": "Výzvy k násilí vůči skupině nebo k jejímu vyloučení", + "report_flow.label.hate_other": "Jiné útoky na lidi za to, kým jsou", + "report_flow.label.hate_slurs": "Hanlivá označení, nenávistné symboly nebo ponižující stereotypy", + "report_flow.label.hate_violence": "Nenávist, násilí nebo extremismus", + "report_flow.label.identity": "Sexuální orientace, genderová identita nebo intersexualita", + "report_flow.label.illegal_activity": "Jiná nezákonná aktivita", + "report_flow.label.illegal_goods": "Prodej drog, zbraní nebo jiného nezákonného zboží", + "report_flow.label.impersonation": "Vydávání se za někoho jiného nebo podvádění lidí", + "report_flow.label.impersonation_guild": "Vydávání se za {product_name} nebo jinou organizaci", + "report_flow.label.impersonation_organization": "Společnost, značka nebo skupina", + "report_flow.label.impersonation_person": "Já nebo někdo blízký", + "report_flow.label.impersonation_public_figure": "Známá osoba, například tvůrce nebo politik", + "report_flow.label.impersonation_staff": "Zaměstnanci {product_name} nebo podpora", + "report_flow.label.intimate_image_abuse": "Intimní snímky sdílené bez souhlasu, včetně deepfake, nebo hrozba jejich sdílení", + "report_flow.label.intimate_image_abuse_guild": "Sdílení intimních snímků bez souhlasu, včetně deepfake", + "report_flow.label.intimate_image_abuse_profile": "Intimní snímky někoho sdílené bez souhlasu, včetně deepfake", + "report_flow.label.intimate_photo": "Intimní nebo nahý snímek", + "report_flow.label.invite_splash": "Pozadí pozvánky", + "report_flow.label.ip_address": "IP adresa", + "report_flow.label.learn_more": "Přečtěte si Komunitní pokyny {product_name}", + "report_flow.label.legal_name": "Skutečné nebo právní jméno", + "report_flow.label.lgbtq_targeting": "Úmyslný misgendering, deadnaming nebo zveřejnění něčí orientace či identity bez souhlasu (outing), nebo popírání jeho identity", + "report_flow.label.malware_guild": "Distribuce malwaru nebo phishingových odkazů", + "report_flow.label.malware_phishing": "Pokusy o phishing, malware nebo hacking", + "report_flow.label.member_activity": "Co tam členové zveřejňují nebo dělají", + "report_flow.label.metric_manipulation": "Falšování počtu členů nebo reakcí", + "report_flow.label.minor_contact": "Žádání nezletilého o schůzku, fotografie nebo osobní údaje způsobem, který působí predátorsky", + "report_flow.label.minor_dating_community": "Jedná se o komunitu pro seznamování mezi nezletilými", + "report_flow.label.minor_fictional": "Kreslený, psaný nebo pomocí AI vytvořený sexuální obsah zobrazující fiktivní dítě", + "report_flow.label.minor_grooming": "Grooming nebo budování nevhodné důvěry u nezletilého", + "report_flow.label.minor_grooming_guild": "Členové provádějí grooming nebo budují nevhodnou důvěru u nezletilých", + "report_flow.label.minor_in_adult_space": "Nezletilý je v kanálu nebo komunitě 18+", + "report_flow.label.minor_in_adult_space_guild": "Nezletilým je povolen přístup do kanálů 18+", + "report_flow.label.minor_risk": "Ohrožování nezletilého", + "report_flow.label.minor_risk_guild": "Ohrožování nezletilých", + "report_flow.label.minor_sexual": "Sexualizace nezletilé osoby", + "report_flow.label.minor_sexual_contact": "Flirtování s nezletilým nebo posílání sexuálních zpráv nezletilému", + "report_flow.label.minor_sexual_contact_guild": "Členové flirtují s nezletilými nebo jim posílají sexuální zprávy", + "report_flow.label.minor_sexual_content": "Nezletilý sám sdílí sexuální obsah", + "report_flow.label.minor_sexual_content_guild": "Nezletilí zveřejňují nebo posílají sexuální obsah", + "report_flow.label.minor_sexual_content_profile": "Profil nezletilé osoby se sexuálním obsahem", + "report_flow.label.minor_sexual_guild": "Sexualizace nezletilých osob", + "report_flow.label.minor_sexualization": "Sexuální komentáře o nezletilých", + "report_flow.label.minor_sexualization_guild": "Členové sexuálně komentují nezletilé", + "report_flow.label.minor_sexualization_profile": "Sexuální komentáře o nezletilých v jejich profilu", + "report_flow.label.name": "Jména", + "report_flow.label.other": "Něco, co zde není uvedeno", + "report_flow.label.other_identifying": "Další informace, které by mohly někoho identifikovat nebo lokalizovat", + "report_flow.label.permits_violations": "Umožňuje vážné porušování pravidel", + "report_flow.label.phone": "Telefonní číslo", + "report_flow.label.photo": "Obrázky", + "report_flow.label.platform_abuse": "Scraping, automatizace nebo jiné zneužití platformy", + "report_flow.label.private_conversation": "Soukromé zprávy, snímky obrazovky nebo nahrávky hovorů", + "report_flow.label.private_info": "Sdílení soukromých údajů někoho jiného", + "report_flow.label.private_info_profile": "Jejich profil sdílí soukromé údaje někoho jiného", + "report_flow.label.profile_text": "Profilový text", + "report_flow.label.raid": "Organizování nebo připojení se k nájezdu nebo hromadnému útoku", + "report_flow.label.raid_guild": "Organizování nájezdů nebo hromadných útoků proti lidem nebo komunitám", + "report_flow.label.rude_language": "Nadávky nebo hrubé poznámky", + "report_flow.label.self_harm": "Někdo by si mohl ublížit nebo nabádá k sebepoškozování", + "report_flow.label.self_harm_graphic": "Drastické snímky sebepoškozování", + "report_flow.label.self_harm_guild": "Členové nabádají ostatní k sebepoškozování", + "report_flow.label.self_harm_pressure": "Nátlak na někoho nebo vyzývání někoho k sebepoškozování", + "report_flow.label.self_harm_pressure_guild": "Nátlak na lidi nebo vyzývání lidí k sebepoškozování", + "report_flow.label.self_harm_profile": "Jejich profil naznačuje sebepoškozování nebo k němu nabádá", + "report_flow.label.self_harm_promotion": "Nabádání k sebepoškozování nebo sdílení metod", + "report_flow.label.self_harm_promotion_profile": "Jejich profil nabádá k sebepoškozování", + "report_flow.label.sexual": "Sexuální obsah", + "report_flow.label.sexual_exploitation": "Sexuální vykořisťování, nátlak nebo obchodování s lidmi", + "report_flow.label.sexual_unwanted": "Nevyžádané sexuální obrázky nebo zprávy", + "report_flow.label.something_else": "Něco jiného", + "report_flow.label.spam": "Spam nebo nevyžádané reklamy", + "report_flow.label.spam_bulk": "Hromadné rozesílání spamu nebo reklamy", + "report_flow.label.spam_or_manipulation": "Spam nebo manipulace s platformou", + "report_flow.label.spam_profile": "Jejich profil je používán ke spamu nebo reklamě", + "report_flow.label.suicide_promotion": "Nabádání k sebevraždě nebo sdílení metod", + "report_flow.label.suicide_promotion_profile": "Jejich profil nabádá k sebevraždě", + "report_flow.label.synthetic_media": "Falešná nebo umělou inteligencí vytvořená média prezentovaná jako skutečná", + "report_flow.label.terrorism": "Terorismus nebo násilný extremismus", + "report_flow.label.terrorism_guild": "Nábor nebo propagace terorismu či násilného extremismu", + "report_flow.label.threat": "Výhrůžky nebo výzvy k násilí", + "report_flow.label.threat_to_share": "Vyhrožují, že to budou sdílet", + "report_flow.label.too_young": "Tato osoba je mladší než minimální věk pro používání {product_name}", + "report_flow.label.unwanted_contact": "Pronásledování nebo opakované kontaktování mě či někoho jiného i po výzvě k ukončení kontaktu, po zablokování nebo odebrání", + "report_flow.label.violence_glorification": "Oslavování násilí v reálném světě", + "report_flow.label.violence_incitement": "Podněcování k násilí nebo vysvětlování, jak ublížit lidem", + "report_flow.label.violence_misinfo": "Násilí, extremismus nebo škodlivé falešné informace", + "report_flow.label.violent_threat": "Říká, že někomu ublíží", + "report_flow.label.worried_profile": "Mám obavy o bezpečnost této osoby", + "report_flow.label.worried_self_harm": "Obávám se, že by si tato osoba mohla ublížit", + "report_flow.label.worried_suicide": "Obávám se, že by se tato osoba mohla pokusit o sebevraždu", + "report_flow.notice.need_more_info.body": "Abychom to mohli posoudit, potřebujeme zprávu, ve které daná osoba uvádí svůj věk nebo jasně dává najevo, že je mladší než minimální věk pro používání {product_name}. Nahlaste místo toho tu zprávu.", + "report_flow.notice.need_more_info.title": "Zatím na to nemůžeme reagovat", + "report_flow.notice.need_more_info_profile.body": "Abychom to mohli posoudit, potřebujeme vidět, kde daná osoba uvádí svůj věk nebo jasně dává najevo, že je mladší než minimální věk pro používání {product_name}. Nahlaste místo toho tu zprávu nebo ten profil.", + "report_flow.screen.abuse.title": "Čeho se to týká?", + "report_flow.screen.abuse_guild.title": "Co dělají lidé v této komunitě?", + "report_flow.screen.age_stated_message.title": "Uvádí tato zpráva jejich věk?", + "report_flow.screen.age_stated_profile.title": "Uvádí jejich profil, kolik jim je let?", + "report_flow.screen.community_parts.subtitle": "Vyberte tolik, kolik potřebujete.", + "report_flow.screen.community_parts.title": "Kterých částí komunity se to týká?", + "report_flow.screen.crisis_support.subtitle": "Krizové linky nabízejí bezplatnou a důvěrnou podporu.", + "report_flow.screen.crisis_support.title": "Někdo vám může pomoci hned teď", + "report_flow.screen.false_info.subtitle": "Názory, satira a debaty v dobré víře jsou povoleny. Nezákonné pomluvy lze nahlásit podle aktu o digitálních službách.", + "report_flow.screen.false_info.subtitle_self_hosted": "Názory, satira a debaty v dobré víře jsou povoleny.", + "report_flow.screen.false_info.title": "Co je na tom zavádějící?", + "report_flow.screen.harassment.title": "Jak je někdo napadán?", + "report_flow.screen.hate.title": "Jak útočí na lidi za to, kým jsou?", + "report_flow.screen.impersonation.subtitle": "Jasně označená parodie nebo hraní rolí jsou povoleny.", + "report_flow.screen.impersonation.title": "Za koho se někdo vydává, nebo jde o podvod?", + "report_flow.screen.minor_risk.title": "Jak tato osoba ohrožuje nezletilého?", + "report_flow.screen.minor_risk_guild.title": "Jak tato komunita ohrožuje nezletilé?", + "report_flow.screen.minor_sexual.subtitle": "Zahrnuje to i kreslený, psaný nebo AI obsah, pokud je postava popsána jako nezletilá nebo je zjevně předpubertální, včetně lolicon, shotacon a cub.", + "report_flow.screen.minor_sexual.title": "Co jste viděli v souvislosti s nezletilou osobou?", + "report_flow.screen.minor_sexual_guild.title": "Co jste viděli v souvislosti s nezletilými?", + "report_flow.screen.private_info.subtitle": "Vyberte tolik, kolik potřebujete. Pokud intimní fotografie zobrazuje osobu mladší 18 let, vraťte se a nahlaste ji v části „Sexualizace nezletilé osoby“.", + "report_flow.screen.private_info.title": "Které soukromé údaje jsou v tom zahrnuty?", + "report_flow.screen.profile_abuse.title": "Co je na jejich profilu škodlivé?", + "report_flow.screen.profile_hate_violence.title": "Co jejich profil ukazuje nebo propaguje?", + "report_flow.screen.profile_intro.options_heading": "Zjistit více", + "report_flow.screen.profile_intro.subtitle": "Řekněte nám, co je s tímto profilem v nepořádku. Nebude jim řečeno, kdo je nahlásil.", + "report_flow.screen.profile_intro.title": "Nahlásit profil", + "report_flow.screen.profile_minor_sexual.title": "Co v jejich profilu zahrnuje nezletilou osobu?", + "report_flow.screen.profile_parts.subtitle": "Vyberte tolik, kolik potřebujete.", + "report_flow.screen.profile_parts.title": "Které části jejich profilu jsou problém?", + "report_flow.screen.profile_private_info.title": "Jaké soukromé údaje jsou v jejich profilu?", + "report_flow.screen.profile_sexual.title": "Řekněte nám o sexuálním obsahu v jejich profilu", + "report_flow.screen.profile_threat.title": "Jak jejich profil souvisí s násilím?", + "report_flow.screen.root_guild.subtitle": "Vyberte možnost, která nejlépe odpovídá tomu, co se v této komunitě děje.", + "report_flow.screen.root_guild.title": "Co je s touto komunitou špatně?", + "report_flow.screen.root_message.subtitle": "Vyberte možnost, která nejlépe odpovídá. Před odesláním si vše můžete zkontrolovat.", + "report_flow.screen.root_message.title": "Nahlásit zprávu", + "report_flow.screen.root_user.subtitle": "Vyberte možnost, která nejlépe odpovídá tomu, co je v jejich profilu.", + "report_flow.screen.root_user.title": "Co je s jejich profilem špatně?", + "report_flow.screen.self_harm.subtitle": "Nikdo není potrestán za to, že řekne, že se potýká s problémy. Když nám řeknete, že se obáváte, pomůžete nám nabídnout podporu.", + "report_flow.screen.self_harm.title": "Co řekli nebo sdíleli?", + "report_flow.screen.self_harm_guild.title": "K čemu členové nabádají?", + "report_flow.screen.self_harm_profile.title": "Co říká nebo ukazuje jejich profil?", + "report_flow.screen.sexual.subtitle": "Pokud je kdokoli zobrazený nebo zapojený mladší 18 let, vyberte „Sexualizace nezletilé osoby“.", + "report_flow.screen.sexual.title": "Řekněte nám o sexuálním obsahu", + "report_flow.screen.sexual_guild.subtitle": "Pokud je kdokoli zobrazený nebo zapojený mladší 18 let, vyberte „Sexualizace nezletilých osob“.", + "report_flow.screen.sexual_guild.title": "Řekněte nám o sexuálním obsahu v této komunitě", + "report_flow.screen.something_else_guild.title": "Co dalšího se v této komunitě děje?", + "report_flow.screen.something_else_message.title": "Co dalšího se děje?", + "report_flow.screen.something_else_user.title": "Co dalšího je s tímto profilem špatně?", + "report_flow.screen.spam_kind_guild.title": "Jak tato komunita zneužívá platformu?", + "report_flow.screen.spam_profile.title": "Jak je účet zneužíván?", + "report_flow.screen.threat.title": "Jak to souvisí s násilím?", + "report_flow.screen.violence_misinfo.title": "Co z toho odpovídá?", + "report_flow.screen.violence_misinfo_guild.title": "Co z toho se v této komunitě děje?" }); export default CONTENT_I18N_CS_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/da.ts b/fluxer_api/src/api/content_i18n/locales/da.ts index 7918b7dfc..62ee602ac 100644 --- a/fluxer_api/src/api/content_i18n/locales/da.ts +++ b/fluxer_api/src/api/content_i18n/locales/da.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_DA_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Tekstkanaler", "guild.default_category_voice": "Talekanaler", "guild.default_channel_text": "generelt", - "guild.default_channel_voice": "Generelt" + "guild.default_channel_voice": "Generelt", + "report_flow.description.name": "Brugernavn, visningsnavn eller kaldenavn i fællesskabet", + "report_flow.description.photo": "Hvad de bruger som avatar og banner", + "report_flow.description.profile_text": "Bio, tilpasset status eller pronominer", + "report_flow.label.abuse": "Krænkende eller skadeligt indhold", + "report_flow.label.account_trading": "Salg af konti eller stjålne login- eller kortoplysninger", + "report_flow.label.account_trading_communities": "Køb eller salg af konti eller fællesskaber", + "report_flow.label.address": "Hjemmeadresse eller arbejdsplads", + "report_flow.label.adult_content_no_gate": "Voksenindhold uden en 18+-aldersbegrænsning", + "report_flow.label.adult_content_profile": "Eksplicit voksenindhold i deres profil", + "report_flow.label.adult_content_unmarked": "Voksenindhold i en fællesskabskanal, der ikke er markeret som 18+", + "report_flow.label.age_no_message": "Nej, den nævner det ikke", + "report_flow.label.age_no_profile": "Nej, den nævner det ikke", + "report_flow.label.age_yes_message": "Ja, den nævner deres alder", + "report_flow.label.age_yes_profile": "Ja, deres profil nævner deres alder", + "report_flow.label.atrocity_denial": "Benægtelse eller hyldest af Holocaust eller andre folkedrab", + "report_flow.label.ban_evasion": "Omgåelse af et forbud med en anden konto", + "report_flow.label.channel_names": "Kanalnavne", + "report_flow.label.community_banner": "Fællesskabsbanner", + "report_flow.label.community_icon": "Fællesskabsikon", + "report_flow.label.community_name": "Navn på fællesskab", + "report_flow.label.conversion_therapy": "Fremmer konverteringsterapi", + "report_flow.label.copyright": "Klage over ophavsret eller varemærke", + "report_flow.label.crisis_lines": "Kriselinjer i dit land", + "report_flow.label.csam": "Ægte eller AI-genererede billeder eller videoer af seksuelle overgreb mod børn", + "report_flow.label.discovery_listing": "Opslag i Opdag", + "report_flow.label.dislike": "Det er bare ikke noget for mig", + "report_flow.label.dsa": "Indhold, der er ulovligt i EU (retsakten om digitale tjenester, DSA)", + "report_flow.label.eating_disorder_promotion": "Opfordrer til spiseforstyrrelser", + "report_flow.label.eating_disorder_promotion_profile": "Deres profil fremmer spiseforstyrrelser", + "report_flow.label.email": "E-mailadresse", + "report_flow.label.emoji_stickers": "Tilpassede emoji eller klistermærker", + "report_flow.label.face_photo": "Billede af deres ansigt", + "report_flow.label.fake_account": "Falsk konto, bot eller automatiseret misbrug", + "report_flow.label.fake_account_profile": "En falsk eller vildledende konto", + "report_flow.label.false_claims": "Spredning af løgne for at skade en bestemt persons omdømme", + "report_flow.label.false_info": "Spreder skadelig falsk information", + "report_flow.label.financial": "Kort-, bank- eller andre finansielle oplysninger", + "report_flow.label.fraud": "De forsøger at franarre folk penge eller konti", + "report_flow.label.fraud_guild": "At franarre folk penge eller konti", + "report_flow.label.government_id": "ID-dokument eller ID-nummer", + "report_flow.label.graphic_violence": "Ægte vold vist for at chokere, som gore eller dyremishandling", + "report_flow.label.harassment": "Mobning, chikane eller forfølgelse", + "report_flow.label.harassment_direct": "Gentagne fornærmelser eller krænkelser rettet mod nogen", + "report_flow.label.harassment_guild": "Chikanerer, mobber eller forfølger folk", + "report_flow.label.harassment_profile": "Deres profil chikanerer eller retter sig mod mig eller en anden", + "report_flow.label.harmful_false_claims": "Falske påstande, der kan forårsage alvorlig skade i den virkelige verden", + "report_flow.label.hate": "Had eller diskrimination mod folk på grund af, hvem de er", + "report_flow.label.hate_dehumanizing": "Sammenligner folk med dyr, sygdom eller snavs, eller kalder dem mindre end mennesker", + "report_flow.label.hate_incitement": "Opfordrer til vold eller udelukkelse af en gruppe", + "report_flow.label.hate_other": "Andre angreb på folk på grund af, hvem de er", + "report_flow.label.hate_slurs": "Skældsord, hadefulde symboler eller nedværdigende stereotyper", + "report_flow.label.hate_violence": "Had, vold eller ekstremisme", + "report_flow.label.identity": "Seksuel orientering, kønsidentitet eller interkønnet status", + "report_flow.label.illegal_activity": "Anden ulovlig aktivitet", + "report_flow.label.illegal_goods": "Salg af stoffer, våben eller andet ulovligt", + "report_flow.label.impersonation": "Udgiver sig for at være en anden eller svindler folk", + "report_flow.label.impersonation_guild": "Udgiver sig for at være {product_name} eller en anden organisation", + "report_flow.label.impersonation_organization": "En virksomhed, et brand eller en gruppe", + "report_flow.label.impersonation_person": "Mig eller en person tæt på mig", + "report_flow.label.impersonation_public_figure": "En kendt person, f.eks. en indholdsskaber eller politiker", + "report_flow.label.impersonation_staff": "Personale eller support hos {product_name}", + "report_flow.label.intimate_image_abuse": "Intime billeder delt uden samtykke, herunder deepfakes, eller en trussel om at dele dem", + "report_flow.label.intimate_image_abuse_guild": "Deling af intime billeder uden samtykke, herunder deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime billeder af nogen delt uden samtykke, herunder deepfakes", + "report_flow.label.intimate_photo": "Intimt billede eller nøgenbillede", + "report_flow.label.invite_splash": "Invitationsbaggrund", + "report_flow.label.ip_address": "IP-adresse", + "report_flow.label.learn_more": "Læs fællesskabsretningslinjerne for {product_name}", + "report_flow.label.legal_name": "Rigtigt eller juridisk navn", + "report_flow.label.lgbtq_targeting": "Bevidst at bruge forkert køn om nogen, deadnaming eller outing af nogen, eller benægtelse af nogens identitet", + "report_flow.label.malware_guild": "Distribution af malware eller phishing-links", + "report_flow.label.malware_phishing": "Phishing, malware eller hackingforsøg", + "report_flow.label.member_activity": "Hvad medlemmer poster eller gør der", + "report_flow.label.metric_manipulation": "Forfalskning af antal medlemmer eller reaktioner", + "report_flow.label.minor_contact": "At bede en mindreårig om at mødes eller om billeder eller personlige oplysninger på en måde, der tyder på, at de vil udnytte den mindreårige", + "report_flow.label.minor_dating_community": "Det er et fællesskab for dating mellem mindreårige", + "report_flow.label.minor_fictional": "Tegnet, skrevet eller AI-genereret seksuelt indhold af et fiktivt barn", + "report_flow.label.minor_grooming": "Grooming eller opbygning af upassende tillid til en mindreårig", + "report_flow.label.minor_grooming_guild": "Medlemmer groomer mindreårige eller opbygger upassende tillid til dem", + "report_flow.label.minor_in_adult_space": "En mindreårig er i en 18+-kanal eller et 18+-fællesskab", + "report_flow.label.minor_in_adult_space_guild": "Mindreårige får lov til at være i 18+-kanaler", + "report_flow.label.minor_risk": "Udsætter en mindreårig for fare", + "report_flow.label.minor_risk_guild": "Udsætter mindreårige for fare", + "report_flow.label.minor_sexual": "Seksualisering af en mindreårig", + "report_flow.label.minor_sexual_contact": "Flirt med en mindreårig eller seksuelle beskeder til vedkommende", + "report_flow.label.minor_sexual_contact_guild": "Medlemmer flirter med mindreårige eller sender dem seksuelle beskeder", + "report_flow.label.minor_sexual_content": "En mindreårig deler selv seksuelt indhold", + "report_flow.label.minor_sexual_content_guild": "Mindreårige slår seksuelt indhold op eller sender det", + "report_flow.label.minor_sexual_content_profile": "En mindreårigs profil med seksuelt indhold", + "report_flow.label.minor_sexual_guild": "Seksualisering af mindreårige", + "report_flow.label.minor_sexualization": "Seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_guild": "Medlemmer kommer med seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_profile": "Seksuelle kommentarer om mindreårige i deres profil", + "report_flow.label.name": "Navne", + "report_flow.label.other": "Noget, der ikke er nævnt her", + "report_flow.label.other_identifying": "Andre oplysninger, der kan identificere eller lokalisere nogen", + "report_flow.label.permits_violations": "Det tillader alvorlige regelbrud", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Billeder", + "report_flow.label.platform_abuse": "Scraping, automatisering eller andet platformsmisbrug", + "report_flow.label.private_conversation": "Private beskeder, skærmbilleder eller optagelser af opkald", + "report_flow.label.private_info": "Deling af en persons private oplysninger", + "report_flow.label.private_info_profile": "Deres profil deler en persons private oplysninger", + "report_flow.label.profile_text": "Profiltekst", + "report_flow.label.raid": "Organisering eller deltagelse i et raid eller en hetz", + "report_flow.label.raid_guild": "Organisering af raids eller hetz mod personer eller fællesskaber", + "report_flow.label.rude_language": "Banning eller uhøflige bemærkninger", + "report_flow.label.self_harm": "Nogen kan komme til at skade sig selv eller opfordrer til selvskade", + "report_flow.label.self_harm_graphic": "Grafiske billeder af selvskade", + "report_flow.label.self_harm_guild": "Medlemmer opfordrer andre til at skade sig selv", + "report_flow.label.self_harm_pressure": "Presser eller udfordrer nogen til at skade sig selv", + "report_flow.label.self_harm_pressure_guild": "Presser eller udfordrer folk til at skade sig selv", + "report_flow.label.self_harm_profile": "Deres profil antyder selvskade eller opfordrer til det", + "report_flow.label.self_harm_promotion": "Opfordrer til selvskade eller deler metoder", + "report_flow.label.self_harm_promotion_profile": "Deres profil opfordrer til selvskade", + "report_flow.label.sexual": "Seksuelt indhold", + "report_flow.label.sexual_exploitation": "Seksuel udnyttelse, tvang eller menneskehandel", + "report_flow.label.sexual_unwanted": "Seksuelle billeder eller beskeder, jeg ikke ønskede", + "report_flow.label.something_else": "Noget andet", + "report_flow.label.spam": "Spam eller uønskede reklamer", + "report_flow.label.spam_bulk": "Sender spam eller reklamer i store mængder", + "report_flow.label.spam_or_manipulation": "Spam eller platformsmanipulation", + "report_flow.label.spam_profile": "Deres profil bruges til spam eller reklamer", + "report_flow.label.suicide_promotion": "Opfordrer til selvmord eller deler metoder", + "report_flow.label.suicide_promotion_profile": "Deres profil opfordrer til selvmord", + "report_flow.label.synthetic_media": "Falske eller AI-genererede medier præsenteret som ægte", + "report_flow.label.terrorism": "Terrorisme eller voldelig ekstremisme", + "report_flow.label.terrorism_guild": "Rekruttering til eller fremme af terrorisme eller voldelig ekstremisme", + "report_flow.label.threat": "Trusler eller opfordringer til vold", + "report_flow.label.threat_to_share": "De truer med at dele det", + "report_flow.label.too_young": "De er under minimumsalderen for at bruge {product_name}", + "report_flow.label.unwanted_contact": "Forfølgelse eller gentagen kontakt til mig eller en anden, efter at personen er blevet bedt om at stoppe, er blevet blokeret eller fjernet", + "report_flow.label.violence_glorification": "Forherligelse af vold i den virkelige verden", + "report_flow.label.violence_incitement": "Opmuntring til vold eller forklaring af, hvordan man skader folk", + "report_flow.label.violence_misinfo": "Vold, ekstremisme eller skadelig falsk information", + "report_flow.label.violent_threat": "Siger, at de vil skade nogen", + "report_flow.label.worried_profile": "Jeg er bekymret for deres sikkerhed", + "report_flow.label.worried_self_harm": "Jeg er bange for, at de kan komme til at skade sig selv", + "report_flow.label.worried_suicide": "Jeg er bange for, at de kan forsøge at begå selvmord", + "report_flow.notice.need_more_info.body": "For at kunne gennemgå dette har vi brug for en besked, hvor de siger, hvor gamle de er, eller gør det klart, at de er under minimumsalderen for at bruge {product_name}. Anmeld i stedet den besked.", + "report_flow.notice.need_more_info.title": "Vi kan ikke gøre noget ved det endnu", + "report_flow.notice.need_more_info_profile.body": "For at kunne gennemgå dette har vi brug for at se, hvor de siger, hvor gamle de er, eller gør det klart, at de er under minimumsalderen for at bruge {product_name}. Anmeld i stedet den besked eller profil.", + "report_flow.screen.abuse.title": "Hvad handler det om?", + "report_flow.screen.abuse_guild.title": "Hvad laver folk i dette fællesskab?", + "report_flow.screen.age_stated_message.title": "Siger denne besked, hvor gamle de er?", + "report_flow.screen.age_stated_profile.title": "Siger deres profil, hvor gamle de er?", + "report_flow.screen.community_parts.subtitle": "Vælg så mange, som du har brug for.", + "report_flow.screen.community_parts.title": "Hvilke dele af fællesskabet er involveret?", + "report_flow.screen.crisis_support.subtitle": "Kriselinjer tilbyder gratis, fortrolig støtte.", + "report_flow.screen.crisis_support.title": "Nogen kan hjælpe lige nu", + "report_flow.screen.false_info.subtitle": "Meninger, satire og debat i god tro er tilladt. Ulovlig ærekrænkelse kan anmeldes i henhold til retsakten om digitale tjenester (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meninger, satire og debat i god tro er tilladt.", + "report_flow.screen.false_info.title": "Hvad er misvisende ved det?", + "report_flow.screen.harassment.title": "Hvordan bliver nogen gjort til mål?", + "report_flow.screen.hate.title": "Hvordan angriber det folk på grund af, hvem de er?", + "report_flow.screen.impersonation.subtitle": "Tydeligt mærket parodi eller rollespil er tilladt.", + "report_flow.screen.impersonation.title": "Hvem udgiver nogen sig for at være, eller er det svindel?", + "report_flow.screen.minor_risk.title": "Hvordan bringer denne person en mindreårig i fare?", + "report_flow.screen.minor_risk_guild.title": "Hvordan bringer dette fællesskab mindreårige i fare?", + "report_flow.screen.minor_sexual.subtitle": "Tegnet, skrevet eller AI-indhold tæller, når en karakter beskrives som mindreårig eller er tydeligt præpubertær, herunder lolicon, shotacon og cub.", + "report_flow.screen.minor_sexual.title": "Hvad så du, der involverede en mindreårig?", + "report_flow.screen.minor_sexual_guild.title": "Hvad så du, der involverede mindreårige?", + "report_flow.screen.private_info.subtitle": "Vælg så mange, som du har brug for. Hvis et intimt billede viser en person under 18, skal du gå tilbage og anmelde det under »Seksualisering af en mindreårig«.", + "report_flow.screen.private_info.title": "Hvilke private oplysninger er involveret?", + "report_flow.screen.profile_abuse.title": "Hvad er skadeligt ved deres profil?", + "report_flow.screen.profile_hate_violence.title": "Hvad viser eller fremmer deres profil?", + "report_flow.screen.profile_intro.options_heading": "Læs mere", + "report_flow.screen.profile_intro.subtitle": "Fortæl os, hvad der er galt med denne profil. De vil ikke få at vide, hvem der har anmeldt dem.", + "report_flow.screen.profile_intro.title": "Anmeld profil", + "report_flow.screen.profile_minor_sexual.title": "Hvad i deres profil involverer en mindreårig?", + "report_flow.screen.profile_parts.subtitle": "Vælg så mange, som du har brug for.", + "report_flow.screen.profile_parts.title": "Hvilke dele af deres profil er et problem?", + "report_flow.screen.profile_private_info.title": "Hvilke private oplysninger står der i deres profil?", + "report_flow.screen.profile_sexual.title": "Fortæl os om det seksuelle indhold i deres profil", + "report_flow.screen.profile_threat.title": "Hvordan involverer deres profil vold?", + "report_flow.screen.root_guild.subtitle": "Vælg den mest passende beskrivelse af, hvad der foregår i dette fællesskab.", + "report_flow.screen.root_guild.title": "Hvad er der galt med dette fællesskab?", + "report_flow.screen.root_message.subtitle": "Vælg den mest passende beskrivelse. Du kan tjekke alt, før det bliver sendt.", + "report_flow.screen.root_message.title": "Anmeld besked", + "report_flow.screen.root_user.subtitle": "Vælg den mest passende beskrivelse af, hvad der er på deres profil.", + "report_flow.screen.root_user.title": "Hvad er der galt med deres profil?", + "report_flow.screen.self_harm.subtitle": "Ingen bliver straffet for at sige, at de kæmper. At fortælle os, at du er bekymret, hjælper os med at tilbyde støtte.", + "report_flow.screen.self_harm.title": "Hvad sagde eller delte de?", + "report_flow.screen.self_harm_guild.title": "Hvad opfordrer medlemmerne til?", + "report_flow.screen.self_harm_profile.title": "Hvad siger eller viser deres profil?", + "report_flow.screen.sexual.subtitle": "Hvis nogen, der er vist eller involveret, er under 18, skal du vælge »Seksualisering af en mindreårig«.", + "report_flow.screen.sexual.title": "Fortæl os om det seksuelle indhold", + "report_flow.screen.sexual_guild.subtitle": "Hvis nogen, der er vist eller involveret, er under 18, skal du vælge »Seksualisering af mindreårige«.", + "report_flow.screen.sexual_guild.title": "Fortæl os om det seksuelle indhold i dette fællesskab", + "report_flow.screen.something_else_guild.title": "Hvad foregår der ellers i dette fællesskab?", + "report_flow.screen.something_else_message.title": "Hvad foregår der ellers?", + "report_flow.screen.something_else_user.title": "Hvad er der ellers galt med denne profil?", + "report_flow.screen.spam_kind_guild.title": "Hvordan misbruger dette fællesskab platformen?", + "report_flow.screen.spam_profile.title": "Hvordan misbruges kontoen?", + "report_flow.screen.threat.title": "Hvordan involverer det vold?", + "report_flow.screen.violence_misinfo.title": "Hvilken af disse passer bedst?", + "report_flow.screen.violence_misinfo_guild.title": "Hvilken af disse sker i dette fællesskab?" }); export default CONTENT_I18N_DA_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/de.ts b/fluxer_api/src/api/content_i18n/locales/de.ts index 4f32b5a15..5ad08d07d 100644 --- a/fluxer_api/src/api/content_i18n/locales/de.ts +++ b/fluxer_api/src/api/content_i18n/locales/de.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_DE_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Textkanäle", "guild.default_category_voice": "Sprachkanäle", "guild.default_channel_text": "allgemein", - "guild.default_channel_voice": "Allgemein" + "guild.default_channel_voice": "Allgemein", + "report_flow.description.name": "Benutzername, Anzeigename oder Community-Spitzname", + "report_flow.description.photo": "Was die Person als Avatar und Banner verwendet", + "report_flow.description.profile_text": "Biografie, eigener Status oder Pronomen", + "report_flow.label.abuse": "Missbräuchliche oder schädliche Inhalte", + "report_flow.label.account_trading": "Verkauf von Accounts oder gestohlenen Zugangsdaten oder Kartendaten", + "report_flow.label.account_trading_communities": "Kauf oder Verkauf von Accounts oder Communities", + "report_flow.label.address": "Wohnadresse oder Arbeitsplatz", + "report_flow.label.adult_content_no_gate": "Inhalte für Erwachsene ohne Altersbeschränkung (18+)", + "report_flow.label.adult_content_profile": "Explizite Inhalte für Erwachsene im Profil", + "report_flow.label.adult_content_unmarked": "Inhalte für Erwachsene in einem Community-Kanal ohne Altersbeschränkung (18+)", + "report_flow.label.age_no_message": "Nein, die Nachricht erwähnt es nicht", + "report_flow.label.age_no_profile": "Nein, das Profil erwähnt es nicht", + "report_flow.label.age_yes_message": "Ja, die Nachricht erwähnt das Alter der Person", + "report_flow.label.age_yes_profile": "Ja, das Profil erwähnt das Alter der Person", + "report_flow.label.atrocity_denial": "Leugnung oder Verherrlichung des Holocaust oder anderer Völkermorde", + "report_flow.label.ban_evasion": "Umgehung eines Banns mit einem anderen Account", + "report_flow.label.channel_names": "Kanalnamen", + "report_flow.label.community_banner": "Community-Banner", + "report_flow.label.community_icon": "Community-Icon", + "report_flow.label.community_name": "Community-Name", + "report_flow.label.conversion_therapy": "Förderung von Konversionstherapie", + "report_flow.label.copyright": "Urheberrechts- oder Markenbeschwerde", + "report_flow.label.crisis_lines": "Krisenhotlines in deinem Land", + "report_flow.label.csam": "Reale oder KI-generierte Bilder oder Videos von sexuellem Kindesmissbrauch", + "report_flow.label.discovery_listing": "Eintrag in „Entdecken“", + "report_flow.label.dislike": "Das ist einfach nichts für mich", + "report_flow.label.dsa": "Inhalte, die in der EU illegal sind (Gesetz über digitale Dienste)", + "report_flow.label.eating_disorder_promotion": "Zu gestörtem Essverhalten ermutigen", + "report_flow.label.eating_disorder_promotion_profile": "Das Profil der Person fördert Essstörungen", + "report_flow.label.email": "E-Mail-Adresse", + "report_flow.label.emoji_stickers": "Benutzerdefinierte Emojis oder Sticker", + "report_flow.label.face_photo": "Foto vom Gesicht der Person", + "report_flow.label.fake_account": "Fake-Account, Bot oder automatisierter Missbrauch", + "report_flow.label.fake_account_profile": "Ein gefälschter oder täuschender Account", + "report_flow.label.false_claims": "Lügen verbreiten, um den Ruf einer bestimmten Person zu schädigen", + "report_flow.label.false_info": "Verbreitung schädlicher Falschinformationen", + "report_flow.label.financial": "Karten-, Bank- oder andere Finanzdaten", + "report_flow.label.fraud": "Die Person versucht, andere um Geld oder Accounts zu betrügen", + "report_flow.label.fraud_guild": "Personen um Geld oder Accounts betrügen", + "report_flow.label.government_id": "Ausweisdokument oder Ausweisnummer", + "report_flow.label.graphic_violence": "Echte Gewaltdarstellungen zur Schockwirkung, etwa Gore oder Tierquälerei", + "report_flow.label.harassment": "Mobbing, Belästigung oder Stalking", + "report_flow.label.harassment_direct": "Jemanden wiederholt mit Beleidigungen oder Beschimpfungen angreifen", + "report_flow.label.harassment_guild": "Belästigung, Mobbing oder Stalking von Personen", + "report_flow.label.harassment_profile": "Das Profil belästigt oder greift mich oder andere an", + "report_flow.label.harmful_false_claims": "Falsche Behauptungen, die ernsthaften Schaden in der realen Welt verursachen könnten", + "report_flow.label.hate": "Hass oder Diskriminierung von Menschen aufgrund ihrer Identität", + "report_flow.label.hate_dehumanizing": "Menschen mit Tieren, Krankheiten oder Schmutz vergleichen oder sie als weniger als menschlich bezeichnen", + "report_flow.label.hate_incitement": "Aufrufe zu Gewalt oder Ausgrenzung gegen eine Gruppe", + "report_flow.label.hate_other": "Andere Angriffe auf Menschen aufgrund ihrer Identität", + "report_flow.label.hate_slurs": "Diskriminierende Beleidigungen, Hasssymbole oder erniedrigende Stereotype", + "report_flow.label.hate_violence": "Hass, Gewalt oder Extremismus", + "report_flow.label.identity": "Sexuelle Orientierung, Geschlechtsidentität oder Intersexualität", + "report_flow.label.illegal_activity": "Andere illegale Aktivitäten", + "report_flow.label.illegal_goods": "Verkauf von Drogen, Waffen oder anderen illegalen Gütern", + "report_flow.label.impersonation": "Sich als jemand anderes ausgeben oder Personen betrügen", + "report_flow.label.impersonation_guild": "Sich als {product_name} oder eine andere Organisation ausgeben", + "report_flow.label.impersonation_organization": "Ein Unternehmen, eine Marke oder eine Gruppe", + "report_flow.label.impersonation_person": "Ich oder jemand, der mir nahesteht", + "report_flow.label.impersonation_public_figure": "Eine bekannte Person, zum Beispiel aus der Creator-Szene oder der Politik", + "report_flow.label.impersonation_staff": "Mitarbeitende oder Support von {product_name}", + "report_flow.label.intimate_image_abuse": "Intime Bilder, die ohne Zustimmung geteilt wurden, einschließlich Deepfakes, oder die Drohung, diese zu teilen", + "report_flow.label.intimate_image_abuse_guild": "Teilen intimer Bilder ohne Zustimmung, einschließlich Deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime Bilder von jemandem, die ohne Zustimmung geteilt wurden, einschließlich Deepfakes", + "report_flow.label.intimate_photo": "Intimes oder nacktes Foto", + "report_flow.label.invite_splash": "Einladungshintergrund", + "report_flow.label.ip_address": "IP-Adresse", + "report_flow.label.learn_more": "Lies die Community-Richtlinien von {product_name}", + "report_flow.label.legal_name": "Realname oder amtlicher Name", + "report_flow.label.lgbtq_targeting": "Absichtliches Misgendern, Deadnaming oder Outing einer Person oder die Leugnung ihrer Identität", + "report_flow.label.malware_guild": "Verbreitung von Malware oder Phishing-Links", + "report_flow.label.malware_phishing": "Phishing-, Malware- oder Hacking-Versuche", + "report_flow.label.member_activity": "Was Mitglieder dort posten oder tun", + "report_flow.label.metric_manipulation": "Fälschen von Mitglieder- oder Reaktionszahlen", + "report_flow.label.minor_contact": "Eine minderjährige Person um ein Treffen, um Fotos oder persönliche Daten bitten, auf eine Weise, die den Eindruck erweckt, dass Missbrauch angebahnt werden soll", + "report_flow.label.minor_dating_community": "Es ist eine Community für Dating zwischen Minderjährigen", + "report_flow.label.minor_fictional": "Gezeichnete, geschriebene oder KI-generierte sexuelle Inhalte eines fiktiven Kindes", + "report_flow.label.minor_grooming": "Grooming oder Aufbau von unangemessenem Vertrauen zu einer minderjährigen Person", + "report_flow.label.minor_grooming_guild": "Mitglieder betreiben Grooming oder bauen unangemessenes Vertrauen zu Minderjährigen auf", + "report_flow.label.minor_in_adult_space": "Eine minderjährige Person befindet sich in einem 18+-Kanal oder einer 18+-Community", + "report_flow.label.minor_in_adult_space_guild": "Minderjährige sind in 18+-Kanälen erlaubt", + "report_flow.label.minor_risk": "Eine minderjährige Person gefährden", + "report_flow.label.minor_risk_guild": "Minderjährige gefährden", + "report_flow.label.minor_sexual": "Sexualisierung einer minderjährigen Person", + "report_flow.label.minor_sexual_contact": "Mit einer minderjährigen Person flirten oder ihr sexuelle Nachrichten schreiben", + "report_flow.label.minor_sexual_contact_guild": "Mitglieder flirten mit Minderjährigen oder schreiben ihnen sexuelle Nachrichten", + "report_flow.label.minor_sexual_content": "Eine minderjährige Person teilt selbst sexuelle Inhalte", + "report_flow.label.minor_sexual_content_guild": "Minderjährige posten oder senden sexuelle Inhalte", + "report_flow.label.minor_sexual_content_profile": "Profil einer minderjährigen Person mit sexuellen Inhalten", + "report_flow.label.minor_sexual_guild": "Sexualisierung von Minderjährigen", + "report_flow.label.minor_sexualization": "Sexuelle Kommentare über Minderjährige", + "report_flow.label.minor_sexualization_guild": "Mitglieder machen sexuelle Kommentare über Minderjährige", + "report_flow.label.minor_sexualization_profile": "Sexuelle Kommentare über Minderjährige im Profil der Person", + "report_flow.label.name": "Namen", + "report_flow.label.other": "Etwas, das hier nicht aufgeführt ist", + "report_flow.label.other_identifying": "Andere Informationen, die jemanden identifizieren oder lokalisieren könnten", + "report_flow.label.permits_violations": "Es erlaubt schwerwiegende Regelverstöße", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Scraping, Automatisierung oder anderer Plattformmissbrauch", + "report_flow.label.private_conversation": "Private Nachrichten, Screenshots oder Anrufaufzeichnungen", + "report_flow.label.private_info": "Teilen privater Details einer Person", + "report_flow.label.private_info_profile": "Das Profil der Person teilt private Details von jemandem", + "report_flow.label.profile_text": "Profiltext", + "report_flow.label.raid": "Organisation oder Teilnahme an einem Raid oder einer Hetzjagd", + "report_flow.label.raid_guild": "Organisation von Raids oder Hetzjagden gegen Personen oder Communities", + "report_flow.label.rude_language": "Schimpfwörter oder unhöfliche Bemerkungen", + "report_flow.label.self_harm": "Jemand könnte sich selbst verletzen oder ermutigt zur Selbstverletzung", + "report_flow.label.self_harm_graphic": "Drastische Bilder von Selbstverletzung", + "report_flow.label.self_harm_guild": "Mitglieder drängen andere, sich selbst zu verletzen", + "report_flow.label.self_harm_pressure": "Jemanden unter Druck setzen oder herausfordern, sich selbst zu verletzen", + "report_flow.label.self_harm_pressure_guild": "Personen unter Druck setzen oder herausfordern, sich selbst zu verletzen", + "report_flow.label.self_harm_profile": "Das Profil der Person deutet auf Selbstverletzung hin oder ermutigt dazu", + "report_flow.label.self_harm_promotion": "Zu Selbstverletzung ermutigen oder Methoden teilen", + "report_flow.label.self_harm_promotion_profile": "Das Profil der Person ermutigt zur Selbstverletzung", + "report_flow.label.sexual": "Sexuelle Inhalte", + "report_flow.label.sexual_exploitation": "Sexuelle Ausbeutung, Nötigung oder Menschenhandel", + "report_flow.label.sexual_unwanted": "Unerwünschte sexuelle Bilder oder Nachrichten", + "report_flow.label.something_else": "Etwas anderes", + "report_flow.label.spam": "Spam oder unerwünschte Werbung", + "report_flow.label.spam_bulk": "Massenhaft Spam oder Werbung versenden", + "report_flow.label.spam_or_manipulation": "Spam oder Plattform-Manipulation", + "report_flow.label.spam_profile": "Das Profil der Person wird für Spam oder Werbung genutzt", + "report_flow.label.suicide_promotion": "Zu Suizid ermutigen oder Methoden teilen", + "report_flow.label.suicide_promotion_profile": "Das Profil der Person ermutigt zum Suizid", + "report_flow.label.synthetic_media": "Gefälschte oder KI-generierte Medien, die als echt dargestellt werden", + "report_flow.label.terrorism": "Terrorismus oder gewalttätiger Extremismus", + "report_flow.label.terrorism_guild": "Rekrutierung für oder Förderung von Terrorismus oder gewalttätigem Extremismus", + "report_flow.label.threat": "Drohungen oder Aufrufe zur Gewalt", + "report_flow.label.threat_to_share": "Die Person droht, es zu teilen", + "report_flow.label.too_young": "Die Person ist jünger als das Mindestalter für die Nutzung von {product_name}", + "report_flow.label.unwanted_contact": "Stalking oder wiederholte Kontaktaufnahme mit mir oder jemand anderem, obwohl die Person aufgefordert wurde aufzuhören, blockiert oder entfernt wurde", + "report_flow.label.violence_glorification": "Verherrlichung von realer Gewalt", + "report_flow.label.violence_incitement": "Anstiftung zur Gewalt oder Erklärung, wie man Menschen verletzen kann", + "report_flow.label.violence_misinfo": "Gewalt, Extremismus oder schädliche Falschinformationen", + "report_flow.label.violent_threat": "Sagen, dass die Person jemandem wehtun wird", + "report_flow.label.worried_profile": "Ich mache mir Sorgen um die Sicherheit dieser Person", + "report_flow.label.worried_self_harm": "Ich fürchte, die Person könnte sich selbst verletzen", + "report_flow.label.worried_suicide": "Ich fürchte, die Person könnte einen Suizidversuch unternehmen", + "report_flow.notice.need_more_info.body": "Um das zu prüfen, brauchen wir eine Nachricht, in der die Person sagt, wie alt sie ist, oder deutlich macht, dass sie unter dem Mindestalter von {product_name} liegt. Melde stattdessen diese Nachricht.", + "report_flow.notice.need_more_info.title": "Wir können noch nichts unternehmen", + "report_flow.notice.need_more_info_profile.body": "Um das zu prüfen, müssen wir sehen, wo die Person sagt, wie alt sie ist, oder deutlich macht, dass sie unter dem Mindestalter von {product_name} liegt. Melde stattdessen diese Nachricht oder dieses Profil.", + "report_flow.screen.abuse.title": "Worum geht es dabei?", + "report_flow.screen.abuse_guild.title": "Was tun die Leute in dieser Community?", + "report_flow.screen.age_stated_message.title": "Sagt diese Nachricht, wie alt die Person ist?", + "report_flow.screen.age_stated_profile.title": "Steht im Profil, wie alt die Person ist?", + "report_flow.screen.community_parts.subtitle": "Wähle so viele aus, wie du brauchst.", + "report_flow.screen.community_parts.title": "Welche Teile der Community sind betroffen?", + "report_flow.screen.crisis_support.subtitle": "Krisenhotlines bieten kostenlose, vertrauliche Unterstützung.", + "report_flow.screen.crisis_support.title": "Jemand kann dir jetzt helfen", + "report_flow.screen.false_info.subtitle": "Meinungen, Satire und Debatten in gutem Glauben sind erlaubt. Rechtswidrige Verleumdung kann gemäß dem Gesetz über digitale Dienste gemeldet werden.", + "report_flow.screen.false_info.subtitle_self_hosted": "Meinungen, Satire und Debatten in gutem Glauben sind erlaubt.", + "report_flow.screen.false_info.title": "Was ist daran irreführend?", + "report_flow.screen.harassment.title": "Wie wird jemand ins Visier genommen?", + "report_flow.screen.hate.title": "Wie greift es Menschen aufgrund ihrer Identität an?", + "report_flow.screen.impersonation.subtitle": "Eindeutig gekennzeichnete Parodien oder Rollenspiele sind erlaubt.", + "report_flow.screen.impersonation.title": "Wer wird imitiert oder ist es ein Betrug?", + "report_flow.screen.minor_risk.title": "Wie gefährdet diese Person eine minderjährige Person?", + "report_flow.screen.minor_risk_guild.title": "Wie gefährdet diese Community Minderjährige?", + "report_flow.screen.minor_sexual.subtitle": "Gezeichnete, geschriebene oder KI-generierte Inhalte zählen, wenn eine Figur als Minderjährige beschrieben wird oder eindeutig präpubertär ist, einschließlich Lolicon, Shotacon und Cub.", + "report_flow.screen.minor_sexual.title": "Was hast du im Zusammenhang mit einer minderjährigen Person gesehen?", + "report_flow.screen.minor_sexual_guild.title": "Was hast du im Zusammenhang mit Minderjährigen gesehen?", + "report_flow.screen.private_info.subtitle": "Wähle so viele aus, wie du brauchst. Wenn ein intimes Foto eine Person unter 18 Jahren zeigt, geh zurück und melde es unter „Sexualisierung einer minderjährigen Person“.", + "report_flow.screen.private_info.title": "Welche privaten Details sind betroffen?", + "report_flow.screen.profile_abuse.title": "Was ist an diesem Profil schädlich?", + "report_flow.screen.profile_hate_violence.title": "Was zeigt oder fördert dieses Profil?", + "report_flow.screen.profile_intro.options_heading": "Mehr erfahren", + "report_flow.screen.profile_intro.subtitle": "Beschreibe, was mit diesem Profil nicht stimmt. Die Person erfährt nicht, wer es gemeldet hat.", + "report_flow.screen.profile_intro.title": "Profil melden", + "report_flow.screen.profile_minor_sexual.title": "Was in diesem Profil hat mit einer minderjährigen Person zu tun?", + "report_flow.screen.profile_parts.subtitle": "Wähle so viele aus, wie du brauchst.", + "report_flow.screen.profile_parts.title": "Welche Teile dieses Profils sind problematisch?", + "report_flow.screen.profile_private_info.title": "Welche privaten Details sind in diesem Profil enthalten?", + "report_flow.screen.profile_sexual.title": "Erzähl uns vom sexuellen Inhalt in diesem Profil", + "report_flow.screen.profile_threat.title": "Wie hat dieses Profil mit Gewalt zu tun?", + "report_flow.screen.root_guild.subtitle": "Wähle die zutreffendste Option für das, was in dieser Community vor sich geht.", + "report_flow.screen.root_guild.title": "Was stimmt mit dieser Community nicht?", + "report_flow.screen.root_message.subtitle": "Wähle die zutreffendste Option. Du kannst alles überprüfen, bevor es gesendet wird.", + "report_flow.screen.root_message.title": "Nachricht melden", + "report_flow.screen.root_user.subtitle": "Wähle die zutreffendste Option für das, was in diesem Profil steht.", + "report_flow.screen.root_user.title": "Was stimmt mit diesem Profil nicht?", + "report_flow.screen.self_harm.subtitle": "Niemand wird dafür bestraft, über eigene Schwierigkeiten zu sprechen. Wenn du uns mitteilst, dass du dir Sorgen machst, können wir Unterstützung anbieten.", + "report_flow.screen.self_harm.title": "Was hat die Person gesagt oder geteilt?", + "report_flow.screen.self_harm_guild.title": "Wozu ermutigen die Mitglieder?", + "report_flow.screen.self_harm_profile.title": "Was sagt oder zeigt dieses Profil?", + "report_flow.screen.sexual.subtitle": "Wenn eine gezeigte oder beteiligte Person unter 18 ist, wähle „Sexualisierung einer minderjährigen Person“.", + "report_flow.screen.sexual.title": "Erzähl uns vom sexuellen Inhalt", + "report_flow.screen.sexual_guild.subtitle": "Wenn eine gezeigte oder beteiligte Person unter 18 ist, wähle „Sexualisierung von Minderjährigen“.", + "report_flow.screen.sexual_guild.title": "Erzähl uns vom sexuellen Inhalt in dieser Community", + "report_flow.screen.something_else_guild.title": "Was ist sonst noch in dieser Community los?", + "report_flow.screen.something_else_message.title": "Was ist sonst noch los?", + "report_flow.screen.something_else_user.title": "Was stimmt sonst noch mit diesem Profil nicht?", + "report_flow.screen.spam_kind_guild.title": "Wie missbraucht diese Community die Plattform?", + "report_flow.screen.spam_profile.title": "Wie wird der Account missbraucht?", + "report_flow.screen.threat.title": "Wie ist es mit Gewalt verbunden?", + "report_flow.screen.violence_misinfo.title": "Was davon trifft zu?", + "report_flow.screen.violence_misinfo_guild.title": "Was davon passiert in dieser Community?" }); export default CONTENT_I18N_DE_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/el.ts b/fluxer_api/src/api/content_i18n/locales/el.ts index 1645b6044..b1b1e41bf 100644 --- a/fluxer_api/src/api/content_i18n/locales/el.ts +++ b/fluxer_api/src/api/content_i18n/locales/el.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_EL_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Κανάλια κειμένου", "guild.default_category_voice": "Φωνητικά κανάλια", "guild.default_channel_text": "γενικό", - "guild.default_channel_voice": "Γενικό" + "guild.default_channel_voice": "Γενικό", + "report_flow.description.name": "Όνομα χρήστη, όνομα εμφάνισης ή ψευδώνυμο κοινότητας", + "report_flow.description.photo": "Η εικόνα προφίλ και το banner που χρησιμοποιούν", + "report_flow.description.profile_text": "Βιογραφικό, προσαρμοσμένη κατάσταση ή αντωνυμίες", + "report_flow.label.abuse": "Κακοποιητικό ή επιβλαβές περιεχόμενο", + "report_flow.label.account_trading": "Πώληση λογαριασμών ή κλεμμένων στοιχείων σύνδεσης ή κάρτας", + "report_flow.label.account_trading_communities": "Αγορά ή πώληση λογαριασμών ή κοινοτήτων", + "report_flow.label.address": "Διεύθυνση κατοικίας ή εργασίας", + "report_flow.label.adult_content_no_gate": "Περιεχόμενο ενηλίκων χωρίς περιορισμό ηλικίας 18+", + "report_flow.label.adult_content_profile": "Ρητό περιεχόμενο ενηλίκων στο προφίλ τους", + "report_flow.label.adult_content_unmarked": "Περιεχόμενο ενηλίκων σε κανάλι κοινότητας που δεν φέρει σήμανση 18+", + "report_flow.label.age_no_message": "Όχι, δεν αναφέρει την ηλικία τους", + "report_flow.label.age_no_profile": "Όχι, δεν αναφέρει την ηλικία τους", + "report_flow.label.age_yes_message": "Ναι, αναφέρει την ηλικία τους", + "report_flow.label.age_yes_profile": "Ναι, το προφίλ τους αναφέρει την ηλικία τους", + "report_flow.label.atrocity_denial": "Άρνηση ή εξύμνηση του Ολοκαυτώματος ή άλλων γενοκτονιών", + "report_flow.label.ban_evasion": "Παράκαμψη απαγόρευσης με άλλο λογαριασμό", + "report_flow.label.channel_names": "Ονόματα καναλιών", + "report_flow.label.community_banner": "Banner κοινότητας", + "report_flow.label.community_icon": "Εικονίδιο κοινότητας", + "report_flow.label.community_name": "Όνομα κοινότητας", + "report_flow.label.conversion_therapy": "Προώθηση θεραπείας μεταστροφής", + "report_flow.label.copyright": "Καταγγελία πνευματικών δικαιωμάτων ή εμπορικού σήματος", + "report_flow.label.crisis_lines": "Γραμμές βοήθειας για καταστάσεις κρίσης στη χώρα σας", + "report_flow.label.csam": "Πραγματικές ή δημιουργημένες με AI εικόνες ή βίντεο σεξουαλικής κακοποίησης παιδιών", + "report_flow.label.discovery_listing": "Καταχώριση ανακάλυψης", + "report_flow.label.dislike": "Απλά δεν μου ταιριάζει", + "report_flow.label.dsa": "Περιεχόμενο που είναι παράνομο στην ΕΕ (πράξη για τις ψηφιακές υπηρεσίες, DSA)", + "report_flow.label.eating_disorder_promotion": "Ενθάρρυνση διατροφικών διαταραχών", + "report_flow.label.eating_disorder_promotion_profile": "Το προφίλ τους προωθεί διατροφικές διαταραχές", + "report_flow.label.email": "Διεύθυνση email", + "report_flow.label.emoji_stickers": "Προσαρμοσμένα emoji ή αυτοκόλλητα", + "report_flow.label.face_photo": "Φωτογραφία του προσώπου τους", + "report_flow.label.fake_account": "Ψεύτικος λογαριασμός, bot ή αυτοματοποιημένη κατάχρηση", + "report_flow.label.fake_account_profile": "Ένας ψεύτικος ή παραπλανητικός λογαριασμός", + "report_flow.label.false_claims": "Διάδοση ψεμάτων για να βλάψουν τη φήμη ενός συγκεκριμένου ατόμου", + "report_flow.label.false_info": "Διάδοση επιβλαβών ψευδών πληροφοριών", + "report_flow.label.financial": "Κάρτα, τράπεζα ή άλλα οικονομικά στοιχεία", + "report_flow.label.fraud": "Προσπαθούν να εξαπατήσουν άτομα για χρήματα ή λογαριασμούς", + "report_flow.label.fraud_guild": "Εξαπάτηση ατόμων για χρήματα ή λογαριασμούς", + "report_flow.label.government_id": "Έγγραφο ταυτότητας ή αριθμός ταυτότητας", + "report_flow.label.graphic_violence": "Πραγματική βία που προβάλλεται για να σοκάρει, όπως σκηνές αιματοχυσίας ή σκληρότητα προς ζώα", + "report_flow.label.harassment": "Εκφοβισμός, παρενόχληση ή καταδίωξη", + "report_flow.label.harassment_direct": "Επανειλημμένη στόχευση κάποιου με προσβολές ή υβριστικές επιθέσεις", + "report_flow.label.harassment_guild": "Παρενόχληση, εκφοβισμός ή καταδίωξη ατόμων", + "report_flow.label.harassment_profile": "Το προφίλ τους παρενοχλεί ή στοχεύει εμένα ή κάποιον άλλο", + "report_flow.label.harmful_false_claims": "Ψευδείς ισχυρισμοί που θα μπορούσαν να προκαλέσουν σοβαρή βλάβη στον πραγματικό κόσμο", + "report_flow.label.hate": "Μίσος ή διακρίσεις εναντίον ανθρώπων για αυτό που είναι", + "report_flow.label.hate_dehumanizing": "Σύγκριση ανθρώπων με ζώα, ασθένειες ή βρωμιά, ή χαρακτηρισμός τους ως λιγότερο από ανθρώπους", + "report_flow.label.hate_incitement": "Εκκλήσεις για βία ή αποκλεισμό εναντίον μιας ομάδας", + "report_flow.label.hate_other": "Άλλες επιθέσεις σε ανθρώπους για αυτό που είναι", + "report_flow.label.hate_slurs": "Υβριστικές εκφράσεις, σύμβολα μίσους ή υποτιμητικά στερεότυπα", + "report_flow.label.hate_violence": "Μίσος, βία ή εξτρεμισμός", + "report_flow.label.identity": "Σεξουαλικός προσανατολισμός, ταυτότητα φύλου ή κατάσταση ίντερσεξ", + "report_flow.label.illegal_activity": "Άλλη παράνομη δραστηριότητα", + "report_flow.label.illegal_goods": "Πωλήσεις ναρκωτικών, όπλων ή άλλων παράνομων αντικειμένων", + "report_flow.label.impersonation": "Προσποιούνται ότι είναι κάποιος άλλος ή εξαπατούν άτομα", + "report_flow.label.impersonation_guild": "Προσποίηση ότι είναι {product_name} ή άλλος οργανισμός", + "report_flow.label.impersonation_organization": "Μια εταιρεία, μάρκα ή ομάδα", + "report_flow.label.impersonation_person": "Εμένα ή κάποιον κοντινό μου", + "report_flow.label.impersonation_public_figure": "Ένα γνωστό πρόσωπο, όπως δημιουργός περιεχομένου ή πολιτικός", + "report_flow.label.impersonation_staff": "Προσωπικό ή υποστήριξη του {product_name}", + "report_flow.label.intimate_image_abuse": "Οικείες εικόνες που κοινοποιήθηκαν χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes, ή απειλή κοινοποίησής τους", + "report_flow.label.intimate_image_abuse_guild": "Κοινοποίηση οικείων εικόνων χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Οικείες εικόνες κάποιου που κοινοποιήθηκαν χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes", + "report_flow.label.intimate_photo": "Οικεία ή γυμνή φωτογραφία", + "report_flow.label.invite_splash": "Φόντο πρόσκλησης", + "report_flow.label.ip_address": "Διεύθυνση IP", + "report_flow.label.learn_more": "Διαβάστε τις οδηγίες κοινότητας του {product_name}", + "report_flow.label.legal_name": "Πραγματικό ή νόμιμο όνομα", + "report_flow.label.lgbtq_targeting": "Εσκεμμένη λανθασμένη αναφορά φύλου, deadnaming ή αποκάλυψη σεξουαλικού προσανατολισμού κάποιου, ή άρνηση της ταυτότητάς του", + "report_flow.label.malware_guild": "Διανομή κακόβουλου λογισμικού ή συνδέσμων phishing", + "report_flow.label.malware_phishing": "Phishing, κακόβουλο λογισμικό ή απόπειρες hacking", + "report_flow.label.member_activity": "Τι δημοσιεύουν ή κάνουν τα μέλη εκεί", + "report_flow.label.metric_manipulation": "Πλαστογράφηση μετρήσεων μελών ή αντιδράσεων", + "report_flow.label.minor_contact": "Αίτημα συνάντησης με ανήλικο, ή για φωτογραφίες ή προσωπικά στοιχεία, με τρόπο που φαίνεται αρπακτικός", + "report_flow.label.minor_dating_community": "Είναι μια κοινότητα για γνωριμίες μεταξύ ανηλίκων", + "report_flow.label.minor_fictional": "Σεξουαλικό περιεχόμενο με φανταστικό παιδί, σχεδιασμένο, γραπτό ή δημιουργημένο με τεχνητή νοημοσύνη", + "report_flow.label.minor_grooming": "Αποπλάνηση (grooming) ή καλλιέργεια ακατάλληλης εμπιστοσύνης με ανήλικο", + "report_flow.label.minor_grooming_guild": "Τα μέλη αποπλανούν ανηλίκους (grooming) ή καλλιεργούν ακατάλληλη εμπιστοσύνη μαζί τους", + "report_flow.label.minor_in_adult_space": "Ένας ανήλικος βρίσκεται σε κανάλι ή κοινότητα 18+", + "report_flow.label.minor_in_adult_space_guild": "Επιτρέπονται ανήλικοι σε κανάλια 18+", + "report_flow.label.minor_risk": "Θέτει σε κίνδυνο ανήλικο", + "report_flow.label.minor_risk_guild": "Θέτει ανηλίκους σε κίνδυνο", + "report_flow.label.minor_sexual": "Σεξουαλικοποίηση ανηλίκου", + "report_flow.label.minor_sexual_contact": "Φλερτ ή αποστολή σεξουαλικών μηνυμάτων σε ανήλικο", + "report_flow.label.minor_sexual_contact_guild": "Μέλη φλερτάρουν με ανηλίκους ή τους στέλνουν σεξουαλικά μηνύματα", + "report_flow.label.minor_sexual_content": "Ανήλικος μοιράζεται ο ίδιος σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_content_guild": "Ανήλικοι δημοσιεύουν ή στέλνουν σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_content_profile": "Προφίλ ανηλίκου με σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_guild": "Σεξουαλικοποίηση ανηλίκων", + "report_flow.label.minor_sexualization": "Σεξουαλικά σχόλια για ανηλίκους", + "report_flow.label.minor_sexualization_guild": "Μέλη κάνουν σεξουαλικά σχόλια για ανηλίκους", + "report_flow.label.minor_sexualization_profile": "Σεξουαλικά σχόλια για ανηλίκους στο προφίλ τους", + "report_flow.label.name": "Ονόματα", + "report_flow.label.other": "Κάτι που δεν αναφέρεται εδώ", + "report_flow.label.other_identifying": "Άλλες πληροφορίες που θα μπορούσαν να αναγνωρίσουν ή να εντοπίσουν κάποιον", + "report_flow.label.permits_violations": "Επιτρέπει σοβαρές παραβιάσεις κανόνων", + "report_flow.label.phone": "Αριθμός τηλεφώνου", + "report_flow.label.photo": "Εικόνες", + "report_flow.label.platform_abuse": "Απόξεση, αυτοματοποίηση ή άλλη κατάχρηση πλατφόρμας", + "report_flow.label.private_conversation": "Ιδιωτικά μηνύματα, στιγμιότυπα οθόνης ή ηχογραφήσεις κλήσεων", + "report_flow.label.private_info": "Κοινοποίηση προσωπικών στοιχείων κάποιου", + "report_flow.label.private_info_profile": "Το προφίλ τους κοινοποιεί προσωπικά στοιχεία κάποιου", + "report_flow.label.profile_text": "Κείμενο προφίλ", + "report_flow.label.raid": "Οργάνωση ή συμμετοχή σε επιδρομή ή ομαδική επίθεση", + "report_flow.label.raid_guild": "Οργάνωση επιδρομών ή ομαδικών επιθέσεων εναντίον ατόμων ή κοινοτήτων", + "report_flow.label.rude_language": "Βρισιές ή αγενείς παρατηρήσεις", + "report_flow.label.self_harm": "Κάποιος μπορεί να αυτοτραυματιστεί ή ενθαρρύνει τον αυτοτραυματισμό", + "report_flow.label.self_harm_graphic": "Σκληρές εικόνες αυτοτραυματισμού", + "report_flow.label.self_harm_guild": "Μέλη ωθούν άλλους να αυτοτραυματιστούν", + "report_flow.label.self_harm_pressure": "Πίεση ή πρόκληση κάποιου να αυτοτραυματιστεί", + "report_flow.label.self_harm_pressure_guild": "Πίεση ή πρόκληση ατόμων να αυτοτραυματιστούν", + "report_flow.label.self_harm_profile": "Το προφίλ τους υποδηλώνει αυτοτραυματισμό ή τον ενθαρρύνει", + "report_flow.label.self_harm_promotion": "Ενθάρρυνση αυτοτραυματισμού ή κοινοποίηση μεθόδων", + "report_flow.label.self_harm_promotion_profile": "Το προφίλ τους ενθαρρύνει τον αυτοτραυματισμό", + "report_flow.label.sexual": "Σεξουαλικό περιεχόμενο", + "report_flow.label.sexual_exploitation": "Σεξουαλική εκμετάλλευση, εξαναγκασμός ή εμπορία ανθρώπων", + "report_flow.label.sexual_unwanted": "Σεξουαλικές εικόνες ή μηνύματα που δεν ήθελα", + "report_flow.label.something_else": "Κάτι άλλο", + "report_flow.label.spam": "Spam ή ανεπιθύμητες διαφημίσεις", + "report_flow.label.spam_bulk": "Αποστολή ανεπιθύμητων μηνυμάτων ή διαφημίσεων μαζικά", + "report_flow.label.spam_or_manipulation": "Ανεπιθύμητα μηνύματα ή χειραγώγηση πλατφόρμας", + "report_flow.label.spam_profile": "Το προφίλ τους χρησιμοποιείται για ανεπιθύμητα μηνύματα ή διαφημίσεις", + "report_flow.label.suicide_promotion": "Ενθάρρυνση αυτοκτονίας ή κοινοποίηση μεθόδων", + "report_flow.label.suicide_promotion_profile": "Το προφίλ τους ενθαρρύνει την αυτοκτονία", + "report_flow.label.synthetic_media": "Ψεύτικα ή δημιουργημένα με τεχνητή νοημοσύνη μέσα που παρουσιάζονται ως αληθινά", + "report_flow.label.terrorism": "Τρομοκρατία ή βίαιος εξτρεμισμός", + "report_flow.label.terrorism_guild": "Στρατολόγηση ή προώθηση τρομοκρατίας ή βίαιου εξτρεμισμού", + "report_flow.label.threat": "Απειλές ή εκκλήσεις για βία", + "report_flow.label.threat_to_share": "Απειλούν να το μοιραστούν", + "report_flow.label.too_young": "Είναι κάτω από την ελάχιστη ηλικία χρήσης του {product_name}", + "report_flow.label.unwanted_contact": "Καταδίωξη ή επανειλημμένη επικοινωνία με εμένα ή κάποιον άλλο, αφού του ζητήθηκε να σταματήσει ή αφού μπλοκαρίστηκε ή αφαιρέθηκε", + "report_flow.label.violence_glorification": "Εξύμνηση της βίας στον πραγματικό κόσμο", + "report_flow.label.violence_incitement": "Ενθάρρυνση βίας ή εξήγηση του πώς να βλάψει κανείς άλλους", + "report_flow.label.violence_misinfo": "Βία, εξτρεμισμός ή επιβλαβείς ψευδείς πληροφορίες", + "report_flow.label.violent_threat": "Λένε ότι θα βλάψουν κάποιον", + "report_flow.label.worried_profile": "Ανησυχώ για την ασφάλειά τους", + "report_flow.label.worried_self_harm": "Φοβάμαι ότι μπορεί να αυτοτραυματιστούν", + "report_flow.label.worried_suicide": "Φοβάμαι ότι μπορεί να επιχειρήσουν να αυτοκτονήσουν", + "report_flow.notice.need_more_info.body": "Για να το εξετάσουμε, χρειαζόμαστε ένα μήνυμα όπου αναφέρουν την ηλικία τους ή διευκρινίζουν ότι είναι κάτω από την ελάχιστη ηλικία του {product_name}. Αντί γι' αυτό, αναφέρετε εκείνο το μήνυμα.", + "report_flow.notice.need_more_info.title": "Δεν μπορούμε να ενεργήσουμε ακόμα", + "report_flow.notice.need_more_info_profile.body": "Για να το εξετάσουμε, πρέπει να δούμε πού αναφέρουν την ηλικία τους ή διευκρινίζουν ότι είναι κάτω από την ελάχιστη ηλικία του {product_name}. Αντί γι' αυτό, αναφέρετε εκείνο το μήνυμα ή προφίλ.", + "report_flow.screen.abuse.title": "Τι αφορά;", + "report_flow.screen.abuse_guild.title": "Τι κάνουν οι άνθρωποι σε αυτήν την κοινότητα;", + "report_flow.screen.age_stated_message.title": "Αυτό το μήνυμα αναφέρει την ηλικία τους;", + "report_flow.screen.age_stated_profile.title": "Αναφέρει το προφίλ τους την ηλικία τους;", + "report_flow.screen.community_parts.subtitle": "Επιλέξτε όσα χρειάζεστε.", + "report_flow.screen.community_parts.title": "Ποια μέρη της κοινότητας εμπλέκονται;", + "report_flow.screen.crisis_support.subtitle": "Οι γραμμές βοήθειας για καταστάσεις κρίσης προσφέρουν δωρεάν, εμπιστευτική υποστήριξη.", + "report_flow.screen.crisis_support.title": "Κάποιος μπορεί να βοηθήσει αυτή τη στιγμή", + "report_flow.screen.false_info.subtitle": "Οι απόψεις, η σάτιρα και η καλόπιστη συζήτηση επιτρέπονται. Η παράνομη δυσφήμιση μπορεί να αναφερθεί βάσει της πράξης για τις ψηφιακές υπηρεσίες (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Οι απόψεις, η σάτιρα και η καλόπιστη συζήτηση επιτρέπονται.", + "report_flow.screen.false_info.title": "Τι είναι παραπλανητικό σε αυτό;", + "report_flow.screen.harassment.title": "Πώς στοχοποιείται κάποιος;", + "report_flow.screen.hate.title": "Πώς επιτίθεται σε ανθρώπους για το ποιοι είναι;", + "report_flow.screen.impersonation.subtitle": "Η σαφώς επισημασμένη παρωδία ή το παιχνίδι ρόλων επιτρέπονται.", + "report_flow.screen.impersonation.title": "Για ποιον γίνεται πλαστοπροσωπία ή πρόκειται για απάτη;", + "report_flow.screen.minor_risk.title": "Πώς θέτει αυτό το άτομο σε κίνδυνο έναν ανήλικο;", + "report_flow.screen.minor_risk_guild.title": "Πώς θέτει αυτή η κοινότητα σε κίνδυνο ανηλίκους;", + "report_flow.screen.minor_sexual.subtitle": "Το περιεχόμενο που είναι σχεδιασμένο, γραμμένο ή δημιουργημένο με τεχνητή νοημοσύνη καλύπτεται όταν ένας χαρακτήρας περιγράφεται ως ανήλικος ή είναι σαφώς προεφηβικός, συμπεριλαμβανομένων των lolicon, shotacon και cub.", + "report_flow.screen.minor_sexual.title": "Τι είδατε που αφορά ανήλικο;", + "report_flow.screen.minor_sexual_guild.title": "Τι είδατε που αφορά ανηλίκους;", + "report_flow.screen.private_info.subtitle": "Επιλέξτε όσα χρειάζεστε. Αν μια οικεία φωτογραφία δείχνει κάποιον κάτω των 18 ετών, επιστρέψτε και αναφέρετέ την στην επιλογή «Σεξουαλικοποίηση ανηλίκου».", + "report_flow.screen.private_info.title": "Ποια προσωπικά στοιχεία εμπλέκονται;", + "report_flow.screen.profile_abuse.title": "Τι είναι επιβλαβές στο προφίλ τους;", + "report_flow.screen.profile_hate_violence.title": "Τι δείχνει ή προωθεί το προφίλ τους;", + "report_flow.screen.profile_intro.options_heading": "Μάθετε περισσότερα", + "report_flow.screen.profile_intro.subtitle": "Πείτε μας τι δεν πάει καλά με αυτό το προφίλ. Δεν θα μάθουν ποιος τους ανέφερε.", + "report_flow.screen.profile_intro.title": "Αναφορά προφίλ", + "report_flow.screen.profile_minor_sexual.title": "Τι στο προφίλ τους αφορά ανήλικο;", + "report_flow.screen.profile_parts.subtitle": "Επιλέξτε όσα χρειάζεστε.", + "report_flow.screen.profile_parts.title": "Ποια μέρη του προφίλ τους είναι πρόβλημα;", + "report_flow.screen.profile_private_info.title": "Ποια προσωπικά στοιχεία υπάρχουν στο προφίλ τους;", + "report_flow.screen.profile_sexual.title": "Πείτε μας για το σεξουαλικό περιεχόμενο στο προφίλ τους", + "report_flow.screen.profile_threat.title": "Πώς το προφίλ τους σχετίζεται με βία;", + "report_flow.screen.root_guild.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία για αυτό που συμβαίνει σε αυτήν την κοινότητα.", + "report_flow.screen.root_guild.title": "Τι δεν πάει καλά με αυτήν την κοινότητα;", + "report_flow.screen.root_message.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία. Μπορείτε να τα ελέγξετε όλα πριν σταλεί η αναφορά.", + "report_flow.screen.root_message.title": "Αναφορά μηνύματος", + "report_flow.screen.root_user.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία για αυτό που υπάρχει στο προφίλ τους.", + "report_flow.screen.root_user.title": "Τι δεν πάει καλά με το προφίλ τους;", + "report_flow.screen.self_harm.subtitle": "Κανείς δεν τιμωρείται επειδή λέει ότι δυσκολεύεται. Το να μας πείτε ότι ανησυχείτε μας βοηθά να προσφέρουμε υποστήριξη.", + "report_flow.screen.self_harm.title": "Τι είπαν ή μοιράστηκαν;", + "report_flow.screen.self_harm_guild.title": "Τι ενθαρρύνουν τα μέλη;", + "report_flow.screen.self_harm_profile.title": "Τι λέει ή δείχνει το προφίλ τους;", + "report_flow.screen.sexual.subtitle": "Αν οποιοδήποτε άτομο που εμφανίζεται ή εμπλέκεται είναι κάτω των 18 ετών, επιλέξτε «Σεξουαλικοποίηση ανηλίκου».", + "report_flow.screen.sexual.title": "Πείτε μας για το σεξουαλικό περιεχόμενο", + "report_flow.screen.sexual_guild.subtitle": "Αν οποιοδήποτε άτομο που εμφανίζεται ή εμπλέκεται είναι κάτω των 18 ετών, επιλέξτε «Σεξουαλικοποίηση ανηλίκων».", + "report_flow.screen.sexual_guild.title": "Πείτε μας για το σεξουαλικό περιεχόμενο σε αυτήν την κοινότητα", + "report_flow.screen.something_else_guild.title": "Τι άλλο συμβαίνει σε αυτήν την κοινότητα;", + "report_flow.screen.something_else_message.title": "Τι άλλο συμβαίνει;", + "report_flow.screen.something_else_user.title": "Τι άλλο δεν πάει καλά με αυτό το προφίλ;", + "report_flow.screen.spam_kind_guild.title": "Πώς καταχράται αυτή η κοινότητα την πλατφόρμα;", + "report_flow.screen.spam_profile.title": "Πώς γίνεται κατάχρηση του λογαριασμού;", + "report_flow.screen.threat.title": "Πώς σχετίζεται με βία;", + "report_flow.screen.violence_misinfo.title": "Ποιο από αυτά ταιριάζει;", + "report_flow.screen.violence_misinfo_guild.title": "Τι από τα παρακάτω συμβαίνει σε αυτήν την κοινότητα;" }); export default CONTENT_I18N_EL_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/en-GB.ts b/fluxer_api/src/api/content_i18n/locales/en-GB.ts index 8c5d03416..ac26cf9d8 100644 --- a/fluxer_api/src/api/content_i18n/locales/en-GB.ts +++ b/fluxer_api/src/api/content_i18n/locales/en-GB.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_EN_GB_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Text channels", "guild.default_category_voice": "Voice channels", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Username, display name or community nickname", + "report_flow.description.photo": "What they use as avatar and banner", + "report_flow.description.profile_text": "Bio, custom status or pronouns", + "report_flow.label.abuse": "Abusive or harmful content", + "report_flow.label.account_trading": "Selling accounts, or stolen logins or card details", + "report_flow.label.account_trading_communities": "Buying or selling accounts or communities", + "report_flow.label.address": "Home address or workplace", + "report_flow.label.adult_content_no_gate": "Adult content without an 18+ age restriction", + "report_flow.label.adult_content_profile": "Explicit adult content in their profile", + "report_flow.label.adult_content_unmarked": "Adult content in a community channel that isn't marked 18+", + "report_flow.label.age_no_message": "No, it doesn't mention it", + "report_flow.label.age_no_profile": "No, it doesn't mention it", + "report_flow.label.age_yes_message": "Yes, it mentions their age", + "report_flow.label.age_yes_profile": "Yes, their profile mentions their age", + "report_flow.label.atrocity_denial": "Denying or celebrating the Holocaust or other genocides", + "report_flow.label.ban_evasion": "Getting around a ban with another account", + "report_flow.label.channel_names": "Channel names", + "report_flow.label.community_banner": "Community banner", + "report_flow.label.community_icon": "Community icon", + "report_flow.label.community_name": "Community name", + "report_flow.label.conversion_therapy": "Promoting conversion therapy", + "report_flow.label.copyright": "Copyright or trademark complaint", + "report_flow.label.crisis_lines": "Crisis lines in your country", + "report_flow.label.csam": "Real or AI-generated images or videos of child sexual abuse", + "report_flow.label.discovery_listing": "Discovery listing", + "report_flow.label.dislike": "It's just not for me", + "report_flow.label.dsa": "Content that's illegal in the EU (Digital Services Act)", + "report_flow.label.eating_disorder_promotion": "Encouraging disordered eating", + "report_flow.label.eating_disorder_promotion_profile": "Their profile promotes eating disorders", + "report_flow.label.email": "Email address", + "report_flow.label.emoji_stickers": "Custom emoji or stickers", + "report_flow.label.face_photo": "Photo of their face", + "report_flow.label.fake_account": "Fake account, bot or automated abuse", + "report_flow.label.fake_account_profile": "A fake or deceptive account", + "report_flow.label.false_claims": "Spreading lies to hurt a specific person's reputation", + "report_flow.label.false_info": "Spreading harmful false information", + "report_flow.label.financial": "Card, bank or other financial details", + "report_flow.label.fraud": "They are trying to con people out of money or accounts", + "report_flow.label.fraud_guild": "Conning people out of money or accounts", + "report_flow.label.government_id": "ID document or ID number", + "report_flow.label.graphic_violence": "Real violence shown to shock, like gore or animal cruelty", + "report_flow.label.harassment": "Bullying, harassment or stalking", + "report_flow.label.harassment_direct": "Repeatedly targeting someone with insults or abuse", + "report_flow.label.harassment_guild": "Harassing, bullying or stalking people", + "report_flow.label.harassment_profile": "Their profile harasses or targets me or someone else", + "report_flow.label.harmful_false_claims": "False claims that could cause serious real-world harm", + "report_flow.label.hate": "Hate or discrimination against people for who they are", + "report_flow.label.hate_dehumanizing": "Comparing people to animals, disease or filth, or calling them less than human", + "report_flow.label.hate_incitement": "Calls for violence or exclusion against a group", + "report_flow.label.hate_other": "Other attacks on people for who they are", + "report_flow.label.hate_slurs": "Slurs, hateful symbols or demeaning stereotypes", + "report_flow.label.hate_violence": "Hate, violence or extremism", + "report_flow.label.identity": "Sexual orientation, gender identity or intersex status", + "report_flow.label.illegal_activity": "Other illegal activity", + "report_flow.label.illegal_goods": "Drug, weapon or other illegal sales", + "report_flow.label.impersonation": "Pretending to be someone, or scamming people", + "report_flow.label.impersonation_guild": "Pretending to be {product_name} or another organisation", + "report_flow.label.impersonation_organization": "A company, brand or group", + "report_flow.label.impersonation_person": "Me or someone close to me", + "report_flow.label.impersonation_public_figure": "A well-known person, like a creator or politician", + "report_flow.label.impersonation_staff": "{product_name} staff or support", + "report_flow.label.intimate_image_abuse": "Intimate images shared without consent, including deepfakes, or a threat to share them", + "report_flow.label.intimate_image_abuse_guild": "Sharing intimate images without consent, including deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intimate images of someone shared without consent, including deepfakes", + "report_flow.label.intimate_photo": "Intimate or nude photo", + "report_flow.label.invite_splash": "Invite splash", + "report_flow.label.ip_address": "IP address", + "report_flow.label.learn_more": "Read the {product_name} Community Guidelines", + "report_flow.label.legal_name": "Real or legal name", + "report_flow.label.lgbtq_targeting": "Deliberately misgendering, deadnaming or outing someone, or denying their identity", + "report_flow.label.malware_guild": "Distributing malware or phishing links", + "report_flow.label.malware_phishing": "Phishing, malware or hacking attempts", + "report_flow.label.member_activity": "What members post or do there", + "report_flow.label.metric_manipulation": "Faking member or reaction counts", + "report_flow.label.minor_contact": "Asking a minor to meet up, or for photos or personal details, in a way that seems predatory", + "report_flow.label.minor_dating_community": "It is a community for dating between minors", + "report_flow.label.minor_fictional": "Drawn, written or AI-generated sexual content of a fictional child", + "report_flow.label.minor_grooming": "Grooming or building inappropriate trust with a minor", + "report_flow.label.minor_grooming_guild": "Members groom or build inappropriate trust with minors", + "report_flow.label.minor_in_adult_space": "A minor is in an 18+ channel or community", + "report_flow.label.minor_in_adult_space_guild": "Minors are allowed in 18+ channels", + "report_flow.label.minor_risk": "Putting a minor at risk", + "report_flow.label.minor_risk_guild": "Putting minors at risk", + "report_flow.label.minor_sexual": "Sexualising a minor", + "report_flow.label.minor_sexual_contact": "Flirting with a minor or messaging them sexually", + "report_flow.label.minor_sexual_contact_guild": "Members flirt with minors or message them sexually", + "report_flow.label.minor_sexual_content": "A minor is sharing sexual content themselves", + "report_flow.label.minor_sexual_content_guild": "Minors post or send sexual content", + "report_flow.label.minor_sexual_content_profile": "A minor's profile with sexual content", + "report_flow.label.minor_sexual_guild": "Sexualising minors", + "report_flow.label.minor_sexualization": "Sexual comments about minors", + "report_flow.label.minor_sexualization_guild": "Members make sexual comments about minors", + "report_flow.label.minor_sexualization_profile": "Sexual comments about minors in their profile", + "report_flow.label.name": "Names", + "report_flow.label.other": "Something not listed here", + "report_flow.label.other_identifying": "Other information that could identify or locate someone", + "report_flow.label.permits_violations": "It allows serious rule-breaking", + "report_flow.label.phone": "Phone number", + "report_flow.label.photo": "Pictures", + "report_flow.label.platform_abuse": "Scraping, automation or other platform abuse", + "report_flow.label.private_conversation": "Private messages, screenshots or call recordings", + "report_flow.label.private_info": "Sharing someone's private details", + "report_flow.label.private_info_profile": "Their profile shares someone's private details", + "report_flow.label.profile_text": "Profile text", + "report_flow.label.raid": "Organising or joining a raid or pile-on", + "report_flow.label.raid_guild": "Organising raids or pile-ons against people or communities", + "report_flow.label.rude_language": "Swearing or rude remarks", + "report_flow.label.self_harm": "Someone might hurt themselves, or is encouraging self-harm", + "report_flow.label.self_harm_graphic": "Graphic images of self-harm", + "report_flow.label.self_harm_guild": "Members push others to hurt themselves", + "report_flow.label.self_harm_pressure": "Pressuring or challenging someone to hurt themselves", + "report_flow.label.self_harm_pressure_guild": "Pressuring or challenging people to hurt themselves", + "report_flow.label.self_harm_profile": "Their profile suggests self-harm or encourages it", + "report_flow.label.self_harm_promotion": "Encouraging self-harm or sharing methods", + "report_flow.label.self_harm_promotion_profile": "Their profile encourages self-harm", + "report_flow.label.sexual": "Sexual content", + "report_flow.label.sexual_exploitation": "Sexual exploitation, coercion or trafficking", + "report_flow.label.sexual_unwanted": "Sexual images or messages I didn't want", + "report_flow.label.something_else": "Something else", + "report_flow.label.spam": "Spam or unwanted ads", + "report_flow.label.spam_bulk": "Sending spam or advertising in bulk", + "report_flow.label.spam_or_manipulation": "Spam or platform manipulation", + "report_flow.label.spam_profile": "Their profile is used for spam or advertising", + "report_flow.label.suicide_promotion": "Encouraging suicide or sharing methods", + "report_flow.label.suicide_promotion_profile": "Their profile encourages suicide", + "report_flow.label.synthetic_media": "Fake or AI-made media presented as real", + "report_flow.label.terrorism": "Terrorism or violent extremism", + "report_flow.label.terrorism_guild": "Recruiting for or promoting terrorism or violent extremism", + "report_flow.label.threat": "Threats or calls for violence", + "report_flow.label.threat_to_share": "They are threatening to share it", + "report_flow.label.too_young": "They're under the minimum age to use {product_name}", + "report_flow.label.unwanted_contact": "Stalking or repeatedly contacting me or someone else after being asked to stop, blocked or removed", + "report_flow.label.violence_glorification": "Glorifying real-world violence", + "report_flow.label.violence_incitement": "Encouraging violence or explaining how to hurt people", + "report_flow.label.violence_misinfo": "Violence, extremism or harmful false information", + "report_flow.label.violent_threat": "Saying they will hurt someone", + "report_flow.label.worried_profile": "I'm worried about their safety", + "report_flow.label.worried_self_harm": "I'm afraid they might hurt themselves", + "report_flow.label.worried_suicide": "I'm afraid they might attempt suicide", + "report_flow.notice.need_more_info.body": "To review this, we need a message where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message instead.", + "report_flow.notice.need_more_info.title": "We can't act on this yet", + "report_flow.notice.need_more_info_profile.body": "To review this, we need to see where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message or profile instead.", + "report_flow.screen.abuse.title": "What does it involve?", + "report_flow.screen.abuse_guild.title": "What are people in this community doing?", + "report_flow.screen.age_stated_message.title": "Does this message say how old they are?", + "report_flow.screen.age_stated_profile.title": "Does their profile say how old they are?", + "report_flow.screen.community_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.community_parts.title": "Which parts of the community are involved?", + "report_flow.screen.crisis_support.subtitle": "Crisis lines offer free, confidential support.", + "report_flow.screen.crisis_support.title": "Someone can help right now", + "report_flow.screen.false_info.subtitle": "Opinions, satire and good-faith debate are allowed. Unlawful defamation can be reported under the Digital Services Act.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinions, satire and good-faith debate are allowed.", + "report_flow.screen.false_info.title": "What's misleading about it?", + "report_flow.screen.harassment.title": "How is someone being targeted?", + "report_flow.screen.hate.title": "How does it attack people for who they are?", + "report_flow.screen.impersonation.subtitle": "Clearly labelled parody or roleplay is allowed.", + "report_flow.screen.impersonation.title": "Who's being impersonated, or is it a scam?", + "report_flow.screen.minor_risk.title": "How is this person putting a minor at risk?", + "report_flow.screen.minor_risk_guild.title": "How does this community put minors at risk?", + "report_flow.screen.minor_sexual.subtitle": "Drawn, written or AI content counts when a character is described as a minor or is clearly prepubescent, including lolicon, shotacon and cub.", + "report_flow.screen.minor_sexual.title": "What did you see involving a minor?", + "report_flow.screen.minor_sexual_guild.title": "What did you see involving minors?", + "report_flow.screen.private_info.subtitle": "Pick as many as you need. If an intimate photo shows someone under 18, go back and report it under Sexualising a minor.", + "report_flow.screen.private_info.title": "Which private details are involved?", + "report_flow.screen.profile_abuse.title": "What's harmful about their profile?", + "report_flow.screen.profile_hate_violence.title": "What does their profile show or promote?", + "report_flow.screen.profile_intro.options_heading": "Learn more", + "report_flow.screen.profile_intro.subtitle": "Tell us what's wrong with this profile. They won't be told who reported them.", + "report_flow.screen.profile_intro.title": "Report profile", + "report_flow.screen.profile_minor_sexual.title": "What in their profile involves a minor?", + "report_flow.screen.profile_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.profile_parts.title": "Which parts of their profile are a problem?", + "report_flow.screen.profile_private_info.title": "Which private details are in their profile?", + "report_flow.screen.profile_sexual.title": "Tell us about the sexual content in their profile", + "report_flow.screen.profile_threat.title": "How does their profile involve violence?", + "report_flow.screen.root_guild.subtitle": "Pick the closest match for what is going on in this community.", + "report_flow.screen.root_guild.title": "What's wrong with this community?", + "report_flow.screen.root_message.subtitle": "Pick the closest match. You can check everything before it is sent.", + "report_flow.screen.root_message.title": "Report message", + "report_flow.screen.root_user.subtitle": "Pick the closest match for what is in their profile.", + "report_flow.screen.root_user.title": "What's wrong with their profile?", + "report_flow.screen.self_harm.subtitle": "Nobody is punished for saying they are struggling. Telling us you are worried helps us offer support.", + "report_flow.screen.self_harm.title": "What did they say or share?", + "report_flow.screen.self_harm_guild.title": "What are members encouraging?", + "report_flow.screen.self_harm_profile.title": "What does their profile say or show?", + "report_flow.screen.sexual.subtitle": "If anyone shown or involved is under 18, choose Sexualising a minor.", + "report_flow.screen.sexual.title": "Tell us about the sexual content", + "report_flow.screen.sexual_guild.subtitle": "If anyone shown or involved is under 18, choose Sexualising minors.", + "report_flow.screen.sexual_guild.title": "Tell us about the sexual content in this community", + "report_flow.screen.something_else_guild.title": "What else is going on in this community?", + "report_flow.screen.something_else_message.title": "What else is going on?", + "report_flow.screen.something_else_user.title": "What else is wrong with this profile?", + "report_flow.screen.spam_kind_guild.title": "How is this community abusing the platform?", + "report_flow.screen.spam_profile.title": "How is the account being misused?", + "report_flow.screen.threat.title": "How does it involve violence?", + "report_flow.screen.violence_misinfo.title": "Which of these matches it?", + "report_flow.screen.violence_misinfo_guild.title": "Which of these happens in this community?" }); export default CONTENT_I18N_EN_GB_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/es-419.ts b/fluxer_api/src/api/content_i18n/locales/es-419.ts index cb97c6bfd..11af3aa0b 100644 --- a/fluxer_api/src/api/content_i18n/locales/es-419.ts +++ b/fluxer_api/src/api/content_i18n/locales/es-419.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_ES_419_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Canales de texto", "guild.default_category_voice": "Canales de voz", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nombre de usuario, nombre visible o apodo de la comunidad", + "report_flow.description.photo": "Lo que usan como avatar y banner", + "report_flow.description.profile_text": "Biografía, estado personalizado o pronombres", + "report_flow.label.abuse": "Contenido abusivo o dañino", + "report_flow.label.account_trading": "Venta de cuentas, o de inicios de sesión o datos de tarjeta robados", + "report_flow.label.account_trading_communities": "Compra o venta de cuentas o comunidades", + "report_flow.label.address": "Dirección particular o del trabajo", + "report_flow.label.adult_content_no_gate": "Contenido para adultos sin restricción de edad de 18+", + "report_flow.label.adult_content_profile": "Contenido explícito para adultos en su perfil", + "report_flow.label.adult_content_unmarked": "Contenido para adultos en un canal de la comunidad que no tiene restricciones de edad (18+)", + "report_flow.label.age_no_message": "No, no la menciona", + "report_flow.label.age_no_profile": "No, no la menciona", + "report_flow.label.age_yes_message": "Sí, menciona su edad", + "report_flow.label.age_yes_profile": "Sí, su perfil menciona su edad", + "report_flow.label.atrocity_denial": "Negación o celebración del Holocausto u otros genocidios", + "report_flow.label.ban_evasion": "Eludir un baneo con otra cuenta", + "report_flow.label.channel_names": "Nombres de canales", + "report_flow.label.community_banner": "Banner de la comunidad", + "report_flow.label.community_icon": "Ícono de la comunidad", + "report_flow.label.community_name": "Nombre de la comunidad", + "report_flow.label.conversion_therapy": "Promoción de terapia de conversión", + "report_flow.label.copyright": "Reclamo por derechos de autor o marcas comerciales", + "report_flow.label.crisis_lines": "Líneas de ayuda en crisis en tu país", + "report_flow.label.csam": "Imágenes o videos reales o generados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Listado en Descubrir", + "report_flow.label.dislike": "Simplemente no es para mí", + "report_flow.label.dsa": "Contenido ilegal en la UE (Reglamento de Servicios Digitales)", + "report_flow.label.eating_disorder_promotion": "Fomentar trastornos alimenticios", + "report_flow.label.eating_disorder_promotion_profile": "Su perfil promueve trastornos alimenticios", + "report_flow.label.email": "Dirección de correo electrónico", + "report_flow.label.emoji_stickers": "Emojis o stickers personalizados", + "report_flow.label.face_photo": "Foto de su cara", + "report_flow.label.fake_account": "Cuenta falsa, bot o abuso automatizado", + "report_flow.label.fake_account_profile": "Una cuenta falsa o engañosa", + "report_flow.label.false_claims": "Difundir mentiras para dañar la reputación de una persona específica", + "report_flow.label.false_info": "Difundir información falsa dañina", + "report_flow.label.financial": "Tarjeta, banco u otros datos financieros", + "report_flow.label.fraud": "Intentan estafar a la gente para quitarle dinero o cuentas", + "report_flow.label.fraud_guild": "Estafar a la gente para quitarle dinero o cuentas", + "report_flow.label.government_id": "Documento de identidad o número de identificación", + "report_flow.label.graphic_violence": "Violencia real mostrada para impactar, como gore o crueldad animal", + "report_flow.label.harassment": "Intimidación, acoso o acecho", + "report_flow.label.harassment_direct": "Atacar repetidamente a alguien con insultos o abusos", + "report_flow.label.harassment_guild": "Acoso, intimidación o acecho de personas", + "report_flow.label.harassment_profile": "Su perfil me acosa o ataca a mí o a otra persona", + "report_flow.label.harmful_false_claims": "Afirmaciones falsas que podrían causar daños graves en el mundo real", + "report_flow.label.hate": "Odio o discriminación contra las personas por quienes son", + "report_flow.label.hate_dehumanizing": "Comparar a las personas con animales, enfermedades o suciedad, o llamarlas menos que humanas", + "report_flow.label.hate_incitement": "Llamados a la violencia o la exclusión contra un grupo", + "report_flow.label.hate_other": "Otros ataques a personas por quienes son", + "report_flow.label.hate_slurs": "Insultos discriminatorios, símbolos de odio o estereotipos denigrantes", + "report_flow.label.hate_violence": "Odio, violencia o extremismo", + "report_flow.label.identity": "Orientación sexual, identidad de género o estado intersexual", + "report_flow.label.illegal_activity": "Otra actividad ilegal", + "report_flow.label.illegal_goods": "Venta de drogas, armas u otros artículos ilegales", + "report_flow.label.impersonation": "Hacerse pasar por alguien, o estafar a la gente", + "report_flow.label.impersonation_guild": "Fingir ser {product_name} u otra organización", + "report_flow.label.impersonation_organization": "Una empresa, marca o grupo", + "report_flow.label.impersonation_person": "Yo o alguien cercano a mí", + "report_flow.label.impersonation_public_figure": "Una persona conocida, como un creador de contenido o un político", + "report_flow.label.impersonation_staff": "Equipo o soporte de {product_name}", + "report_flow.label.intimate_image_abuse": "Imágenes íntimas compartidas sin consentimiento, incluyendo deepfakes, o una amenaza de compartirlas", + "report_flow.label.intimate_image_abuse_guild": "Compartir imágenes íntimas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imágenes íntimas de alguien compartidas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima o de desnudo", + "report_flow.label.invite_splash": "Fondo de invitación", + "report_flow.label.ip_address": "Dirección IP", + "report_flow.label.learn_more": "Lee las Normas de la Comunidad de {product_name}", + "report_flow.label.legal_name": "Nombre real o legal", + "report_flow.label.lgbtq_targeting": "Referirse deliberadamente a alguien con un género incorrecto, usar su nombre anterior o revelar su orientación o identidad sin su consentimiento, o negar su identidad", + "report_flow.label.malware_guild": "Distribuir malware o enlaces de phishing", + "report_flow.label.malware_phishing": "Intentos de phishing, malware o hacking", + "report_flow.label.member_activity": "Lo que los miembros publican o hacen allí", + "report_flow.label.metric_manipulation": "Falsificar el número de miembros o reacciones", + "report_flow.label.minor_contact": "Pedirle a un menor un encuentro en persona, o fotos o datos personales, de una manera que parezca depredadora", + "report_flow.label.minor_dating_community": "Es una comunidad para citas entre menores", + "report_flow.label.minor_fictional": "Contenido sexual dibujado, escrito o generado por IA de un niño ficticio", + "report_flow.label.minor_grooming": "Grooming o generar confianza inapropiada con un menor", + "report_flow.label.minor_grooming_guild": "Los miembros hacen grooming o generan confianza inapropiada con menores", + "report_flow.label.minor_in_adult_space": "Un menor está en un canal o comunidad para mayores de 18 años", + "report_flow.label.minor_in_adult_space_guild": "Se permiten menores en canales para mayores de 18 años", + "report_flow.label.minor_risk": "Poner en riesgo a un menor", + "report_flow.label.minor_risk_guild": "Poner en riesgo a menores", + "report_flow.label.minor_sexual": "Sexualización de un menor", + "report_flow.label.minor_sexual_contact": "Coquetear con un menor o enviarle mensajes sexuales", + "report_flow.label.minor_sexual_contact_guild": "Los miembros coquetean con menores o les envían mensajes sexuales", + "report_flow.label.minor_sexual_content": "Un menor comparte contenido sexual por sí mismo", + "report_flow.label.minor_sexual_content_guild": "Menores publican o envían contenido sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de un menor con contenido sexual", + "report_flow.label.minor_sexual_guild": "Sexualización de menores", + "report_flow.label.minor_sexualization": "Comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_guild": "Los miembros hacen comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentarios sexuales sobre menores en su perfil", + "report_flow.label.name": "Nombres", + "report_flow.label.other": "Algo no mencionado aquí", + "report_flow.label.other_identifying": "Otra información que podría identificar o localizar a alguien", + "report_flow.label.permits_violations": "Permite infracciones graves de las reglas", + "report_flow.label.phone": "Número de teléfono", + "report_flow.label.photo": "Fotos", + "report_flow.label.platform_abuse": "Extracción de datos, automatización u otro abuso de la plataforma", + "report_flow.label.private_conversation": "Mensajes privados, capturas de pantalla o grabaciones de llamadas", + "report_flow.label.private_info": "Compartir detalles privados de alguien", + "report_flow.label.private_info_profile": "Su perfil comparte detalles privados de alguien", + "report_flow.label.profile_text": "Texto del perfil", + "report_flow.label.raid": "Organizar o unirse a un ataque o acoso masivo", + "report_flow.label.raid_guild": "Organizar ataques o acosos masivos contra personas o comunidades", + "report_flow.label.rude_language": "Malas palabras o comentarios groseros", + "report_flow.label.self_harm": "Alguien podría autolesionarse, o está fomentando las autolesiones", + "report_flow.label.self_harm_graphic": "Imágenes gráficas de autolesiones", + "report_flow.label.self_harm_guild": "Los miembros incitan a otras personas a autolesionarse", + "report_flow.label.self_harm_pressure": "Presionar o desafiar a alguien para que se autolesione", + "report_flow.label.self_harm_pressure_guild": "Presionar o desafiar a las personas para que se autolesionen", + "report_flow.label.self_harm_profile": "Su perfil sugiere autolesiones o las fomenta", + "report_flow.label.self_harm_promotion": "Fomentar las autolesiones o compartir métodos", + "report_flow.label.self_harm_promotion_profile": "Su perfil fomenta las autolesiones", + "report_flow.label.sexual": "Contenido sexual", + "report_flow.label.sexual_exploitation": "Explotación sexual, coacción o trata de personas", + "report_flow.label.sexual_unwanted": "Imágenes o mensajes sexuales que no quería", + "report_flow.label.something_else": "Algo más", + "report_flow.label.spam": "Spam o anuncios no deseados", + "report_flow.label.spam_bulk": "Envío de spam o publicidad masiva", + "report_flow.label.spam_or_manipulation": "Spam o manipulación de la plataforma", + "report_flow.label.spam_profile": "Su perfil se utiliza para spam o publicidad", + "report_flow.label.suicide_promotion": "Fomentar el suicidio o compartir métodos", + "report_flow.label.suicide_promotion_profile": "Su perfil fomenta el suicidio", + "report_flow.label.synthetic_media": "Medios falsos o creados con IA presentados como reales", + "report_flow.label.terrorism": "Terrorismo o extremismo violento", + "report_flow.label.terrorism_guild": "Reclutamiento o promoción del terrorismo o extremismo violento", + "report_flow.label.threat": "Amenazas o llamados a la violencia", + "report_flow.label.threat_to_share": "Amenaza con compartirlo", + "report_flow.label.too_young": "Está por debajo de la edad mínima para usar {product_name}", + "report_flow.label.unwanted_contact": "Acecho o contacto repetido conmigo o con otra persona después de que se le pidió que parara, se le bloqueó o se le eliminó", + "report_flow.label.violence_glorification": "Glorificar la violencia del mundo real", + "report_flow.label.violence_incitement": "Fomentar la violencia o explicar cómo dañar a las personas", + "report_flow.label.violence_misinfo": "Violencia, extremismo o información falsa dañina", + "report_flow.label.violent_threat": "Decir que va a lastimar a alguien", + "report_flow.label.worried_profile": "Me preocupa su seguridad", + "report_flow.label.worried_self_harm": "Tengo miedo de que pueda autolesionarse", + "report_flow.label.worried_suicide": "Tengo miedo de que intente suicidarse", + "report_flow.notice.need_more_info.body": "Para revisarlo, necesitamos un mensaje donde diga su edad o deje claro que está por debajo de la edad mínima de {product_name}. Reporta ese mensaje en su lugar.", + "report_flow.notice.need_more_info.title": "Aún no podemos actuar", + "report_flow.notice.need_more_info_profile.body": "Para revisarlo, necesitamos ver dónde dice su edad o deja claro que está por debajo de la edad mínima de {product_name}. Reporta ese mensaje o perfil en su lugar.", + "report_flow.screen.abuse.title": "¿Qué involucra?", + "report_flow.screen.abuse_guild.title": "¿Qué están haciendo las personas en esta comunidad?", + "report_flow.screen.age_stated_message.title": "¿Este mensaje dice su edad?", + "report_flow.screen.age_stated_profile.title": "¿Su perfil indica su edad?", + "report_flow.screen.community_parts.subtitle": "Elige las que necesites.", + "report_flow.screen.community_parts.title": "¿Qué partes de la comunidad están involucradas?", + "report_flow.screen.crisis_support.subtitle": "Las líneas de ayuda en crisis ofrecen apoyo gratuito y confidencial.", + "report_flow.screen.crisis_support.title": "Alguien puede ayudar ahora mismo", + "report_flow.screen.false_info.subtitle": "Se permiten las opiniones, la sátira y el debate de buena fe. La difamación ilegal puede reportarse según el Reglamento de Servicios Digitales.", + "report_flow.screen.false_info.subtitle_self_hosted": "Se permiten las opiniones, la sátira y el debate de buena fe.", + "report_flow.screen.false_info.title": "¿Qué tiene de engañoso?", + "report_flow.screen.harassment.title": "¿Cómo están atacando a alguien?", + "report_flow.screen.hate.title": "¿Cómo ataca a las personas por quienes son?", + "report_flow.screen.impersonation.subtitle": "Se permite la parodia o el juego de rol claramente etiquetados.", + "report_flow.screen.impersonation.title": "¿Quién está siendo suplantado, o se trata de una estafa?", + "report_flow.screen.minor_risk.title": "¿Cómo está esta persona poniendo en riesgo a un menor?", + "report_flow.screen.minor_risk_guild.title": "¿Cómo pone esta comunidad en riesgo a los menores?", + "report_flow.screen.minor_sexual.subtitle": "El contenido dibujado, escrito o de IA cuenta cuando un personaje es descrito como menor o es claramente prepúber, incluyendo lolicon, shotacon y cub.", + "report_flow.screen.minor_sexual.title": "¿Qué viste relacionado con un menor?", + "report_flow.screen.minor_sexual_guild.title": "¿Qué viste relacionado con menores?", + "report_flow.screen.private_info.subtitle": "Selecciona todas las que necesites. Si una foto íntima muestra a alguien menor de 18 años, regresa y repórtala como «Sexualización de un menor».", + "report_flow.screen.private_info.title": "¿Qué detalles privados están involucrados?", + "report_flow.screen.profile_abuse.title": "¿Qué es dañino en su perfil?", + "report_flow.screen.profile_hate_violence.title": "¿Qué muestra o promueve su perfil?", + "report_flow.screen.profile_intro.options_heading": "Más información", + "report_flow.screen.profile_intro.subtitle": "Dinos qué está mal con este perfil. No le diremos a la persona quién la reportó.", + "report_flow.screen.profile_intro.title": "Reportar perfil", + "report_flow.screen.profile_minor_sexual.title": "¿Qué hay en su perfil que involucre a un menor?", + "report_flow.screen.profile_parts.subtitle": "Elige las que necesites.", + "report_flow.screen.profile_parts.title": "¿Qué partes de su perfil son un problema?", + "report_flow.screen.profile_private_info.title": "¿Qué detalles privados hay en su perfil?", + "report_flow.screen.profile_sexual.title": "Describe el contenido sexual en su perfil", + "report_flow.screen.profile_threat.title": "¿Cómo se relaciona su perfil con la violencia?", + "report_flow.screen.root_guild.subtitle": "Elige la opción más cercana a lo que ocurre en esta comunidad.", + "report_flow.screen.root_guild.title": "¿Qué le pasa a esta comunidad?", + "report_flow.screen.root_message.subtitle": "Elige la opción más cercana. Puedes revisar todo antes de que se envíe.", + "report_flow.screen.root_message.title": "Reportar mensaje", + "report_flow.screen.root_user.subtitle": "Elige la opción más cercana a lo que hay en su perfil.", + "report_flow.screen.root_user.title": "¿Qué le pasa a su perfil?", + "report_flow.screen.self_harm.subtitle": "Nadie es castigado por decir que está pasando por un mal momento. Decirnos que te preocupa esta situación nos ayuda a ofrecer apoyo.", + "report_flow.screen.self_harm.title": "¿Qué dijo o compartió?", + "report_flow.screen.self_harm_guild.title": "¿Qué fomentan los miembros?", + "report_flow.screen.self_harm_profile.title": "¿Qué dice o muestra su perfil?", + "report_flow.screen.sexual.subtitle": "Si alguien que aparece o está involucrado es menor de 18 años, elige «Sexualización de un menor».", + "report_flow.screen.sexual.title": "Describe el contenido sexual", + "report_flow.screen.sexual_guild.subtitle": "Si alguien que aparece o está involucrado es menor de 18 años, elige «Sexualización de menores».", + "report_flow.screen.sexual_guild.title": "Describe el contenido sexual en esta comunidad", + "report_flow.screen.something_else_guild.title": "¿Qué más está sucediendo en esta comunidad?", + "report_flow.screen.something_else_message.title": "¿Qué más está sucediendo?", + "report_flow.screen.something_else_user.title": "¿Qué más está mal en este perfil?", + "report_flow.screen.spam_kind_guild.title": "¿Cómo está abusando esta comunidad de la plataforma?", + "report_flow.screen.spam_profile.title": "¿Cómo se está haciendo mal uso de la cuenta?", + "report_flow.screen.threat.title": "¿Cómo se relaciona con la violencia?", + "report_flow.screen.violence_misinfo.title": "¿Cuál de estas opciones lo describe mejor?", + "report_flow.screen.violence_misinfo_guild.title": "¿Cuál de estas situaciones ocurre en esta comunidad?" }); export default CONTENT_I18N_ES_419_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/es-ES.ts b/fluxer_api/src/api/content_i18n/locales/es-ES.ts index 401b258b9..b835a66b6 100644 --- a/fluxer_api/src/api/content_i18n/locales/es-ES.ts +++ b/fluxer_api/src/api/content_i18n/locales/es-ES.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_ES_ES_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Canales de texto", "guild.default_category_voice": "Canales de voz", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nombre de usuario, nombre visible o apodo de la comunidad", + "report_flow.description.photo": "Lo que usan como avatar e imagen de banner", + "report_flow.description.profile_text": "Biografía, estado personalizado o pronombres", + "report_flow.label.abuse": "Contenido abusivo o dañino", + "report_flow.label.account_trading": "Venta de cuentas, o de credenciales de acceso o datos de tarjetas robados", + "report_flow.label.account_trading_communities": "Compra o venta de cuentas o comunidades", + "report_flow.label.address": "Dirección particular o lugar de trabajo", + "report_flow.label.adult_content_no_gate": "Contenido para adultos sin restricción de edad 18+", + "report_flow.label.adult_content_profile": "Contenido explícito para adultos en su perfil", + "report_flow.label.adult_content_unmarked": "Contenido para adultos en un canal de la comunidad que no tiene restricciones de edad (18+)", + "report_flow.label.age_no_message": "No, no lo menciona", + "report_flow.label.age_no_profile": "No, no lo menciona", + "report_flow.label.age_yes_message": "Sí, menciona su edad", + "report_flow.label.age_yes_profile": "Sí, su perfil menciona su edad", + "report_flow.label.atrocity_denial": "Negación o celebración del Holocausto u otros genocidios", + "report_flow.label.ban_evasion": "Eludir un veto con otra cuenta", + "report_flow.label.channel_names": "Nombres de canales", + "report_flow.label.community_banner": "Imagen de banner de la comunidad", + "report_flow.label.community_icon": "Icono de la comunidad", + "report_flow.label.community_name": "Nombre de la comunidad", + "report_flow.label.conversion_therapy": "Promoción de la terapia de conversión", + "report_flow.label.copyright": "Queja por derechos de autor o marca comercial", + "report_flow.label.crisis_lines": "Líneas de ayuda en crisis de tu país", + "report_flow.label.csam": "Imágenes o vídeos reales o generados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Ficha en Descubrir", + "report_flow.label.dislike": "Simplemente no es para mí", + "report_flow.label.dsa": "Contenido ilegal en la UE (Reglamento de Servicios Digitales)", + "report_flow.label.eating_disorder_promotion": "Fomentar trastornos de la conducta alimentaria", + "report_flow.label.eating_disorder_promotion_profile": "Su perfil promueve trastornos de la conducta alimentaria", + "report_flow.label.email": "Dirección de correo electrónico", + "report_flow.label.emoji_stickers": "Emojis o pegatinas personalizados", + "report_flow.label.face_photo": "Foto de su cara", + "report_flow.label.fake_account": "Cuenta falsa, bot o abuso automatizado", + "report_flow.label.fake_account_profile": "Una cuenta falsa o engañosa", + "report_flow.label.false_claims": "Difundir mentiras para dañar la reputación de una persona específica", + "report_flow.label.false_info": "Difundir información falsa dañina", + "report_flow.label.financial": "Tarjeta, banco u otros datos financieros", + "report_flow.label.fraud": "Intentan estafar a la gente para quitarles dinero o cuentas", + "report_flow.label.fraud_guild": "Estafar a la gente para quitarles dinero o cuentas", + "report_flow.label.government_id": "Documento de identidad o número de identificación", + "report_flow.label.graphic_violence": "Violencia real mostrada para impactar, como gore o crueldad animal", + "report_flow.label.harassment": "Intimidación, acoso o acecho", + "report_flow.label.harassment_direct": "Atacar repetidamente a alguien con insultos o abusos", + "report_flow.label.harassment_guild": "Acoso, intimidación o acecho a personas", + "report_flow.label.harassment_profile": "Su perfil me acosa o ataca a mí o a otra persona", + "report_flow.label.harmful_false_claims": "Afirmaciones falsas que podrían causar graves daños en el mundo real", + "report_flow.label.hate": "Odio o discriminación contra las personas por quienes son", + "report_flow.label.hate_dehumanizing": "Comparar a las personas con animales, enfermedades o suciedad, o llamarlas menos que humanas", + "report_flow.label.hate_incitement": "Llamamientos a la violencia o la exclusión contra un grupo", + "report_flow.label.hate_other": "Otros ataques a personas por quienes son", + "report_flow.label.hate_slurs": "Insultos discriminatorios, símbolos de odio o estereotipos denigrantes", + "report_flow.label.hate_violence": "Odio, violencia o extremismo", + "report_flow.label.identity": "Orientación sexual, identidad de género o condición intersexual", + "report_flow.label.illegal_activity": "Otra actividad ilegal", + "report_flow.label.illegal_goods": "Venta de drogas, armas u otros artículos ilegales", + "report_flow.label.impersonation": "Hacerse pasar por alguien o estafar a la gente", + "report_flow.label.impersonation_guild": "Hacerse pasar por {product_name} u otra organización", + "report_flow.label.impersonation_organization": "Una empresa, marca o grupo", + "report_flow.label.impersonation_person": "Yo o alguien cercano a mí", + "report_flow.label.impersonation_public_figure": "Una persona conocida, como un creador o un político", + "report_flow.label.impersonation_staff": "Personal o soporte de {product_name}", + "report_flow.label.intimate_image_abuse": "Imágenes íntimas compartidas sin consentimiento, incluyendo deepfakes, o la amenaza de compartirlas", + "report_flow.label.intimate_image_abuse_guild": "Compartir imágenes íntimas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imágenes íntimas de alguien compartidas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima o de desnudo", + "report_flow.label.invite_splash": "Imagen de fondo de la invitación", + "report_flow.label.ip_address": "Dirección IP", + "report_flow.label.learn_more": "Lee las Normas de la comunidad de {product_name}", + "report_flow.label.legal_name": "Nombre real o legal", + "report_flow.label.lgbtq_targeting": "Referirse a alguien deliberadamente con un género incorrecto, usar su nombre anterior (deadnaming), revelar su orientación o identidad sin su consentimiento, o negar su identidad", + "report_flow.label.malware_guild": "Distribuir malware o enlaces de phishing", + "report_flow.label.malware_phishing": "Phishing, malware o intentos de hackeo", + "report_flow.label.member_activity": "Lo que los miembros publican o hacen allí", + "report_flow.label.metric_manipulation": "Falsificar el número de miembros o de reacciones", + "report_flow.label.minor_contact": "Proponer a un menor quedar en persona, o pedirle fotos o datos personales, de una forma que parece propia de un depredador", + "report_flow.label.minor_dating_community": "Es una comunidad para citas entre menores", + "report_flow.label.minor_fictional": "Contenido sexual dibujado, escrito o generado por IA de un niño ficticio", + "report_flow.label.minor_grooming": "Grooming o creación de una confianza inapropiada con un menor", + "report_flow.label.minor_grooming_guild": "Los miembros hacen grooming a menores o se ganan de forma inapropiada su confianza", + "report_flow.label.minor_in_adult_space": "Un menor está en un canal o comunidad para mayores de 18 años", + "report_flow.label.minor_in_adult_space_guild": "Se permiten menores en canales para mayores de 18 años", + "report_flow.label.minor_risk": "Poner en riesgo a un menor", + "report_flow.label.minor_risk_guild": "Poner en riesgo a menores", + "report_flow.label.minor_sexual": "Sexualización de un menor", + "report_flow.label.minor_sexual_contact": "Coquetear con un menor o enviarle mensajes de índole sexual", + "report_flow.label.minor_sexual_contact_guild": "Los miembros coquetean con menores o les envían mensajes de índole sexual", + "report_flow.label.minor_sexual_content": "Un menor comparte contenido sexual por sí mismo", + "report_flow.label.minor_sexual_content_guild": "Los menores publican o envían contenido sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de un menor con contenido sexual", + "report_flow.label.minor_sexual_guild": "Sexualización de menores", + "report_flow.label.minor_sexualization": "Comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_guild": "Los miembros hacen comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentarios sexuales sobre menores en su perfil", + "report_flow.label.name": "Nombres", + "report_flow.label.other": "Algo no incluido aquí", + "report_flow.label.other_identifying": "Otra información que podría identificar o localizar a alguien", + "report_flow.label.permits_violations": "Permite infracciones graves de las normas", + "report_flow.label.phone": "Número de teléfono", + "report_flow.label.photo": "Fotos", + "report_flow.label.platform_abuse": "Extracción de datos, automatización u otro abuso de la plataforma", + "report_flow.label.private_conversation": "Mensajes privados, capturas de pantalla o grabaciones de llamadas", + "report_flow.label.private_info": "Compartir detalles privados de alguien", + "report_flow.label.private_info_profile": "Su perfil comparte detalles privados de alguien", + "report_flow.label.profile_text": "Texto del perfil", + "report_flow.label.raid": "Organizar o unirse a un ataque o acoso masivo", + "report_flow.label.raid_guild": "Organizar ataques o acosos masivos contra personas o comunidades", + "report_flow.label.rude_language": "Lenguaje soez o comentarios groseros", + "report_flow.label.self_harm": "Alguien podría hacerse daño o está fomentando las autolesiones", + "report_flow.label.self_harm_graphic": "Imágenes gráficas de autolesiones", + "report_flow.label.self_harm_guild": "Los miembros incitan a otros a hacerse daño", + "report_flow.label.self_harm_pressure": "Presionar o desafiar a alguien para que se autolesione", + "report_flow.label.self_harm_pressure_guild": "Presionar o desafiar a la gente para que se autolesione", + "report_flow.label.self_harm_profile": "Su perfil sugiere autolesiones o las fomenta", + "report_flow.label.self_harm_promotion": "Fomentar las autolesiones o compartir métodos", + "report_flow.label.self_harm_promotion_profile": "Su perfil fomenta las autolesiones", + "report_flow.label.sexual": "Contenido sexual", + "report_flow.label.sexual_exploitation": "Explotación sexual, coacción o trata de personas", + "report_flow.label.sexual_unwanted": "Imágenes o mensajes sexuales que no quería", + "report_flow.label.something_else": "Algo más", + "report_flow.label.spam": "Spam o anuncios no deseados", + "report_flow.label.spam_bulk": "Envío de spam o publicidad masiva", + "report_flow.label.spam_or_manipulation": "Spam o manipulación de la plataforma", + "report_flow.label.spam_profile": "Su perfil se utiliza para spam o publicidad", + "report_flow.label.suicide_promotion": "Fomentar el suicidio o compartir métodos", + "report_flow.label.suicide_promotion_profile": "Su perfil fomenta el suicidio", + "report_flow.label.synthetic_media": "Contenido multimedia falso o creado con IA presentado como real", + "report_flow.label.terrorism": "Terrorismo o extremismo violento", + "report_flow.label.terrorism_guild": "Reclutamiento o promoción del terrorismo o el extremismo violento", + "report_flow.label.threat": "Amenazas o llamamientos a la violencia", + "report_flow.label.threat_to_share": "Amenaza con compartirlo", + "report_flow.label.too_young": "Está por debajo de la edad mínima para usar {product_name}", + "report_flow.label.unwanted_contact": "Acecho o contacto repetido conmigo o con otra persona después de que se le haya pedido que pare, se le haya bloqueado o se le haya expulsado", + "report_flow.label.violence_glorification": "Glorificar la violencia del mundo real", + "report_flow.label.violence_incitement": "Fomentar la violencia o explicar cómo dañar a las personas", + "report_flow.label.violence_misinfo": "Violencia, extremismo o información falsa dañina", + "report_flow.label.violent_threat": "Decir que va a hacer daño a alguien", + "report_flow.label.worried_profile": "Me preocupa su seguridad", + "report_flow.label.worried_self_harm": "Tengo miedo de que pueda hacerse daño", + "report_flow.label.worried_suicide": "Tengo miedo de que intente suicidarse", + "report_flow.notice.need_more_info.body": "Para revisarlo, necesitamos un mensaje en el que diga cuántos años tiene o deje claro que no alcanza la edad mínima de {product_name}. Denuncia ese mensaje en su lugar.", + "report_flow.notice.need_more_info.title": "Aún no podemos actuar", + "report_flow.notice.need_more_info_profile.body": "Para revisarlo, necesitamos ver dónde dice cuántos años tiene o deja claro que no alcanza la edad mínima de {product_name}. Denuncia ese mensaje o perfil en su lugar.", + "report_flow.screen.abuse.title": "¿En qué consiste?", + "report_flow.screen.abuse_guild.title": "¿Qué están haciendo las personas de esta comunidad?", + "report_flow.screen.age_stated_message.title": "¿Este mensaje dice cuántos años tiene?", + "report_flow.screen.age_stated_profile.title": "¿Dice su perfil cuántos años tiene?", + "report_flow.screen.community_parts.subtitle": "Selecciona tantas como necesites.", + "report_flow.screen.community_parts.title": "¿Qué partes de la comunidad están involucradas?", + "report_flow.screen.crisis_support.subtitle": "Las líneas de ayuda en crisis ofrecen apoyo gratuito y confidencial.", + "report_flow.screen.crisis_support.title": "Alguien puede ayudar ahora mismo", + "report_flow.screen.false_info.subtitle": "Se permiten las opiniones, la sátira y el debate de buena fe. La difamación ilegal puede denunciarse en virtud del Reglamento de Servicios Digitales (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Se permiten las opiniones, la sátira y el debate de buena fe.", + "report_flow.screen.false_info.title": "¿Qué tiene de engañoso?", + "report_flow.screen.harassment.title": "¿Cómo se está atacando a alguien?", + "report_flow.screen.hate.title": "¿Cómo ataca a las personas por quienes son?", + "report_flow.screen.impersonation.subtitle": "Se permite la parodia o el juego de rol claramente etiquetados.", + "report_flow.screen.impersonation.title": "¿A quién se suplanta o es una estafa?", + "report_flow.screen.minor_risk.title": "¿Cómo está poniendo esta persona en riesgo a un menor?", + "report_flow.screen.minor_risk_guild.title": "¿Cómo pone esta comunidad en riesgo a los menores?", + "report_flow.screen.minor_sexual.subtitle": "El contenido dibujado, escrito o generado por IA cuenta cuando un personaje es descrito como menor o es claramente prepúber, incluyendo lolicon, shotacon y cub.", + "report_flow.screen.minor_sexual.title": "¿Qué has visto relacionado con un menor?", + "report_flow.screen.minor_sexual_guild.title": "¿Qué has visto relacionado con menores?", + "report_flow.screen.private_info.subtitle": "Selecciona tantas como necesites. Si una foto íntima muestra a alguien menor de 18 años, vuelve atrás y denúnciala en «Sexualización de un menor».", + "report_flow.screen.private_info.title": "¿Qué detalles privados están involucrados?", + "report_flow.screen.profile_abuse.title": "¿Qué tiene de perjudicial su perfil?", + "report_flow.screen.profile_hate_violence.title": "¿Qué muestra o promueve su perfil?", + "report_flow.screen.profile_intro.options_heading": "Más información", + "report_flow.screen.profile_intro.subtitle": "Cuéntanos qué va mal en este perfil. No se le dirá a la persona quién la ha denunciado.", + "report_flow.screen.profile_intro.title": "Denunciar perfil", + "report_flow.screen.profile_minor_sexual.title": "¿Qué hay en su perfil relacionado con un menor?", + "report_flow.screen.profile_parts.subtitle": "Selecciona tantas como necesites.", + "report_flow.screen.profile_parts.title": "¿Qué partes de su perfil son un problema?", + "report_flow.screen.profile_private_info.title": "¿Qué detalles privados hay en su perfil?", + "report_flow.screen.profile_sexual.title": "Cuéntanos sobre el contenido sexual de su perfil", + "report_flow.screen.profile_threat.title": "¿Cómo se relaciona su perfil con la violencia?", + "report_flow.screen.root_guild.subtitle": "Selecciona la opción que mejor describa lo que ocurre en esta comunidad.", + "report_flow.screen.root_guild.title": "¿Qué problema hay en esta comunidad?", + "report_flow.screen.root_message.subtitle": "Selecciona la opción que mejor se ajuste. Puedes revisar todo antes de enviarlo.", + "report_flow.screen.root_message.title": "Denunciar mensaje", + "report_flow.screen.root_user.subtitle": "Selecciona la opción que mejor describa el contenido de su perfil.", + "report_flow.screen.root_user.title": "¿Qué problema hay en su perfil?", + "report_flow.screen.self_harm.subtitle": "Nadie es castigado por decir que está pasando por un mal momento. Decirnos que te preocupa nos ayuda a ofrecerte apoyo.", + "report_flow.screen.self_harm.title": "¿Qué dijo o compartió?", + "report_flow.screen.self_harm_guild.title": "¿Qué fomentan los miembros?", + "report_flow.screen.self_harm_profile.title": "¿Qué dice o muestra su perfil?", + "report_flow.screen.sexual.subtitle": "Si alguna persona que aparece o está involucrada es menor de 18 años, elige «Sexualización de un menor».", + "report_flow.screen.sexual.title": "Cuéntanos sobre el contenido sexual", + "report_flow.screen.sexual_guild.subtitle": "Si alguna persona que aparece o está involucrada es menor de 18 años, elige «Sexualización de menores».", + "report_flow.screen.sexual_guild.title": "Cuéntanos sobre el contenido sexual de esta comunidad", + "report_flow.screen.something_else_guild.title": "¿Qué más ocurre en esta comunidad?", + "report_flow.screen.something_else_message.title": "¿Qué más ocurre?", + "report_flow.screen.something_else_user.title": "¿Qué otro problema hay en este perfil?", + "report_flow.screen.spam_kind_guild.title": "¿Cómo abusa esta comunidad de la plataforma?", + "report_flow.screen.spam_profile.title": "¿Cómo se está usando mal la cuenta?", + "report_flow.screen.threat.title": "¿Cómo se relaciona con la violencia?", + "report_flow.screen.violence_misinfo.title": "¿Cuál de estas opciones lo describe?", + "report_flow.screen.violence_misinfo_guild.title": "¿Cuál de estas situaciones ocurre en esta comunidad?" }); export default CONTENT_I18N_ES_ES_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/fi.ts b/fluxer_api/src/api/content_i18n/locales/fi.ts index 25d43e735..80b261f82 100644 --- a/fluxer_api/src/api/content_i18n/locales/fi.ts +++ b/fluxer_api/src/api/content_i18n/locales/fi.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_FI_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Tekstikanavat", "guild.default_category_voice": "Äänikanavat", "guild.default_channel_text": "yleinen", - "guild.default_channel_voice": "Yleinen" + "guild.default_channel_voice": "Yleinen", + "report_flow.description.name": "Käyttäjänimi, näyttönimi tai yhteisön lempinimi", + "report_flow.description.photo": "Heidän profiilikuvansa ja bannerinsa", + "report_flow.description.profile_text": "Kuvaus, mukautettu tila tai pronominit", + "report_flow.label.abuse": "Haitallinen tai loukkaava sisältö", + "report_flow.label.account_trading": "Tilien myynti tai varastetut kirjautumistiedot tai korttitiedot", + "report_flow.label.account_trading_communities": "Tilien tai yhteisöjen ostaminen tai myyminen", + "report_flow.label.address": "Kotiosoite tai työpaikka", + "report_flow.label.adult_content_no_gate": "Aikuisille tarkoitettu sisältö ilman 18+ ikärajoitusta", + "report_flow.label.adult_content_profile": "Seksuaalisesti avointa aikuisille tarkoitettua sisältöä profiilissa", + "report_flow.label.adult_content_unmarked": "Aikuisille tarkoitettua sisältöä yhteisön kanavalla, jota ei ole merkitty ikärajoitetuksi (18+)", + "report_flow.label.age_no_message": "Ei, siinä ei mainita ikää", + "report_flow.label.age_no_profile": "Ei, profiilissa ei mainita ikää", + "report_flow.label.age_yes_message": "Kyllä, siinä mainitaan heidän ikänsä", + "report_flow.label.age_yes_profile": "Kyllä, heidän profiilissaan mainitaan ikä", + "report_flow.label.atrocity_denial": "Holokaustin tai muiden kansanmurhien kieltäminen tai juhlistaminen", + "report_flow.label.ban_evasion": "Käyttökiellon kiertäminen toisella tilillä", + "report_flow.label.channel_names": "Kanavien nimet", + "report_flow.label.community_banner": "Yhteisön banneri", + "report_flow.label.community_icon": "Yhteisön kuvake", + "report_flow.label.community_name": "Yhteisön nimi", + "report_flow.label.conversion_therapy": "Konversioterapian edistäminen", + "report_flow.label.copyright": "Tekijänoikeus- tai tavaramerkkivalitus", + "report_flow.label.crisis_lines": "Kriisipuhelimet maassasi", + "report_flow.label.csam": "Aitoja tai tekoälyn luomia kuvia tai videoita lapsiin kohdistuvasta seksuaalisesta hyväksikäytöstä", + "report_flow.label.discovery_listing": "Löydä-listaus", + "report_flow.label.dislike": "Se ei vain ole minun juttuni", + "report_flow.label.dsa": "Laiton sisältö EU:ssa (digipalvelusäädös, DSA)", + "report_flow.label.eating_disorder_promotion": "Syömishäiriöihin kannustaminen", + "report_flow.label.eating_disorder_promotion_profile": "Hänen profiilinsa edistää syömishäiriöitä", + "report_flow.label.email": "Sähköpostiosoite", + "report_flow.label.emoji_stickers": "Mukautetut emojit tai tarrat", + "report_flow.label.face_photo": "Kuva heidän kasvoistaan", + "report_flow.label.fake_account": "Väärennetty tili, botti tai automaattinen väärinkäyttö", + "report_flow.label.fake_account_profile": "Väärennetty tai harhaanjohtava tili", + "report_flow.label.false_claims": "Valheiden levittäminen tietyn henkilön maineen vahingoittamiseksi", + "report_flow.label.false_info": "Haitallisen väärän tiedon levittäminen", + "report_flow.label.financial": "Kortti-, pankki- tai muut taloudelliset tiedot", + "report_flow.label.fraud": "He yrittävät huijata ihmisiltä rahaa tai tilejä", + "report_flow.label.fraud_guild": "Rahan tai tilien huijaaminen ihmisiltä", + "report_flow.label.government_id": "Henkilöllisyystodistus tai sen numero", + "report_flow.label.graphic_violence": "Todellista väkivaltaa, joka on tarkoitettu järkyttämään, kuten raakoja verikuvia tai eläinrääkkäystä", + "report_flow.label.harassment": "Kiusaaminen, häirintä tai vainoaminen", + "report_flow.label.harassment_direct": "Jonkun toistuva solvaaminen tai loukkaava kohtelu", + "report_flow.label.harassment_guild": "Ihmisten häirintä, kiusaaminen tai vainoaminen", + "report_flow.label.harassment_profile": "Hänen profiilinsa häiritsee tai ottaa kohteekseen minut tai jonkun muun", + "report_flow.label.harmful_false_claims": "Väärät väitteet, jotka voivat aiheuttaa vakavaa todellista haittaa", + "report_flow.label.hate": "Viha tai syrjintä ihmisiä kohtaan heidän identiteettinsä vuoksi", + "report_flow.label.hate_dehumanizing": "Ihmisten vertaaminen eläimiin, sairauksiin tai saastaan tai väittäminen heidän olevan vähemmän kuin ihmisiä", + "report_flow.label.hate_incitement": "Kehotukset väkivaltaan tai ulossulkemiseen jotakin ryhmää kohtaan", + "report_flow.label.hate_other": "Muut hyökkäykset ihmisiä kohtaan heidän identiteettinsä vuoksi", + "report_flow.label.hate_slurs": "Halventavat nimitykset, vihaa lietsovat symbolit tai alentavat stereotypiat", + "report_flow.label.hate_violence": "Viha, väkivalta tai ekstremismi", + "report_flow.label.identity": "Seksuaalinen suuntautuminen, sukupuoli-identiteetti tai intersukupuolisuus", + "report_flow.label.illegal_activity": "Muu laiton toiminta", + "report_flow.label.illegal_goods": "Huumeiden, aseiden tai muiden laittomien tuotteiden myynti", + "report_flow.label.impersonation": "Toisena esiintyminen tai ihmisten huijaaminen", + "report_flow.label.impersonation_guild": "Esiintyminen palveluna {product_name} tai muuna organisaationa", + "report_flow.label.impersonation_organization": "Yritys, brändi tai ryhmä", + "report_flow.label.impersonation_person": "Minä tai joku läheinen", + "report_flow.label.impersonation_public_figure": "Tunnettu henkilö, kuten sisällöntuottaja tai poliitikko", + "report_flow.label.impersonation_staff": "Palvelun {product_name} henkilökunta tai tuki", + "report_flow.label.intimate_image_abuse": "Ilman suostumusta jaettuja intiimejä kuvia, mukaan lukien deepfake-kuvat, tai uhkaus jakaa niitä", + "report_flow.label.intimate_image_abuse_guild": "Intiimien kuvien jakaminen ilman suostumusta, mukaan lukien deepfake-kuvat", + "report_flow.label.intimate_image_abuse_profile": "Jonkun intiimejä kuvia, joita on jaettu ilman suostumusta, mukaan lukien deepfake-kuvat", + "report_flow.label.intimate_photo": "Intiimi tai alaston kuva", + "report_flow.label.invite_splash": "Kutsun taustakuva", + "report_flow.label.ip_address": "IP-osoite", + "report_flow.label.learn_more": "Lue palvelun {product_name} yhteisöohjeet", + "report_flow.label.legal_name": "Oikea tai virallinen nimi", + "report_flow.label.lgbtq_targeting": "Jonkun tahallinen väärällä sukupuolella puhuttelu, entisen nimen käyttö tai kaapista ulos pakottaminen taikka hänen identiteettinsä kieltäminen", + "report_flow.label.malware_guild": "Haittaohjelmien tai tietojenkalastelulinkkien jakaminen", + "report_flow.label.malware_phishing": "Tietojenkalastelu-, haittaohjelma- tai hakkerointiyritykset", + "report_flow.label.member_activity": "Mitä jäsenet julkaisevat tai tekevät siellä", + "report_flow.label.metric_manipulation": "Jäsen- tai reaktiomäärien väärentäminen", + "report_flow.label.minor_contact": "Alaikäisen pyytäminen tapaamiseen tai valokuvien tai henkilötietojen pyytäminen tavalla, joka viittaa hyväksikäyttöaikeisiin", + "report_flow.label.minor_dating_community": "Se on yhteisö alaikäisten väliselle deittailulle", + "report_flow.label.minor_fictional": "Piirretty, kirjoitettu tai tekoälyn luoma seksuaalinen sisältö kuvitteellisesta lapsesta", + "report_flow.label.minor_grooming": "Alaikäisen groomaus tai epäasiallisen luottamuksen rakentaminen alaikäiseen", + "report_flow.label.minor_grooming_guild": "Jäsenet groomaavat alaikäisiä tai rakentavat epäasiallista luottamusta alaikäisiin", + "report_flow.label.minor_in_adult_space": "Alaikäinen on ikärajoitetulla (18+) kanavalla tai yhteisössä", + "report_flow.label.minor_in_adult_space_guild": "Alaikäisten sallitaan olla ikärajoitetuilla (18+) kanavilla", + "report_flow.label.minor_risk": "Alaikäisen vaarantaminen", + "report_flow.label.minor_risk_guild": "Alaikäisten vaarantaminen", + "report_flow.label.minor_sexual": "Alaikäisen seksualisointi", + "report_flow.label.minor_sexual_contact": "Alaikäisen kanssa flirttailu tai seksuaalinen viestittely", + "report_flow.label.minor_sexual_contact_guild": "Jäsenet flirttailevat alaikäisten kanssa tai viestittelevät heille seksuaalisesti", + "report_flow.label.minor_sexual_content": "Alaikäinen jakaa itse seksuaalista sisältöä", + "report_flow.label.minor_sexual_content_guild": "Alaikäiset julkaisevat tai lähettävät seksuaalista sisältöä", + "report_flow.label.minor_sexual_content_profile": "Alaikäisen profiili, jossa on seksuaalista sisältöä", + "report_flow.label.minor_sexual_guild": "Alaikäisten seksualisointi", + "report_flow.label.minor_sexualization": "Seksuaaliset kommentit alaikäisistä", + "report_flow.label.minor_sexualization_guild": "Jäsenet tekevät seksuaalisia kommentteja alaikäisistä", + "report_flow.label.minor_sexualization_profile": "Seksuaaliset kommentit alaikäisistä heidän profiilissaan", + "report_flow.label.name": "Nimet", + "report_flow.label.other": "Jotain, mitä ei ole lueteltu tässä", + "report_flow.label.other_identifying": "Muut tiedot, jotka voisivat tunnistaa tai paikantaa jonkun", + "report_flow.label.permits_violations": "Se sallii vakavat sääntörikkomukset", + "report_flow.label.phone": "Puhelinnumero", + "report_flow.label.photo": "Kuvat", + "report_flow.label.platform_abuse": "Tietojen kerääminen, automaatio tai muu alustan väärinkäyttö", + "report_flow.label.private_conversation": "Yksityisviestit, kuvakaappaukset tai puhelutallenteet", + "report_flow.label.private_info": "Jonkun yksityisten tietojen jakaminen", + "report_flow.label.private_info_profile": "Heidän profiilissaan jaetaan jonkun yksityisiä tietoja", + "report_flow.label.profile_text": "Profiiliteksti", + "report_flow.label.raid": "Raidin tai joukkohyökkäyksen järjestäminen tai siihen liittyminen", + "report_flow.label.raid_guild": "Raidien tai joukkohyökkäysten järjestäminen ihmisiä tai yhteisöjä vastaan", + "report_flow.label.rude_language": "Kiroilu tai epäkohteliaat huomautukset", + "report_flow.label.self_harm": "Joku saattaa vahingoittaa itseään, tai joku kannustaa itsensä vahingoittamiseen", + "report_flow.label.self_harm_graphic": "Graafisia kuvia itsensä vahingoittamisesta", + "report_flow.label.self_harm_guild": "Jäsenet yllyttävät muita vahingoittamaan itseään", + "report_flow.label.self_harm_pressure": "Jonkun painostaminen tai haastaminen vahingoittamaan itseään", + "report_flow.label.self_harm_pressure_guild": "Ihmisten painostaminen tai haastaminen vahingoittamaan itseään", + "report_flow.label.self_harm_profile": "Heidän profiilinsa vihjaa itsensä vahingoittamiseen tai kannustaa siihen", + "report_flow.label.self_harm_promotion": "Itsensä vahingoittamiseen yllyttäminen tai keinojen jakaminen", + "report_flow.label.self_harm_promotion_profile": "Heidän profiilinsa kannustaa itsensä vahingoittamiseen", + "report_flow.label.sexual": "Seksuaalinen sisältö", + "report_flow.label.sexual_exploitation": "Seksuaalinen hyväksikäyttö, pakottaminen tai ihmiskauppa", + "report_flow.label.sexual_unwanted": "Seksuaalisia kuvia tai viestejä, joita en halunnut", + "report_flow.label.something_else": "Jotain muuta", + "report_flow.label.spam": "Roskaposti tai ei-toivotut mainokset", + "report_flow.label.spam_bulk": "Roskapostin tai mainosten lähettäminen massana", + "report_flow.label.spam_or_manipulation": "Roskaposti tai alustan manipulointi", + "report_flow.label.spam_profile": "Heidän profiiliaan käytetään roskapostiin tai mainostamiseen", + "report_flow.label.suicide_promotion": "Itsemurhaan yllyttäminen tai menetelmien jakaminen", + "report_flow.label.suicide_promotion_profile": "Hänen profiilinsa kannustaa itsemurhaan", + "report_flow.label.synthetic_media": "Väärennetty tai tekoälyn luoma media esitettynä todellisena", + "report_flow.label.terrorism": "Terrorismi tai väkivaltainen ekstremismi", + "report_flow.label.terrorism_guild": "Rekrytointi terrorismiin tai väkivaltaiseen ekstremismiin tai niiden edistäminen", + "report_flow.label.threat": "Uhkaukset tai kehotukset väkivaltaan", + "report_flow.label.threat_to_share": "He uhkaavat jakaa sen", + "report_flow.label.too_young": "He ovat alle palvelun {product_name} vähimmäisiän", + "report_flow.label.unwanted_contact": "Vainoaminen tai toistuva yhteydenotto minuun tai johonkuhun muuhun sen jälkeen, kun on pyydetty lopettamaan, estetty tai poistettu", + "report_flow.label.violence_glorification": "Todellisen väkivallan ihannointi", + "report_flow.label.violence_incitement": "Väkivaltaan kannustaminen tai selittäminen, miten ihmisiä vahingoitetaan", + "report_flow.label.violence_misinfo": "Väkivalta, ekstremismi tai haitallinen väärä tieto", + "report_flow.label.violent_threat": "Sen sanominen, että aikoo vahingoittaa jotakuta", + "report_flow.label.worried_profile": "Olen huolissani heidän turvallisuudestaan", + "report_flow.label.worried_self_harm": "Pelkään, että he saattavat vahingoittaa itseään", + "report_flow.label.worried_suicide": "Pelkään, että he saattavat yrittää itsemurhaa", + "report_flow.notice.need_more_info.body": "Tarkistaaksemme tämän tarvitsemme viestin, jossa he kertovat ikänsä tai tekevät selväksi, että ovat alle palvelun {product_name} vähimmäisiän. Ilmoita sen sijaan kyseinen viesti.", + "report_flow.notice.need_more_info.title": "Emme voi vielä toimia tämän perusteella", + "report_flow.notice.need_more_info_profile.body": "Tämän tarkistamiseksi meidän on nähtävä, missä he kertovat ikänsä tai tekevät selväksi, että he ovat alle palvelun {product_name} vähimmäisiän. Ilmoita sen sijaan kyseinen viesti tai profiili.", + "report_flow.screen.abuse.title": "Mistä on kyse?", + "report_flow.screen.abuse_guild.title": "Mitä yhteisön jäsenet tekevät?", + "report_flow.screen.age_stated_message.title": "Mainitaanko tässä viestissä heidän ikänsä?", + "report_flow.screen.age_stated_profile.title": "Mainitaanko heidän profiilissaan heidän ikänsä?", + "report_flow.screen.community_parts.subtitle": "Valitse niin monta kuin tarvitset.", + "report_flow.screen.community_parts.title": "Mitkä yhteisön osat liittyvät asiaan?", + "report_flow.screen.crisis_support.subtitle": "Kriisipuhelimet tarjoavat ilmaista, luottamuksellista tukea.", + "report_flow.screen.crisis_support.title": "Joku voi auttaa juuri nyt", + "report_flow.screen.false_info.subtitle": "Mielipiteet, satiiri ja hyvässä tarkoituksessa käyty keskustelu ovat sallittuja. Laittomasta kunnianloukkauksesta voi ilmoittaa digipalvelusäädöksen (DSA) nojalla.", + "report_flow.screen.false_info.subtitle_self_hosted": "Mielipiteet, satiiri ja hyvässä tarkoituksessa käyty keskustelu ovat sallittuja.", + "report_flow.screen.false_info.title": "Mikä siinä on harhaanjohtavaa?", + "report_flow.screen.harassment.title": "Miten joku joutuu häirinnän kohteeksi?", + "report_flow.screen.hate.title": "Miten se hyökkää ihmisiä vastaan heidän identiteettinsä vuoksi?", + "report_flow.screen.impersonation.subtitle": "Selkeästi merkitty parodia tai roolipeli on sallittua.", + "report_flow.screen.impersonation.title": "Kenenä joku esiintyy, vai onko kyseessä huijaus?", + "report_flow.screen.minor_risk.title": "Miten tämä henkilö vaarantaa alaikäisen?", + "report_flow.screen.minor_risk_guild.title": "Miten tämä yhteisö vaarantaa alaikäisiä?", + "report_flow.screen.minor_sexual.subtitle": "Piirretty, kirjoitettu tai tekoälysisältö lasketaan mukaan, kun hahmoa kuvataan alaikäiseksi tai se on selvästi esipuberteetti-ikäinen, mukaan lukien lolicon, shotacon ja cub.", + "report_flow.screen.minor_sexual.title": "Mitä näit alaikäiseen liittyen?", + "report_flow.screen.minor_sexual_guild.title": "Mitä näit alaikäisiin liittyen?", + "report_flow.screen.private_info.subtitle": "Valitse niin monta kuin tarvitset. Jos intiimi kuva esittää alle 18-vuotiasta, palaa takaisin ja ilmoita se kohdassa ”Alaikäisen seksualisointi”.", + "report_flow.screen.private_info.title": "Mitä yksityisiä tietoja liittyy asiaan?", + "report_flow.screen.profile_abuse.title": "Mikä heidän profiilissaan on haitallista?", + "report_flow.screen.profile_hate_violence.title": "Mitä heidän profiilissaan näkyy tai mitä se edistää?", + "report_flow.screen.profile_intro.options_heading": "Lue lisää", + "report_flow.screen.profile_intro.subtitle": "Kerro meille, mikä tässä profiilissa on vialla. Heille ei kerrota, kuka ilmoitti.", + "report_flow.screen.profile_intro.title": "Ilmoita profiilista", + "report_flow.screen.profile_minor_sexual.title": "Mitä heidän profiilissaan liittyy alaikäiseen?", + "report_flow.screen.profile_parts.subtitle": "Valitse niin monta kuin tarvitset.", + "report_flow.screen.profile_parts.title": "Mitkä heidän profiilinsa osat ovat ongelmallisia?", + "report_flow.screen.profile_private_info.title": "Mitä yksityisiä tietoja heidän profiilissaan on?", + "report_flow.screen.profile_sexual.title": "Kerro seksuaalisesta sisällöstä heidän profiilissaan", + "report_flow.screen.profile_threat.title": "Miten heidän profiilinsa liittyy väkivaltaan?", + "report_flow.screen.root_guild.subtitle": "Valitse sopivin vaihtoehto sille, mitä tässä yhteisössä tapahtuu.", + "report_flow.screen.root_guild.title": "Mikä tässä yhteisössä on vialla?", + "report_flow.screen.root_message.subtitle": "Valitse sopivin vaihtoehto. Voit tarkistaa kaiken ennen lähettämistä.", + "report_flow.screen.root_message.title": "Ilmoita viestistä", + "report_flow.screen.root_user.subtitle": "Valitse sopivin vaihtoehto sille, mitä heidän profiilissaan on.", + "report_flow.screen.root_user.title": "Mikä heidän profiilissaan on vialla?", + "report_flow.screen.self_harm.subtitle": "Ketään ei rangaista siitä, että kertoo voivansa huonosti. Kun kerrot meille olevasi huolissasi, voimme tarjota tukea.", + "report_flow.screen.self_harm.title": "Mitä he sanoivat tai jakoivat?", + "report_flow.screen.self_harm_guild.title": "Mihin jäsenet kannustavat?", + "report_flow.screen.self_harm_profile.title": "Mitä heidän profiilissaan sanotaan tai näytetään?", + "report_flow.screen.sexual.subtitle": "Jos joku esiintyvistä tai osallisista on alle 18-vuotias, valitse ”Alaikäisen seksualisointi”.", + "report_flow.screen.sexual.title": "Kerro seksuaalisesta sisällöstä", + "report_flow.screen.sexual_guild.subtitle": "Jos joku esiintyvistä tai osallisista on alle 18-vuotias, valitse ”Alaikäisten seksualisointi”.", + "report_flow.screen.sexual_guild.title": "Kerro yhteisön seksuaalisesta sisällöstä", + "report_flow.screen.something_else_guild.title": "Mitä muuta tässä yhteisössä tapahtuu?", + "report_flow.screen.something_else_message.title": "Mitä muuta on meneillään?", + "report_flow.screen.something_else_user.title": "Mitä muuta heidän profiilissaan on vialla?", + "report_flow.screen.spam_kind_guild.title": "Miten tämä yhteisö väärinkäyttää alustaa?", + "report_flow.screen.spam_profile.title": "Miten tiliä väärinkäytetään?", + "report_flow.screen.threat.title": "Miten se liittyy väkivaltaan?", + "report_flow.screen.violence_misinfo.title": "Mikä näistä vastaa sitä?", + "report_flow.screen.violence_misinfo_guild.title": "Mikä näistä tapahtuu tässä yhteisössä?" }); export default CONTENT_I18N_FI_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/fr.ts b/fluxer_api/src/api/content_i18n/locales/fr.ts index c0fbf8ac2..d6b0a7175 100644 --- a/fluxer_api/src/api/content_i18n/locales/fr.ts +++ b/fluxer_api/src/api/content_i18n/locales/fr.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_FR_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Salons textuels", "guild.default_category_voice": "Salons vocaux", "guild.default_channel_text": "général", - "guild.default_channel_voice": "Général" + "guild.default_channel_voice": "Général", + "report_flow.description.name": "Nom d'utilisateur, nom affiché ou surnom dans la communauté", + "report_flow.description.photo": "Ce que cette personne utilise comme avatar et bannière", + "report_flow.description.profile_text": "Bio, statut personnalisé ou pronoms", + "report_flow.label.abuse": "Contenu abusif ou nuisible", + "report_flow.label.account_trading": "Vente de comptes, ou identifiants ou coordonnées bancaires volés", + "report_flow.label.account_trading_communities": "Achat ou vente de comptes ou de communautés", + "report_flow.label.address": "Adresse du domicile ou du lieu de travail", + "report_flow.label.adult_content_no_gate": "Contenu pour adultes sans restriction d'âge (18+)", + "report_flow.label.adult_content_profile": "Contenu adulte explicite dans son profil", + "report_flow.label.adult_content_unmarked": "Contenu pour adultes dans un salon de communauté qui n'est pas marqué comme réservé aux adultes (18+)", + "report_flow.label.age_no_message": "Non, il n'est pas mentionné", + "report_flow.label.age_no_profile": "Non, son profil ne le mentionne pas", + "report_flow.label.age_yes_message": "Oui, son âge est mentionné", + "report_flow.label.age_yes_profile": "Oui, son profil mentionne son âge", + "report_flow.label.atrocity_denial": "Nier ou célébrer l'Holocauste ou d'autres génocides", + "report_flow.label.ban_evasion": "Contourner un bannissement avec un autre compte", + "report_flow.label.channel_names": "Noms des salons", + "report_flow.label.community_banner": "Bannière de la communauté", + "report_flow.label.community_icon": "Icône de la communauté", + "report_flow.label.community_name": "Nom de la communauté", + "report_flow.label.conversion_therapy": "Promotion de la thérapie de conversion", + "report_flow.label.copyright": "Plainte pour atteinte aux droits d’auteur ou de marque déposée", + "report_flow.label.crisis_lines": "Lignes d'écoute en cas de crise dans votre pays", + "report_flow.label.csam": "Images ou vidéos réelles ou générées par IA représentant des abus sexuels sur des enfants", + "report_flow.label.discovery_listing": "Fiche dans Découverte", + "report_flow.label.dislike": "Ce n'est pas pour moi", + "report_flow.label.dsa": "Contenu illégal dans l'UE (règlement sur les services numériques, DSA)", + "report_flow.label.eating_disorder_promotion": "Encourager les troubles du comportement alimentaire", + "report_flow.label.eating_disorder_promotion_profile": "Son profil fait la promotion des troubles du comportement alimentaire", + "report_flow.label.email": "Adresse e-mail", + "report_flow.label.emoji_stickers": "Emoji ou stickers personnalisés", + "report_flow.label.face_photo": "Photo de son visage", + "report_flow.label.fake_account": "Faux compte, bot ou abus automatisé", + "report_flow.label.fake_account_profile": "Un compte faux ou trompeur", + "report_flow.label.false_claims": "Diffuser des mensonges pour nuire à la réputation d'une personne spécifique", + "report_flow.label.false_info": "Diffusion de fausses informations nuisibles", + "report_flow.label.financial": "Carte, banque ou autres informations financières", + "report_flow.label.fraud": "Cette personne essaie d'escroquer des gens pour leur soutirer de l'argent ou des comptes", + "report_flow.label.fraud_guild": "Escroquer des personnes pour obtenir leur argent ou leurs comptes", + "report_flow.label.government_id": "Document d’identité ou numéro d’identification", + "report_flow.label.graphic_violence": "Violence réelle montrée pour choquer, comme du gore ou de la cruauté envers les animaux", + "report_flow.label.harassment": "Intimidation, harcèlement ou traque", + "report_flow.label.harassment_direct": "Cibler une personne de manière répétée avec des insultes ou des abus", + "report_flow.label.harassment_guild": "Harcèlement, intimidation ou traque de personnes", + "report_flow.label.harassment_profile": "Son profil me harcèle ou me cible, ou harcèle ou cible quelqu'un d'autre", + "report_flow.label.harmful_false_claims": "Fausses allégations pouvant causer de graves préjudices dans le monde réel", + "report_flow.label.hate": "Haine ou discrimination envers des personnes en raison de ce qu'elles sont", + "report_flow.label.hate_dehumanizing": "Comparer des personnes à des animaux, des maladies ou des saletés, ou les qualifier de sous-humains", + "report_flow.label.hate_incitement": "Appels à la violence ou à l'exclusion contre un groupe", + "report_flow.label.hate_other": "Autres attaques contre des personnes en raison de ce qu'elles sont", + "report_flow.label.hate_slurs": "Insultes, symboles haineux ou stéréotypes dégradants", + "report_flow.label.hate_violence": "Haine, violence ou extrémisme", + "report_flow.label.identity": "Orientation sexuelle, identité de genre ou statut intersexe", + "report_flow.label.illegal_activity": "Autre activité illégale", + "report_flow.label.illegal_goods": "Vente de drogues, d'armes ou d'autres articles illégaux", + "report_flow.label.impersonation": "Se faire passer pour quelqu'un d'autre ou escroquer des gens", + "report_flow.label.impersonation_guild": "Se faire passer pour {product_name} ou une autre organisation", + "report_flow.label.impersonation_organization": "Une entreprise, une marque ou un groupe", + "report_flow.label.impersonation_person": "Moi ou un de mes proches", + "report_flow.label.impersonation_public_figure": "Une personne connue, comme un créateur de contenu ou une personnalité politique", + "report_flow.label.impersonation_staff": "Le personnel ou l'assistance de {product_name}", + "report_flow.label.intimate_image_abuse": "Images intimes partagées sans consentement, y compris les deepfakes, ou menace de les partager", + "report_flow.label.intimate_image_abuse_guild": "Partage d'images intimes sans consentement, y compris les deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Images intimes de quelqu'un partagées sans consentement, y compris les deepfakes", + "report_flow.label.intimate_photo": "Photo intime ou de nu", + "report_flow.label.invite_splash": "Image d'invitation", + "report_flow.label.ip_address": "Adresse IP", + "report_flow.label.learn_more": "Lire les règles communautaires de {product_name}", + "report_flow.label.legal_name": "Nom réel ou légal", + "report_flow.label.lgbtq_targeting": "Mégenrer, deadnamer ou révéler l'orientation sexuelle ou l'identité de genre de quelqu'un délibérément, ou nier son identité", + "report_flow.label.malware_guild": "Distribution de logiciels malveillants ou de liens de phishing", + "report_flow.label.malware_phishing": "Phishing, logiciels malveillants ou tentatives de piratage", + "report_flow.label.member_activity": "Ce que les membres publient ou font là-bas", + "report_flow.label.metric_manipulation": "Falsification du nombre de membres ou de réactions", + "report_flow.label.minor_contact": "Proposer une rencontre à un mineur, ou lui demander des photos ou des informations personnelles, d'une manière qui semble prédatrice", + "report_flow.label.minor_dating_community": "C'est une communauté de rencontres entre mineurs", + "report_flow.label.minor_fictional": "Contenu sexuel dessiné, écrit ou généré par IA représentant un enfant fictif", + "report_flow.label.minor_grooming": "Pédopiégeage (grooming) ou instauration d'une confiance inappropriée avec un mineur", + "report_flow.label.minor_grooming_guild": "Des membres pratiquent le pédopiégeage (grooming) sur des mineurs ou instaurent une confiance inappropriée avec eux", + "report_flow.label.minor_in_adult_space": "Un mineur se trouve dans un salon ou une communauté réservé aux plus de 18 ans", + "report_flow.label.minor_in_adult_space_guild": "Les mineurs sont autorisés dans les salons 18+", + "report_flow.label.minor_risk": "Mettre un mineur en danger", + "report_flow.label.minor_risk_guild": "Mettre des mineurs en danger", + "report_flow.label.minor_sexual": "Sexualisation d'un mineur", + "report_flow.label.minor_sexual_contact": "Flirter avec un mineur ou lui envoyer des messages à caractère sexuel", + "report_flow.label.minor_sexual_contact_guild": "Des membres flirtent avec des mineurs ou leur envoient des messages à caractère sexuel", + "report_flow.label.minor_sexual_content": "Un mineur partage lui-même du contenu à caractère sexuel", + "report_flow.label.minor_sexual_content_guild": "Des mineurs publient ou envoient du contenu à caractère sexuel", + "report_flow.label.minor_sexual_content_profile": "Le profil d'un mineur qui contient du contenu à caractère sexuel", + "report_flow.label.minor_sexual_guild": "Sexualisation des mineurs", + "report_flow.label.minor_sexualization": "Commentaires sexuels sur des mineurs", + "report_flow.label.minor_sexualization_guild": "Des membres font des commentaires sexuels sur des mineurs", + "report_flow.label.minor_sexualization_profile": "Commentaires sexuels sur des mineurs dans son profil", + "report_flow.label.name": "Noms", + "report_flow.label.other": "Quelque chose qui n'est pas listé ici", + "report_flow.label.other_identifying": "Autres informations qui pourraient identifier ou localiser quelqu'un", + "report_flow.label.permits_violations": "Elle autorise de graves infractions aux règles", + "report_flow.label.phone": "Numéro de téléphone", + "report_flow.label.photo": "Images", + "report_flow.label.platform_abuse": "Scraping, automatisation ou autre abus de la plateforme", + "report_flow.label.private_conversation": "Messages privés, captures d'écran ou enregistrements d'appels", + "report_flow.label.private_info": "Partage d'informations privées sur quelqu'un", + "report_flow.label.private_info_profile": "Son profil partage des informations privées sur quelqu'un", + "report_flow.label.profile_text": "Texte du profil", + "report_flow.label.raid": "Organisation ou participation à un raid ou à un lynchage", + "report_flow.label.raid_guild": "Organisation de raids ou de lynchages contre des personnes ou des communautés", + "report_flow.label.rude_language": "Jurons ou remarques grossières", + "report_flow.label.self_harm": "Quelqu'un pourrait se faire du mal, ou encourage l'automutilation", + "report_flow.label.self_harm_graphic": "Images explicites d'automutilation", + "report_flow.label.self_harm_guild": "Des membres poussent d'autres personnes à se faire du mal", + "report_flow.label.self_harm_pressure": "Faire pression sur quelqu'un ou le mettre au défi de se faire du mal", + "report_flow.label.self_harm_pressure_guild": "Faire pression sur des personnes ou les mettre au défi de se faire du mal", + "report_flow.label.self_harm_profile": "Son profil suggère l'automutilation ou l'encourage", + "report_flow.label.self_harm_promotion": "Encourager l'automutilation ou partager des méthodes", + "report_flow.label.self_harm_promotion_profile": "Son profil encourage l'automutilation", + "report_flow.label.sexual": "Contenu à caractère sexuel", + "report_flow.label.sexual_exploitation": "Exploitation sexuelle, coercition ou traite d'êtres humains", + "report_flow.label.sexual_unwanted": "Images ou messages à caractère sexuel que je ne voulais pas recevoir", + "report_flow.label.something_else": "Autre chose", + "report_flow.label.spam": "Spam ou publicités non sollicitées", + "report_flow.label.spam_bulk": "Envoi de spam ou de publicité en masse", + "report_flow.label.spam_or_manipulation": "Spam ou manipulation de plateforme", + "report_flow.label.spam_profile": "Son profil est utilisé pour le spam ou la publicité", + "report_flow.label.suicide_promotion": "Encourager le suicide ou partager des méthodes", + "report_flow.label.suicide_promotion_profile": "Son profil encourage le suicide", + "report_flow.label.synthetic_media": "Médias falsifiés ou créés par IA présentés comme réels", + "report_flow.label.terrorism": "Terrorisme ou extrémisme violent", + "report_flow.label.terrorism_guild": "Recrutement ou promotion du terrorisme ou de l'extrémisme violent", + "report_flow.label.threat": "Menaces ou appels à la violence", + "report_flow.label.threat_to_share": "Cette personne menace de le partager", + "report_flow.label.too_young": "Cette personne n'a pas l'âge minimum requis pour utiliser {product_name}", + "report_flow.label.unwanted_contact": "Traque ou contacts répétés envers moi ou quelqu'un d'autre malgré une demande d'arrêt, un blocage ou une suppression", + "report_flow.label.violence_glorification": "Glorification de la violence dans le monde réel", + "report_flow.label.violence_incitement": "Encouragement à la violence ou explication sur la façon de blesser des personnes", + "report_flow.label.violence_misinfo": "Violence, extrémisme ou fausses informations nuisibles", + "report_flow.label.violent_threat": "Annoncer son intention de faire du mal à quelqu'un", + "report_flow.label.worried_profile": "Je m'inquiète pour sa sécurité", + "report_flow.label.worried_self_harm": "J'ai peur que cette personne se fasse du mal", + "report_flow.label.worried_suicide": "J'ai peur que cette personne tente de se suicider", + "report_flow.notice.need_more_info.body": "Pour examiner cela, nous avons besoin d'un message où la personne indique son âge ou précise clairement qu'elle n'a pas l'âge minimum requis pour utiliser {product_name}. Signalez plutôt ce message.", + "report_flow.notice.need_more_info.title": "Nous ne pouvons pas encore donner suite", + "report_flow.notice.need_more_info_profile.body": "Pour examiner cela, nous devons voir où la personne indique son âge ou précise clairement qu'elle n'a pas l'âge minimum requis pour utiliser {product_name}. Signalez plutôt ce message ou ce profil.", + "report_flow.screen.abuse.title": "En quoi cela consiste-t-il ?", + "report_flow.screen.abuse_guild.title": "Que font les membres de cette communauté ?", + "report_flow.screen.age_stated_message.title": "Ce message indique-t-il son âge ?", + "report_flow.screen.age_stated_profile.title": "Son profil indique-t-il son âge ?", + "report_flow.screen.community_parts.subtitle": "Sélectionnez autant d'options que nécessaire.", + "report_flow.screen.community_parts.title": "Quelles parties de la communauté sont concernées ?", + "report_flow.screen.crisis_support.subtitle": "Les lignes d'écoute offrent un soutien gratuit et confidentiel.", + "report_flow.screen.crisis_support.title": "Quelqu'un peut vous aider maintenant", + "report_flow.screen.false_info.subtitle": "Les opinions, la satire et les débats de bonne foi sont autorisés. La diffamation illégale peut être signalée en vertu du règlement sur les services numériques (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Les opinions, la satire et les débats de bonne foi sont autorisés.", + "report_flow.screen.false_info.title": "Qu'y a-t-il de trompeur ?", + "report_flow.screen.harassment.title": "Comment une personne est-elle ciblée ?", + "report_flow.screen.hate.title": "Comment cela s'attaque-t-il aux gens pour ce qu'ils sont ?", + "report_flow.screen.impersonation.subtitle": "La parodie ou le jeu de rôle clairement étiquetés sont autorisés.", + "report_flow.screen.impersonation.title": "Qui est usurpé, ou s'agit-il d'une arnaque ?", + "report_flow.screen.minor_risk.title": "Comment cette personne met-elle un mineur en danger ?", + "report_flow.screen.minor_risk_guild.title": "Comment cette communauté met-elle les mineurs en danger ?", + "report_flow.screen.minor_sexual.subtitle": "Le contenu dessiné, écrit ou généré par IA entre dans cette catégorie lorsqu'un personnage est décrit comme mineur ou est clairement prépubère, y compris lolicon, shotacon et cub.", + "report_flow.screen.minor_sexual.title": "Qu'avez-vous vu impliquant un mineur ?", + "report_flow.screen.minor_sexual_guild.title": "Qu'avez-vous vu impliquant des mineurs ?", + "report_flow.screen.private_info.subtitle": "Sélectionnez autant d'options que nécessaire. Si une photo intime montre une personne de moins de 18 ans, revenez en arrière et signalez-la sous la catégorie « Sexualisation d'un mineur ».", + "report_flow.screen.private_info.title": "Quelles informations privées sont concernées ?", + "report_flow.screen.profile_abuse.title": "Qu'y a-t-il de nuisible dans son profil ?", + "report_flow.screen.profile_hate_violence.title": "Qu'est-ce que son profil montre ou promeut ?", + "report_flow.screen.profile_intro.options_heading": "En savoir plus", + "report_flow.screen.profile_intro.subtitle": "Dites-nous ce qui ne va pas avec ce profil. La personne ne saura pas qui l'a signalée.", + "report_flow.screen.profile_intro.title": "Signaler le profil", + "report_flow.screen.profile_minor_sexual.title": "Qu'y a-t-il dans son profil qui implique un mineur ?", + "report_flow.screen.profile_parts.subtitle": "Sélectionnez autant d'options que nécessaire.", + "report_flow.screen.profile_parts.title": "Quelles parties de son profil posent problème ?", + "report_flow.screen.profile_private_info.title": "Quelles informations privées figurent dans son profil ?", + "report_flow.screen.profile_sexual.title": "Parlez-nous du contenu sexuel dans son profil", + "report_flow.screen.profile_threat.title": "Comment son profil implique-t-il la violence ?", + "report_flow.screen.root_guild.subtitle": "Choisissez la correspondance la plus proche pour ce qui se passe dans cette communauté.", + "report_flow.screen.root_guild.title": "Qu'est-ce qui ne va pas avec cette communauté ?", + "report_flow.screen.root_message.subtitle": "Choisissez la correspondance la plus proche. Vous pouvez tout vérifier avant l'envoi.", + "report_flow.screen.root_message.title": "Signaler le message", + "report_flow.screen.root_user.subtitle": "Choisissez la correspondance la plus proche pour ce qui se trouve sur son profil.", + "report_flow.screen.root_user.title": "Qu'est-ce qui ne va pas avec son profil ?", + "report_flow.screen.self_harm.subtitle": "Personne n'est puni pour avoir dit être en difficulté. Nous dire que vous vous inquiétez nous aide à proposer un soutien.", + "report_flow.screen.self_harm.title": "Qu'a dit ou partagé cette personne ?", + "report_flow.screen.self_harm_guild.title": "Qu'est-ce que les membres encouragent ?", + "report_flow.screen.self_harm_profile.title": "Qu'est-ce que son profil dit ou montre ?", + "report_flow.screen.sexual.subtitle": "Si une personne montrée ou impliquée a moins de 18 ans, choisissez « Sexualisation d'un mineur ».", + "report_flow.screen.sexual.title": "Parlez-nous du contenu sexuel", + "report_flow.screen.sexual_guild.subtitle": "Si une personne montrée ou impliquée a moins de 18 ans, choisissez « Sexualisation des mineurs ».", + "report_flow.screen.sexual_guild.title": "Parlez-nous du contenu sexuel dans cette communauté", + "report_flow.screen.something_else_guild.title": "Que se passe-t-il d'autre dans cette communauté ?", + "report_flow.screen.something_else_message.title": "Que se passe-t-il d'autre ?", + "report_flow.screen.something_else_user.title": "Quel autre problème y a-t-il avec ce profil ?", + "report_flow.screen.spam_kind_guild.title": "Comment cette communauté abuse-t-elle de la plateforme ?", + "report_flow.screen.spam_profile.title": "Comment le compte est-il mal utilisé ?", + "report_flow.screen.threat.title": "Comment cela implique-t-il la violence ?", + "report_flow.screen.violence_misinfo.title": "Laquelle de ces options correspond ?", + "report_flow.screen.violence_misinfo_guild.title": "Laquelle de ces options se produit dans cette communauté ?" }); export default CONTENT_I18N_FR_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/he.ts b/fluxer_api/src/api/content_i18n/locales/he.ts index 2fae21594..9562ea01b 100644 --- a/fluxer_api/src/api/content_i18n/locales/he.ts +++ b/fluxer_api/src/api/content_i18n/locales/he.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_HE_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "ערוצי טקסט", "guild.default_category_voice": "ערוצים קוליים", "guild.default_channel_text": "כללי", - "guild.default_channel_voice": "כללי" + "guild.default_channel_voice": "כללי", + "report_flow.description.name": "שם משתמש, שם לתצוגה או כינוי בקהילה", + "report_flow.description.photo": "מה שהם משתמשים בו כתמונת פרופיל וכבאנר", + "report_flow.description.profile_text": "אודות, סטטוס מותאם אישית או כינויי גוף", + "report_flow.label.abuse": "תוכן פוגעני או מזיק", + "report_flow.label.account_trading": "מכירת חשבונות, או פרטי התחברות או כרטיס גנובים", + "report_flow.label.account_trading_communities": "קנייה או מכירה של חשבונות או קהילות", + "report_flow.label.address": "כתובת מגורים או מקום עבודה", + "report_flow.label.adult_content_no_gate": "תוכן למבוגרים ללא הגבלת גיל 18+", + "report_flow.label.adult_content_profile": "תוכן למבוגרים מפורש בפרופיל שלהם", + "report_flow.label.adult_content_unmarked": "תוכן למבוגרים בערוץ קהילה שלא סומן כערוץ עם הגבלת גיל (18+)", + "report_flow.label.age_no_message": "לא, זה לא מוזכר", + "report_flow.label.age_no_profile": "לא, זה לא מוזכר", + "report_flow.label.age_yes_message": "כן, זה מזכיר את גילם", + "report_flow.label.age_yes_profile": "כן, הפרופיל שלהם מזכיר את גילם", + "report_flow.label.atrocity_denial": "הכחשה או האדרה של השואה או של רצחי עם אחרים", + "report_flow.label.ban_evasion": "עקיפת הרחקה באמצעות חשבון אחר", + "report_flow.label.channel_names": "שמות הערוצים", + "report_flow.label.community_banner": "באנר קהילה", + "report_flow.label.community_icon": "אייקון קהילה", + "report_flow.label.community_name": "שם קהילה", + "report_flow.label.conversion_therapy": "קידום טיפולי המרה", + "report_flow.label.copyright": "תלונת זכויות יוצרים או סימן מסחרי", + "report_flow.label.crisis_lines": "קווי סיוע למצבי משבר במדינה שלך", + "report_flow.label.csam": "תמונות או סרטונים של פגיעה מינית בילדים, אמיתיים או שנוצרו באמצעות AI", + "report_flow.label.discovery_listing": "רישום בגילוי", + "report_flow.label.dislike": "זה פשוט לא בשבילי", + "report_flow.label.dsa": "תוכן בלתי חוקי באיחוד האירופי (חוק השירותים הדיגיטליים, DSA)", + "report_flow.label.eating_disorder_promotion": "עידוד הפרעות אכילה", + "report_flow.label.eating_disorder_promotion_profile": "הפרופיל שלהם מקדם הפרעות אכילה", + "report_flow.label.email": "כתובת אימייל", + "report_flow.label.emoji_stickers": "אימוג'י או מדבקות מותאמים אישית", + "report_flow.label.face_photo": "תמונה של הפנים שלהם", + "report_flow.label.fake_account": "חשבון מזויף, בוט או שימוש לרעה אוטומטי", + "report_flow.label.fake_account_profile": "חשבון מזויף או מטעה", + "report_flow.label.false_claims": "הפצת שקרים כדי לפגוע במוניטין של אדם ספציפי", + "report_flow.label.false_info": "הפצת מידע כוזב מזיק", + "report_flow.label.financial": "כרטיס, בנק או פרטים פיננסיים אחרים", + "report_flow.label.fraud": "הם מנסים להונות אנשים כדי לקבל מהם כסף או חשבונות", + "report_flow.label.fraud_guild": "הונאת אנשים כדי לקבל מהם כסף או חשבונות", + "report_flow.label.government_id": "מסמך זיהוי או מספר זיהוי", + "report_flow.label.graphic_violence": "אלימות אמיתית שמוצגת כדי להזעזע, כמו תיעוד דמים או אכזריות כלפי בעלי חיים", + "report_flow.label.harassment": "בריונות, הטרדה או מעקב", + "report_flow.label.harassment_direct": "פגיעה חוזרת במישהו באמצעות עלבונות או התעללות", + "report_flow.label.harassment_guild": "הטרדה, בריונות או מעקב אחרי אנשים", + "report_flow.label.harassment_profile": "הפרופיל שלהם מטריד או מכוון אליי או אל מישהו אחר", + "report_flow.label.harmful_false_claims": "טענות שקריות שעלולות לגרום נזק חמור בעולם האמיתי", + "report_flow.label.hate": "שנאה או אפליה נגד אנשים בגלל מי שהם", + "report_flow.label.hate_dehumanizing": "השוואת אנשים לחיות, למחלות או ללכלוך, או הגדרתם כפחות מבני אדם", + "report_flow.label.hate_incitement": "קריאות לאלימות או הדרה נגד קבוצה", + "report_flow.label.hate_other": "התקפות אחרות על אנשים בגלל מי שהם", + "report_flow.label.hate_slurs": "כינויי גנאי, סמלי שנאה או סטריאוטיפים משפילים", + "report_flow.label.hate_violence": "שנאה, אלימות או קיצוניות", + "report_flow.label.identity": "נטייה מינית, זהות מגדרית או סטטוס אינטרסקס", + "report_flow.label.illegal_activity": "פעילות בלתי חוקית אחרת", + "report_flow.label.illegal_goods": "מכירת סמים, נשק או מוצרים בלתי חוקיים אחרים", + "report_flow.label.impersonation": "התחזות למישהו, או הונאת אנשים", + "report_flow.label.impersonation_guild": "התחזות ל-{product_name} או לארגון אחר", + "report_flow.label.impersonation_organization": "חברה, מותג או קבוצה", + "report_flow.label.impersonation_person": "אני או מישהו קרוב אליי", + "report_flow.label.impersonation_public_figure": "אדם מפורסם, כמו יוצר או פוליטיקאי", + "report_flow.label.impersonation_staff": "צוות {product_name} או תמיכה", + "report_flow.label.intimate_image_abuse": "שיתוף תמונות אינטימיות ללא הסכמה, כולל דיפ-פייק, או איום לשתף אותן", + "report_flow.label.intimate_image_abuse_guild": "שיתוף תמונות אינטימיות ללא הסכמה, כולל דיפ-פייק", + "report_flow.label.intimate_image_abuse_profile": "תמונות אינטימיות של מישהו ששותפו ללא הסכמה, כולל דיפ-פייק", + "report_flow.label.intimate_photo": "תמונה אינטימית או תמונת עירום", + "report_flow.label.invite_splash": "תמונת הזמנה", + "report_flow.label.ip_address": "כתובת IP", + "report_flow.label.learn_more": "קרא את הנחיות הקהילה של {product_name}", + "report_flow.label.legal_name": "שם אמיתי או חוקי", + "report_flow.label.lgbtq_targeting": "שימוש מכוון בכינויי גוף שגויים, דדניימינג או חשיפת נטייתו או זהותו של אדם בניגוד לרצונו, או הכחשת זהותו", + "report_flow.label.malware_guild": "הפצת תוכנות זדוניות או קישורי פישינג", + "report_flow.label.malware_phishing": "ניסיונות פישינג, תוכנות זדוניות או פריצה", + "report_flow.label.member_activity": "מה שחברים מפרסמים או עושים שם", + "report_flow.label.metric_manipulation": "זיוף ספירת חברים או תגובות", + "report_flow.label.minor_contact": "פנייה לקטין/ה בבקשה להיפגש, או לשלוח תמונות או פרטים אישיים, באופן שנראה טורפני", + "report_flow.label.minor_dating_community": "זו קהילה לדייטים בין קטינים", + "report_flow.label.minor_fictional": "תוכן מיני מצויר, כתוב או שנוצר על ידי בינה מלאכותית שמציג ילד בדיוני", + "report_flow.label.minor_grooming": "גרומינג או בניית אמון בלתי הולם עם קטין/ה", + "report_flow.label.minor_grooming_guild": "חברים מבצעים גרומינג או בונים אמון בלתי הולם עם קטינים", + "report_flow.label.minor_in_adult_space": "קטין/ה נמצא/ת בערוץ או בקהילה של 18+", + "report_flow.label.minor_in_adult_space_guild": "קטינים מורשים בערוצים של 18+", + "report_flow.label.minor_risk": "העמדת קטין בסיכון", + "report_flow.label.minor_risk_guild": "העמדת קטינים בסיכון", + "report_flow.label.minor_sexual": "הפיכת קטין לאובייקט מיני", + "report_flow.label.minor_sexual_contact": "פלירטוט עם קטין או שליחת הודעות מיניות אליו", + "report_flow.label.minor_sexual_contact_guild": "חברים מפלרטטים עם קטינים או שולחים להם הודעות מיניות", + "report_flow.label.minor_sexual_content": "קטין משתף תוכן מיני בעצמו", + "report_flow.label.minor_sexual_content_guild": "קטינים מפרסמים או שולחים תוכן מיני", + "report_flow.label.minor_sexual_content_profile": "פרופיל של קטין עם תוכן מיני", + "report_flow.label.minor_sexual_guild": "הפיכת קטינים לאובייקטים מיניים", + "report_flow.label.minor_sexualization": "הערות מיניות על קטינים", + "report_flow.label.minor_sexualization_guild": "חברים מעירים הערות מיניות על קטינים", + "report_flow.label.minor_sexualization_profile": "הערות מיניות על קטינים בפרופיל שלהם", + "report_flow.label.name": "שמות", + "report_flow.label.other": "משהו שלא מופיע כאן", + "report_flow.label.other_identifying": "מידע אחר שיכול לזהות או לאתר מישהו", + "report_flow.label.permits_violations": "הוא מאפשר הפרות חמורות של הכללים", + "report_flow.label.phone": "מספר טלפון", + "report_flow.label.photo": "תמונות", + "report_flow.label.platform_abuse": "סקרייפינג, אוטומציה או שימוש לרעה אחר בפלטפורמה", + "report_flow.label.private_conversation": "הודעות פרטיות, צילומי מסך או הקלטות שיחות", + "report_flow.label.private_info": "שיתוף פרטים אישיים של מישהו", + "report_flow.label.private_info_profile": "הפרופיל שלהם משתף פרטים אישיים של מישהו", + "report_flow.label.profile_text": "טקסט פרופיל", + "report_flow.label.raid": "ארגון או הצטרפות לפשיטה או התנפלות", + "report_flow.label.raid_guild": "ארגון פשיטות או התנפלויות נגד אנשים או קהילות", + "report_flow.label.rude_language": "שפה בוטה או הערות גסות", + "report_flow.label.self_harm": "מישהו עלול לפגוע בעצמו, או מעודד פגיעה עצמית", + "report_flow.label.self_harm_graphic": "תמונות גרפיות של פגיעה עצמית", + "report_flow.label.self_harm_guild": "חברי קהילה דוחפים אחרים לפגוע בעצמם", + "report_flow.label.self_harm_pressure": "הפעלת לחץ על מישהו או אתגור שלו לפגוע בעצמו", + "report_flow.label.self_harm_pressure_guild": "הפעלת לחץ על אנשים או אתגור שלהם לפגוע בעצמם", + "report_flow.label.self_harm_profile": "הפרופיל שלהם מרמז על פגיעה עצמית או מעודד אותה", + "report_flow.label.self_harm_promotion": "עידוד פגיעה עצמית או שיתוף שיטות", + "report_flow.label.self_harm_promotion_profile": "הפרופיל שלהם מעודד פגיעה עצמית", + "report_flow.label.sexual": "תוכן מיני", + "report_flow.label.sexual_exploitation": "ניצול מיני, כפייה או סחר בבני אדם", + "report_flow.label.sexual_unwanted": "תמונות או הודעות מיניות שלא רציתי", + "report_flow.label.something_else": "משהו אחר", + "report_flow.label.spam": "ספאם או פרסומות לא רצויות", + "report_flow.label.spam_bulk": "שליחת ספאם או פרסומות בכמות גדולה", + "report_flow.label.spam_or_manipulation": "ספאם או מניפולציה של הפלטפורמה", + "report_flow.label.spam_profile": "הפרופיל שלהם משמש לספאם או לפרסום", + "report_flow.label.suicide_promotion": "עידוד התאבדות או שיתוף שיטות", + "report_flow.label.suicide_promotion_profile": "הפרופיל שלהם מעודד התאבדות", + "report_flow.label.synthetic_media": "מדיה מזויפת או שנוצרה על ידי בינה מלאכותית ומוצגת כאמיתית", + "report_flow.label.terrorism": "טרור או קיצוניות אלימה", + "report_flow.label.terrorism_guild": "גיוס או קידום טרור או קיצוניות אלימה", + "report_flow.label.threat": "איומים או קריאות לאלימות", + "report_flow.label.threat_to_share": "הם מאיימים לשתף את זה", + "report_flow.label.too_young": "הם מתחת לגיל המינימלי לשימוש ב-{product_name}", + "report_flow.label.unwanted_contact": "מעקב או יצירת קשר חוזרת איתי או עם מישהו אחר לאחר שהתבקשו להפסיק, נחסמו או הוסרו", + "report_flow.label.violence_glorification": "האדרת אלימות בעולם האמיתי", + "report_flow.label.violence_incitement": "עידוד אלימות או הסבר כיצד לפגוע באנשים", + "report_flow.label.violence_misinfo": "אלימות, קיצוניות או מידע כוזב מזיק", + "report_flow.label.violent_threat": "אומרים שהם יפגעו במישהו", + "report_flow.label.worried_profile": "אני מודאג/ת לגבי בטיחותם", + "report_flow.label.worried_self_harm": "אני מודאג/ת שהם עלולים לפגוע בעצמם", + "report_flow.label.worried_suicide": "אני מודאג/ת שהם עלולים לנסות להתאבד", + "report_flow.notice.need_more_info.body": "כדי לבדוק זאת, אנחנו צריכים הודעה שבה הם מציינים את גילם או מבהירים שהם מתחת לגיל המינימלי של {product_name}. דווח על ההודעה הזו במקום.", + "report_flow.notice.need_more_info.title": "אנחנו עדיין לא יכולים לפעול בנושא הזה", + "report_flow.notice.need_more_info_profile.body": "כדי לבדוק זאת, אנחנו צריכים לראות היכן הם מציינים את גילם או מבהירים שהם מתחת לגיל המינימלי של {product_name}. דווח על ההודעה או על הפרופיל הזה במקום.", + "report_flow.screen.abuse.title": "במה מדובר?", + "report_flow.screen.abuse_guild.title": "מה עושים אנשים בקהילה הזו?", + "report_flow.screen.age_stated_message.title": "האם ההודעה הזו מציינת את גילם?", + "report_flow.screen.age_stated_profile.title": "האם הפרופיל שלהם מציין את גילם?", + "report_flow.screen.community_parts.subtitle": "בחר כמה שצריך.", + "report_flow.screen.community_parts.title": "אילו חלקים מהקהילה מעורבים?", + "report_flow.screen.crisis_support.subtitle": "קווי סיוע למצבי משבר מציעים תמיכה חינם וסודית.", + "report_flow.screen.crisis_support.title": "מישהו יכול לעזור כרגע", + "report_flow.screen.false_info.subtitle": "דעות, סאטירה ודיון בתום לב מותרים. לשון הרע בלתי חוקית ניתנת לדיווח במסגרת חוק השירותים הדיגיטליים (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "דעות, סאטירה ודיון בתום לב מותרים.", + "report_flow.screen.false_info.title": "מה מטעה בזה?", + "report_flow.screen.harassment.title": "כיצד מישהו הופך למטרה?", + "report_flow.screen.hate.title": "כיצד זה תוקף אנשים בגלל מי שהם?", + "report_flow.screen.impersonation.subtitle": "פרודיה או משחק תפקידים המסומנים בבירור מותרים.", + "report_flow.screen.impersonation.title": "למי מתחזים, או שמדובר בהונאה?", + "report_flow.screen.minor_risk.title": "כיצד אדם זה מסכן קטין?", + "report_flow.screen.minor_risk_guild.title": "כיצד קהילה זו מסכנת קטינים?", + "report_flow.screen.minor_sexual.subtitle": "גם תוכן מצויר, כתוב או שנוצר באמצעות AI נחשב, כאשר דמות מתוארת כקטינה או נראית בבירור טרום-התבגרותית, כולל lolicon, shotacon ו-cub.", + "report_flow.screen.minor_sexual.title": "מה ראית בנוגע לקטין?", + "report_flow.screen.minor_sexual_guild.title": "מה ראית בנוגע לקטינים?", + "report_flow.screen.private_info.subtitle": "בחר כמה שצריך. אם תמונה אינטימית מציגה מישהו מתחת לגיל 18, חזור ודווח עליה תחת “הפיכת קטין לאובייקט מיני”.", + "report_flow.screen.private_info.title": "אילו פרטים אישיים מעורבים?", + "report_flow.screen.profile_abuse.title": "מה פוגעני בפרופיל שלהם?", + "report_flow.screen.profile_hate_violence.title": "מה הפרופיל שלהם מציג או מקדם?", + "report_flow.screen.profile_intro.options_heading": "מידע נוסף", + "report_flow.screen.profile_intro.subtitle": "ספר לנו מה לא בסדר בפרופיל הזה. לא יימסר להם מי דיווח עליהם.", + "report_flow.screen.profile_intro.title": "דיווח על פרופיל", + "report_flow.screen.profile_minor_sexual.title": "מה בפרופיל שלהם קשור לקטין?", + "report_flow.screen.profile_parts.subtitle": "בחר כמה שצריך.", + "report_flow.screen.profile_parts.title": "אילו חלקים בפרופיל שלהם מהווים בעיה?", + "report_flow.screen.profile_private_info.title": "אילו פרטים אישיים נמצאים בפרופיל שלהם?", + "report_flow.screen.profile_sexual.title": "ספר לנו על התוכן המיני בפרופיל שלהם", + "report_flow.screen.profile_threat.title": "כיצד הפרופיל שלהם קשור לאלימות?", + "report_flow.screen.root_guild.subtitle": "בחר את ההתאמה הקרובה ביותר למה שקורה בקהילה הזו.", + "report_flow.screen.root_guild.title": "מה לא בסדר בקהילה הזו?", + "report_flow.screen.root_message.subtitle": "בחר את ההתאמה הקרובה ביותר. אפשר לבדוק הכול לפני השליחה.", + "report_flow.screen.root_message.title": "דיווח על הודעה", + "report_flow.screen.root_user.subtitle": "בחר את ההתאמה הקרובה ביותר למה שמופיע בפרופיל שלהם.", + "report_flow.screen.root_user.title": "מה לא בסדר בפרופיל שלהם?", + "report_flow.screen.self_harm.subtitle": "אף אחד לא נענש על כך שהוא מספר שקשה לו. אם תספר לנו שאתה מודאג, זה עוזר לנו להציע תמיכה.", + "report_flow.screen.self_harm.title": "מה הם אמרו או שיתפו?", + "report_flow.screen.self_harm_guild.title": "מה החברים מעודדים?", + "report_flow.screen.self_harm_profile.title": "מה הפרופיל שלהם אומר או מראה?", + "report_flow.screen.sexual.subtitle": "אם מישהו מהמופיעים או מהמעורבים הוא מתחת לגיל 18, בחר “הפיכת קטין לאובייקט מיני”.", + "report_flow.screen.sexual.title": "ספר לנו על התוכן המיני", + "report_flow.screen.sexual_guild.subtitle": "אם מישהו מהמופיעים או מהמעורבים הוא מתחת לגיל 18, בחר “הפיכת קטינים לאובייקטים מיניים”.", + "report_flow.screen.sexual_guild.title": "ספר לנו על התוכן המיני בקהילה הזו", + "report_flow.screen.something_else_guild.title": "מה עוד קורה בקהילה הזו?", + "report_flow.screen.something_else_message.title": "מה עוד קורה?", + "report_flow.screen.something_else_user.title": "מה עוד לא בסדר בפרופיל הזה?", + "report_flow.screen.spam_kind_guild.title": "כיצד הקהילה הזו משתמשת לרעה בפלטפורמה?", + "report_flow.screen.spam_profile.title": "כיצד החשבון מנוצל לרעה?", + "report_flow.screen.threat.title": "כיצד זה קשור לאלימות?", + "report_flow.screen.violence_misinfo.title": "איזה מהבאים מתאים לזה?", + "report_flow.screen.violence_misinfo_guild.title": "איזה מהבאים קורה בקהילה הזו?" }); export default CONTENT_I18N_HE_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/hi.ts b/fluxer_api/src/api/content_i18n/locales/hi.ts index ac19f3571..512b1694d 100644 --- a/fluxer_api/src/api/content_i18n/locales/hi.ts +++ b/fluxer_api/src/api/content_i18n/locales/hi.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_HI_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "टेक्स्ट चैनल", "guild.default_category_voice": "वॉइस चैनल", "guild.default_channel_text": "जनरल", - "guild.default_channel_voice": "जनरल" + "guild.default_channel_voice": "जनरल", + "report_flow.description.name": "यूज़रनेम, डिस्प्ले नाम या कम्युनिटी उपनाम", + "report_flow.description.photo": "अवतार और बैनर के रूप में वे जो इस्तेमाल करते हैं", + "report_flow.description.profile_text": "बायो, कस्टम स्टेटस या सर्वनाम", + "report_flow.label.abuse": "अपमानजनक या हानिकारक सामग्री", + "report_flow.label.account_trading": "अकाउंट बेचना, या चोरी किए गए लॉगिन या कार्ड विवरण", + "report_flow.label.account_trading_communities": "अकाउंट या कम्युनिटी खरीदना या बेचना", + "report_flow.label.address": "घर का पता या कार्यस्थल", + "report_flow.label.adult_content_no_gate": "18+ आयु प्रतिबंध के बिना वयस्क सामग्री", + "report_flow.label.adult_content_profile": "उनकी प्रोफ़ाइल में स्पष्ट वयस्क सामग्री", + "report_flow.label.adult_content_unmarked": "कम्युनिटी के ऐसे चैनल में वयस्क सामग्री, जो आयु-प्रतिबंधित (18+) के रूप में चिह्नित नहीं है", + "report_flow.label.age_no_message": "नहीं, इसमें इसका उल्लेख नहीं है", + "report_flow.label.age_no_profile": "नहीं, इसमें इसका उल्लेख नहीं है", + "report_flow.label.age_yes_message": "हाँ, इसमें उनकी उम्र का उल्लेख है", + "report_flow.label.age_yes_profile": "हाँ, उनकी प्रोफ़ाइल में उनकी उम्र का उल्लेख है", + "report_flow.label.atrocity_denial": "होलोकॉस्ट या अन्य नरसंहारों को नकारना या उनका जश्न मनाना", + "report_flow.label.ban_evasion": "दूसरे अकाउंट से प्रतिबंध को दरकिनार करना", + "report_flow.label.channel_names": "चैनल के नाम", + "report_flow.label.community_banner": "कम्युनिटी बैनर", + "report_flow.label.community_icon": "कम्युनिटी आइकॉन", + "report_flow.label.community_name": "कम्युनिटी का नाम", + "report_flow.label.conversion_therapy": "कन्वर्ज़न थेरेपी को बढ़ावा देना", + "report_flow.label.copyright": "कॉपीराइट या ट्रेडमार्क की शिकायत", + "report_flow.label.crisis_lines": "आपके देश में संकटकालीन हेल्पलाइन", + "report_flow.label.csam": "बाल यौन शोषण की असली या AI से बनाई गई तस्वीरें या वीडियो", + "report_flow.label.discovery_listing": "डिस्कवरी लिस्टिंग", + "report_flow.label.dislike": "यह बस मेरे लिए नहीं है", + "report_flow.label.dsa": "यूरोपीय संघ में गैर-कानूनी सामग्री (डिजिटल सेवा अधिनियम)", + "report_flow.label.eating_disorder_promotion": "खाने संबंधी विकार वाली आदतों को बढ़ावा देना", + "report_flow.label.eating_disorder_promotion_profile": "उनकी प्रोफ़ाइल खाने संबंधी विकारों को बढ़ावा देती है", + "report_flow.label.email": "ईमेल पता", + "report_flow.label.emoji_stickers": "कस्टम इमोजी या स्टिकर", + "report_flow.label.face_photo": "उनके चेहरे की फ़ोटो", + "report_flow.label.fake_account": "फ़र्ज़ी अकाउंट, बॉट या ऑटोमेटेड दुरुपयोग", + "report_flow.label.fake_account_profile": "एक फ़र्ज़ी या भ्रामक अकाउंट", + "report_flow.label.false_claims": "किसी खास व्यक्ति की प्रतिष्ठा को नुकसान पहुँचाने के लिए झूठ फैलाना", + "report_flow.label.false_info": "हानिकारक झूठी जानकारी फैलाना", + "report_flow.label.financial": "कार्ड, बैंक या अन्य वित्तीय विवरण", + "report_flow.label.fraud": "वे लोगों से पैसे या अकाउंट ठगने की कोशिश कर रहे हैं", + "report_flow.label.fraud_guild": "लोगों से पैसे या अकाउंट ठगना", + "report_flow.label.government_id": "पहचान दस्तावेज़ या पहचान संख्या", + "report_flow.label.graphic_violence": "असली हिंसा को चौंकाने के लिए दिखाना, जैसे कि खून-खराबा या जानवरों पर क्रूरता", + "report_flow.label.harassment": "धमकाना, परेशान करना या पीछा करना", + "report_flow.label.harassment_direct": "किसी को बार-बार अपमान या दुर्व्यवहार का निशाना बनाना", + "report_flow.label.harassment_guild": "लोगों को परेशान करना, धमकाना या पीछा करना", + "report_flow.label.harassment_profile": "उनकी प्रोफ़ाइल मुझे या किसी और को परेशान करती है या निशाना बनाती है", + "report_flow.label.harmful_false_claims": "झूठे दावे जिनसे वास्तविक दुनिया में गंभीर नुकसान हो सकता है", + "report_flow.label.hate": "लोगों की पहचान के कारण उनसे नफ़रत या भेदभाव", + "report_flow.label.hate_dehumanizing": "लोगों की जानवरों, बीमारी या गंदगी से तुलना करना, या उन्हें इंसान से कम समझना", + "report_flow.label.hate_incitement": "किसी समूह के खिलाफ हिंसा या बहिष्कार का आह्वान", + "report_flow.label.hate_other": "लोगों की पहचान के कारण उन पर अन्य हमले", + "report_flow.label.hate_slurs": "अपमानजनक शब्द, नफ़रत भरे प्रतीक या नीचा दिखाने वाली रूढ़ धारणाएँ", + "report_flow.label.hate_violence": "नफ़रत, हिंसा या उग्रवाद", + "report_flow.label.identity": "यौन रुझान, लिंग पहचान या इंटरसेक्स स्थिति", + "report_flow.label.illegal_activity": "अन्य अवैध गतिविधि", + "report_flow.label.illegal_goods": "ड्रग, हथियार या अन्य अवैध बिक्री", + "report_flow.label.impersonation": "खुद को किसी और के रूप में दिखाना, या लोगों को ठगना", + "report_flow.label.impersonation_guild": "खुद को {product_name} या किसी अन्य संगठन के रूप में दिखाना", + "report_flow.label.impersonation_organization": "कोई कंपनी, ब्रांड या समूह", + "report_flow.label.impersonation_person": "मैं या मेरा कोई करीबी", + "report_flow.label.impersonation_public_figure": "कोई प्रसिद्ध व्यक्ति, जैसे कोई क्रिएटर या राजनेता", + "report_flow.label.impersonation_staff": "{product_name} के कर्मचारी या सहायता टीम", + "report_flow.label.intimate_image_abuse": "बिना सहमति के शेयर की गई अंतरंग तस्वीरें, जिनमें डीपफेक भी शामिल हैं, या उन्हें शेयर करने की धमकी", + "report_flow.label.intimate_image_abuse_guild": "बिना सहमति के अंतरंग तस्वीरें शेयर करना, जिनमें डीपफेक भी शामिल हैं", + "report_flow.label.intimate_image_abuse_profile": "बिना सहमति के शेयर की गई किसी की अंतरंग तस्वीरें, जिनमें डीपफेक भी शामिल हैं", + "report_flow.label.intimate_photo": "अंतरंग या नग्न तस्वीर", + "report_flow.label.invite_splash": "इनवाइट स्प्लैश", + "report_flow.label.ip_address": "IP पता", + "report_flow.label.learn_more": "{product_name} कम्युनिटी दिशानिर्देश पढ़ें", + "report_flow.label.legal_name": "वास्तविक या कानूनी नाम", + "report_flow.label.lgbtq_targeting": "जानबूझकर किसी को गलत जेंडर से संबोधित करना, उसके पुराने नाम (डेडनेम) से पुकारना, उसकी यौन या लिंग पहचान को बिना उसकी मर्ज़ी के उजागर करना, या उसकी पहचान से इनकार करना", + "report_flow.label.malware_guild": "मालवेयर या फ़िशिंग लिंक वितरित करना", + "report_flow.label.malware_phishing": "फ़िशिंग, मालवेयर या हैकिंग के प्रयास", + "report_flow.label.member_activity": "सदस्य वहाँ क्या पोस्ट करते हैं या क्या करते हैं", + "report_flow.label.metric_manipulation": "सदस्यों या रिएक्शन की संख्या को नकली दिखाना", + "report_flow.label.minor_contact": "किसी नाबालिग को मिलने के लिए कहना, या उससे फ़ोटो या व्यक्तिगत जानकारी माँगना, ऐसे तरीके से जो शिकारी प्रवृत्ति जैसा लगे", + "report_flow.label.minor_dating_community": "यह नाबालिगों के बीच डेटिंग के लिए एक कम्युनिटी है", + "report_flow.label.minor_fictional": "किसी काल्पनिक बच्चे की चित्रित, लिखित या AI से बनाई गई यौन सामग्री", + "report_flow.label.minor_grooming": "किसी नाबालिग की ग्रूमिंग करना या उसके साथ अनुचित भरोसा बनाना", + "report_flow.label.minor_grooming_guild": "सदस्य नाबालिगों की ग्रूमिंग करते हैं या उनके साथ अनुचित भरोसा बनाते हैं", + "report_flow.label.minor_in_adult_space": "कोई नाबालिग 18+ चैनल या कम्युनिटी में है", + "report_flow.label.minor_in_adult_space_guild": "नाबालिगों को 18+ चैनलों में जाने की अनुमति है", + "report_flow.label.minor_risk": "नाबालिग को जोखिम में डालना", + "report_flow.label.minor_risk_guild": "नाबालिगों को जोखिम में डालना", + "report_flow.label.minor_sexual": "किसी नाबालिग को यौन रूप से निशाना बनाना", + "report_flow.label.minor_sexual_contact": "किसी नाबालिग के साथ फ़्लर्ट करना या उन्हें यौन रूप से मैसेज करना", + "report_flow.label.minor_sexual_contact_guild": "सदस्य नाबालिगों के साथ फ़्लर्ट करते हैं या उन्हें यौन रूप से मैसेज करते हैं", + "report_flow.label.minor_sexual_content": "कोई नाबालिग खुद यौन सामग्री शेयर कर रहा है", + "report_flow.label.minor_sexual_content_guild": "नाबालिग यौन सामग्री पोस्ट करते हैं या भेजते हैं", + "report_flow.label.minor_sexual_content_profile": "यौन सामग्री वाली किसी नाबालिग की प्रोफ़ाइल", + "report_flow.label.minor_sexual_guild": "नाबालिगों को यौन रूप से निशाना बनाना", + "report_flow.label.minor_sexualization": "नाबालिगों के बारे में यौन टिप्पणियाँ", + "report_flow.label.minor_sexualization_guild": "सदस्य नाबालिगों के बारे में यौन टिप्पणियाँ करते हैं", + "report_flow.label.minor_sexualization_profile": "उनकी प्रोफ़ाइल में नाबालिगों के बारे में यौन टिप्पणियाँ", + "report_flow.label.name": "नाम", + "report_flow.label.other": "कुछ ऐसा जो यहाँ सूचीबद्ध नहीं है", + "report_flow.label.other_identifying": "अन्य जानकारी जिससे किसी की पहचान या स्थान का पता चल सके", + "report_flow.label.permits_violations": "यह गंभीर नियम-उल्लंघन की अनुमति देता है", + "report_flow.label.phone": "फ़ोन नंबर", + "report_flow.label.photo": "तस्वीरें", + "report_flow.label.platform_abuse": "स्क्रैपिंग, ऑटोमेशन या अन्य प्लेटफ़ॉर्म का दुरुपयोग", + "report_flow.label.private_conversation": "निजी मैसेज, स्क्रीनशॉट या कॉल रिकॉर्डिंग", + "report_flow.label.private_info": "किसी की निजी जानकारी शेयर करना", + "report_flow.label.private_info_profile": "उनकी प्रोफ़ाइल में किसी की निजी जानकारी शेयर की गई है", + "report_flow.label.profile_text": "प्रोफ़ाइल टेक्स्ट", + "report_flow.label.raid": "रेड या पाइल-ऑन का आयोजन करना या उसमें शामिल होना", + "report_flow.label.raid_guild": "लोगों या कम्युनिटी के ख़िलाफ़ रेड या पाइल-ऑन का आयोजन करना", + "report_flow.label.rude_language": "गाली-गलौज या अभद्र टिप्पणी", + "report_flow.label.self_harm": "कोई खुद को नुकसान पहुँचा सकता है, या खुद को नुकसान पहुँचाने के लिए प्रोत्साहित कर रहा है", + "report_flow.label.self_harm_graphic": "खुद को नुकसान पहुँचाने की ग्राफ़िक तस्वीरें", + "report_flow.label.self_harm_guild": "सदस्य दूसरों को खुद को नुकसान पहुँचाने के लिए उकसाते हैं", + "report_flow.label.self_harm_pressure": "किसी को खुद को चोट पहुँचाने के लिए दबाव डालना या चुनौती देना", + "report_flow.label.self_harm_pressure_guild": "लोगों को खुद को चोट पहुँचाने के लिए दबाव डालना या चुनौती देना", + "report_flow.label.self_harm_profile": "उनकी प्रोफ़ाइल से लगता है कि वे खुद को नुकसान पहुँचा रहे हैं, या वह इसे बढ़ावा देती है", + "report_flow.label.self_harm_promotion": "खुद को नुकसान पहुँचाने को प्रोत्साहित करना या तरीके शेयर करना", + "report_flow.label.self_harm_promotion_profile": "उनकी प्रोफ़ाइल खुद को नुकसान पहुँचाने को बढ़ावा देती है", + "report_flow.label.sexual": "यौन सामग्री", + "report_flow.label.sexual_exploitation": "यौन शोषण, ज़बरदस्ती या तस्करी", + "report_flow.label.sexual_unwanted": "अनचाही यौन तस्वीरें या मैसेज", + "report_flow.label.something_else": "कुछ और", + "report_flow.label.spam": "स्पैम या अवांछित विज्ञापन", + "report_flow.label.spam_bulk": "बल्क में स्पैम या विज्ञापन भेजना", + "report_flow.label.spam_or_manipulation": "स्पैम या प्लेटफ़ॉर्म में हेरफेर", + "report_flow.label.spam_profile": "उनकी प्रोफ़ाइल का उपयोग स्पैम या विज्ञापन के लिए किया जाता है", + "report_flow.label.suicide_promotion": "आत्महत्या को प्रोत्साहित करना या तरीके शेयर करना", + "report_flow.label.suicide_promotion_profile": "उनकी प्रोफ़ाइल आत्महत्या को बढ़ावा देती है", + "report_flow.label.synthetic_media": "नकली या AI-निर्मित मीडिया को वास्तविक के रूप में प्रस्तुत किया गया", + "report_flow.label.terrorism": "आतंकवाद या हिंसक उग्रवाद", + "report_flow.label.terrorism_guild": "आतंकवाद या हिंसक उग्रवाद के लिए भर्ती करना या उसे बढ़ावा देना", + "report_flow.label.threat": "धमकी या हिंसा का आह्वान", + "report_flow.label.threat_to_share": "वे इसे शेयर करने की धमकी दे रहे हैं", + "report_flow.label.too_young": "वे {product_name} का उपयोग करने की न्यूनतम आयु से कम हैं", + "report_flow.label.unwanted_contact": "रोकने के लिए कहे जाने, ब्लॉक किए जाने या हटाए जाने के बाद भी मेरा या किसी और का पीछा करना या बार-बार संपर्क करना", + "report_flow.label.violence_glorification": "वास्तविक दुनिया की हिंसा का महिमामंडन करना", + "report_flow.label.violence_incitement": "हिंसा को बढ़ावा देना या लोगों को चोट पहुँचाने का तरीका समझाना", + "report_flow.label.violence_misinfo": "हिंसा, उग्रवाद या हानिकारक गलत जानकारी", + "report_flow.label.violent_threat": "यह कहना कि वे किसी को चोट पहुँचाएँगे", + "report_flow.label.worried_profile": "मुझे उनकी सुरक्षा की चिंता है", + "report_flow.label.worried_self_harm": "मुझे डर है कि वे खुद को नुकसान पहुँचा सकते हैं", + "report_flow.label.worried_suicide": "मुझे डर है कि वे आत्महत्या का प्रयास कर सकते हैं", + "report_flow.notice.need_more_info.body": "इसकी समीक्षा करने के लिए, हमें ऐसा मैसेज चाहिए जिसमें वे अपनी उम्र बताते हों या स्पष्ट करते हों कि वे {product_name} की न्यूनतम आयु से कम हैं। इसके बजाय उस मैसेज की रिपोर्ट करें।", + "report_flow.notice.need_more_info.title": "हम अभी इस पर कार्रवाई नहीं कर सकते", + "report_flow.notice.need_more_info_profile.body": "इसकी समीक्षा करने के लिए, हमें वह जगह देखनी होगी जहाँ वे अपनी उम्र बताते हैं या स्पष्ट करते हैं कि वे {product_name} की न्यूनतम आयु से कम हैं। इसके बजाय उस मैसेज या प्रोफ़ाइल की रिपोर्ट करें।", + "report_flow.screen.abuse.title": "इसमें क्या शामिल है?", + "report_flow.screen.abuse_guild.title": "इस कम्युनिटी के लोग क्या कर रहे हैं?", + "report_flow.screen.age_stated_message.title": "क्या इस मैसेज में उनकी उम्र बताई गई है?", + "report_flow.screen.age_stated_profile.title": "क्या उनकी प्रोफ़ाइल में उनकी उम्र बताई गई है?", + "report_flow.screen.community_parts.subtitle": "जितनी ज़रूरत हो उतने चुनें।", + "report_flow.screen.community_parts.title": "कम्युनिटी के कौन से हिस्से शामिल हैं?", + "report_flow.screen.crisis_support.subtitle": "संकट हेल्पलाइन मुफ़्त, गोपनीय सहायता प्रदान करती हैं।", + "report_flow.screen.crisis_support.title": "कोई अभी मदद कर सकता है", + "report_flow.screen.false_info.subtitle": "राय, व्यंग्य और नेकनीयती से की गई बहस की अनुमति है। गैर-कानूनी मानहानि की रिपोर्ट डिजिटल सेवा अधिनियम (DSA) के तहत की जा सकती है।", + "report_flow.screen.false_info.subtitle_self_hosted": "राय, व्यंग्य और नेकनीयती से की गई बहस की अनुमति है।", + "report_flow.screen.false_info.title": "इसमें क्या भ्रामक है?", + "report_flow.screen.harassment.title": "किसी को कैसे निशाना बनाया जा रहा है?", + "report_flow.screen.hate.title": "यह लोगों पर उनकी पहचान के कारण कैसे हमला करता है?", + "report_flow.screen.impersonation.subtitle": "स्पष्ट रूप से लेबल की गई पैरोडी या रोलप्ले की अनुमति है।", + "report_flow.screen.impersonation.title": "किसकी फ़र्ज़ी पहचान बनाई जा रही है, या यह स्कैम है?", + "report_flow.screen.minor_risk.title": "यह व्यक्ति किसी नाबालिग को कैसे खतरे में डाल रहा है?", + "report_flow.screen.minor_risk_guild.title": "यह कम्युनिटी नाबालिगों को कैसे खतरे में डालती है?", + "report_flow.screen.minor_sexual.subtitle": "चित्रित, लिखित या AI से बनी सामग्री भी इसमें गिनी जाती है, अगर किसी पात्र को नाबालिग बताया गया हो या वह साफ़ तौर पर यौवन-पूर्व उम्र का हो, जिसमें lolicon, shotacon और cub शामिल हैं।", + "report_flow.screen.minor_sexual.title": "आपने किसी नाबालिग से जुड़ा क्या देखा?", + "report_flow.screen.minor_sexual_guild.title": "आपने नाबालिगों से जुड़ा क्या देखा?", + "report_flow.screen.private_info.subtitle": "जितनी ज़रूरत हो उतने चुनें। अगर किसी अंतरंग तस्वीर में 18 वर्ष से कम उम्र का कोई व्यक्ति दिख रहा है, तो वापस जाएँ और उसे “किसी नाबालिग को यौन रूप से निशाना बनाना” के तहत रिपोर्ट करें।", + "report_flow.screen.private_info.title": "कौन से निजी विवरण शामिल हैं?", + "report_flow.screen.profile_abuse.title": "उनकी प्रोफ़ाइल में क्या हानिकारक है?", + "report_flow.screen.profile_hate_violence.title": "उनकी प्रोफ़ाइल क्या दिखाती है या बढ़ावा देती है?", + "report_flow.screen.profile_intro.options_heading": "और जानें", + "report_flow.screen.profile_intro.subtitle": "हमें बताएँ कि इस प्रोफ़ाइल में क्या गलत है। उन्हें यह नहीं बताया जाएगा कि किसने रिपोर्ट किया।", + "report_flow.screen.profile_intro.title": "प्रोफ़ाइल की रिपोर्ट करें", + "report_flow.screen.profile_minor_sexual.title": "उनकी प्रोफ़ाइल में नाबालिग से जुड़ा क्या है?", + "report_flow.screen.profile_parts.subtitle": "जितनी ज़रूरत हो उतने चुनें।", + "report_flow.screen.profile_parts.title": "उनकी प्रोफ़ाइल के कौन से हिस्से समस्याग्रस्त हैं?", + "report_flow.screen.profile_private_info.title": "उनकी प्रोफ़ाइल में कौन से निजी विवरण हैं?", + "report_flow.screen.profile_sexual.title": "उनकी प्रोफ़ाइल में यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.profile_threat.title": "उनकी प्रोफ़ाइल में हिंसा कैसे शामिल है?", + "report_flow.screen.root_guild.subtitle": "इस कम्युनिटी में जो हो रहा है, उससे सबसे ज़्यादा मेल खाने वाला विकल्प चुनें।", + "report_flow.screen.root_guild.title": "इस कम्युनिटी में क्या गलत है?", + "report_flow.screen.root_message.subtitle": "सबसे ज़्यादा मेल खाने वाला विकल्प चुनें। भेजने से पहले आप सब कुछ जाँच सकते हैं।", + "report_flow.screen.root_message.title": "मैसेज की रिपोर्ट करें", + "report_flow.screen.root_user.subtitle": "उनकी प्रोफ़ाइल में जो है, उससे सबसे ज़्यादा मेल खाने वाला विकल्प चुनें।", + "report_flow.screen.root_user.title": "उनकी प्रोफ़ाइल में क्या गलत है?", + "report_flow.screen.self_harm.subtitle": "यह कहने पर किसी को दंडित नहीं किया जाता कि वह मुश्किल दौर से गुज़र रहा है। हमें अपनी चिंता बताने से हम सहायता उपलब्ध करा पाते हैं।", + "report_flow.screen.self_harm.title": "उन्होंने क्या कहा या शेयर किया?", + "report_flow.screen.self_harm_guild.title": "सदस्य क्या प्रोत्साहित कर रहे हैं?", + "report_flow.screen.self_harm_profile.title": "उनकी प्रोफ़ाइल में क्या कहा गया है या दिखाया गया है?", + "report_flow.screen.sexual.subtitle": "यदि दिखाया गया या शामिल कोई भी व्यक्ति 18 वर्ष से कम उम्र का है, तो “किसी नाबालिग को यौन रूप से निशाना बनाना” चुनें।", + "report_flow.screen.sexual.title": "यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.sexual_guild.subtitle": "यदि दिखाया गया या शामिल कोई भी व्यक्ति 18 वर्ष से कम उम्र का है, तो “नाबालिगों को यौन रूप से निशाना बनाना” चुनें।", + "report_flow.screen.sexual_guild.title": "इस कम्युनिटी में यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.something_else_guild.title": "इस कम्युनिटी में और क्या हो रहा है?", + "report_flow.screen.something_else_message.title": "और क्या हो रहा है?", + "report_flow.screen.something_else_user.title": "इस प्रोफ़ाइल में और क्या गलत है?", + "report_flow.screen.spam_kind_guild.title": "यह कम्युनिटी प्लेटफ़ॉर्म का दुरुपयोग कैसे कर रही है?", + "report_flow.screen.spam_profile.title": "अकाउंट का दुरुपयोग कैसे किया जा रहा है?", + "report_flow.screen.threat.title": "इसमें हिंसा किस तरह शामिल है?", + "report_flow.screen.violence_misinfo.title": "इनमें से कौन सा इससे मेल खाता है?", + "report_flow.screen.violence_misinfo_guild.title": "इनमें से कौन सी बात इस कम्युनिटी में होती है?" }); export default CONTENT_I18N_HI_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/hr.ts b/fluxer_api/src/api/content_i18n/locales/hr.ts index 2d7af1695..8c4b6dfc8 100644 --- a/fluxer_api/src/api/content_i18n/locales/hr.ts +++ b/fluxer_api/src/api/content_i18n/locales/hr.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_HR_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Tekstualni kanali", "guild.default_category_voice": "Glasovni kanali", "guild.default_channel_text": "općenito", - "guild.default_channel_voice": "Općenito" + "guild.default_channel_voice": "Općenito", + "report_flow.description.name": "Korisničko ime, ime za prikaz ili nadimak u zajednici", + "report_flow.description.photo": "Što koriste kao avatar i naslovnu sliku", + "report_flow.description.profile_text": "Biografija, prilagođeni status ili zamjenice", + "report_flow.label.abuse": "Zlostavljajući ili štetan sadržaj", + "report_flow.label.account_trading": "Prodaja računa ili ukradenih podataka za prijavu ili podataka o kartici", + "report_flow.label.account_trading_communities": "Kupnja ili prodaja računa ili zajednica", + "report_flow.label.address": "Kućna adresa ili radno mjesto", + "report_flow.label.adult_content_no_gate": "Sadržaj za odrasle bez ograničenja pristupa zbog dobi 18+", + "report_flow.label.adult_content_profile": "Eksplicitan sadržaj za odrasle na profilu", + "report_flow.label.adult_content_unmarked": "Sadržaj za odrasle u kanalu zajednice koji nije označen kao 18+", + "report_flow.label.age_no_message": "Ne, ne spominje se", + "report_flow.label.age_no_profile": "Ne, ne spominje se", + "report_flow.label.age_yes_message": "Da, spominje se njihova dob", + "report_flow.label.age_yes_profile": "Da, njihov profil spominje njihovu dob", + "report_flow.label.atrocity_denial": "Poricanje ili slavljenje holokausta ili drugih genocida", + "report_flow.label.ban_evasion": "Zaobilaženje zabrane pomoću drugog računa", + "report_flow.label.channel_names": "Nazivi kanala", + "report_flow.label.community_banner": "Naslovna slika zajednice", + "report_flow.label.community_icon": "Ikona zajednice", + "report_flow.label.community_name": "Naziv zajednice", + "report_flow.label.conversion_therapy": "Promicanje konverzijske terapije", + "report_flow.label.copyright": "Žalba zbog autorskih prava ili zaštitnog znaka", + "report_flow.label.crisis_lines": "Krizne linije u vašoj zemlji", + "report_flow.label.csam": "Stvarne ili AI-generirane slike ili videozapisi seksualnog zlostavljanja djece", + "report_flow.label.discovery_listing": "Unos u Otkrivanju", + "report_flow.label.dislike": "Jednostavno mi ne odgovara", + "report_flow.label.dsa": "Sadržaj koji je nezakonit u EU-u (Akt o digitalnim uslugama)", + "report_flow.label.eating_disorder_promotion": "Poticanje poremećaja hranjenja", + "report_flow.label.eating_disorder_promotion_profile": "Njihov profil promiče poremećaje hranjenja", + "report_flow.label.email": "Adresa e-pošte", + "report_flow.label.emoji_stickers": "Prilagođeni emoji ili naljepnice", + "report_flow.label.face_photo": "Fotografija njihovog lica", + "report_flow.label.fake_account": "Lažni račun, bot ili automatizirana zlouporaba", + "report_flow.label.fake_account_profile": "Lažan ili obmanjujući račun", + "report_flow.label.false_claims": "Širenje laži kako bi se naštetilo ugledu određene osobe", + "report_flow.label.false_info": "Širenje štetnih lažnih informacija", + "report_flow.label.financial": "Kartica, bankovni ili drugi financijski podaci", + "report_flow.label.fraud": "Pokušavaju prijevarom od ljudi izvući novac ili račune", + "report_flow.label.fraud_guild": "Prijevarom izvlače novac ili račune od ljudi", + "report_flow.label.government_id": "Osobni dokument ili identifikacijski broj", + "report_flow.label.graphic_violence": "Stvarno nasilje prikazano radi šokiranja, poput krvavih prizora ili okrutnosti prema životinjama", + "report_flow.label.harassment": "Zlostavljanje, uznemiravanje ili uhođenje", + "report_flow.label.harassment_direct": "Opetovano ciljanje nekoga uvredama ili zlostavljanjem", + "report_flow.label.harassment_guild": "Uznemiravanje, zlostavljanje ili uhođenje ljudi", + "report_flow.label.harassment_profile": "Njihov profil uznemirava ili cilja mene ili nekog drugog", + "report_flow.label.harmful_false_claims": "Lažne tvrdnje koje bi mogle uzrokovati ozbiljnu štetu u stvarnom svijetu", + "report_flow.label.hate": "Mržnja ili diskriminacija prema ljudima zbog onoga što jesu", + "report_flow.label.hate_dehumanizing": "Uspoređivanje ljudi sa životinjama, bolešću ili prljavštinom ili njihovo proglašavanje manje vrijednima od ljudi", + "report_flow.label.hate_incitement": "Pozivi na nasilje nad skupinom ili na njezino isključivanje", + "report_flow.label.hate_other": "Drugi napadi na ljude zbog onoga što jesu", + "report_flow.label.hate_slurs": "Pogrdni nazivi, simboli mržnje ili ponižavajući stereotipi", + "report_flow.label.hate_violence": "Mržnja, nasilje ili ekstremizam", + "report_flow.label.identity": "Seksualna orijentacija, rodni identitet ili interseksualni status", + "report_flow.label.illegal_activity": "Ostale nezakonite aktivnosti", + "report_flow.label.illegal_goods": "Prodaja droge, oružja ili druge nezakonite robe", + "report_flow.label.impersonation": "Lažno predstavljanje ili varanje ljudi", + "report_flow.label.impersonation_guild": "Pretvaranje da su {product_name} ili druga organizacija", + "report_flow.label.impersonation_organization": "Tvrtka, brend ili grupa", + "report_flow.label.impersonation_person": "Mene ili nekoga meni bliskog", + "report_flow.label.impersonation_public_figure": "Poznata osoba, poput kreatora ili političara", + "report_flow.label.impersonation_staff": "Osoblje ili podrška aplikacije {product_name}", + "report_flow.label.intimate_image_abuse": "Intimne slike podijeljene bez pristanka, uključujući deepfakeove, ili prijetnja njihovim dijeljenjem", + "report_flow.label.intimate_image_abuse_guild": "Dijeljenje intimnih slika bez pristanka, uključujući deepfakeove", + "report_flow.label.intimate_image_abuse_profile": "Intimne slike nekoga podijeljene bez pristanka, uključujući deepfakeove", + "report_flow.label.intimate_photo": "Intimna ili gola fotografija", + "report_flow.label.invite_splash": "Pozadinska slika pozivnice", + "report_flow.label.ip_address": "IP adresa", + "report_flow.label.learn_more": "Pročitajte smjernice zajednice aplikacije {product_name}", + "report_flow.label.legal_name": "Pravo ili zakonsko ime", + "report_flow.label.lgbtq_targeting": "Namjerno pogrešno oslovljavanje po rodu, korištenje nečijeg starog imena (deadnaming), javno razotkrivanje nečije seksualne orijentacije ili rodnog identiteta ili poricanje nečijeg identiteta", + "report_flow.label.malware_guild": "Distribucija zlonamjernog softvera ili phishing poveznica", + "report_flow.label.malware_phishing": "Phishing, zlonamjerni softver ili pokušaji hakiranja", + "report_flow.label.member_activity": "Što članovi tamo objavljuju ili rade", + "report_flow.label.metric_manipulation": "Lažiranje broja članova ili reakcija", + "report_flow.label.minor_contact": "Traženje od maloljetnika susreta, fotografija ili osobnih podataka na način koji djeluje predatorski", + "report_flow.label.minor_dating_community": "To je zajednica za spojeve među maloljetnicima", + "report_flow.label.minor_fictional": "Nacrtani, pisani ili AI-generirani seksualni sadržaj o izmišljenom djetetu", + "report_flow.label.minor_grooming": "Mamljenje (grooming) ili uspostavljanje neprikladnog povjerenja s maloljetnikom", + "report_flow.label.minor_grooming_guild": "Članovi mame maloljetnike (grooming) ili uspostavljaju neprikladno povjerenje s njima", + "report_flow.label.minor_in_adult_space": "Maloljetnik je u kanalu ili zajednici 18+", + "report_flow.label.minor_in_adult_space_guild": "Maloljetnicima je dopušten pristup kanalima 18+", + "report_flow.label.minor_risk": "Izlaganje maloljetnika riziku", + "report_flow.label.minor_risk_guild": "Izlaganje maloljetnika riziku", + "report_flow.label.minor_sexual": "Seksualiziranje maloljetne osobe", + "report_flow.label.minor_sexual_contact": "Koketiranje s maloljetnikom ili slanje seksualnih poruka maloljetniku", + "report_flow.label.minor_sexual_contact_guild": "Članovi koketiraju s maloljetnicima ili im šalju seksualne poruke", + "report_flow.label.minor_sexual_content": "Maloljetnik sam dijeli seksualni sadržaj", + "report_flow.label.minor_sexual_content_guild": "Maloljetnici objavljuju ili šalju seksualni sadržaj", + "report_flow.label.minor_sexual_content_profile": "Profil maloljetnika sa seksualnim sadržajem", + "report_flow.label.minor_sexual_guild": "Seksualiziranje maloljetnika", + "report_flow.label.minor_sexualization": "Seksualni komentari o maloljetnicima", + "report_flow.label.minor_sexualization_guild": "Članovi iznose seksualne komentare o maloljetnicima", + "report_flow.label.minor_sexualization_profile": "Seksualni komentari o maloljetnicima na njihovom profilu", + "report_flow.label.name": "Imena", + "report_flow.label.other": "Nešto što ovdje nije navedeno", + "report_flow.label.other_identifying": "Ostale informacije koje bi mogle identificirati ili locirati nekoga", + "report_flow.label.permits_violations": "Dopušta ozbiljno kršenje pravila", + "report_flow.label.phone": "Telefonski broj", + "report_flow.label.photo": "Slike", + "report_flow.label.platform_abuse": "Scraping, automatizacija ili druga zlouporaba platforme", + "report_flow.label.private_conversation": "Privatne poruke, snimke zaslona ili snimke poziva", + "report_flow.label.private_info": "Dijeljenje nečijih privatnih podataka", + "report_flow.label.private_info_profile": "Njihov profil dijeli nečije privatne podatke", + "report_flow.label.profile_text": "Tekst profila", + "report_flow.label.raid": "Organiziranje ili sudjelovanje u koordiniranom napadu ili hajci", + "report_flow.label.raid_guild": "Organiziranje koordiniranih napada ili hajki na ljude ili zajednice", + "report_flow.label.rude_language": "Psovanje ili nepristojne primjedbe", + "report_flow.label.self_harm": "Netko bi se mogao ozlijediti ili potiče samoozljeđivanje", + "report_flow.label.self_harm_graphic": "Eksplicitne slike samoozljeđivanja", + "report_flow.label.self_harm_guild": "Članovi potiču druge na samoozljeđivanje", + "report_flow.label.self_harm_pressure": "Pritiskanje ili izazivanje nekoga da se ozlijedi", + "report_flow.label.self_harm_pressure_guild": "Pritiskanje ili izazivanje ljudi da se ozlijede", + "report_flow.label.self_harm_profile": "Njihov profil upućuje na samoozljeđivanje ili ga potiče", + "report_flow.label.self_harm_promotion": "Poticanje samoozljeđivanja ili dijeljenje metoda", + "report_flow.label.self_harm_promotion_profile": "Njihov profil potiče samoozljeđivanje", + "report_flow.label.sexual": "Seksualni sadržaj", + "report_flow.label.sexual_exploitation": "Seksualno iskorištavanje, prisila ili trgovina ljudima", + "report_flow.label.sexual_unwanted": "Neželjene seksualne slike ili poruke", + "report_flow.label.something_else": "Nešto drugo", + "report_flow.label.spam": "Neželjena pošta ili neželjeno oglašavanje", + "report_flow.label.spam_bulk": "Masovno slanje neželjene pošte ili oglasa", + "report_flow.label.spam_or_manipulation": "Neželjena pošta ili manipulacija platformom", + "report_flow.label.spam_profile": "Njihov profil koristi se za neželjenu poštu ili oglašavanje", + "report_flow.label.suicide_promotion": "Poticanje na samoubojstvo ili dijeljenje metoda", + "report_flow.label.suicide_promotion_profile": "Njihov profil potiče na samoubojstvo", + "report_flow.label.synthetic_media": "Lažni mediji ili mediji izrađeni pomoću AI-ja predstavljeni kao stvarni", + "report_flow.label.terrorism": "Terorizam ili nasilni ekstremizam", + "report_flow.label.terrorism_guild": "Novačenje za terorizam ili nasilni ekstremizam ili njihovo promicanje", + "report_flow.label.threat": "Prijetnje ili pozivi na nasilje", + "report_flow.label.threat_to_share": "Prijeti da će to podijeliti", + "report_flow.label.too_young": "Ta je osoba mlađa od minimalne dobi za korištenje aplikacije {product_name}", + "report_flow.label.unwanted_contact": "Uhođenje ili opetovano kontaktiranje mene ili nekog drugog nakon zahtjeva da prestane, nakon blokiranja ili uklanjanja", + "report_flow.label.violence_glorification": "Veličanje nasilja u stvarnom svijetu", + "report_flow.label.violence_incitement": "Poticanje na nasilje ili objašnjavanje kako ozlijediti ljude", + "report_flow.label.violence_misinfo": "Nasilje, ekstremizam ili štetne lažne informacije", + "report_flow.label.violent_threat": "Govore da će nekoga ozlijediti", + "report_flow.label.worried_profile": "Brine me sigurnost te osobe", + "report_flow.label.worried_self_harm": "Bojim se da bi se ta osoba mogla ozlijediti", + "report_flow.label.worried_suicide": "Bojim se da bi ta osoba mogla pokušati počiniti samoubojstvo", + "report_flow.notice.need_more_info.body": "Da bismo ovo pregledali, potrebna nam je poruka u kojoj navode koliko imaju godina ili jasno daju do znanja da su mlađi od minimalne dobi za korištenje aplikacije {product_name}. Umjesto toga prijavite tu poruku.", + "report_flow.notice.need_more_info.title": "Još ne možemo postupiti po ovome", + "report_flow.notice.need_more_info_profile.body": "Da bismo ovo pregledali, trebamo vidjeti gdje navode koliko imaju godina ili jasno daju do znanja da su mlađi od minimalne dobi za korištenje aplikacije {product_name}. Umjesto toga prijavite tu poruku ili profil.", + "report_flow.screen.abuse.title": "O čemu je riječ?", + "report_flow.screen.abuse_guild.title": "Što rade ljudi u ovoj zajednici?", + "report_flow.screen.age_stated_message.title": "Kaže li ova poruka koliko imaju godina?", + "report_flow.screen.age_stated_profile.title": "Navodi li njihov profil koliko imaju godina?", + "report_flow.screen.community_parts.subtitle": "Odaberite onoliko stavki koliko vam je potrebno.", + "report_flow.screen.community_parts.title": "Koji su dijelovi zajednice uključeni?", + "report_flow.screen.crisis_support.subtitle": "Krizne linije nude besplatnu, povjerljivu podršku.", + "report_flow.screen.crisis_support.title": "Netko vam može pomoći odmah", + "report_flow.screen.false_info.subtitle": "Mišljenja, satira i dobronamjerna rasprava dopušteni su. Nezakonita kleveta može se prijaviti prema Aktu o digitalnim uslugama.", + "report_flow.screen.false_info.subtitle_self_hosted": "Mišljenja, satira i dobronamjerna rasprava dopušteni su.", + "report_flow.screen.false_info.title": "Što je u tome obmanjujuće?", + "report_flow.screen.harassment.title": "Kako je netko na meti?", + "report_flow.screen.hate.title": "Kako napada ljude zbog onoga što jesu?", + "report_flow.screen.impersonation.subtitle": "Jasno označena parodija ili igranje uloga dopušteni su.", + "report_flow.screen.impersonation.title": "Za koga se netko lažno predstavlja ili je riječ o prijevari?", + "report_flow.screen.minor_risk.title": "Kako ta osoba dovodi maloljetnika u opasnost?", + "report_flow.screen.minor_risk_guild.title": "Kako ova zajednica dovodi maloljetnike u opasnost?", + "report_flow.screen.minor_sexual.subtitle": "Nacrtani, pisani ili AI sadržaj računa se kada je lik opisan kao maloljetnik ili je jasno prepubertetski, uključujući lolicon, shotacon i cub.", + "report_flow.screen.minor_sexual.title": "Što ste vidjeli u vezi s maloljetnom osobom?", + "report_flow.screen.minor_sexual_guild.title": "Što ste vidjeli u vezi s maloljetnicima?", + "report_flow.screen.private_info.subtitle": "Odaberite onoliko stavki koliko vam je potrebno. Ako intimna fotografija prikazuje osobu mlađu od 18 godina, vratite se i prijavite je pod „Seksualiziranje maloljetne osobe“.", + "report_flow.screen.private_info.title": "Koji su privatni podaci uključeni?", + "report_flow.screen.profile_abuse.title": "Što je štetno na njihovom profilu?", + "report_flow.screen.profile_hate_violence.title": "Što njihov profil prikazuje ili promiče?", + "report_flow.screen.profile_intro.options_heading": "Saznajte više", + "report_flow.screen.profile_intro.subtitle": "Recite nam što nije u redu s ovim profilom. Neće im biti rečeno tko ih je prijavio.", + "report_flow.screen.profile_intro.title": "Prijavi profil", + "report_flow.screen.profile_minor_sexual.title": "Što u njihovom profilu uključuje maloljetnika?", + "report_flow.screen.profile_parts.subtitle": "Odaberite onoliko stavki koliko vam je potrebno.", + "report_flow.screen.profile_parts.title": "Koji dijelovi njihovog profila predstavljaju problem?", + "report_flow.screen.profile_private_info.title": "Koji se privatni podaci nalaze na njihovom profilu?", + "report_flow.screen.profile_sexual.title": "Recite nam o seksualnom sadržaju na njihovom profilu", + "report_flow.screen.profile_threat.title": "Kako njihov profil uključuje nasilje?", + "report_flow.screen.root_guild.subtitle": "Odaberite ono što najbolje odgovara onome što se događa u ovoj zajednici.", + "report_flow.screen.root_guild.title": "Što nije u redu s ovom zajednicom?", + "report_flow.screen.root_message.subtitle": "Odaberite ono što najbolje odgovara. Sve možete provjeriti prije slanja.", + "report_flow.screen.root_message.title": "Prijavi poruku", + "report_flow.screen.root_user.subtitle": "Odaberite ono što najbolje odgovara sadržaju njihova profila.", + "report_flow.screen.root_user.title": "Što nije u redu s njihovim profilom?", + "report_flow.screen.self_harm.subtitle": "Nitko se ne kažnjava zato što kaže da mu je teško. Ako nam kažete da ste zabrinuti, to nam pomaže da ponudimo podršku.", + "report_flow.screen.self_harm.title": "Što su rekli ili podijelili?", + "report_flow.screen.self_harm_guild.title": "Što članovi potiču?", + "report_flow.screen.self_harm_profile.title": "Što njihov profil govori ili prikazuje?", + "report_flow.screen.sexual.subtitle": "Ako je bilo koja prikazana ili uključena osoba mlađa od 18 godina, odaberite „Seksualiziranje maloljetne osobe“.", + "report_flow.screen.sexual.title": "Recite nam o seksualnom sadržaju", + "report_flow.screen.sexual_guild.subtitle": "Ako je bilo koja prikazana ili uključena osoba mlađa od 18 godina, odaberite „Seksualiziranje maloljetnika“.", + "report_flow.screen.sexual_guild.title": "Recite nam o seksualnom sadržaju u ovoj zajednici", + "report_flow.screen.something_else_guild.title": "Što se još događa u ovoj zajednici?", + "report_flow.screen.something_else_message.title": "Što se još događa?", + "report_flow.screen.something_else_user.title": "Što još nije u redu s ovim profilom?", + "report_flow.screen.spam_kind_guild.title": "Kako ova zajednica zloupotrebljava platformu?", + "report_flow.screen.spam_profile.title": "Kako se račun zloupotrebljava?", + "report_flow.screen.threat.title": "Kako to uključuje nasilje?", + "report_flow.screen.violence_misinfo.title": "Što od ovoga odgovara?", + "report_flow.screen.violence_misinfo_guild.title": "Što se od ovoga događa u ovoj zajednici?" }); export default CONTENT_I18N_HR_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/hu.ts b/fluxer_api/src/api/content_i18n/locales/hu.ts index 34aaa961b..af842eb80 100644 --- a/fluxer_api/src/api/content_i18n/locales/hu.ts +++ b/fluxer_api/src/api/content_i18n/locales/hu.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_HU_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Szöveges csatornák", "guild.default_category_voice": "Hangcsatornák", "guild.default_channel_text": "általános", - "guild.default_channel_voice": "Általános" + "guild.default_channel_voice": "Általános", + "report_flow.description.name": "Felhasználónév, megjelenítendő név vagy közösségi becenév", + "report_flow.description.photo": "Amit profilképként és borítóképként használnak", + "report_flow.description.profile_text": "Bemutatkozás, egyéni állapot vagy névmások", + "report_flow.label.abuse": "Bántalmazó vagy káros tartalom", + "report_flow.label.account_trading": "Fiókok, lopott bejelentkezési adatok vagy kártyaadatok eladása", + "report_flow.label.account_trading_communities": "Fiókok vagy közösségek vásárlása vagy eladása", + "report_flow.label.address": "Otthoni cím vagy munkahely", + "report_flow.label.adult_content_no_gate": "Felnőtt tartalom 18+ korhatár nélkül", + "report_flow.label.adult_content_profile": "Kifejezetten felnőtt tartalom a profiljukban", + "report_flow.label.adult_content_unmarked": "Felnőtt tartalom egy közösségi csatornán, amely nincs 18+ jelöléssel ellátva", + "report_flow.label.age_no_message": "Nem, nem említi", + "report_flow.label.age_no_profile": "Nem, nem említi", + "report_flow.label.age_yes_message": "Igen, megemlíti a korát", + "report_flow.label.age_yes_profile": "Igen, a profiljuk említi a korukat", + "report_flow.label.atrocity_denial": "A holokauszt vagy más népirtások tagadása vagy dicsőítése", + "report_flow.label.ban_evasion": "Kitiltás megkerülése másik fiókkal", + "report_flow.label.channel_names": "Csatornanevek", + "report_flow.label.community_banner": "Közösség borítóképe", + "report_flow.label.community_icon": "Közösség ikonja", + "report_flow.label.community_name": "Közösség neve", + "report_flow.label.conversion_therapy": "Konverziós terápia népszerűsítése", + "report_flow.label.copyright": "Szerzői jogi vagy védjegyekkel kapcsolatos panasz", + "report_flow.label.crisis_lines": "Krízisvonalak az országodban", + "report_flow.label.csam": "Gyermekek szexuális bántalmazását ábrázoló valódi vagy mesterséges intelligencia által generált képek vagy videók", + "report_flow.label.discovery_listing": "Listázás a Felfedezésben", + "report_flow.label.dislike": "Egyszerűen nem nekem való", + "report_flow.label.dsa": "Az EU-ban illegális tartalom (digitális szolgáltatásokról szóló rendelet, DSA)", + "report_flow.label.eating_disorder_promotion": "Kóros étkezési szokásokra buzdítás", + "report_flow.label.eating_disorder_promotion_profile": "A profilja evészavarokat népszerűsít", + "report_flow.label.email": "E-mail-cím", + "report_flow.label.emoji_stickers": "Egyéni emoji vagy matricák", + "report_flow.label.face_photo": "Arcfotó", + "report_flow.label.fake_account": "Hamis fiók, bot vagy automatizált visszaélés", + "report_flow.label.fake_account_profile": "Hamis vagy megtévesztő fiók", + "report_flow.label.false_claims": "Hazugságok terjesztése egy adott személy hírnevének rontása céljából", + "report_flow.label.false_info": "Káros hamis információk terjesztése", + "report_flow.label.financial": "Kártya, banki vagy egyéb pénzügyi adatok", + "report_flow.label.fraud": "Pénzt vagy fiókokat próbálnak kicsalni emberekből", + "report_flow.label.fraud_guild": "Pénz vagy fiókok kicsalása emberekből", + "report_flow.label.government_id": "Személyazonosító okmány vagy azonosító szám", + "report_flow.label.graphic_violence": "Sokkolási céllal bemutatott valódi erőszak, például brutális vérontás vagy állatkínzás", + "report_flow.label.harassment": "Megfélemlítés, zaklatás vagy üldözés", + "report_flow.label.harassment_direct": "Valaki ismételt támadása sértésekkel vagy bántalmazással", + "report_flow.label.harassment_guild": "Emberek zaklatása, megfélemlítése vagy üldözése", + "report_flow.label.harassment_profile": "A profilja engem vagy valaki mást zaklat vagy céloz meg", + "report_flow.label.harmful_false_claims": "Hamis állítások, amelyek súlyos, valós károkat okozhatnak", + "report_flow.label.hate": "Gyűlölet vagy diszkrimináció emberekkel szemben az identitásuk miatt", + "report_flow.label.hate_dehumanizing": "Emberek összehasonlítása állatokkal, betegségekkel vagy szennyel, vagy ember alatti lényeknek nevezése", + "report_flow.label.hate_incitement": "Erőszakra vagy kirekesztésre való felhívás egy csoport ellen", + "report_flow.label.hate_other": "Egyéb támadások emberek ellen az identitásuk miatt", + "report_flow.label.hate_slurs": "Becsmérlő kifejezések, gyűlöletkeltő szimbólumok vagy megalázó sztereotípiák", + "report_flow.label.hate_violence": "Gyűlölet, erőszak vagy szélsőségesség", + "report_flow.label.identity": "Szexuális irányultság, nemi identitás vagy interszexuális státusz", + "report_flow.label.illegal_activity": "Egyéb illegális tevékenység", + "report_flow.label.illegal_goods": "Kábítószer, fegyver vagy más illegális termékek árusítása", + "report_flow.label.impersonation": "Valaki megszemélyesítése vagy emberek átverése", + "report_flow.label.impersonation_guild": "A(z) {product_name} vagy más szervezet megszemélyesítése", + "report_flow.label.impersonation_organization": "Egy cég, márka vagy csoport", + "report_flow.label.impersonation_person": "Én vagy egy hozzám közel álló személy", + "report_flow.label.impersonation_public_figure": "Egy ismert személy, például alkotó vagy politikus", + "report_flow.label.impersonation_staff": "A(z) {product_name} munkatársa vagy ügyfélszolgálata", + "report_flow.label.intimate_image_abuse": "Hozzájárulás nélkül megosztott intim képek, beleértve a deepfake-eket, vagy a megosztásukkal való fenyegetés", + "report_flow.label.intimate_image_abuse_guild": "Intim képek megosztása hozzájárulás nélkül, beleértve a deepfake-eket", + "report_flow.label.intimate_image_abuse_profile": "Valakiről hozzájárulás nélkül megosztott intim képek, beleértve a deepfake-eket", + "report_flow.label.intimate_photo": "Intim vagy meztelen fotó", + "report_flow.label.invite_splash": "Meghívó háttérképe", + "report_flow.label.ip_address": "IP-cím", + "report_flow.label.learn_more": "Olvasd el a(z) {product_name} közösségi irányelveit", + "report_flow.label.legal_name": "Valódi vagy hivatalos név", + "report_flow.label.lgbtq_targeting": "Valaki nemi identitásának szándékos figyelmen kívül hagyása (misgendering), korábbi nevének használata (deadnaming), beleegyezése nélküli felfedése (outing), vagy identitásának tagadása", + "report_flow.label.malware_guild": "Rosszindulatú szoftverek vagy adathalász linkek terjesztése", + "report_flow.label.malware_phishing": "Adathalászat, rosszindulatú szoftverek vagy feltörési kísérletek", + "report_flow.label.member_activity": "Amit a tagok posztolnak vagy csinálnak ott", + "report_flow.label.metric_manipulation": "Tagok vagy reakciók számának hamisítása", + "report_flow.label.minor_contact": "Kiskorú felkérése találkozóra, fotók vagy személyes adatok küldésére úgy, hogy az ragadozó viselkedésnek tűnik", + "report_flow.label.minor_dating_community": "Ez egy kiskorúak közötti randevúzásra szolgáló közösség", + "report_flow.label.minor_fictional": "Rajzolt, írott vagy mesterséges intelligencia által generált szexuális tartalom egy kitalált gyermekről", + "report_flow.label.minor_grooming": "Kiskorú behálózása (grooming) vagy nem helyénvaló bizalmi kapcsolat kiépítése vele", + "report_flow.label.minor_grooming_guild": "A tagok kiskorúakat hálóznak be (grooming) vagy nem helyénvaló bizalmi kapcsolatot építenek ki velük", + "report_flow.label.minor_in_adult_space": "Kiskorú tartózkodik egy 18+ csatornán vagy közösségben", + "report_flow.label.minor_in_adult_space_guild": "Kiskorúak számára engedélyezett a belépés a 18+ csatornákra", + "report_flow.label.minor_risk": "Kiskorú veszélyeztetése", + "report_flow.label.minor_risk_guild": "Kiskorúak veszélyeztetése", + "report_flow.label.minor_sexual": "Kiskorú szexualizálása", + "report_flow.label.minor_sexual_contact": "Kiskorúval való flörtölés vagy szexuális üzenetek küldése neki", + "report_flow.label.minor_sexual_contact_guild": "A tagok kiskorúakkal flörtölnek vagy szexuális üzeneteket küldenek nekik", + "report_flow.label.minor_sexual_content": "Egy kiskorú maga oszt meg szexuális tartalmat", + "report_flow.label.minor_sexual_content_guild": "Kiskorúak szexuális tartalmat posztolnak vagy küldenek", + "report_flow.label.minor_sexual_content_profile": "Egy kiskorú profilja szexuális tartalommal", + "report_flow.label.minor_sexual_guild": "Kiskorúak szexualizálása", + "report_flow.label.minor_sexualization": "Kiskorúakkal kapcsolatos szexuális megjegyzések", + "report_flow.label.minor_sexualization_guild": "A tagok kiskorúakkal kapcsolatos szexuális megjegyzéseket tesznek", + "report_flow.label.minor_sexualization_profile": "Kiskorúakkal kapcsolatos szexuális megjegyzések a profiljukban", + "report_flow.label.name": "Nevek", + "report_flow.label.other": "Valami, ami nincs itt felsorolva", + "report_flow.label.other_identifying": "Egyéb információ, amely azonosíthat vagy lokalizálhat valakit", + "report_flow.label.permits_violations": "Súlyos szabálysértéseket engedélyez", + "report_flow.label.phone": "Telefonszám", + "report_flow.label.photo": "Képek", + "report_flow.label.platform_abuse": "Adatok tömeges kinyerése (scraping), automatizálás vagy egyéb visszaélés a platformmal", + "report_flow.label.private_conversation": "Privát üzenetek, képernyőképek vagy hívásfelvételek", + "report_flow.label.private_info": "Valaki magánjellegű adatainak megosztása", + "report_flow.label.private_info_profile": "A profiljukban valaki magánjellegű adatait osztják meg", + "report_flow.label.profile_text": "Profilszöveg", + "report_flow.label.raid": "Rajtaütés vagy tömeges támadás szervezése vagy ahhoz való csatlakozás", + "report_flow.label.raid_guild": "Rajtaütések vagy tömeges támadások szervezése személyek vagy közösségek ellen", + "report_flow.label.rude_language": "Káromkodás vagy durva megjegyzések", + "report_flow.label.self_harm": "Valaki bánthatja magát, vagy önsértésre buzdít", + "report_flow.label.self_harm_graphic": "Önsértést ábrázoló, drasztikus képek", + "report_flow.label.self_harm_guild": "A tagok önsértésre unszolnak másokat", + "report_flow.label.self_harm_pressure": "Valaki önsértésre való unszolása vagy kihívása", + "report_flow.label.self_harm_pressure_guild": "Emberek önsértésre való unszolása vagy kihívása", + "report_flow.label.self_harm_profile": "A profiljuk önsértésre utal, vagy arra buzdít", + "report_flow.label.self_harm_promotion": "Önsértésre buzdítás vagy módszerek megosztása", + "report_flow.label.self_harm_promotion_profile": "A profilja önsértésre buzdít", + "report_flow.label.sexual": "Szexuális tartalom", + "report_flow.label.sexual_exploitation": "Szexuális kizsákmányolás, kényszerítés vagy emberkereskedelem", + "report_flow.label.sexual_unwanted": "Nem kívánt szexuális képek vagy üzenetek", + "report_flow.label.something_else": "Valami más", + "report_flow.label.spam": "Spam vagy nem kívánt hirdetések", + "report_flow.label.spam_bulk": "Spam vagy reklám küldése tömegesen", + "report_flow.label.spam_or_manipulation": "Spam vagy platformmanipuláció", + "report_flow.label.spam_profile": "Profiljukat spam vagy reklám céljára használják", + "report_flow.label.suicide_promotion": "Öngyilkosságra buzdítás vagy módszerek megosztása", + "report_flow.label.suicide_promotion_profile": "A profiljuk öngyilkosságra buzdít", + "report_flow.label.synthetic_media": "Hamis vagy mesterséges intelligencia által készített média, amelyet valódiként mutatnak be", + "report_flow.label.terrorism": "Terrorizmus vagy erőszakos szélsőségesség", + "report_flow.label.terrorism_guild": "Toborzás terrorizmusra vagy erőszakos szélsőségességre, illetve ezek népszerűsítése", + "report_flow.label.threat": "Fenyegetések vagy erőszakra való felhívások", + "report_flow.label.threat_to_share": "A megosztással fenyegetőzik", + "report_flow.label.too_young": "A(z) {product_name} használatához szükséges minimális életkor alatt vannak", + "report_flow.label.unwanted_contact": "Velem vagy valaki mással szembeni üldözés vagy ismételt kapcsolatfelvétel azután is, hogy felszólították az abbahagyásra, letiltották vagy eltávolították", + "report_flow.label.violence_glorification": "Valós erőszak dicsőítése", + "report_flow.label.violence_incitement": "Erőszakra buzdítás vagy annak elmagyarázása, hogyan lehet embereket bántani", + "report_flow.label.violence_misinfo": "Erőszak, szélsőségesség vagy káros hamis információk", + "report_flow.label.violent_threat": "Valaki bántalmazásával fenyeget", + "report_flow.label.worried_profile": "Aggódom a biztonságuk miatt", + "report_flow.label.worried_self_harm": "Attól tartok, bánthatja magát", + "report_flow.label.worried_suicide": "Attól tartok, öngyilkosságot kísérelhet meg", + "report_flow.notice.need_more_info.body": "Ehhez szükségünk van egy üzenetre, amelyben megmondják, hány évesek, vagy egyértelművé teszik, hogy a(z) {product_name} minimális életkora alatt vannak. Jelentsd inkább azt az üzenetet.", + "report_flow.notice.need_more_info.title": "Még nem tudunk intézkedni", + "report_flow.notice.need_more_info_profile.body": "Ehhez látnunk kell, hol adják meg a korukat, vagy egyértelművé teszik, hogy a(z) {product_name} minimális életkora alatt vannak. Jelentsd inkább azt az üzenetet vagy profilt.", + "report_flow.screen.abuse.title": "Miről van szó?", + "report_flow.screen.abuse_guild.title": "Mit csinálnak az emberek ebben a közösségben?", + "report_flow.screen.age_stated_message.title": "Szerepel ebben az üzenetben, hogy hány évesek?", + "report_flow.screen.age_stated_profile.title": "A profiljukon szerepel, hány évesek?", + "report_flow.screen.community_parts.subtitle": "Jelölj ki annyit, amennyi szükséges.", + "report_flow.screen.community_parts.title": "A közösség mely részei érintettek?", + "report_flow.screen.crisis_support.subtitle": "A krízisvonalak ingyenes, bizalmas támogatást nyújtanak.", + "report_flow.screen.crisis_support.title": "Valaki segíthet most", + "report_flow.screen.false_info.subtitle": "A vélemények, a szatíra és a jóhiszemű vita megengedett. A jogellenes rágalmazás a digitális szolgáltatásokról szóló rendelet (DSA) alapján jelenthető be.", + "report_flow.screen.false_info.subtitle_self_hosted": "A vélemények, a szatíra és a jóhiszemű vita megengedett.", + "report_flow.screen.false_info.title": "Mi a félrevezető benne?", + "report_flow.screen.harassment.title": "Hogyan veszik célba valakit?", + "report_flow.screen.hate.title": "Hogyan támadja az embereket az identitásuk miatt?", + "report_flow.screen.impersonation.subtitle": "A világosan megjelölt paródia vagy szerepjáték megengedett.", + "report_flow.screen.impersonation.title": "Kit személyesítenek meg, vagy ez egy átverés?", + "report_flow.screen.minor_risk.title": "Hogyan veszélyezteti ez a személy egy kiskorút?", + "report_flow.screen.minor_risk_guild.title": "Hogyan veszélyezteti ez a közösség a kiskorúakat?", + "report_flow.screen.minor_sexual.subtitle": "A rajzolt, írott vagy mesterséges intelligencia által generált tartalom akkor számít, ha egy karaktert kiskorúként írnak le, vagy egyértelműen prepubertás korú, beleértve a lolicon, shotacon és cub kategóriákat.", + "report_flow.screen.minor_sexual.title": "Mit láttál, ami kiskorút érintett?", + "report_flow.screen.minor_sexual_guild.title": "Mit láttál, ami kiskorúakat érintett?", + "report_flow.screen.private_info.subtitle": "Jelölj ki annyit, amennyi szükséges. Ha egy intim fotón 18 év alatti személy szerepel, lépj vissza, és jelentsd be a „Kiskorú szexualizálása” lehetőség alatt.", + "report_flow.screen.private_info.title": "Milyen magánjellegű adatok érintettek?", + "report_flow.screen.profile_abuse.title": "Mi a káros a profiljukban?", + "report_flow.screen.profile_hate_violence.title": "Mit mutat vagy népszerűsít a profiljuk?", + "report_flow.screen.profile_intro.options_heading": "További információ", + "report_flow.screen.profile_intro.subtitle": "Mondd el, mi a baj ezzel a profillal. Nem fogják megtudni, ki jelentette őket.", + "report_flow.screen.profile_intro.title": "Profil bejelentése", + "report_flow.screen.profile_minor_sexual.title": "Mi van a profiljukban, ami kiskorúakat érint?", + "report_flow.screen.profile_parts.subtitle": "Jelölj ki annyit, amennyi szükséges.", + "report_flow.screen.profile_parts.title": "A profiljuk mely részei okoznak problémát?", + "report_flow.screen.profile_private_info.title": "Milyen magánjellegű adatok szerepelnek a profiljukban?", + "report_flow.screen.profile_sexual.title": "Mondd el, milyen szexuális tartalom van a profiljukban", + "report_flow.screen.profile_threat.title": "Miben kapcsolódik az erőszakhoz a profiljuk?", + "report_flow.screen.root_guild.subtitle": "Válaszd ki a közösségben történtekhez leginkább illő lehetőséget.", + "report_flow.screen.root_guild.title": "Mi a baj ezzel a közösséggel?", + "report_flow.screen.root_message.subtitle": "Válaszd ki a leginkább illő lehetőséget. Elküldés előtt mindent ellenőrizhetsz.", + "report_flow.screen.root_message.title": "Üzenet bejelentése", + "report_flow.screen.root_user.subtitle": "Válaszd ki a profiljukban látottakhoz leginkább illő lehetőséget.", + "report_flow.screen.root_user.title": "Mi a probléma a profiljukkal?", + "report_flow.screen.self_harm.subtitle": "Senkit sem büntetnek azért, mert elmondja, hogy nehézségei vannak. Ha jelzed, hogy aggódsz, azzal segítesz abban, hogy támogatást tudjunk nyújtani.", + "report_flow.screen.self_harm.title": "Mit mondtak vagy osztottak meg?", + "report_flow.screen.self_harm_guild.title": "Mire buzdítanak a tagok?", + "report_flow.screen.self_harm_profile.title": "Mit ír vagy mutat a profiljuk?", + "report_flow.screen.sexual.subtitle": "Ha bármelyik látható vagy érintett személy 18 év alatti, válaszd a „Kiskorú szexualizálása” lehetőséget.", + "report_flow.screen.sexual.title": "Mondd el, milyen szexuális tartalomról van szó", + "report_flow.screen.sexual_guild.subtitle": "Ha bármelyik látható vagy érintett személy 18 év alatti, válaszd a „Kiskorúak szexualizálása” lehetőséget.", + "report_flow.screen.sexual_guild.title": "Mondd el, milyen szexuális tartalom van ebben a közösségben", + "report_flow.screen.something_else_guild.title": "Mi más történik ebben a közösségben?", + "report_flow.screen.something_else_message.title": "Mi más történik?", + "report_flow.screen.something_else_user.title": "Mi más a probléma ezzel a profillal?", + "report_flow.screen.spam_kind_guild.title": "Hogyan él vissza ez a közösség a platformmal?", + "report_flow.screen.spam_profile.title": "Hogyan élnek vissza a fiókkal?", + "report_flow.screen.threat.title": "Milyen módon kapcsolódik erőszakhoz?", + "report_flow.screen.violence_misinfo.title": "Ezek közül melyik illik rá?", + "report_flow.screen.violence_misinfo_guild.title": "Ezek közül mi történik ebben a közösségben?" }); export default CONTENT_I18N_HU_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/id.ts b/fluxer_api/src/api/content_i18n/locales/id.ts index a693f5e08..ca456bc14 100644 --- a/fluxer_api/src/api/content_i18n/locales/id.ts +++ b/fluxer_api/src/api/content_i18n/locales/id.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_ID_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Saluran teks", "guild.default_category_voice": "Saluran suara", "guild.default_channel_text": "umum", - "guild.default_channel_voice": "Umum" + "guild.default_channel_voice": "Umum", + "report_flow.description.name": "Nama pengguna, nama tampilan, atau nama panggilan komunitas", + "report_flow.description.photo": "Apa yang mereka gunakan sebagai avatar dan banner", + "report_flow.description.profile_text": "Bio, status kustom, atau kata ganti", + "report_flow.label.abuse": "Konten yang kasar atau berbahaya", + "report_flow.label.account_trading": "Menjual akun, atau login atau detail kartu yang dicuri", + "report_flow.label.account_trading_communities": "Membeli atau menjual akun atau komunitas", + "report_flow.label.address": "Alamat rumah atau tempat kerja", + "report_flow.label.adult_content_no_gate": "Konten dewasa tanpa batasan usia 18+", + "report_flow.label.adult_content_profile": "Konten dewasa eksplisit di profil mereka", + "report_flow.label.adult_content_unmarked": "Konten dewasa di saluran komunitas yang tidak ditandai 18+", + "report_flow.label.age_no_message": "Tidak, tidak disebutkan", + "report_flow.label.age_no_profile": "Tidak, tidak disebutkan", + "report_flow.label.age_yes_message": "Ya, disebutkan usianya", + "report_flow.label.age_yes_profile": "Ya, profilnya menyebutkan usianya", + "report_flow.label.atrocity_denial": "Menyangkal atau merayakan Holocaust atau genosida lainnya", + "report_flow.label.ban_evasion": "Mengakali larangan dengan akun lain", + "report_flow.label.channel_names": "Nama saluran", + "report_flow.label.community_banner": "Banner komunitas", + "report_flow.label.community_icon": "Ikon komunitas", + "report_flow.label.community_name": "Nama komunitas", + "report_flow.label.conversion_therapy": "Mempromosikan terapi konversi", + "report_flow.label.copyright": "Keluhan hak cipta atau merek dagang", + "report_flow.label.crisis_lines": "Saluran bantuan krisis di negaramu", + "report_flow.label.csam": "Gambar atau video kekerasan seksual terhadap anak, baik yang asli maupun buatan AI", + "report_flow.label.discovery_listing": "Listing di Discovery", + "report_flow.label.dislike": "Ini tidak cocok untuk saya", + "report_flow.label.dsa": "Konten yang ilegal di UE (Undang-Undang Layanan Digital/DSA)", + "report_flow.label.eating_disorder_promotion": "Mendorong perilaku makan yang terganggu", + "report_flow.label.eating_disorder_promotion_profile": "Profil mereka mempromosikan gangguan makan", + "report_flow.label.email": "Alamat email", + "report_flow.label.emoji_stickers": "Emoji atau stiker kustom", + "report_flow.label.face_photo": "Foto wajah mereka", + "report_flow.label.fake_account": "Akun palsu, bot, atau penyalahgunaan otomatis", + "report_flow.label.fake_account_profile": "Akun palsu atau menipu", + "report_flow.label.false_claims": "Menyebarkan kebohongan untuk merusak reputasi orang tertentu", + "report_flow.label.false_info": "Menyebarkan informasi palsu yang berbahaya", + "report_flow.label.financial": "Kartu, bank, atau detail keuangan lainnya", + "report_flow.label.fraud": "Mereka mencoba menipu orang agar kehilangan uang atau akun", + "report_flow.label.fraud_guild": "Menipu orang agar kehilangan uang atau akun", + "report_flow.label.government_id": "Dokumen identitas atau nomor identitas", + "report_flow.label.graphic_violence": "Kekerasan nyata yang ditampilkan untuk mengejutkan, seperti kekerasan berdarah atau kekejaman terhadap hewan", + "report_flow.label.harassment": "Perundungan, pelecehan, atau penguntitan", + "report_flow.label.harassment_direct": "Berulang kali menargetkan seseorang dengan hinaan atau perlakuan kasar", + "report_flow.label.harassment_guild": "Melecehkan, merundung, atau menguntit orang", + "report_flow.label.harassment_profile": "Profil mereka melecehkan atau menargetkan saya atau orang lain", + "report_flow.label.harmful_false_claims": "Klaim palsu yang dapat menyebabkan kerugian serius di dunia nyata", + "report_flow.label.hate": "Kebencian atau diskriminasi terhadap orang karena identitas mereka", + "report_flow.label.hate_dehumanizing": "Membandingkan orang dengan hewan, penyakit, atau kotoran, atau menyebut mereka lebih rendah dari manusia", + "report_flow.label.hate_incitement": "Seruan untuk kekerasan atau pengucilan terhadap suatu kelompok", + "report_flow.label.hate_other": "Serangan lain terhadap orang karena identitas mereka", + "report_flow.label.hate_slurs": "Hinaan diskriminatif, simbol kebencian, atau stereotip yang merendahkan", + "report_flow.label.hate_violence": "Kebencian, kekerasan, atau ekstremisme", + "report_flow.label.identity": "Orientasi seksual, identitas gender, atau status interseks", + "report_flow.label.illegal_activity": "Aktivitas ilegal lainnya", + "report_flow.label.illegal_goods": "Penjualan narkoba, senjata, atau barang ilegal lainnya", + "report_flow.label.impersonation": "Berpura-pura menjadi seseorang, atau menipu orang", + "report_flow.label.impersonation_guild": "Berpura-pura menjadi {product_name} atau organisasi lain", + "report_flow.label.impersonation_organization": "Perusahaan, merek, atau grup", + "report_flow.label.impersonation_person": "Saya atau seseorang yang dekat dengan saya", + "report_flow.label.impersonation_public_figure": "Orang terkenal, seperti kreator atau politisi", + "report_flow.label.impersonation_staff": "Staf atau tim dukungan {product_name}", + "report_flow.label.intimate_image_abuse": "Gambar intim dibagikan tanpa persetujuan, termasuk deepfake, atau ancaman untuk membagikannya", + "report_flow.label.intimate_image_abuse_guild": "Membagikan gambar intim tanpa persetujuan, termasuk deepfake", + "report_flow.label.intimate_image_abuse_profile": "Gambar intim seseorang dibagikan tanpa persetujuan, termasuk deepfake", + "report_flow.label.intimate_photo": "Foto intim atau telanjang", + "report_flow.label.invite_splash": "Splash undangan", + "report_flow.label.ip_address": "Alamat IP", + "report_flow.label.learn_more": "Baca Pedoman Komunitas {product_name}", + "report_flow.label.legal_name": "Nama asli atau nama resmi", + "report_flow.label.lgbtq_targeting": "Sengaja salah menyebut gender, menyebut nama lama (deadnaming), membongkar identitas seseorang (outing), atau menyangkal identitas mereka", + "report_flow.label.malware_guild": "Mendistribusikan malware atau tautan phishing", + "report_flow.label.malware_phishing": "Upaya phishing, malware, atau peretasan", + "report_flow.label.member_activity": "Apa yang diposting atau dilakukan anggota di sana", + "report_flow.label.metric_manipulation": "Memalsukan jumlah anggota atau reaksi", + "report_flow.label.minor_contact": "Meminta anak di bawah umur untuk bertemu, atau meminta foto atau detail pribadi, dengan cara yang terlihat seperti predator", + "report_flow.label.minor_dating_community": "Ini adalah komunitas untuk kencan antara anak di bawah umur", + "report_flow.label.minor_fictional": "Konten seksual anak fiktif yang digambar, ditulis, atau dibuat dengan AI", + "report_flow.label.minor_grooming": "Grooming atau membangun kepercayaan yang tidak pantas dengan anak di bawah umur", + "report_flow.label.minor_grooming_guild": "Anggota melakukan grooming atau membangun kepercayaan yang tidak pantas pada anak di bawah umur", + "report_flow.label.minor_in_adult_space": "Anak di bawah umur berada di saluran atau komunitas 18+", + "report_flow.label.minor_in_adult_space_guild": "Anak di bawah umur diizinkan di saluran 18+", + "report_flow.label.minor_risk": "Membahayakan anak di bawah umur", + "report_flow.label.minor_risk_guild": "Membahayakan anak di bawah umur", + "report_flow.label.minor_sexual": "Seksualisasi anak di bawah umur", + "report_flow.label.minor_sexual_contact": "Menggoda anak di bawah umur atau mengirim pesan seksual kepada mereka", + "report_flow.label.minor_sexual_contact_guild": "Anggota menggoda anak di bawah umur atau mengirim pesan seksual kepada mereka", + "report_flow.label.minor_sexual_content": "Anak di bawah umur sendiri membagikan konten seksual", + "report_flow.label.minor_sexual_content_guild": "Anak di bawah umur memposting atau mengirim konten seksual", + "report_flow.label.minor_sexual_content_profile": "Profil anak di bawah umur dengan konten seksual", + "report_flow.label.minor_sexual_guild": "Seksualisasi anak di bawah umur", + "report_flow.label.minor_sexualization": "Komentar seksual tentang anak di bawah umur", + "report_flow.label.minor_sexualization_guild": "Anggota membuat komentar seksual tentang anak di bawah umur", + "report_flow.label.minor_sexualization_profile": "Komentar seksual tentang anak di bawah umur di profil mereka", + "report_flow.label.name": "Nama", + "report_flow.label.other": "Sesuatu yang tidak tercantum di sini", + "report_flow.label.other_identifying": "Informasi lain yang dapat mengidentifikasi atau menemukan seseorang", + "report_flow.label.permits_violations": "Ini memungkinkan pelanggaran aturan yang serius", + "report_flow.label.phone": "Nomor telepon", + "report_flow.label.photo": "Gambar", + "report_flow.label.platform_abuse": "Scraping, otomatisasi, atau penyalahgunaan platform lainnya", + "report_flow.label.private_conversation": "Pesan pribadi, tangkapan layar, atau rekaman panggilan", + "report_flow.label.private_info": "Membagikan detail pribadi seseorang", + "report_flow.label.private_info_profile": "Profil mereka membagikan detail pribadi seseorang", + "report_flow.label.profile_text": "Teks profil", + "report_flow.label.raid": "Mengorganisir atau bergabung dalam penyerbuan atau pengeroyokan", + "report_flow.label.raid_guild": "Mengorganisir penyerbuan atau pengeroyokan terhadap orang atau komunitas", + "report_flow.label.rude_language": "Kata-kata kasar atau ucapan tidak sopan", + "report_flow.label.self_harm": "Seseorang mungkin melukai diri sendiri, atau mendorong tindakan melukai diri sendiri", + "report_flow.label.self_harm_graphic": "Gambar eksplisit tentang tindakan melukai diri sendiri", + "report_flow.label.self_harm_guild": "Anggota mendorong orang lain untuk melukai diri sendiri", + "report_flow.label.self_harm_pressure": "Menekan atau menantang seseorang untuk melukai diri sendiri", + "report_flow.label.self_harm_pressure_guild": "Menekan atau menantang orang untuk melukai diri sendiri", + "report_flow.label.self_harm_profile": "Profil mereka mengisyaratkan tindakan melukai diri sendiri atau mendorongnya", + "report_flow.label.self_harm_promotion": "Mendorong tindakan melukai diri sendiri atau membagikan metodenya", + "report_flow.label.self_harm_promotion_profile": "Profil mereka mendorong tindakan melukai diri sendiri", + "report_flow.label.sexual": "Konten seksual", + "report_flow.label.sexual_exploitation": "Eksploitasi seksual, pemaksaan, atau perdagangan orang", + "report_flow.label.sexual_unwanted": "Gambar atau pesan seksual yang tidak saya inginkan", + "report_flow.label.something_else": "Lainnya", + "report_flow.label.spam": "Spam atau iklan yang tidak diinginkan", + "report_flow.label.spam_bulk": "Mengirim spam atau iklan secara massal", + "report_flow.label.spam_or_manipulation": "Spam atau manipulasi platform", + "report_flow.label.spam_profile": "Profil mereka digunakan untuk spam atau iklan", + "report_flow.label.suicide_promotion": "Mendorong bunuh diri atau membagikan metodenya", + "report_flow.label.suicide_promotion_profile": "Profil mereka mendorong bunuh diri", + "report_flow.label.synthetic_media": "Media palsu atau buatan AI yang disajikan sebagai asli", + "report_flow.label.terrorism": "Terorisme atau ekstremisme kekerasan", + "report_flow.label.terrorism_guild": "Merekrut atau mempromosikan terorisme atau ekstremisme kekerasan", + "report_flow.label.threat": "Ancaman atau seruan untuk kekerasan", + "report_flow.label.threat_to_share": "Mereka mengancam akan membagikannya", + "report_flow.label.too_young": "Mereka di bawah usia minimum untuk menggunakan {product_name}", + "report_flow.label.unwanted_contact": "Menguntit atau berulang kali menghubungi saya atau orang lain setelah diminta berhenti, diblokir, atau dihapus", + "report_flow.label.violence_glorification": "Mengagungkan kekerasan di dunia nyata", + "report_flow.label.violence_incitement": "Mendorong kekerasan atau menjelaskan cara menyakiti orang", + "report_flow.label.violence_misinfo": "Kekerasan, ekstremisme, atau informasi palsu yang berbahaya", + "report_flow.label.violent_threat": "Mengatakan mereka akan menyakiti seseorang", + "report_flow.label.worried_profile": "Saya khawatir tentang keselamatan mereka", + "report_flow.label.worried_self_harm": "Saya khawatir mereka mungkin melukai diri sendiri", + "report_flow.label.worried_suicide": "Saya khawatir mereka mungkin mencoba bunuh diri", + "report_flow.notice.need_more_info.body": "Untuk meninjau ini, kami memerlukan pesan yang menyebutkan usia mereka atau menegaskan bahwa mereka berada di bawah usia minimum {product_name}. Laporkan pesan itu sebagai gantinya.", + "report_flow.notice.need_more_info.title": "Kami belum bisa bertindak", + "report_flow.notice.need_more_info_profile.body": "Untuk meninjau ini, kami perlu melihat bagian yang menyebutkan usia mereka atau menegaskan bahwa mereka berada di bawah usia minimum {product_name}. Laporkan pesan atau profil itu sebagai gantinya.", + "report_flow.screen.abuse.title": "Ini menyangkut apa?", + "report_flow.screen.abuse_guild.title": "Apa yang dilakukan orang-orang di komunitas ini?", + "report_flow.screen.age_stated_message.title": "Apakah pesan ini menyatakan usia mereka?", + "report_flow.screen.age_stated_profile.title": "Apakah profilnya mencantumkan usia mereka?", + "report_flow.screen.community_parts.subtitle": "Pilih sebanyak yang kamu butuhkan.", + "report_flow.screen.community_parts.title": "Bagian mana dari komunitas yang terlibat?", + "report_flow.screen.crisis_support.subtitle": "Saluran bantuan krisis menawarkan dukungan gratis dan rahasia.", + "report_flow.screen.crisis_support.title": "Seseorang dapat membantu saat ini", + "report_flow.screen.false_info.subtitle": "Opini, satir, dan debat dengan itikad baik diperbolehkan. Pencemaran nama baik yang melanggar hukum dapat dilaporkan berdasarkan Undang-Undang Layanan Digital (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opini, satir, dan debat dengan itikad baik diperbolehkan.", + "report_flow.screen.false_info.title": "Apa yang menyesatkan dari hal ini?", + "report_flow.screen.harassment.title": "Bagaimana seseorang ditargetkan?", + "report_flow.screen.hate.title": "Bagaimana ini menyerang orang karena identitas mereka?", + "report_flow.screen.impersonation.subtitle": "Parodi atau permainan peran yang diberi label dengan jelas diperbolehkan.", + "report_flow.screen.impersonation.title": "Siapa yang ditiru, atau apakah ini penipuan?", + "report_flow.screen.minor_risk.title": "Bagaimana orang ini membahayakan anak di bawah umur?", + "report_flow.screen.minor_risk_guild.title": "Bagaimana komunitas ini membahayakan anak di bawah umur?", + "report_flow.screen.minor_sexual.subtitle": "Konten yang digambar, ditulis, atau dibuat dengan AI termasuk di sini jika karakter digambarkan sebagai anak di bawah umur atau jelas belum puber, termasuk lolicon, shotacon, dan cub.", + "report_flow.screen.minor_sexual.title": "Apa yang kamu lihat yang melibatkan anak di bawah umur?", + "report_flow.screen.minor_sexual_guild.title": "Apa yang kamu lihat yang melibatkan anak di bawah umur?", + "report_flow.screen.private_info.subtitle": "Pilih sebanyak yang kamu butuhkan. Jika foto intim menampilkan seseorang di bawah 18 tahun, kembali dan laporkan di bawah “Seksualisasi anak di bawah umur”.", + "report_flow.screen.private_info.title": "Detail pribadi apa yang terlibat?", + "report_flow.screen.profile_abuse.title": "Apa yang berbahaya dari profil mereka?", + "report_flow.screen.profile_hate_violence.title": "Apa yang ditampilkan atau dipromosikan oleh profil mereka?", + "report_flow.screen.profile_intro.options_heading": "Pelajari selengkapnya", + "report_flow.screen.profile_intro.subtitle": "Beri tahu kami apa yang salah dengan profil ini. Mereka tidak akan diberi tahu siapa yang melaporkannya.", + "report_flow.screen.profile_intro.title": "Laporkan profil", + "report_flow.screen.profile_minor_sexual.title": "Apa yang ada di profil mereka yang melibatkan anak di bawah umur?", + "report_flow.screen.profile_parts.subtitle": "Pilih sebanyak yang kamu butuhkan.", + "report_flow.screen.profile_parts.title": "Bagian mana dari profil mereka yang bermasalah?", + "report_flow.screen.profile_private_info.title": "Detail pribadi apa yang ada di profil mereka?", + "report_flow.screen.profile_sexual.title": "Beri tahu kami tentang konten seksual di profilnya", + "report_flow.screen.profile_threat.title": "Bagaimana profilnya melibatkan kekerasan?", + "report_flow.screen.root_guild.subtitle": "Pilih yang paling sesuai dengan apa yang terjadi di komunitas ini.", + "report_flow.screen.root_guild.title": "Ada apa dengan komunitas ini?", + "report_flow.screen.root_message.subtitle": "Pilih yang paling sesuai. Kamu dapat memeriksa semuanya sebelum dikirim.", + "report_flow.screen.root_message.title": "Laporkan pesan", + "report_flow.screen.root_user.subtitle": "Pilih yang paling sesuai dengan isi profilnya.", + "report_flow.screen.root_user.title": "Ada apa dengan profilnya?", + "report_flow.screen.self_harm.subtitle": "Tidak ada yang dihukum karena mengatakan bahwa mereka sedang kesulitan. Memberi tahu kami bahwa kamu khawatir membantu kami menawarkan dukungan.", + "report_flow.screen.self_harm.title": "Apa yang mereka katakan atau bagikan?", + "report_flow.screen.self_harm_guild.title": "Apa yang didorong oleh anggota?", + "report_flow.screen.self_harm_profile.title": "Apa yang dikatakan atau ditampilkan profilnya?", + "report_flow.screen.sexual.subtitle": "Jika ada orang yang ditampilkan atau terlibat berusia di bawah 18 tahun, pilih “Seksualisasi anak di bawah umur”.", + "report_flow.screen.sexual.title": "Beri tahu kami tentang konten seksual", + "report_flow.screen.sexual_guild.subtitle": "Jika ada orang yang ditampilkan atau terlibat berusia di bawah 18 tahun, pilih “Seksualisasi anak di bawah umur”.", + "report_flow.screen.sexual_guild.title": "Beri tahu kami tentang konten seksual di komunitas ini", + "report_flow.screen.something_else_guild.title": "Apa lagi yang terjadi di komunitas ini?", + "report_flow.screen.something_else_message.title": "Apa lagi yang terjadi?", + "report_flow.screen.something_else_user.title": "Apa lagi yang salah dengan profil ini?", + "report_flow.screen.spam_kind_guild.title": "Bagaimana komunitas ini menyalahgunakan platform?", + "report_flow.screen.spam_profile.title": "Bagaimana akun disalahgunakan?", + "report_flow.screen.threat.title": "Bagaimana ini melibatkan kekerasan?", + "report_flow.screen.violence_misinfo.title": "Mana yang paling sesuai?", + "report_flow.screen.violence_misinfo_guild.title": "Mana yang terjadi di komunitas ini?" }); export default CONTENT_I18N_ID_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/it.ts b/fluxer_api/src/api/content_i18n/locales/it.ts index 94ad93cde..a9c696e4c 100644 --- a/fluxer_api/src/api/content_i18n/locales/it.ts +++ b/fluxer_api/src/api/content_i18n/locales/it.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_IT_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Canali testuali", "guild.default_category_voice": "Canali vocali", "guild.default_channel_text": "generale", - "guild.default_channel_voice": "Generale" + "guild.default_channel_voice": "Generale", + "report_flow.description.name": "Nome utente, nome visualizzato o soprannome nella community", + "report_flow.description.photo": "Quello che usano come avatar e banner", + "report_flow.description.profile_text": "Biografia, stato personalizzato o pronomi", + "report_flow.label.abuse": "Contenuti offensivi o dannosi", + "report_flow.label.account_trading": "Vendita di account, credenziali di accesso rubate o dati di carte rubati", + "report_flow.label.account_trading_communities": "Acquisto o vendita di account o community", + "report_flow.label.address": "Indirizzo di casa o luogo di lavoro", + "report_flow.label.adult_content_no_gate": "Contenuti per adulti senza restrizioni di età 18+", + "report_flow.label.adult_content_profile": "Contenuti espliciti per adulti nel suo profilo", + "report_flow.label.adult_content_unmarked": "Contenuti per adulti in un canale della community non contrassegnato come 18+", + "report_flow.label.age_no_message": "No, non menziona la sua età", + "report_flow.label.age_no_profile": "No, il suo profilo non menziona la sua età", + "report_flow.label.age_yes_message": "Sì, menziona la sua età", + "report_flow.label.age_yes_profile": "Sì, il suo profilo menziona la sua età", + "report_flow.label.atrocity_denial": "Negazione o celebrazione dell'Olocausto o di altri genocidi", + "report_flow.label.ban_evasion": "Eludere un ban con un altro account", + "report_flow.label.channel_names": "Nomi dei canali", + "report_flow.label.community_banner": "Banner della community", + "report_flow.label.community_icon": "Icona della community", + "report_flow.label.community_name": "Nome della community", + "report_flow.label.conversion_therapy": "Promozione della terapia di conversione", + "report_flow.label.copyright": "Reclamo relativo a copyright o marchio", + "report_flow.label.crisis_lines": "Linee di ascolto per le crisi nel tuo paese", + "report_flow.label.csam": "Immagini o video reali o generati da IA di abusi sessuali su minori", + "report_flow.label.discovery_listing": "Elenco in Scopri", + "report_flow.label.dislike": "Non fa per me", + "report_flow.label.dsa": "Contenuti illegali nell'UE (Regolamento sui servizi digitali, DSA)", + "report_flow.label.eating_disorder_promotion": "Incoraggiare disturbi alimentari", + "report_flow.label.eating_disorder_promotion_profile": "Il suo profilo promuove disturbi alimentari", + "report_flow.label.email": "Indirizzo e-mail", + "report_flow.label.emoji_stickers": "Emoji o sticker personalizzati", + "report_flow.label.face_photo": "Foto del suo volto", + "report_flow.label.fake_account": "Account falso, bot o abuso automatizzato", + "report_flow.label.fake_account_profile": "Un account falso o ingannevole", + "report_flow.label.false_claims": "Diffondere bugie per danneggiare la reputazione di una persona specifica", + "report_flow.label.false_info": "Diffusione di informazioni false dannose", + "report_flow.label.financial": "Dati di carte, conti bancari o altri dati finanziari", + "report_flow.label.fraud": "Stanno cercando di truffare le persone per ottenere denaro o account", + "report_flow.label.fraud_guild": "Truffare le persone per ottenere denaro o account", + "report_flow.label.government_id": "Documento d'identità o numero del documento", + "report_flow.label.graphic_violence": "Violenza reale mostrata per scioccare, come gore o crudeltà verso gli animali", + "report_flow.label.harassment": "Bullismo, molestie o stalking", + "report_flow.label.harassment_direct": "Prendere di mira ripetutamente qualcuno con insulti o abusi", + "report_flow.label.harassment_guild": "Molestie, bullismo o stalking nei confronti di persone", + "report_flow.label.harassment_profile": "Il suo profilo molesta o prende di mira me o qualcun altro", + "report_flow.label.harmful_false_claims": "Affermazioni false che potrebbero causare gravi danni nel mondo reale", + "report_flow.label.hate": "Odio o discriminazione contro le persone per la loro identità", + "report_flow.label.hate_dehumanizing": "Paragonare le persone ad animali, malattie o sporcizia, o definirle meno che umane", + "report_flow.label.hate_incitement": "Appelli alla violenza o all'esclusione contro un gruppo", + "report_flow.label.hate_other": "Altri attacchi contro le persone per la loro identità", + "report_flow.label.hate_slurs": "Epiteti offensivi, simboli d'odio o stereotipi denigratori", + "report_flow.label.hate_violence": "Odio, violenza o estremismo", + "report_flow.label.identity": "Orientamento sessuale, identità di genere o stato intersessuale", + "report_flow.label.illegal_activity": "Altre attività illecite", + "report_flow.label.illegal_goods": "Vendita di droghe, armi o altri beni illegali", + "report_flow.label.impersonation": "Fingersi qualcun altro o truffare persone", + "report_flow.label.impersonation_guild": "Fingersi {product_name} o un'altra organizzazione", + "report_flow.label.impersonation_organization": "Un'azienda, un marchio o un gruppo", + "report_flow.label.impersonation_person": "Me o qualcuno a me vicino", + "report_flow.label.impersonation_public_figure": "Una persona famosa, come un creator o un politico", + "report_flow.label.impersonation_staff": "Staff o supporto di {product_name}", + "report_flow.label.intimate_image_abuse": "Immagini intime condivise senza consenso, inclusi deepfake, o minacce di condividerle", + "report_flow.label.intimate_image_abuse_guild": "Condivisione di immagini intime senza consenso, inclusi deepfake", + "report_flow.label.intimate_image_abuse_profile": "Immagini intime di qualcuno condivise senza consenso, inclusi deepfake", + "report_flow.label.intimate_photo": "Foto intima o di nudo", + "report_flow.label.invite_splash": "Sfondo dell’invito", + "report_flow.label.ip_address": "Indirizzo IP", + "report_flow.label.learn_more": "Leggi le Linee guida della community di {product_name}", + "report_flow.label.legal_name": "Nome reale o legale", + "report_flow.label.lgbtq_targeting": "Misgendering, deadnaming o outing deliberato di qualcuno, o negazione della sua identità", + "report_flow.label.malware_guild": "Distribuzione di malware o link di phishing", + "report_flow.label.malware_phishing": "Tentativi di phishing, malware o hacking", + "report_flow.label.member_activity": "Cosa pubblicano o fanno i membri nella community", + "report_flow.label.metric_manipulation": "Falsificazione del numero di membri o reazioni", + "report_flow.label.minor_contact": "Chiedere a un minore di incontrarsi di persona, o di inviare foto o dati personali, in un modo che sembra predatorio", + "report_flow.label.minor_dating_community": "È una community di dating tra minori", + "report_flow.label.minor_fictional": "Contenuti sessuali disegnati, scritti o generati da IA di un bambino immaginario", + "report_flow.label.minor_grooming": "Adescamento o costruzione di fiducia inappropriata con un minore", + "report_flow.label.minor_grooming_guild": "I membri adescano o costruiscono fiducia inappropriata con i minori", + "report_flow.label.minor_in_adult_space": "Un minore si trova in un canale o in una community 18+", + "report_flow.label.minor_in_adult_space_guild": "Minori ammessi in canali 18+", + "report_flow.label.minor_risk": "Mettere a rischio un minore", + "report_flow.label.minor_risk_guild": "Mettere a rischio i minori", + "report_flow.label.minor_sexual": "Sessualizzazione di un minore", + "report_flow.label.minor_sexual_contact": "Flirtare con un minore o inviargli messaggi sessuali", + "report_flow.label.minor_sexual_contact_guild": "I membri flirtano con i minori o inviano loro messaggi sessuali", + "report_flow.label.minor_sexual_content": "Un minore condivide in prima persona contenuti sessuali", + "report_flow.label.minor_sexual_content_guild": "I minori pubblicano o inviano contenuti sessuali", + "report_flow.label.minor_sexual_content_profile": "Profilo di un minore con contenuti sessuali", + "report_flow.label.minor_sexual_guild": "Sessualizzazione di minori", + "report_flow.label.minor_sexualization": "Commenti sessuali su minori", + "report_flow.label.minor_sexualization_guild": "I membri fanno commenti sessuali su minori", + "report_flow.label.minor_sexualization_profile": "Commenti sessuali su minori nel suo profilo", + "report_flow.label.name": "Nomi", + "report_flow.label.other": "Qualcosa che non è nell'elenco", + "report_flow.label.other_identifying": "Altre informazioni che potrebbero identificare o localizzare qualcuno", + "report_flow.label.permits_violations": "Consente gravi violazioni delle regole", + "report_flow.label.phone": "Numero di telefono", + "report_flow.label.photo": "Immagini", + "report_flow.label.platform_abuse": "Scraping, automazione o altri abusi della piattaforma", + "report_flow.label.private_conversation": "Messaggi privati, screenshot o registrazioni di chiamate", + "report_flow.label.private_info": "Condivisione di dettagli privati di qualcuno", + "report_flow.label.private_info_profile": "Il suo profilo condivide dettagli privati di qualcuno", + "report_flow.label.profile_text": "Testo del profilo", + "report_flow.label.raid": "Organizzare o partecipare a un raid o a un attacco di gruppo", + "report_flow.label.raid_guild": "Organizzare raid o attacchi di gruppo contro persone o community", + "report_flow.label.rude_language": "Parolacce o commenti scortesi", + "report_flow.label.self_harm": "Qualcuno potrebbe farsi del male o incoraggia l'autolesionismo", + "report_flow.label.self_harm_graphic": "Immagini esplicite di autolesionismo", + "report_flow.label.self_harm_guild": "I membri spingono altre persone a farsi del male", + "report_flow.label.self_harm_pressure": "Fare pressione o sfidare qualcuno a farsi del male", + "report_flow.label.self_harm_pressure_guild": "Fare pressione o sfidare le persone a farsi del male", + "report_flow.label.self_harm_profile": "Il suo profilo lascia intendere autolesionismo o lo incoraggia", + "report_flow.label.self_harm_promotion": "Incoraggiare l'autolesionismo o condividerne i metodi", + "report_flow.label.self_harm_promotion_profile": "Il suo profilo incoraggia l'autolesionismo", + "report_flow.label.sexual": "Contenuti sessuali", + "report_flow.label.sexual_exploitation": "Sfruttamento sessuale, coercizione o tratta di persone", + "report_flow.label.sexual_unwanted": "Immagini o messaggi sessuali indesiderati", + "report_flow.label.something_else": "Altro", + "report_flow.label.spam": "Spam o pubblicità indesiderata", + "report_flow.label.spam_bulk": "Invio di spam o pubblicità in massa", + "report_flow.label.spam_or_manipulation": "Spam o manipolazione della piattaforma", + "report_flow.label.spam_profile": "Il suo profilo è usato per spam o pubblicità", + "report_flow.label.suicide_promotion": "Incoraggiare il suicidio o condividerne i metodi", + "report_flow.label.suicide_promotion_profile": "Il suo profilo incoraggia il suicidio", + "report_flow.label.synthetic_media": "Contenuti multimediali falsi o generati da IA presentati come reali", + "report_flow.label.terrorism": "Terrorismo o estremismo violento", + "report_flow.label.terrorism_guild": "Reclutamento o promozione del terrorismo o dell'estremismo violento", + "report_flow.label.threat": "Minacce o incitamenti alla violenza", + "report_flow.label.threat_to_share": "Minaccia di condividerlo", + "report_flow.label.too_young": "È al di sotto dell'età minima per usare {product_name}", + "report_flow.label.unwanted_contact": "Stalking o contatti ripetuti con me o con qualcun altro dopo che è stato chiesto di smettere o dopo essere stati bloccati o rimossi", + "report_flow.label.violence_glorification": "Glorificare la violenza nel mondo reale", + "report_flow.label.violence_incitement": "Incitamento alla violenza o spiegazione su come ferire le persone", + "report_flow.label.violence_misinfo": "Violenza, estremismo o informazioni false dannose", + "report_flow.label.violent_threat": "Dire che farà del male a qualcuno", + "report_flow.label.worried_profile": "Mi preoccupa la sua sicurezza", + "report_flow.label.worried_self_harm": "Temo che possa farsi del male", + "report_flow.label.worried_suicide": "Temo che possa tentare il suicidio", + "report_flow.notice.need_more_info.body": "Per esaminare la segnalazione, ci serve un messaggio in cui la persona dice quanti anni ha o chiarisce di essere sotto l'età minima di {product_name}. Segnala invece quel messaggio.", + "report_flow.notice.need_more_info.title": "Per ora non possiamo intervenire", + "report_flow.notice.need_more_info_profile.body": "Per esaminare la segnalazione, ci serve vedere dove la persona dice quanti anni ha o chiarisce di essere sotto l'età minima di {product_name}. Segnala invece quel messaggio o profilo.", + "report_flow.screen.abuse.title": "Di cosa si tratta?", + "report_flow.screen.abuse_guild.title": "Cosa stanno facendo le persone in questa community?", + "report_flow.screen.age_stated_message.title": "Questo messaggio indica la sua età?", + "report_flow.screen.age_stated_profile.title": "Il suo profilo indica quanti anni ha?", + "report_flow.screen.community_parts.subtitle": "Scegline quante ti servono.", + "report_flow.screen.community_parts.title": "Quali parti della community sono coinvolte?", + "report_flow.screen.crisis_support.subtitle": "Le linee di ascolto per le crisi offrono supporto gratuito e riservato.", + "report_flow.screen.crisis_support.title": "Qualcuno può aiutarti subito", + "report_flow.screen.false_info.subtitle": "Opinioni, satira e dibattiti in buona fede sono consentiti. La diffamazione illecita può essere segnalata ai sensi del Regolamento sui servizi digitali (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinioni, satira e dibattiti in buona fede sono consentiti.", + "report_flow.screen.false_info.title": "Cosa c'è di fuorviante?", + "report_flow.screen.harassment.title": "Come viene presa di mira una persona?", + "report_flow.screen.hate.title": "In che modo attacca le persone per la loro identità?", + "report_flow.screen.impersonation.subtitle": "La parodia o il gioco di ruolo chiaramente etichettati sono consentiti.", + "report_flow.screen.impersonation.title": "Chi viene impersonato o si tratta di una truffa?", + "report_flow.screen.minor_risk.title": "In che modo questa persona sta mettendo a rischio un minore?", + "report_flow.screen.minor_risk_guild.title": "In che modo questa community mette a rischio i minori?", + "report_flow.screen.minor_sexual.subtitle": "I contenuti disegnati, scritti o generati da IA contano quando un personaggio è descritto come minorenne o è chiaramente in età prepuberale, inclusi lolicon, shotacon e cub.", + "report_flow.screen.minor_sexual.title": "Cosa hai visto che coinvolge un minore?", + "report_flow.screen.minor_sexual_guild.title": "Cosa hai visto che coinvolge minori?", + "report_flow.screen.private_info.subtitle": "Scegline quante ti servono. Se una foto intima mostra qualcuno con meno di 18 anni, torna indietro e segnalala come «Sessualizzazione di un minore».", + "report_flow.screen.private_info.title": "Quali dettagli privati sono coinvolti?", + "report_flow.screen.profile_abuse.title": "Cosa c'è di dannoso nel suo profilo?", + "report_flow.screen.profile_hate_violence.title": "Cosa mostra o promuove il suo profilo?", + "report_flow.screen.profile_intro.options_heading": "Scopri di più", + "report_flow.screen.profile_intro.subtitle": "Dicci cosa non va in questo profilo. La persona non saprà chi l'ha segnalata.", + "report_flow.screen.profile_intro.title": "Segnala profilo", + "report_flow.screen.profile_minor_sexual.title": "Cosa c'è nel suo profilo che coinvolge un minore?", + "report_flow.screen.profile_parts.subtitle": "Scegline quante ti servono.", + "report_flow.screen.profile_parts.title": "Quali parti del suo profilo sono problematiche?", + "report_flow.screen.profile_private_info.title": "Quali dettagli privati sono presenti nel suo profilo?", + "report_flow.screen.profile_sexual.title": "Parlaci del contenuto sessuale nel suo profilo", + "report_flow.screen.profile_threat.title": "In che modo il suo profilo riguarda la violenza?", + "report_flow.screen.root_guild.subtitle": "Scegli l'opzione più vicina a ciò che sta succedendo in questa community.", + "report_flow.screen.root_guild.title": "Cosa non va in questa community?", + "report_flow.screen.root_message.subtitle": "Scegli l'opzione più vicina. Potrai controllare tutto prima dell'invio.", + "report_flow.screen.root_message.title": "Segnala messaggio", + "report_flow.screen.root_user.subtitle": "Scegli l'opzione più vicina a ciò che è presente nel suo profilo.", + "report_flow.screen.root_user.title": "Cosa non va nel suo profilo?", + "report_flow.screen.self_harm.subtitle": "Nessuno viene punito per aver detto di essere in difficoltà. Dirci che sei in pensiero ci aiuta a offrire supporto.", + "report_flow.screen.self_harm.title": "Cosa ha detto o condiviso?", + "report_flow.screen.self_harm_guild.title": "Cosa stanno incoraggiando i membri?", + "report_flow.screen.self_harm_profile.title": "Cosa dice o mostra il suo profilo?", + "report_flow.screen.sexual.subtitle": "Se una delle persone mostrate o coinvolte ha meno di 18 anni, scegli «Sessualizzazione di un minore».", + "report_flow.screen.sexual.title": "Parlaci del contenuto sessuale", + "report_flow.screen.sexual_guild.subtitle": "Se una delle persone mostrate o coinvolte ha meno di 18 anni, scegli «Sessualizzazione di minori».", + "report_flow.screen.sexual_guild.title": "Parlaci del contenuto sessuale in questa community", + "report_flow.screen.something_else_guild.title": "Cos'altro sta succedendo in questa community?", + "report_flow.screen.something_else_message.title": "Cos'altro sta succedendo?", + "report_flow.screen.something_else_user.title": "Cos'altro non va in questo profilo?", + "report_flow.screen.spam_kind_guild.title": "In che modo questa community abusa della piattaforma?", + "report_flow.screen.spam_profile.title": "In che modo l'account viene utilizzato in modo improprio?", + "report_flow.screen.threat.title": "In che modo riguarda la violenza?", + "report_flow.screen.violence_misinfo.title": "Quale di queste corrisponde?", + "report_flow.screen.violence_misinfo_guild.title": "Quale di queste accade in questa community?" }); export default CONTENT_I18N_IT_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/ja.ts b/fluxer_api/src/api/content_i18n/locales/ja.ts index 89651f7be..435707902 100644 --- a/fluxer_api/src/api/content_i18n/locales/ja.ts +++ b/fluxer_api/src/api/content_i18n/locales/ja.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_JA_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "テキストチャンネル", "guild.default_category_voice": "ボイスチャンネル", "guild.default_channel_text": "一般", - "guild.default_channel_voice": "一般" + "guild.default_channel_voice": "一般", + "report_flow.description.name": "ユーザー名、表示名、またはコミュニティニックネーム", + "report_flow.description.photo": "アバターとバナーに使っているもの", + "report_flow.description.profile_text": "自己紹介、カスタムステータス、または代名詞", + "report_flow.label.abuse": "攻撃的または有害なコンテンツ", + "report_flow.label.account_trading": "アカウント、または盗まれたログイン情報やカード情報の販売", + "report_flow.label.account_trading_communities": "アカウントまたはコミュニティの売買", + "report_flow.label.address": "自宅の住所または職場", + "report_flow.label.adult_content_no_gate": "18歳以上の年齢制限がないアダルトコンテンツ", + "report_flow.label.adult_content_profile": "プロフィール内の露骨なアダルトコンテンツ", + "report_flow.label.adult_content_unmarked": "年齢制限付き(18+)に設定されていないコミュニティチャンネルにあるアダルトコンテンツ", + "report_flow.label.age_no_message": "いいえ、年齢には言及していません", + "report_flow.label.age_no_profile": "いいえ、プロフィールに年齢は記載されていません", + "report_flow.label.age_yes_message": "はい、年齢について言及しています", + "report_flow.label.age_yes_profile": "はい、プロフィールに年齢が記載されています", + "report_flow.label.atrocity_denial": "ホロコーストまたはその他のジェノサイドの否定または賛美", + "report_flow.label.ban_evasion": "別のアカウントでBANを回避する行為", + "report_flow.label.channel_names": "チャンネル名", + "report_flow.label.community_banner": "コミュニティバナー", + "report_flow.label.community_icon": "コミュニティアイコン", + "report_flow.label.community_name": "コミュニティ名", + "report_flow.label.conversion_therapy": "転向療法を助長する行為", + "report_flow.label.copyright": "著作権または商標に関する申し立て", + "report_flow.label.crisis_lines": "お住まいの国の危機相談窓口", + "report_flow.label.csam": "児童性的虐待の画像・動画(実在のもの、またはAI生成のもの)", + "report_flow.label.discovery_listing": "「見つける」の掲載内容", + "report_flow.label.dislike": "自分には合わない", + "report_flow.label.dsa": "EUで違法なコンテンツ(デジタルサービス法、DSA)", + "report_flow.label.eating_disorder_promotion": "摂食障害的な食行動を促している", + "report_flow.label.eating_disorder_promotion_profile": "プロフィールが摂食障害を助長している", + "report_flow.label.email": "メールアドレス", + "report_flow.label.emoji_stickers": "カスタム絵文字またはスタンプ", + "report_flow.label.face_photo": "顔写真", + "report_flow.label.fake_account": "偽アカウント、ボット、または自動化による不正利用", + "report_flow.label.fake_account_profile": "偽のアカウントまたは詐欺的なアカウント", + "report_flow.label.false_claims": "特定の個人の評判を傷つけるための嘘を広める行為", + "report_flow.label.false_info": "有害な虚偽情報を広める行為", + "report_flow.label.financial": "カード、銀行、その他の金融情報", + "report_flow.label.fraud": "人々からお金やアカウントを騙し取ろうとしている", + "report_flow.label.fraud_guild": "詐欺行為(金銭やアカウントを騙し取る行為)", + "report_flow.label.government_id": "身分証明書または身分証明書番号", + "report_flow.label.graphic_violence": "ショックを与える目的で見せられる、流血や動物虐待などの実際の暴力", + "report_flow.label.harassment": "いじめ、ハラスメント、ストーキング", + "report_flow.label.harassment_direct": "侮辱や暴言で誰かを繰り返し標的にする行為", + "report_flow.label.harassment_guild": "人々に対する嫌がらせ、いじめ、またはストーカー行為", + "report_flow.label.harassment_profile": "プロフィールが私または他の人に嫌がらせをしている、または標的にしている", + "report_flow.label.harmful_false_claims": "深刻な現実世界の被害を引き起こす可能性のある虚偽の主張", + "report_flow.label.hate": "属性を理由に人々に向けられる憎悪または差別", + "report_flow.label.hate_dehumanizing": "人々を動物、病気、汚物と比較したり、人間以下と呼んだりする行為", + "report_flow.label.hate_incitement": "特定のグループに対する暴力や排除を扇動する行為", + "report_flow.label.hate_other": "属性を理由に人々に向けられるその他の攻撃", + "report_flow.label.hate_slurs": "差別的な蔑称、憎悪を煽るシンボル、または品位を傷つけるステレオタイプ", + "report_flow.label.hate_violence": "ヘイト、暴力、過激主義", + "report_flow.label.identity": "性的指向、性自認、またはインターセックスの状況", + "report_flow.label.illegal_activity": "その他の違法行為", + "report_flow.label.illegal_goods": "薬物、武器、その他の違法品の販売", + "report_flow.label.impersonation": "なりすまし、または詐欺行為", + "report_flow.label.impersonation_guild": "{product_name}または他の組織になりすます行為", + "report_flow.label.impersonation_organization": "企業、ブランド、またはグループ", + "report_flow.label.impersonation_person": "自分または身近な人", + "report_flow.label.impersonation_public_figure": "著名人(クリエイターや政治家など)", + "report_flow.label.impersonation_staff": "{product_name}のスタッフまたはサポート", + "report_flow.label.intimate_image_abuse": "ディープフェイクを含む、同意なく共有されたプライベートな性的画像、またはそれらを共有するという脅迫", + "report_flow.label.intimate_image_abuse_guild": "ディープフェイクを含む、同意なくプライベートな性的画像を共有している", + "report_flow.label.intimate_image_abuse_profile": "ディープフェイクを含む、同意なく共有された誰かのプライベートな性的画像", + "report_flow.label.intimate_photo": "プライベートな性的写真またはヌード写真", + "report_flow.label.invite_splash": "招待スプラッシュ", + "report_flow.label.ip_address": "IPアドレス", + "report_flow.label.learn_more": "{product_name}のコミュニティガイドラインを読む", + "report_flow.label.legal_name": "本名または正式な氏名", + "report_flow.label.lgbtq_targeting": "意図的に誤った性別で呼ぶ、デッドネームで呼ぶ、アウティングする、またはその人のアイデンティティを否定する行為", + "report_flow.label.malware_guild": "マルウェアまたはフィッシングリンクを配布している", + "report_flow.label.malware_phishing": "フィッシング、マルウェア、ハッキングの試み", + "report_flow.label.member_activity": "メンバーがそこで投稿したり行ったりしていること", + "report_flow.label.metric_manipulation": "メンバー数またはリアクション数を偽装している", + "report_flow.label.minor_contact": "未成年者を食い物にしようとしているように見える形で、会うことや写真、個人情報を求めている", + "report_flow.label.minor_dating_community": "未成年者同士の交際を目的としたコミュニティである", + "report_flow.label.minor_fictional": "架空の子供を描いた、書いた、またはAIで生成した性的コンテンツ", + "report_flow.label.minor_grooming": "未成年者をグルーミングしたり、不適切な信頼関係を築いたりしている", + "report_flow.label.minor_grooming_guild": "メンバーが未成年者をグルーミングしたり、不適切な信頼関係を築いたりしている", + "report_flow.label.minor_in_adult_space": "未成年者が18歳以上のチャンネルまたはコミュニティにいる", + "report_flow.label.minor_in_adult_space_guild": "未成年者が18+のチャンネルへの参加を許可されている", + "report_flow.label.minor_risk": "未成年者を危険にさらしている", + "report_flow.label.minor_risk_guild": "未成年者を危険にさらしている", + "report_flow.label.minor_sexual": "未成年者の性的対象化", + "report_flow.label.minor_sexual_contact": "未成年者に言い寄ったり、性的なメッセージを送ったりしている", + "report_flow.label.minor_sexual_contact_guild": "メンバーが未成年者に言い寄ったり、性的なメッセージを送ったりしている", + "report_flow.label.minor_sexual_content": "未成年者自身が性的なコンテンツを共有している", + "report_flow.label.minor_sexual_content_guild": "未成年者が性的なコンテンツを投稿または送信している", + "report_flow.label.minor_sexual_content_profile": "性的なコンテンツを含む未成年者のプロフィール", + "report_flow.label.minor_sexual_guild": "未成年者の性的対象化", + "report_flow.label.minor_sexualization": "未成年者についての性的なコメント", + "report_flow.label.minor_sexualization_guild": "メンバーが未成年者についての性的なコメントをしている", + "report_flow.label.minor_sexualization_profile": "プロフィールに未成年者についての性的なコメントがある", + "report_flow.label.name": "名前", + "report_flow.label.other": "ここに記載されていないもの", + "report_flow.label.other_identifying": "個人を特定したり居場所を突き止めたりできるその他の情報", + "report_flow.label.permits_violations": "重大なルール違反を許可している", + "report_flow.label.phone": "電話番号", + "report_flow.label.photo": "画像", + "report_flow.label.platform_abuse": "スクレイピング、自動化、またはその他のプラットフォームの悪用", + "report_flow.label.private_conversation": "プライベートなメッセージ、スクリーンショット、通話の録音", + "report_flow.label.private_info": "誰かの個人情報の共有", + "report_flow.label.private_info_profile": "プロフィールで誰かの個人情報を共有している", + "report_flow.label.profile_text": "プロフィールテキスト", + "report_flow.label.raid": "レイドや集団攻撃の組織または参加", + "report_flow.label.raid_guild": "個人またはコミュニティに対するレイドや集団攻撃を組織する行為", + "report_flow.label.rude_language": "暴言や失礼な発言", + "report_flow.label.self_harm": "誰かが自分を傷つけるおそれがある、または自傷行為を促している", + "report_flow.label.self_harm_graphic": "自傷行為の生々しい画像", + "report_flow.label.self_harm_guild": "メンバーが他の人に自傷行為を促している", + "report_flow.label.self_harm_pressure": "誰かに自傷行為をするよう圧力をかけたり、挑発したりしている", + "report_flow.label.self_harm_pressure_guild": "人々に自傷行為をするよう圧力をかけたり、挑発したりしている", + "report_flow.label.self_harm_profile": "プロフィールが自傷行為を示唆または推奨している", + "report_flow.label.self_harm_promotion": "自傷行為を推奨したり、その方法を共有したりしている", + "report_flow.label.self_harm_promotion_profile": "プロフィールで自傷行為を助長している", + "report_flow.label.sexual": "性的なコンテンツ", + "report_flow.label.sexual_exploitation": "性的搾取、強要、人身取引", + "report_flow.label.sexual_unwanted": "望まない性的な画像やメッセージ", + "report_flow.label.something_else": "その他", + "report_flow.label.spam": "スパムまたは不要な広告", + "report_flow.label.spam_bulk": "スパムまたは広告の一括送信", + "report_flow.label.spam_or_manipulation": "スパムまたはプラットフォーム操作", + "report_flow.label.spam_profile": "プロフィールがスパムまたは広告に使用されている", + "report_flow.label.suicide_promotion": "自殺を推奨したり、その方法を共有したりしている", + "report_flow.label.suicide_promotion_profile": "プロフィールが自殺を助長している", + "report_flow.label.synthetic_media": "偽物またはAIで作成されたメディアを本物として見せかけている", + "report_flow.label.terrorism": "テロリズムまたは暴力的過激主義", + "report_flow.label.terrorism_guild": "テロリズムまたは暴力的過激主義の勧誘または助長", + "report_flow.label.threat": "脅迫または暴力の呼びかけ", + "report_flow.label.threat_to_share": "共有すると脅迫している", + "report_flow.label.too_young": "{product_name}を利用できる最低年齢に達していません", + "report_flow.label.unwanted_contact": "やめるように言われたり、ブロックまたは削除された後も、私または他の人につきまとったり、繰り返し連絡を取ったりする", + "report_flow.label.violence_glorification": "現実世界の暴力を美化している", + "report_flow.label.violence_incitement": "暴力を助長したり、人を傷つける方法を説明したりする", + "report_flow.label.violence_misinfo": "暴力、過激主義、または有害な虚偽情報", + "report_flow.label.violent_threat": "誰かを傷つけると言っている", + "report_flow.label.worried_profile": "その人の安全が心配", + "report_flow.label.worried_self_harm": "その人が自分を傷つけてしまうのではないかと心配している", + "report_flow.label.worried_suicide": "その人が自殺を図るのではないかと心配している", + "report_flow.notice.need_more_info.body": "これを審査するには、年齢を述べたメッセージ、または{product_name}の最低年齢未満であることを明確にしたメッセージが必要です。代わりにそのメッセージを報告してください。", + "report_flow.notice.need_more_info.title": "まだ対応できません", + "report_flow.notice.need_more_info_profile.body": "これを審査するには、本人が年齢を述べている、または{product_name}の最低年齢未満であることを明確にしている箇所を確認する必要があります。代わりにそのメッセージまたはプロフィールを報告してください。", + "report_flow.screen.abuse.title": "どのような内容ですか?", + "report_flow.screen.abuse_guild.title": "このコミュニティのメンバーは何をしていますか?", + "report_flow.screen.age_stated_message.title": "このメッセージに年齢が記載されていますか?", + "report_flow.screen.age_stated_profile.title": "プロフィールに年齢は記載されていますか?", + "report_flow.screen.community_parts.subtitle": "いくつでも選択してください。", + "report_flow.screen.community_parts.title": "コミュニティのどの部分が関わっていますか?", + "report_flow.screen.crisis_support.subtitle": "危機相談窓口は、無料で秘密厳守のサポートを提供しています。", + "report_flow.screen.crisis_support.title": "今すぐ力になってくれる人がいます", + "report_flow.screen.false_info.subtitle": "意見、風刺、誠実な議論は許可されています。不法な名誉毀損は、デジタルサービス法に基づいて報告できます。", + "report_flow.screen.false_info.subtitle_self_hosted": "意見、風刺、誠実な議論は許可されています。", + "report_flow.screen.false_info.title": "どのような点が誤解を招きますか?", + "report_flow.screen.harassment.title": "どのような形で標的にされていますか?", + "report_flow.screen.hate.title": "属性を理由に、どのように人々を攻撃していますか?", + "report_flow.screen.impersonation.subtitle": "明確にパロディまたはロールプレイと表示されているものは許可されています。", + "report_flow.screen.impersonation.title": "誰かへのなりすましですか、それとも詐欺ですか?", + "report_flow.screen.minor_risk.title": "この人はどのように未成年者を危険にさらしていますか?", + "report_flow.screen.minor_risk_guild.title": "このコミュニティはどのように未成年者を危険にさらしていますか?", + "report_flow.screen.minor_sexual.subtitle": "キャラクターが未成年者として描写されている場合、または明らかに思春期前である場合は、絵、文章、AIによるコンテンツも対象です(lolicon、shotacon、cubを含む)。", + "report_flow.screen.minor_sexual.title": "未成年者に関するどのようなものを見ましたか?", + "report_flow.screen.minor_sexual_guild.title": "未成年者に関するどのようなものを見ましたか?", + "report_flow.screen.private_info.subtitle": "いくつでも選択してください。プライベートな性的写真に18歳未満の人が写っている場合は、前の画面に戻って「未成年者の性的対象化」から報告してください。", + "report_flow.screen.private_info.title": "どの個人情報が関係していますか?", + "report_flow.screen.profile_abuse.title": "プロフィールのどのような点が有害ですか?", + "report_flow.screen.profile_hate_violence.title": "プロフィールには何が表示されていますか、または何を助長していますか?", + "report_flow.screen.profile_intro.options_heading": "詳細はこちら", + "report_flow.screen.profile_intro.subtitle": "このプロフィールのどこに問題があるか教えてください。報告者が誰であるかは本人に伝えられません。", + "report_flow.screen.profile_intro.title": "プロフィールを報告", + "report_flow.screen.profile_minor_sexual.title": "プロフィールに未成年者がどのように関わっていますか?", + "report_flow.screen.profile_parts.subtitle": "いくつでも選択してください。", + "report_flow.screen.profile_parts.title": "プロフィールのどの部分に問題がありますか?", + "report_flow.screen.profile_private_info.title": "プロフィールにどの個人情報が含まれていますか?", + "report_flow.screen.profile_sexual.title": "プロフィールにある性的コンテンツについて教えてください", + "report_flow.screen.profile_threat.title": "プロフィールにはどのように暴力が関係していますか?", + "report_flow.screen.root_guild.subtitle": "このコミュニティで起きていることに最も近いものを選んでください。", + "report_flow.screen.root_guild.title": "このコミュニティで何が問題になっていますか?", + "report_flow.screen.root_message.subtitle": "最も近いものを選んでください。送信前にすべて確認できます。", + "report_flow.screen.root_message.title": "メッセージを報告", + "report_flow.screen.root_user.subtitle": "プロフィールにあるものに最も近いものを選んでください。", + "report_flow.screen.root_user.title": "プロフィールで何が問題になっていますか?", + "report_flow.screen.self_harm.subtitle": "つらい状況にあると話しても、誰も罰せられることはありません。心配していることをお知らせいただければ、サポートを提供しやすくなります。", + "report_flow.screen.self_harm.title": "何を言ったり共有したりしましたか?", + "report_flow.screen.self_harm_guild.title": "メンバーは何を促していますか?", + "report_flow.screen.self_harm_profile.title": "プロフィールに何が書かれていますか、または何が示されていますか?", + "report_flow.screen.sexual.subtitle": "写っている、または関与している人が18歳未満の場合は、「未成年者の性的対象化」を選択してください。", + "report_flow.screen.sexual.title": "性的なコンテンツについて教えてください", + "report_flow.screen.sexual_guild.subtitle": "写っている、または関与している人が18歳未満の場合は、「未成年者の性的対象化」を選択してください。", + "report_flow.screen.sexual_guild.title": "このコミュニティの性的なコンテンツについて教えてください", + "report_flow.screen.something_else_guild.title": "このコミュニティで他に何が起きていますか?", + "report_flow.screen.something_else_message.title": "他に何が起きていますか?", + "report_flow.screen.something_else_user.title": "このプロフィールで他に何が問題になっていますか?", + "report_flow.screen.spam_kind_guild.title": "このコミュニティはプラットフォームをどのように悪用していますか?", + "report_flow.screen.spam_profile.title": "アカウントはどのように悪用されていますか?", + "report_flow.screen.threat.title": "どのように暴力に関係していますか?", + "report_flow.screen.violence_misinfo.title": "どれに当てはまりますか?", + "report_flow.screen.violence_misinfo_guild.title": "このコミュニティでは、どれが発生していますか?" }); export default CONTENT_I18N_JA_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/ko.ts b/fluxer_api/src/api/content_i18n/locales/ko.ts index c05961c00..cf33e6cd7 100644 --- a/fluxer_api/src/api/content_i18n/locales/ko.ts +++ b/fluxer_api/src/api/content_i18n/locales/ko.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_KO_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "텍스트 채널", "guild.default_category_voice": "음성 채널", "guild.default_channel_text": "일반", - "guild.default_channel_voice": "일반" + "guild.default_channel_voice": "일반", + "report_flow.description.name": "사용자 이름, 표시 이름 또는 커뮤니티 닉네임", + "report_flow.description.photo": "아바타와 배너로 사용하는 것", + "report_flow.description.profile_text": "소개, 상태 메시지 또는 대명사", + "report_flow.label.abuse": "악의적이거나 유해한 콘텐츠", + "report_flow.label.account_trading": "계정, 도난당한 로그인 정보 또는 카드 정보 판매", + "report_flow.label.account_trading_communities": "계정 또는 커뮤니티 구매 또는 판매", + "report_flow.label.address": "집 주소 또는 직장", + "report_flow.label.adult_content_no_gate": "18세 이상 연령 제한이 없는 성인 콘텐츠", + "report_flow.label.adult_content_profile": "프로필의 노골적인 성인 콘텐츠", + "report_flow.label.adult_content_unmarked": "18세 이상으로 표시되지 않은 커뮤니티 채널의 성인 콘텐츠", + "report_flow.label.age_no_message": "아니요, 나이가 언급되어 있지 않습니다", + "report_flow.label.age_no_profile": "아니요, 프로필에 나이가 언급되어 있지 않습니다", + "report_flow.label.age_yes_message": "예, 나이가 언급되어 있습니다", + "report_flow.label.age_yes_profile": "예, 프로필에 나이가 언급되어 있습니다", + "report_flow.label.atrocity_denial": "홀로코스트 또는 기타 집단 학살(제노사이드)을 부인하거나 찬양하는 행위", + "report_flow.label.ban_evasion": "다른 계정으로 밴 우회", + "report_flow.label.channel_names": "채널 이름", + "report_flow.label.community_banner": "커뮤니티 배너", + "report_flow.label.community_icon": "커뮤니티 아이콘", + "report_flow.label.community_name": "커뮤니티 이름", + "report_flow.label.conversion_therapy": "전환 치료 홍보", + "report_flow.label.copyright": "저작권 또는 상표권 침해 신고", + "report_flow.label.crisis_lines": "거주 국가의 위기 상담 전화", + "report_flow.label.csam": "아동 성착취물(실제 또는 AI로 생성된 이미지 또는 동영상)", + "report_flow.label.discovery_listing": "디스커버리 목록", + "report_flow.label.dislike": "그냥 내 취향이 아닙니다", + "report_flow.label.dsa": "EU에서 불법인 콘텐츠(디지털 서비스법, DSA)", + "report_flow.label.eating_disorder_promotion": "섭식 장애 행동 조장", + "report_flow.label.eating_disorder_promotion_profile": "프로필에서 섭식 장애를 조장합니다", + "report_flow.label.email": "이메일 주소", + "report_flow.label.emoji_stickers": "맞춤 이모티콘 또는 스티커", + "report_flow.label.face_photo": "얼굴 사진", + "report_flow.label.fake_account": "가짜 계정, 봇 또는 자동화된 악용", + "report_flow.label.fake_account_profile": "가짜 또는 기만적인 계정", + "report_flow.label.false_claims": "특정 인물의 평판을 해치기 위한 거짓말 유포", + "report_flow.label.false_info": "유해한 허위 정보 유포", + "report_flow.label.financial": "카드, 은행 또는 기타 금융 정보", + "report_flow.label.fraud": "사람들을 속여 돈이나 계정을 빼앗으려 합니다", + "report_flow.label.fraud_guild": "사람들을 속여 돈이나 계정을 빼앗는 행위", + "report_flow.label.government_id": "신분증 또는 신분증 번호", + "report_flow.label.graphic_violence": "충격을 주기 위해 보여주는 실제 폭력, 예: 잔인한 장면이나 동물 학대", + "report_flow.label.harassment": "괴롭힘, 따돌림 또는 스토킹", + "report_flow.label.harassment_direct": "모욕이나 폭언으로 누군가를 반복적으로 표적으로 삼는 행위", + "report_flow.label.harassment_guild": "사람들을 괴롭히거나, 따돌리거나, 스토킹하는 행위", + "report_flow.label.harassment_profile": "프로필에서 나 또는 다른 사람을 괴롭히거나 표적으로 삼음", + "report_flow.label.harmful_false_claims": "심각한 현실적 피해를 야기할 수 있는 허위 주장", + "report_flow.label.hate": "사람들의 정체성에 대한 증오 또는 차별", + "report_flow.label.hate_dehumanizing": "사람들을 동물, 질병 또는 오물에 비유하거나 인간 이하로 취급하는 행위", + "report_flow.label.hate_incitement": "특정 집단에 대한 폭력 또는 배제를 선동하는 행위", + "report_flow.label.hate_other": "사람들의 정체성에 대한 기타 공격", + "report_flow.label.hate_slurs": "비하 표현, 혐오 상징 또는 모욕적인 고정관념", + "report_flow.label.hate_violence": "증오, 폭력 또는 극단주의", + "report_flow.label.identity": "성적 지향, 성 정체성 또는 간성 상태", + "report_flow.label.illegal_activity": "기타 불법 활동", + "report_flow.label.illegal_goods": "마약, 무기 또는 기타 불법 상품 판매", + "report_flow.label.impersonation": "다른 사람을 사칭하거나 사람들에게 사기를 치는 행위", + "report_flow.label.impersonation_guild": "{product_name} 또는 다른 조직을 사칭하는 행위", + "report_flow.label.impersonation_organization": "회사, 브랜드 또는 그룹", + "report_flow.label.impersonation_person": "나 또는 나와 가까운 사람", + "report_flow.label.impersonation_public_figure": "크리에이터나 정치인 같은 유명한 사람", + "report_flow.label.impersonation_staff": "{product_name} 직원 또는 지원팀", + "report_flow.label.intimate_image_abuse": "딥페이크를 포함해 동의 없이 공유된 은밀한 이미지 또는 이를 공유하겠다는 위협", + "report_flow.label.intimate_image_abuse_guild": "딥페이크를 포함해 동의 없이 은밀한 이미지를 공유하는 행위", + "report_flow.label.intimate_image_abuse_profile": "딥페이크를 포함해 동의 없이 공유된 타인의 은밀한 이미지", + "report_flow.label.intimate_photo": "은밀한 사진 또는 누드 사진", + "report_flow.label.invite_splash": "초대 스플래시", + "report_flow.label.ip_address": "IP 주소", + "report_flow.label.learn_more": "{product_name} 커뮤니티 가이드라인 읽기", + "report_flow.label.legal_name": "실명 또는 법적 이름", + "report_flow.label.lgbtq_targeting": "누군가를 의도적으로 잘못된 성별로 지칭하거나, 과거 이름(데드네이밍)으로 부르거나, 본인 동의 없이 정체성을 공개(아우팅)하거나, 그 정체성을 부정하는 행위", + "report_flow.label.malware_guild": "멀웨어 또는 피싱 링크 배포", + "report_flow.label.malware_phishing": "피싱, 멀웨어 또는 해킹 시도", + "report_flow.label.member_activity": "회원이 그곳에 게시하거나 하는 활동", + "report_flow.label.metric_manipulation": "회원 또는 반응 수 조작", + "report_flow.label.minor_contact": "착취 목적으로 접근하는 것처럼 보이는 방식으로 미성년자에게 만남, 사진 또는 개인 정보를 요구하는 행위", + "report_flow.label.minor_dating_community": "미성년자 간 데이트를 위한 커뮤니티입니다", + "report_flow.label.minor_fictional": "가상의 아동을 그리거나 글로 쓰거나 AI로 생성한 성적 콘텐츠", + "report_flow.label.minor_grooming": "미성년자를 그루밍하거나 미성년자와 부적절한 신뢰 관계를 쌓는 행위", + "report_flow.label.minor_grooming_guild": "회원이 미성년자를 그루밍하거나 미성년자와 부적절한 신뢰 관계를 쌓는 행위", + "report_flow.label.minor_in_adult_space": "미성년자가 18세 이상 채널 또는 커뮤니티에 있는 경우", + "report_flow.label.minor_in_adult_space_guild": "18세 이상 채널에 미성년자의 입장을 허용합니다", + "report_flow.label.minor_risk": "미성년자를 위험에 빠뜨림", + "report_flow.label.minor_risk_guild": "미성년자를 위험에 빠뜨림", + "report_flow.label.minor_sexual": "미성년자 성적 대상화", + "report_flow.label.minor_sexual_contact": "미성년자에게 추파를 던지거나 성적인 메시지를 보내는 행위", + "report_flow.label.minor_sexual_contact_guild": "회원이 미성년자에게 추파를 던지거나 성적인 메시지를 보내는 행위", + "report_flow.label.minor_sexual_content": "미성년자가 직접 성적인 콘텐츠를 공유합니다", + "report_flow.label.minor_sexual_content_guild": "미성년자가 성적인 콘텐츠를 게시하거나 보냅니다", + "report_flow.label.minor_sexual_content_profile": "성적인 콘텐츠가 있는 미성년자의 프로필", + "report_flow.label.minor_sexual_guild": "미성년자 성적 대상화", + "report_flow.label.minor_sexualization": "미성년자에 대한 성적인 발언", + "report_flow.label.minor_sexualization_guild": "회원이 미성년자에 대해 성적인 발언을 하는 행위", + "report_flow.label.minor_sexualization_profile": "프로필에서 미성년자에 대한 성적인 발언", + "report_flow.label.name": "이름", + "report_flow.label.other": "여기에 없는 내용", + "report_flow.label.other_identifying": "다른 사람을 식별하거나 찾을 수 있는 기타 정보", + "report_flow.label.permits_violations": "심각한 규칙 위반을 허용합니다", + "report_flow.label.phone": "전화번호", + "report_flow.label.photo": "사진", + "report_flow.label.platform_abuse": "스크래핑, 자동화 또는 기타 플랫폼 남용", + "report_flow.label.private_conversation": "비공개 메시지, 스크린샷 또는 통화 녹음", + "report_flow.label.private_info": "다른 사람의 개인 정보 공유", + "report_flow.label.private_info_profile": "프로필에서 다른 사람의 개인 정보 공유", + "report_flow.label.profile_text": "프로필 문구", + "report_flow.label.raid": "레이드나 집단 공격을 조직하거나 참여하는 행위", + "report_flow.label.raid_guild": "사람이나 커뮤니티를 대상으로 한 레이드 또는 집단 공격을 조직하는 행위", + "report_flow.label.rude_language": "욕설 또는 무례한 발언", + "report_flow.label.self_harm": "누군가 자신을 해칠 수 있거나 자해를 조장함", + "report_flow.label.self_harm_graphic": "자해를 적나라하게 보여주는 이미지", + "report_flow.label.self_harm_guild": "회원들이 다른 사람에게 자해를 부추깁니다", + "report_flow.label.self_harm_pressure": "누군가에게 자해하도록 압박하거나 자해를 해 보라고 도발함", + "report_flow.label.self_harm_pressure_guild": "사람들에게 자해하도록 압박하거나 자해를 해 보라고 도발함", + "report_flow.label.self_harm_profile": "프로필이 자해를 암시하거나 조장함", + "report_flow.label.self_harm_promotion": "자해를 조장하거나 방법을 공유함", + "report_flow.label.self_harm_promotion_profile": "프로필에서 자해 조장", + "report_flow.label.sexual": "성적인 콘텐츠", + "report_flow.label.sexual_exploitation": "성적 착취, 강압 또는 인신매매", + "report_flow.label.sexual_unwanted": "원치 않는 성적인 이미지 또는 메시지", + "report_flow.label.something_else": "기타", + "report_flow.label.spam": "스팸 또는 원치 않는 광고", + "report_flow.label.spam_bulk": "대량 스팸 또는 광고 전송", + "report_flow.label.spam_or_manipulation": "스팸 또는 플랫폼 조작", + "report_flow.label.spam_profile": "프로필이 스팸 또는 광고에 사용됨", + "report_flow.label.suicide_promotion": "자살을 조장하거나 방법을 공유함", + "report_flow.label.suicide_promotion_profile": "프로필이 자살을 조장함", + "report_flow.label.synthetic_media": "가짜 또는 AI 생성 미디어를 실제처럼 제시", + "report_flow.label.terrorism": "테러 또는 폭력적 극단주의", + "report_flow.label.terrorism_guild": "테러 또는 폭력적 극단주의 모집 또는 조장", + "report_flow.label.threat": "협박 또는 폭력 선동", + "report_flow.label.threat_to_share": "공유하겠다고 위협함", + "report_flow.label.too_young": "{product_name} 이용 최소 연령 미만입니다", + "report_flow.label.unwanted_contact": "그만하라는 요청을 받거나 차단 또는 삭제된 후에도 나 또는 다른 사람을 스토킹하거나 반복적으로 연락하는 행위", + "report_flow.label.violence_glorification": "실제 폭력을 미화함", + "report_flow.label.violence_incitement": "폭력 조장 또는 사람을 해치는 방법 설명", + "report_flow.label.violence_misinfo": "폭력, 극단주의 또는 유해한 허위 정보", + "report_flow.label.violent_threat": "누군가를 해치겠다고 말함", + "report_flow.label.worried_profile": "그 사람의 안전이 걱정됩니다", + "report_flow.label.worried_self_harm": "그 사람이 자해할까 봐 걱정됩니다", + "report_flow.label.worried_suicide": "그 사람이 자살을 시도할까 봐 걱정됩니다", + "report_flow.notice.need_more_info.body": "이 내용을 검토하려면 상대방이 자신의 나이를 밝히거나 {product_name} 최소 이용 연령 미만임을 분명히 한 메시지가 필요합니다. 대신 해당 메시지를 신고해 주세요.", + "report_flow.notice.need_more_info.title": "아직 처리할 수 없습니다", + "report_flow.notice.need_more_info_profile.body": "이 내용을 검토하려면 상대방이 자신의 나이를 밝히거나 {product_name} 최소 이용 연령 미만임을 분명히 한 곳을 확인해야 합니다. 대신 해당 메시지 또는 프로필을 신고해 주세요.", + "report_flow.screen.abuse.title": "어떤 내용인가요?", + "report_flow.screen.abuse_guild.title": "이 커뮤니티의 사람들은 무엇을 하고 있나요?", + "report_flow.screen.age_stated_message.title": "이 메시지에 상대방의 나이가 언급되어 있나요?", + "report_flow.screen.age_stated_profile.title": "프로필에 상대방의 나이가 언급되어 있나요?", + "report_flow.screen.community_parts.subtitle": "필요한 만큼 선택하세요.", + "report_flow.screen.community_parts.title": "커뮤니티의 어떤 부분이 관련되어 있나요?", + "report_flow.screen.crisis_support.subtitle": "위기 상담 전화는 비밀이 보장되는 상담을 무료로 제공합니다.", + "report_flow.screen.crisis_support.title": "지금 바로 도움을 줄 수 있는 사람이 있습니다", + "report_flow.screen.false_info.subtitle": "의견, 풍자, 선의의 토론은 허용됩니다. 불법적인 명예 훼손은 디지털 서비스법(DSA)에 따라 신고할 수 있습니다.", + "report_flow.screen.false_info.subtitle_self_hosted": "의견, 풍자, 선의의 토론은 허용됩니다.", + "report_flow.screen.false_info.title": "어떤 점이 오해의 소지가 있나요?", + "report_flow.screen.harassment.title": "어떤 방식으로 누군가가 표적이 되고 있나요?", + "report_flow.screen.hate.title": "정체성을 이유로 사람들을 어떻게 공격하나요?", + "report_flow.screen.impersonation.subtitle": "명확하게 표시된 패러디 또는 역할극은 허용됩니다.", + "report_flow.screen.impersonation.title": "누가 사칭당하고 있나요, 아니면 사기인가요?", + "report_flow.screen.minor_risk.title": "이 사람이 미성년자를 어떻게 위험에 빠뜨리고 있나요?", + "report_flow.screen.minor_risk_guild.title": "이 커뮤니티는 어떻게 미성년자를 위험에 빠뜨리나요?", + "report_flow.screen.minor_sexual.subtitle": "그림, 글 또는 AI 콘텐츠도 캐릭터가 미성년자로 묘사되거나 명백히 사춘기 이전으로 보이는 경우 해당되며, lolicon, shotacon, cub도 포함됩니다.", + "report_flow.screen.minor_sexual.title": "미성년자와 관련해 무엇을 보셨나요?", + "report_flow.screen.minor_sexual_guild.title": "미성년자와 관련해 무엇을 보셨나요?", + "report_flow.screen.private_info.subtitle": "필요한 만큼 선택하세요. 은밀한 사진에 18세 미만인 사람이 나온다면 뒤로 돌아가 “미성년자 성적 대상화” 항목으로 신고해 주세요.", + "report_flow.screen.private_info.title": "어떤 개인 정보가 관련되어 있나요?", + "report_flow.screen.profile_abuse.title": "프로필의 어떤 점이 해로운가요?", + "report_flow.screen.profile_hate_violence.title": "프로필에 무엇이 표시되거나 홍보되나요?", + "report_flow.screen.profile_intro.options_heading": "자세히 알아보기", + "report_flow.screen.profile_intro.subtitle": "이 프로필에 어떤 문제가 있는지 알려주세요. 상대방에게는 누가 신고했는지 알리지 않습니다.", + "report_flow.screen.profile_intro.title": "프로필 신고", + "report_flow.screen.profile_minor_sexual.title": "프로필의 어떤 내용이 미성년자와 관련되어 있나요?", + "report_flow.screen.profile_parts.subtitle": "필요한 만큼 선택하세요.", + "report_flow.screen.profile_parts.title": "프로필의 어떤 부분이 문제인가요?", + "report_flow.screen.profile_private_info.title": "프로필에 어떤 개인 정보가 포함되어 있나요?", + "report_flow.screen.profile_sexual.title": "프로필의 성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.profile_threat.title": "프로필에 폭력적인 내용이 어떻게 포함되어 있나요?", + "report_flow.screen.root_guild.subtitle": "커뮤니티에서 발생하고 있는 일과 가장 가까운 것을 선택하세요.", + "report_flow.screen.root_guild.title": "이 커뮤니티에 무슨 문제가 있나요?", + "report_flow.screen.root_message.subtitle": "가장 가까운 항목을 선택하세요. 신고를 보내기 전에 모든 내용을 확인할 수 있습니다.", + "report_flow.screen.root_message.title": "메시지 신고", + "report_flow.screen.root_user.subtitle": "프로필에 있는 내용과 가장 가까운 것을 선택하세요.", + "report_flow.screen.root_user.title": "프로필에 무슨 문제가 있나요?", + "report_flow.screen.self_harm.subtitle": "힘들다고 말한다고 해서 처벌받는 사람은 없습니다. 걱정된다고 알려주시면 저희가 도움을 드릴 수 있습니다.", + "report_flow.screen.self_harm.title": "무엇을 말하거나 공유했나요?", + "report_flow.screen.self_harm_guild.title": "회원들이 무엇을 부추기고 있나요?", + "report_flow.screen.self_harm_profile.title": "프로필에 어떤 내용이 쓰여 있거나 표시되어 있나요?", + "report_flow.screen.sexual.subtitle": "등장하거나 관련된 사람 중 한 명이라도 18세 미만이면 “미성년자 성적 대상화”를 선택하세요.", + "report_flow.screen.sexual.title": "성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.sexual_guild.subtitle": "등장하거나 관련된 사람 중 한 명이라도 18세 미만이면 “미성년자 성적 대상화”를 선택하세요.", + "report_flow.screen.sexual_guild.title": "이 커뮤니티의 성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.something_else_guild.title": "이 커뮤니티에서 다른 문제는 무엇인가요?", + "report_flow.screen.something_else_message.title": "다른 문제는 무엇인가요?", + "report_flow.screen.something_else_user.title": "이 프로필의 다른 문제는 무엇인가요?", + "report_flow.screen.spam_kind_guild.title": "이 커뮤니티는 플랫폼을 어떻게 악용하고 있나요?", + "report_flow.screen.spam_profile.title": "계정이 어떻게 오용되고 있나요?", + "report_flow.screen.threat.title": "어떻게 폭력과 관련이 있나요?", + "report_flow.screen.violence_misinfo.title": "이 중 어떤 것에 해당하나요?", + "report_flow.screen.violence_misinfo_guild.title": "이 커뮤니티에서 어떤 일이 발생하나요?" }); export default CONTENT_I18N_KO_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/lt.ts b/fluxer_api/src/api/content_i18n/locales/lt.ts index d1b17d342..ae7359db5 100644 --- a/fluxer_api/src/api/content_i18n/locales/lt.ts +++ b/fluxer_api/src/api/content_i18n/locales/lt.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_LT_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Teksto kanalai", "guild.default_category_voice": "Balso kanalai", "guild.default_channel_text": "bendras", - "guild.default_channel_voice": "Bendras" + "guild.default_channel_voice": "Bendras", + "report_flow.description.name": "Naudotojo vardas, rodomasis vardas arba bendruomenės slapyvardis", + "report_flow.description.photo": "Tai, ką jie naudoja kaip avatarą ir reklamjuostę", + "report_flow.description.profile_text": "Biografija, pasirinktinė būsena arba įvardžiai", + "report_flow.label.abuse": "Įžeidžiantis ar žalingas turinys", + "report_flow.label.account_trading": "Paskyrų, pavogtų prisijungimo duomenų ar kortelės duomenų pardavimas", + "report_flow.label.account_trading_communities": "Paskyrų ar bendruomenių pirkimas arba pardavimas", + "report_flow.label.address": "Namų adresas arba darbovietė", + "report_flow.label.adult_content_no_gate": "Suaugusiesiems skirtas turinys be 18+ amžiaus apribojimo", + "report_flow.label.adult_content_profile": "Aiškus suaugusiesiems skirtas turinys profilyje", + "report_flow.label.adult_content_unmarked": "Suaugusiesiems skirtas turinys bendruomenės kanale, kuris nepažymėtas 18+", + "report_flow.label.age_no_message": "Ne, amžius neminimas", + "report_flow.label.age_no_profile": "Ne, amžius neminimas", + "report_flow.label.age_yes_message": "Taip, minimas jų amžius", + "report_flow.label.age_yes_profile": "Taip, jų profilyje minimas jų amžius", + "report_flow.label.atrocity_denial": "Holokausto ar kitų genocidų neigimas arba šlovinimas", + "report_flow.label.ban_evasion": "Draudimo apėjimas naudojant kitą paskyrą", + "report_flow.label.channel_names": "Kanalų pavadinimai", + "report_flow.label.community_banner": "Bendruomenės reklamjuostė", + "report_flow.label.community_icon": "Bendruomenės piktograma", + "report_flow.label.community_name": "Bendruomenės pavadinimas", + "report_flow.label.conversion_therapy": "Konversinės terapijos propagavimas", + "report_flow.label.copyright": "Skundas dėl autorių teisių ar prekės ženklo", + "report_flow.label.crisis_lines": "Krizinės pagalbos linijos jūsų šalyje", + "report_flow.label.csam": "Tikri ar dirbtinio intelekto sukurti vaikų seksualinės prievartos vaizdai ar vaizdo įrašai", + "report_flow.label.discovery_listing": "Atradimo sąrašas", + "report_flow.label.dislike": "Tai tiesiog ne man", + "report_flow.label.dsa": "Turinys, kuris neteisėtas ES (Skaitmeninių paslaugų aktas)", + "report_flow.label.eating_disorder_promotion": "Sutrikusių mitybos įpročių skatinimas", + "report_flow.label.eating_disorder_promotion_profile": "Jų profilis propaguoja valgymo sutrikimus", + "report_flow.label.email": "El. pašto adresas", + "report_flow.label.emoji_stickers": "Pasirinktiniai jaustukai ar lipdukai", + "report_flow.label.face_photo": "Jų veido nuotrauka", + "report_flow.label.fake_account": "Netikra paskyra, robotas ar automatizuotas piktnaudžiavimas", + "report_flow.label.fake_account_profile": "Netikra ar apgaulinga paskyra", + "report_flow.label.false_claims": "Melagysčių skleidimas siekiant pakenkti konkretaus asmens reputacijai", + "report_flow.label.false_info": "Žalingos melagingos informacijos skleidimas", + "report_flow.label.financial": "Kortelės, banko ar kita finansinė informacija", + "report_flow.label.fraud": "Jie bando apgauti žmones, kad gautų pinigų ar paskyrų", + "report_flow.label.fraud_guild": "Žmonių apgaudinėjimas siekiant išvilioti pinigus ar paskyras", + "report_flow.label.government_id": "Asmens tapatybės dokumentas arba asmens tapatybės numeris", + "report_flow.label.graphic_violence": "Tikras smurtas, rodomas siekiant šokiruoti, pavyzdžiui, kruvini vaizdai ar žiaurus elgesys su gyvūnais", + "report_flow.label.harassment": "Patyčios, priekabiavimas ar persekiojimas", + "report_flow.label.harassment_direct": "Pakartotinis kieno nors puolimas įžeidimais ar žeminimu", + "report_flow.label.harassment_guild": "Priekabiavimas prie žmonių, patyčios ar persekiojimas", + "report_flow.label.harassment_profile": "Jų profilis priekabiauja prie manęs ar kito asmens arba yra nukreiptas prieš mane ar kitą asmenį", + "report_flow.label.harmful_false_claims": "Melagingi teiginiai, galintys sukelti rimtą žalą realiame pasaulyje", + "report_flow.label.hate": "Neapykanta ar diskriminacija žmonėms dėl to, kas jie yra", + "report_flow.label.hate_dehumanizing": "Žmonių lyginimas su gyvūnais, liga ar nešvarumais arba jų vadinimas mažiau nei žmonėmis", + "report_flow.label.hate_incitement": "Raginimai smurtauti prieš grupę ar ją išstumti", + "report_flow.label.hate_other": "Kiti išpuoliai prieš žmones dėl to, kas jie yra", + "report_flow.label.hate_slurs": "Įžeidžiantys terminai, neapykantos simboliai ar žeminantys stereotipai", + "report_flow.label.hate_violence": "Neapykanta, smurtas ar ekstremizmas", + "report_flow.label.identity": "Seksualinė orientacija, lytinė tapatybė ar interseksualumas", + "report_flow.label.illegal_activity": "Kita neteisėta veikla", + "report_flow.label.illegal_goods": "Narkotikų, ginklų ar kitų neteisėtų prekių pardavimas", + "report_flow.label.impersonation": "Apsimetinėjimas kuo nors arba žmonių apgaudinėjimas", + "report_flow.label.impersonation_guild": "Apsimetinėjimas, kad tai {product_name} arba kita organizacija", + "report_flow.label.impersonation_organization": "Įmonė, prekės ženklas ar grupė", + "report_flow.label.impersonation_person": "Aš arba kažkas artimas man", + "report_flow.label.impersonation_public_figure": "Žinomas asmuo, pvz., kūrėjas ar politikas", + "report_flow.label.impersonation_staff": "{product_name} darbuotojas ar pagalbos tarnyba", + "report_flow.label.intimate_image_abuse": "Intymūs vaizdai, bendrinami be sutikimo, įskaitant giliąsias klastotes (deepfake), arba grasinimas juos bendrinti", + "report_flow.label.intimate_image_abuse_guild": "Intymių vaizdų bendrinimas be sutikimo, įskaitant giliąsias klastotes (deepfake)", + "report_flow.label.intimate_image_abuse_profile": "Kieno nors intymūs vaizdai, bendrinami be sutikimo, įskaitant giliąsias klastotes (deepfake)", + "report_flow.label.intimate_photo": "Intymi ar nuoga nuotrauka", + "report_flow.label.invite_splash": "Kvietimo fonas", + "report_flow.label.ip_address": "IP adresas", + "report_flow.label.learn_more": "Perskaitykite {product_name} bendruomenės gaires", + "report_flow.label.legal_name": "Tikrasis arba teisinis vardas", + "report_flow.label.lgbtq_targeting": "Tyčinis netinkamas kreipimasis į asmenį pagal lytį, ankstesnio vardo naudojimas, seksualinės orientacijos ar lytinės tapatybės atskleidimas be asmens sutikimo arba jo tapatybės neigimas", + "report_flow.label.malware_guild": "Kenkėjiškų programų ar sukčiavimo nuorodų platinimas", + "report_flow.label.malware_phishing": "Sukčiavimo (phishing), kenkėjiškų programų ar įsilaužimo bandymai", + "report_flow.label.member_activity": "Ką nariai ten skelbia ar daro", + "report_flow.label.metric_manipulation": "Narių ar reakcijų skaičiaus klastojimas", + "report_flow.label.minor_contact": "Nepilnamečio prašymas susitikti, atsiųsti nuotraukų ar asmeninių duomenų taip, kad atrodo, jog siekiama jį išnaudoti", + "report_flow.label.minor_dating_community": "Tai bendruomenė, skirta nepilnamečių tarpusavio pasimatymams", + "report_flow.label.minor_fictional": "Nupieštas, parašytas ar dirbtinio intelekto sukurtas išgalvoto vaiko seksualinis turinys", + "report_flow.label.minor_grooming": "Nepilnamečio viliojimas ar netinkamo pasitikėjimo kūrimas", + "report_flow.label.minor_grooming_guild": "Nariai vilioja nepilnamečius ar kuria netinkamą pasitikėjimą", + "report_flow.label.minor_in_adult_space": "Nepilnametis yra 18+ kanale ar bendruomenėje", + "report_flow.label.minor_in_adult_space_guild": "Nepilnamečiams leidžiama būti kanaluose, skirtuose 18+", + "report_flow.label.minor_risk": "Pavojaus nepilnamečiui kėlimas", + "report_flow.label.minor_risk_guild": "Pavojaus nepilnamečiams kėlimas", + "report_flow.label.minor_sexual": "Nepilnamečio seksualizavimas", + "report_flow.label.minor_sexual_contact": "Flirtavimas su nepilnamečiu arba seksualinių žinučių siuntimas jam", + "report_flow.label.minor_sexual_contact_guild": "Nariai flirtuoja su nepilnamečiais arba siunčia jiems seksualines žinutes", + "report_flow.label.minor_sexual_content": "Nepilnametis pats dalijasi seksualinio pobūdžio turiniu", + "report_flow.label.minor_sexual_content_guild": "Nepilnamečiai skelbia ar siunčia seksualinį turinį", + "report_flow.label.minor_sexual_content_profile": "Nepilnamečio profilis su seksualinio pobūdžio turiniu", + "report_flow.label.minor_sexual_guild": "Nepilnamečių seksualizavimas", + "report_flow.label.minor_sexualization": "Seksualiniai komentarai apie nepilnamečius", + "report_flow.label.minor_sexualization_guild": "Nariai pateikia seksualinius komentarus apie nepilnamečius", + "report_flow.label.minor_sexualization_profile": "Seksualiniai komentarai apie nepilnamečius jų profilyje", + "report_flow.label.name": "Vardai", + "report_flow.label.other": "Kažkas, kas čia nenurodyta", + "report_flow.label.other_identifying": "Kita informacija, kuri galėtų identifikuoti ar nustatyti asmens buvimo vietą", + "report_flow.label.permits_violations": "Tai leidžia rimtai pažeisti taisykles", + "report_flow.label.phone": "Telefono numeris", + "report_flow.label.photo": "Nuotraukos", + "report_flow.label.platform_abuse": "Duomenų rinkimas, automatizavimas ar kitoks piktnaudžiavimas platforma", + "report_flow.label.private_conversation": "Privačios žinutės, ekrano kopijos ar skambučių įrašai", + "report_flow.label.private_info": "Kieno nors privačių duomenų bendrinimas", + "report_flow.label.private_info_profile": "Jų profilyje bendrinami kieno nors privatūs duomenys", + "report_flow.label.profile_text": "Profilio tekstas", + "report_flow.label.raid": "Reido ar puolimo organizavimas arba prisijungimas prie jo", + "report_flow.label.raid_guild": "Reidų ar puolimų prieš žmones ar bendruomenes organizavimas", + "report_flow.label.rude_language": "Keiksmai ar nemandagios pastabos", + "report_flow.label.self_harm": "Kažkas gali susižaloti arba skatina savižalą", + "report_flow.label.self_harm_graphic": "Detalūs savižalos vaizdai", + "report_flow.label.self_harm_guild": "Nariai spaudžia kitus susižaloti", + "report_flow.label.self_harm_pressure": "Spaudimas ar iššūkis kam nors susižaloti", + "report_flow.label.self_harm_pressure_guild": "Spaudimas ar iššūkis žmonėms susižaloti", + "report_flow.label.self_harm_profile": "Jų profilis užsimena apie savižalą arba ją skatina", + "report_flow.label.self_harm_promotion": "Savižalos skatinimas arba metodų bendrinimas", + "report_flow.label.self_harm_promotion_profile": "Jų profilyje skatinama savižala", + "report_flow.label.sexual": "Seksualinis turinys", + "report_flow.label.sexual_exploitation": "Seksualinis išnaudojimas, prievarta ar prekyba žmonėmis", + "report_flow.label.sexual_unwanted": "Seksualiniai vaizdai ar žinutės, kurių nenorėjau", + "report_flow.label.something_else": "Kažkas kita", + "report_flow.label.spam": "Šlamštas arba nepageidaujama reklama", + "report_flow.label.spam_bulk": "Masinis šlamšto ar reklamos siuntimas", + "report_flow.label.spam_or_manipulation": "Šlamštas arba platformos manipuliavimas", + "report_flow.label.spam_profile": "Jų profilis naudojamas šlamštui ar reklamai", + "report_flow.label.suicide_promotion": "Savižudybės skatinimas arba metodų bendrinimas", + "report_flow.label.suicide_promotion_profile": "Jų profilis skatina savižudybę", + "report_flow.label.synthetic_media": "Netikra arba dirbtinio intelekto sukurta medija, pateikiama kaip tikra", + "report_flow.label.terrorism": "Terorizmas arba smurtinis ekstremizmas", + "report_flow.label.terrorism_guild": "Verbavimas terorizmui ar smurtiniam ekstremizmui arba jų skatinimas", + "report_flow.label.threat": "Grasinimai ar raginimai smurtauti", + "report_flow.label.threat_to_share": "Jie grasina tuo pasidalyti", + "report_flow.label.too_young": "Jie jaunesni už minimalų amžių platformoje {product_name}", + "report_flow.label.unwanted_contact": "Persekiojimas arba pakartotinis susisiekimas su manimi ar kuo nors kitu, kai buvo paprašyta sustoti, užblokuota arba pašalinta", + "report_flow.label.violence_glorification": "Realaus smurto šlovinimas", + "report_flow.label.violence_incitement": "Smurto skatinimas arba paaiškinimas, kaip pakenkti žmonėms", + "report_flow.label.violence_misinfo": "Smurtas, ekstremizmas ar žalinga klaidinga informacija", + "report_flow.label.violent_threat": "Grasinimas kam nors pakenkti", + "report_flow.label.worried_profile": "Nerimauju dėl šio asmens saugumo", + "report_flow.label.worried_self_harm": "Bijau, kad šis asmuo gali susižaloti", + "report_flow.label.worried_suicide": "Bijau, kad šis asmuo gali bandyti nusižudyti", + "report_flow.notice.need_more_info.body": "Kad galėtume tai peržiūrėti, mums reikia žinutės, kurioje jie nurodo savo amžių arba aiškiai parodo, kad yra jaunesni už minimalų amžių platformoje {product_name}. Vietoj to praneškite apie tą žinutę.", + "report_flow.notice.need_more_info.title": "Dar negalime imtis veiksmų", + "report_flow.notice.need_more_info_profile.body": "Kad galėtume tai peržiūrėti, turime pamatyti, kur jie nurodo savo amžių arba aiškiai parodo, kad yra jaunesni už minimalų amžių platformoje {product_name}. Vietoj to praneškite apie tą žinutę arba profilį.", + "report_flow.screen.abuse.title": "Su kuo tai susiję?", + "report_flow.screen.abuse_guild.title": "Ką daro žmonės šioje bendruomenėje?", + "report_flow.screen.age_stated_message.title": "Ar šioje žinutėje nurodomas jų amžius?", + "report_flow.screen.age_stated_profile.title": "Ar jų profilyje nurodytas amžius?", + "report_flow.screen.community_parts.subtitle": "Pasirinkite tiek, kiek reikia.", + "report_flow.screen.community_parts.title": "Kurios bendruomenės dalys yra susijusios?", + "report_flow.screen.crisis_support.subtitle": "Krizinės pagalbos linijos teikia nemokamą ir konfidencialią pagalbą.", + "report_flow.screen.crisis_support.title": "Jums gali padėti jau dabar", + "report_flow.screen.false_info.subtitle": "Nuomonės, satyra ir sąžiningos diskusijos leidžiamos. Apie neteisėtą šmeižtą galima pranešti pagal Skaitmeninių paslaugų aktą.", + "report_flow.screen.false_info.subtitle_self_hosted": "Nuomonės, satyra ir sąžiningos diskusijos leidžiamos.", + "report_flow.screen.false_info.title": "Kuo tai klaidina?", + "report_flow.screen.harassment.title": "Kaip yra puolamas asmuo?", + "report_flow.screen.hate.title": "Kaip tai puola žmones dėl to, kas jie yra?", + "report_flow.screen.impersonation.subtitle": "Aiškiai pažymėta parodija ar vaidmenų žaidimas yra leidžiamas.", + "report_flow.screen.impersonation.title": "Kuo apsimetama, ar tai sukčiavimas?", + "report_flow.screen.minor_risk.title": "Kaip šis asmuo kelia pavojų nepilnamečiui?", + "report_flow.screen.minor_risk_guild.title": "Kaip ši bendruomenė kelia pavojų nepilnamečiams?", + "report_flow.screen.minor_sexual.subtitle": "Čia taip pat priskiriamas nupieštas, parašytas ar dirbtinio intelekto sukurtas turinys, kai personažas apibūdinamas kaip nepilnametis arba yra akivaizdžiai priešpubertatinio amžiaus, įskaitant lolicon, shotacon ir cub.", + "report_flow.screen.minor_sexual.title": "Ką matėte, kas susiję su nepilnamečiu?", + "report_flow.screen.minor_sexual_guild.title": "Ką matėte, kas susiję su nepilnamečiais?", + "report_flow.screen.private_info.subtitle": "Pasirinkite tiek, kiek reikia. Jei intymioje nuotraukoje matomas jaunesnis nei 18 metų asmuo, grįžkite atgal ir praneškite apie ją pasirinkę „Nepilnamečio seksualizavimas“.", + "report_flow.screen.private_info.title": "Kokie privatūs duomenys yra susiję?", + "report_flow.screen.profile_abuse.title": "Kas kenksminga jų profilyje?", + "report_flow.screen.profile_hate_violence.title": "Ką jų profilis rodo ar skatina?", + "report_flow.screen.profile_intro.options_heading": "Sužinoti daugiau", + "report_flow.screen.profile_intro.subtitle": "Papasakokite, kas negerai su šiuo profiliu. Jiems nebus pasakyta, kas pranešė.", + "report_flow.screen.profile_intro.title": "Pranešti apie profilį", + "report_flow.screen.profile_minor_sexual.title": "Kas jų profilyje susiję su nepilnamečiu?", + "report_flow.screen.profile_parts.subtitle": "Pasirinkite tiek, kiek reikia.", + "report_flow.screen.profile_parts.title": "Kurios jų profilio dalys kelia problemų?", + "report_flow.screen.profile_private_info.title": "Kokie privatūs duomenys yra jų profilyje?", + "report_flow.screen.profile_sexual.title": "Papasakokite apie seksualinį turinį jų profilyje", + "report_flow.screen.profile_threat.title": "Kaip jų profilis susijęs su smurtu?", + "report_flow.screen.root_guild.subtitle": "Pasirinkite artimiausią atitikmenį tam, kas vyksta šioje bendruomenėje.", + "report_flow.screen.root_guild.title": "Kas negerai su šia bendruomene?", + "report_flow.screen.root_message.subtitle": "Pasirinkite artimiausią atitikmenį. Viską galėsite patikrinti prieš pranešimo išsiuntimą.", + "report_flow.screen.root_message.title": "Pranešti apie žinutę", + "report_flow.screen.root_user.subtitle": "Pasirinkite artimiausią atitikmenį tam, kas yra jų profilyje.", + "report_flow.screen.root_user.title": "Kas negerai su jų profiliu?", + "report_flow.screen.self_harm.subtitle": "Niekas nėra baudžiamas už tai, kad pasakė, jog jam sunku. Pasakydami mums, kad nerimaujate, padedate mums pasiūlyti pagalbą.", + "report_flow.screen.self_harm.title": "Ką jie pasakė ar kuo pasidalijo?", + "report_flow.screen.self_harm_guild.title": "Ką skatina nariai?", + "report_flow.screen.self_harm_profile.title": "Ką sako ar rodo jų profilis?", + "report_flow.screen.sexual.subtitle": "Jei bet kuris pavaizduotas ar susijęs asmuo yra jaunesnis nei 18 metų, pasirinkite „Nepilnamečio seksualizavimas“.", + "report_flow.screen.sexual.title": "Papasakokite apie seksualinį turinį", + "report_flow.screen.sexual_guild.subtitle": "Jei bet kuris pavaizduotas ar susijęs asmuo yra jaunesnis nei 18 metų, pasirinkite „Nepilnamečių seksualizavimas“.", + "report_flow.screen.sexual_guild.title": "Papasakokite apie seksualinį turinį šioje bendruomenėje", + "report_flow.screen.something_else_guild.title": "Kas dar vyksta šioje bendruomenėje?", + "report_flow.screen.something_else_message.title": "Kas dar vyksta?", + "report_flow.screen.something_else_user.title": "Kas dar negerai su šiuo profiliu?", + "report_flow.screen.spam_kind_guild.title": "Kaip ši bendruomenė piktnaudžiauja platforma?", + "report_flow.screen.spam_profile.title": "Kaip paskyra naudojama netinkamai?", + "report_flow.screen.threat.title": "Kaip tai susiję su smurtu?", + "report_flow.screen.violence_misinfo.title": "Kuris iš šių variantų atitinka?", + "report_flow.screen.violence_misinfo_guild.title": "Kuris iš šių variantų vyksta šioje bendruomenėje?" }); export default CONTENT_I18N_LT_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/nl.ts b/fluxer_api/src/api/content_i18n/locales/nl.ts index 52dae684b..8d0d06bac 100644 --- a/fluxer_api/src/api/content_i18n/locales/nl.ts +++ b/fluxer_api/src/api/content_i18n/locales/nl.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_NL_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Tekstkanalen", "guild.default_category_voice": "Spraakkanalen", "guild.default_channel_text": "algemeen", - "guild.default_channel_voice": "Algemeen" + "guild.default_channel_voice": "Algemeen", + "report_flow.description.name": "Gebruikersnaam, weergavenaam of communitybijnaam", + "report_flow.description.photo": "Wat ze gebruiken als avatar en banner", + "report_flow.description.profile_text": "Bio, aangepaste status of voornaamwoorden", + "report_flow.label.abuse": "Beledigende of schadelijke inhoud", + "report_flow.label.account_trading": "Accounts verkopen, of gestolen aanmeldgegevens of kaartgegevens", + "report_flow.label.account_trading_communities": "Accounts of communities kopen of verkopen", + "report_flow.label.address": "Huisadres of werkplek", + "report_flow.label.adult_content_no_gate": "Inhoud voor volwassenen zonder 18+-leeftijdsbeperking", + "report_flow.label.adult_content_profile": "Expliciete inhoud voor volwassenen in hun profiel", + "report_flow.label.adult_content_unmarked": "Inhoud voor volwassenen in een communitykanaal dat niet is gemarkeerd als 18+", + "report_flow.label.age_no_message": "Nee, het wordt niet vermeld", + "report_flow.label.age_no_profile": "Nee, het wordt niet vermeld", + "report_flow.label.age_yes_message": "Ja, hun leeftijd wordt vermeld", + "report_flow.label.age_yes_profile": "Ja, hun profiel vermeldt hun leeftijd", + "report_flow.label.atrocity_denial": "Het ontkennen of verheerlijken van de Holocaust of andere genocides", + "report_flow.label.ban_evasion": "Een ban omzeilen met een ander account", + "report_flow.label.channel_names": "Kanaalnamen", + "report_flow.label.community_banner": "Communitybanner", + "report_flow.label.community_icon": "Communitypictogram", + "report_flow.label.community_name": "Naam community", + "report_flow.label.conversion_therapy": "Promoten van conversietherapie", + "report_flow.label.copyright": "Klacht over auteursrecht of handelsmerk", + "report_flow.label.crisis_lines": "Hulplijnen in jouw land", + "report_flow.label.csam": "Echte of door AI gegenereerde beelden of video's van seksueel misbruik van kinderen", + "report_flow.label.discovery_listing": "Vermelding bij Ontdekken", + "report_flow.label.dislike": "Het is gewoon niets voor mij", + "report_flow.label.dsa": "Inhoud die illegaal is in de EU (digitaledienstenverordening)", + "report_flow.label.eating_disorder_promotion": "Gestoord eetgedrag aanmoedigen", + "report_flow.label.eating_disorder_promotion_profile": "Hun profiel promoot eetstoornissen", + "report_flow.label.email": "E-mailadres", + "report_flow.label.emoji_stickers": "Aangepaste emoji of stickers", + "report_flow.label.face_photo": "Foto van hun gezicht", + "report_flow.label.fake_account": "Nepaccount, bot of geautomatiseerd misbruik", + "report_flow.label.fake_account_profile": "Een nep- of bedrieglijk account", + "report_flow.label.false_claims": "Leugens verspreiden om de reputatie van een specifieke persoon te schaden", + "report_flow.label.false_info": "Verspreiden van schadelijke valse informatie", + "report_flow.label.financial": "Kaart-, bank- of andere financiële gegevens", + "report_flow.label.fraud": "Ze proberen mensen geld of accounts afhandig te maken", + "report_flow.label.fraud_guild": "Mensen geld of accounts afhandig maken", + "report_flow.label.government_id": "Identiteitsbewijs of ID-nummer", + "report_flow.label.graphic_violence": "Echt geweld dat wordt getoond om te choqueren, zoals gore of dierenmishandeling", + "report_flow.label.harassment": "Pesten, intimidatie of stalking", + "report_flow.label.harassment_direct": "Iemand herhaaldelijk aanvallen met beledigingen of scheldpartijen", + "report_flow.label.harassment_guild": "Mensen lastigvallen, pesten of stalken", + "report_flow.label.harassment_profile": "Hun profiel valt mij of iemand anders lastig of aan", + "report_flow.label.harmful_false_claims": "Onjuiste beweringen die ernstige schade in de echte wereld kunnen veroorzaken", + "report_flow.label.hate": "Haat of discriminatie tegen mensen om wie ze zijn", + "report_flow.label.hate_dehumanizing": "Mensen vergelijken met dieren, ziekten of vuil, of ze minder dan menselijk noemen", + "report_flow.label.hate_incitement": "Oproepen tot geweld tegen een groep of tot uitsluiting van een groep", + "report_flow.label.hate_other": "Andere aanvallen op mensen om wie ze zijn", + "report_flow.label.hate_slurs": "Scheldwoorden, haatdragende symbolen of denigrerende stereotypen", + "report_flow.label.hate_violence": "Haat, geweld of extremisme", + "report_flow.label.identity": "Seksuele geaardheid, genderidentiteit of intersekse status", + "report_flow.label.illegal_activity": "Andere illegale activiteiten", + "report_flow.label.illegal_goods": "Verkoop van drugs, wapens of andere illegale goederen", + "report_flow.label.impersonation": "Zich voordoen als iemand anders, of mensen oplichten", + "report_flow.label.impersonation_guild": "Zich voordoen als {product_name} of een andere organisatie", + "report_flow.label.impersonation_organization": "Een bedrijf, merk of groep", + "report_flow.label.impersonation_person": "Mij of iemand die dicht bij mij staat", + "report_flow.label.impersonation_public_figure": "Een bekende persoon, zoals een maker of politicus", + "report_flow.label.impersonation_staff": "Medewerkers of ondersteuning van {product_name}", + "report_flow.label.intimate_image_abuse": "Intieme afbeeldingen gedeeld zonder toestemming, inclusief deepfakes, of een dreiging om deze te delen", + "report_flow.label.intimate_image_abuse_guild": "Intieme afbeeldingen delen zonder toestemming, inclusief deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intieme afbeeldingen van iemand gedeeld zonder toestemming, inclusief deepfakes", + "report_flow.label.intimate_photo": "Intieme foto of naaktfoto", + "report_flow.label.invite_splash": "Uitnodigingsachtergrond", + "report_flow.label.ip_address": "IP-adres", + "report_flow.label.learn_more": "Lees de communityrichtlijnen van {product_name}", + "report_flow.label.legal_name": "Echte of wettelijke naam", + "report_flow.label.lgbtq_targeting": "Opzettelijk iemand verkeerd aanspreken, deadnamen of outen, of hun identiteit ontkennen", + "report_flow.label.malware_guild": "Malware of phishinglinks verspreiden", + "report_flow.label.malware_phishing": "Phishing, malware of pogingen om te hacken", + "report_flow.label.member_activity": "Wat leden daar plaatsen of doen", + "report_flow.label.metric_manipulation": "Leden- of reactieaantallen vervalsen", + "report_flow.label.minor_contact": "Een minderjarige vragen om af te spreken, of om foto's of persoonlijke gegevens, op een manier die op kwade bedoelingen wijst", + "report_flow.label.minor_dating_community": "Het is een community voor daten tussen minderjarigen", + "report_flow.label.minor_fictional": "Getekende, geschreven of AI-gegenereerde seksuele content van een fictief kind", + "report_flow.label.minor_grooming": "Grooming of ongepast vertrouwen opbouwen met een minderjarige", + "report_flow.label.minor_grooming_guild": "Leden groomen of bouwen ongepast vertrouwen op met minderjarigen", + "report_flow.label.minor_in_adult_space": "Een minderjarige bevindt zich in een 18+-kanaal of -community", + "report_flow.label.minor_in_adult_space_guild": "Minderjarigen worden toegelaten tot 18+-kanalen", + "report_flow.label.minor_risk": "Een minderjarige in gevaar brengen", + "report_flow.label.minor_risk_guild": "Minderjarigen in gevaar brengen", + "report_flow.label.minor_sexual": "Een minderjarige seksualiseren", + "report_flow.label.minor_sexual_contact": "Flirten met een minderjarige of seksuele berichten naar een minderjarige sturen", + "report_flow.label.minor_sexual_contact_guild": "Leden flirten met minderjarigen of sturen hen seksuele berichten", + "report_flow.label.minor_sexual_content": "Een minderjarige deelt zelf seksuele inhoud", + "report_flow.label.minor_sexual_content_guild": "Minderjarigen plaatsen of versturen seksuele inhoud", + "report_flow.label.minor_sexual_content_profile": "Profiel van een minderjarige met seksuele inhoud", + "report_flow.label.minor_sexual_guild": "Minderjarigen seksualiseren", + "report_flow.label.minor_sexualization": "Seksuele opmerkingen over minderjarigen", + "report_flow.label.minor_sexualization_guild": "Leden maken seksuele opmerkingen over minderjarigen", + "report_flow.label.minor_sexualization_profile": "Seksuele opmerkingen over minderjarigen in hun profiel", + "report_flow.label.name": "Namen", + "report_flow.label.other": "Iets wat hier niet vermeld staat", + "report_flow.label.other_identifying": "Andere informatie die iemand zou kunnen identificeren of lokaliseren", + "report_flow.label.permits_violations": "Het staat ernstige overtredingen van de regels toe", + "report_flow.label.phone": "Telefoonnummer", + "report_flow.label.photo": "Afbeeldingen", + "report_flow.label.platform_abuse": "Scraping, automatisering of ander platformmisbruik", + "report_flow.label.private_conversation": "Privéberichten, schermafbeeldingen of gespreksopnamen", + "report_flow.label.private_info": "Iemands privégegevens delen", + "report_flow.label.private_info_profile": "Hun profiel deelt iemands privégegevens", + "report_flow.label.profile_text": "Profieltekst", + "report_flow.label.raid": "Het organiseren van of deelnemen aan een raid of pile-on", + "report_flow.label.raid_guild": "Het organiseren van raids of pile-ons tegen personen of communities", + "report_flow.label.rude_language": "Schelden of onbeleefde opmerkingen", + "report_flow.label.self_harm": "Iemand zou zichzelf pijn kunnen doen, of moedigt zelfbeschadiging aan", + "report_flow.label.self_harm_graphic": "Expliciete afbeeldingen van zelfbeschadiging", + "report_flow.label.self_harm_guild": "Leden zetten anderen aan tot zelfbeschadiging", + "report_flow.label.self_harm_pressure": "Iemand onder druk zetten of uitdagen om zichzelf pijn te doen", + "report_flow.label.self_harm_pressure_guild": "Mensen onder druk zetten of uitdagen om zichzelf pijn te doen", + "report_flow.label.self_harm_profile": "Hun profiel suggereert zelfbeschadiging of moedigt het aan", + "report_flow.label.self_harm_promotion": "Zelfbeschadiging aanmoedigen of methoden delen", + "report_flow.label.self_harm_promotion_profile": "Hun profiel moedigt zelfbeschadiging aan", + "report_flow.label.sexual": "Seksuele inhoud", + "report_flow.label.sexual_exploitation": "Seksuele uitbuiting, dwang of mensenhandel", + "report_flow.label.sexual_unwanted": "Seksuele afbeeldingen of berichten die ik niet wilde", + "report_flow.label.something_else": "Iets anders", + "report_flow.label.spam": "Spam of ongewenste advertenties", + "report_flow.label.spam_bulk": "Spam of reclame in bulk verzenden", + "report_flow.label.spam_or_manipulation": "Spam of platformmanipulatie", + "report_flow.label.spam_profile": "Hun profiel wordt gebruikt voor spam of reclame", + "report_flow.label.suicide_promotion": "Zelfmoord aanmoedigen of methoden delen", + "report_flow.label.suicide_promotion_profile": "Hun profiel moedigt zelfmoord aan", + "report_flow.label.synthetic_media": "Nep- of AI-gemaakte media die als echt worden gepresenteerd", + "report_flow.label.terrorism": "Terrorisme of gewelddadig extremisme", + "report_flow.label.terrorism_guild": "Werven voor of promoten van terrorisme of gewelddadig extremisme", + "report_flow.label.threat": "Bedreigingen of oproepen tot geweld", + "report_flow.label.threat_to_share": "Ze dreigen het te delen", + "report_flow.label.too_young": "Ze zijn jonger dan de minimumleeftijd om {product_name} te gebruiken", + "report_flow.label.unwanted_contact": "Mij of iemand anders stalken of herhaaldelijk contact opnemen, ook nadat is gevraagd te stoppen of nadat de persoon is geblokkeerd of verwijderd", + "report_flow.label.violence_glorification": "Geweld in de echte wereld verheerlijken", + "report_flow.label.violence_incitement": "Geweld aanmoedigen of uitleggen hoe je mensen pijn kunt doen", + "report_flow.label.violence_misinfo": "Geweld, extremisme of schadelijke valse informatie", + "report_flow.label.violent_threat": "Zeggen dat ze iemand pijn zullen doen", + "report_flow.label.worried_profile": "Ik maak me zorgen over hun veiligheid", + "report_flow.label.worried_self_harm": "Ik ben bang dat ze zichzelf pijn zouden kunnen doen", + "report_flow.label.worried_suicide": "Ik ben bang dat ze een zelfmoordpoging zouden kunnen doen", + "report_flow.notice.need_more_info.body": "Om dit te beoordelen, hebben we een bericht nodig waarin ze zeggen hoe oud ze zijn of duidelijk maken dat ze jonger zijn dan de minimumleeftijd van {product_name}. Meld in plaats daarvan dat bericht.", + "report_flow.notice.need_more_info.title": "Hier kunnen we nu nog niets mee", + "report_flow.notice.need_more_info_profile.body": "Om dit te beoordelen, moeten we zien waar ze zeggen hoe oud ze zijn of duidelijk maken dat ze jonger zijn dan de minimumleeftijd van {product_name}. Meld in plaats daarvan dat bericht of profiel.", + "report_flow.screen.abuse.title": "Waar gaat het om?", + "report_flow.screen.abuse_guild.title": "Wat doen mensen in deze community?", + "report_flow.screen.age_stated_message.title": "Zegt dit bericht hoe oud ze zijn?", + "report_flow.screen.age_stated_profile.title": "Staat in hun profiel hoe oud ze zijn?", + "report_flow.screen.community_parts.subtitle": "Kies er zoveel als nodig is.", + "report_flow.screen.community_parts.title": "Welke onderdelen van de community zijn betrokken?", + "report_flow.screen.crisis_support.subtitle": "Hulplijnen bieden gratis, vertrouwelijke ondersteuning.", + "report_flow.screen.crisis_support.title": "Er is nu iemand die kan helpen", + "report_flow.screen.false_info.subtitle": "Meningen, satire en discussies te goeder trouw zijn toegestaan. Onrechtmatige smaad kan worden gemeld onder de digitaledienstenverordening (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meningen, satire en discussies te goeder trouw zijn toegestaan.", + "report_flow.screen.false_info.title": "Wat is er misleidend aan?", + "report_flow.screen.harassment.title": "Hoe wordt iemand op de korrel genomen?", + "report_flow.screen.hate.title": "Hoe valt het mensen aan om wie ze zijn?", + "report_flow.screen.impersonation.subtitle": "Duidelijk gelabelde parodie of rollenspel is toegestaan.", + "report_flow.screen.impersonation.title": "Wie wordt nagebootst, of is het oplichting?", + "report_flow.screen.minor_risk.title": "Hoe brengt deze persoon een minderjarige in gevaar?", + "report_flow.screen.minor_risk_guild.title": "Hoe brengt deze community minderjarigen in gevaar?", + "report_flow.screen.minor_sexual.subtitle": "Getekende, geschreven of AI-content telt mee wanneer een personage wordt beschreven als minderjarig of duidelijk prepuber is, inclusief lolicon, shotacon en cub.", + "report_flow.screen.minor_sexual.title": "Wat heb je gezien waar een minderjarige bij betrokken is?", + "report_flow.screen.minor_sexual_guild.title": "Wat heb je gezien waar minderjarigen bij betrokken zijn?", + "report_flow.screen.private_info.subtitle": "Kies er zoveel als nodig is. Als een intieme foto iemand onder de 18 laat zien, ga dan terug en meld het onder “Een minderjarige seksualiseren”.", + "report_flow.screen.private_info.title": "Welke privégegevens zijn betrokken?", + "report_flow.screen.profile_abuse.title": "Wat is er schadelijk aan hun profiel?", + "report_flow.screen.profile_hate_violence.title": "Wat laat hun profiel zien of promoot het?", + "report_flow.screen.profile_intro.options_heading": "Meer informatie", + "report_flow.screen.profile_intro.subtitle": "Vertel ons wat er mis is met dit profiel. Ze krijgen niet te horen wie de melding heeft gedaan.", + "report_flow.screen.profile_intro.title": "Profiel melden", + "report_flow.screen.profile_minor_sexual.title": "Wat in hun profiel heeft met een minderjarige te maken?", + "report_flow.screen.profile_parts.subtitle": "Kies er zoveel als nodig is.", + "report_flow.screen.profile_parts.title": "Welke onderdelen van hun profiel zijn een probleem?", + "report_flow.screen.profile_private_info.title": "Welke privégegevens staan in hun profiel?", + "report_flow.screen.profile_sexual.title": "Vertel ons over de seksuele inhoud in hun profiel", + "report_flow.screen.profile_threat.title": "Hoe speelt geweld een rol in hun profiel?", + "report_flow.screen.root_guild.subtitle": "Kies de beste omschrijving voor wat er in deze community gebeurt.", + "report_flow.screen.root_guild.title": "Wat is er mis met deze community?", + "report_flow.screen.root_message.subtitle": "Kies de beste omschrijving. Je kunt alles controleren voordat het wordt verzonden.", + "report_flow.screen.root_message.title": "Bericht melden", + "report_flow.screen.root_user.subtitle": "Kies de beste omschrijving voor wat er in hun profiel staat.", + "report_flow.screen.root_user.title": "Wat is er mis met hun profiel?", + "report_flow.screen.self_harm.subtitle": "Niemand wordt gestraft als ze zeggen dat ze het moeilijk hebben. Als je ons vertelt dat je je zorgen maakt, kunnen we ondersteuning bieden.", + "report_flow.screen.self_harm.title": "Wat hebben ze gezegd of gedeeld?", + "report_flow.screen.self_harm_guild.title": "Wat moedigen leden aan?", + "report_flow.screen.self_harm_profile.title": "Wat zegt of toont hun profiel?", + "report_flow.screen.sexual.subtitle": "Als iemand die te zien is of erbij betrokken is, jonger is dan 18, kies dan “Een minderjarige seksualiseren”.", + "report_flow.screen.sexual.title": "Vertel ons over de seksuele inhoud", + "report_flow.screen.sexual_guild.subtitle": "Als iemand die te zien is of erbij betrokken is, jonger is dan 18, kies dan “Minderjarigen seksualiseren”.", + "report_flow.screen.sexual_guild.title": "Vertel ons over de seksuele inhoud in deze community", + "report_flow.screen.something_else_guild.title": "Wat is er nog meer aan de hand in deze community?", + "report_flow.screen.something_else_message.title": "Wat is er nog meer aan de hand?", + "report_flow.screen.something_else_user.title": "Wat is er nog meer mis met dit profiel?", + "report_flow.screen.spam_kind_guild.title": "Hoe misbruikt deze community het platform?", + "report_flow.screen.spam_profile.title": "Hoe wordt het account misbruikt?", + "report_flow.screen.threat.title": "Hoe speelt geweld hierbij een rol?", + "report_flow.screen.violence_misinfo.title": "Welke van deze past erbij?", + "report_flow.screen.violence_misinfo_guild.title": "Welke van deze gebeurt er in deze community?" }); export default CONTENT_I18N_NL_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/no.ts b/fluxer_api/src/api/content_i18n/locales/no.ts index ac74f68b9..2c4dbf75d 100644 --- a/fluxer_api/src/api/content_i18n/locales/no.ts +++ b/fluxer_api/src/api/content_i18n/locales/no.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_NO_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Tekstkanaler", "guild.default_category_voice": "Talekanaler", "guild.default_channel_text": "generelt", - "guild.default_channel_voice": "Generelt" + "guild.default_channel_voice": "Generelt", + "report_flow.description.name": "Brukernavn, visningsnavn eller kallenavn i fellesskapet", + "report_flow.description.photo": "Hva de bruker som avatar og banner", + "report_flow.description.profile_text": "Bio, egendefinert status eller pronomen", + "report_flow.label.abuse": "Støtende eller skadelig innhold", + "report_flow.label.account_trading": "Salg av kontoer, stjålne pålogginger eller kortdetaljer", + "report_flow.label.account_trading_communities": "Kjøp eller salg av kontoer eller fellesskap", + "report_flow.label.address": "Hjemmeadresse eller arbeidsplass", + "report_flow.label.adult_content_no_gate": "Voksent innhold uten 18+ aldersbegrensning", + "report_flow.label.adult_content_profile": "Eksplisitt voksent innhold i profilen deres", + "report_flow.label.adult_content_unmarked": "Voksent innhold i en fellesskapskanal som ikke er merket 18+", + "report_flow.label.age_no_message": "Nei, det nevnes ikke", + "report_flow.label.age_no_profile": "Nei, det nevnes ikke", + "report_flow.label.age_yes_message": "Ja, alderen deres nevnes", + "report_flow.label.age_yes_profile": "Ja, profilen deres nevner alderen deres", + "report_flow.label.atrocity_denial": "Benekter eller feirer Holocaust eller andre folkemord", + "report_flow.label.ban_evasion": "Omgår en utestengelse med en annen konto", + "report_flow.label.channel_names": "Kanalnavn", + "report_flow.label.community_banner": "Fellesskapsbanner", + "report_flow.label.community_icon": "Fellesskapsikon", + "report_flow.label.community_name": "Fellesskapsnavn", + "report_flow.label.conversion_therapy": "Fremmer konverteringsterapi", + "report_flow.label.copyright": "Klage på opphavsrett eller varemerke", + "report_flow.label.crisis_lines": "Kriselinjer i landet ditt", + "report_flow.label.csam": "Ekte eller AI-genererte bilder eller videoer av seksuelle overgrep mot barn", + "report_flow.label.discovery_listing": "Oppføring i Oppdag", + "report_flow.label.dislike": "Det er bare ikke noe for meg", + "report_flow.label.dsa": "Innhold som er ulovlig i EU (forordningen om digitale tjenester, DSA)", + "report_flow.label.eating_disorder_promotion": "Oppfordrer til spiseforstyrrelser", + "report_flow.label.eating_disorder_promotion_profile": "Profilen deres fremmer spiseforstyrrelser", + "report_flow.label.email": "E-postadresse", + "report_flow.label.emoji_stickers": "Egendefinerte emojier eller klistremerker", + "report_flow.label.face_photo": "Bilde av ansiktet deres", + "report_flow.label.fake_account": "Falsk konto, bot eller automatisert misbruk", + "report_flow.label.fake_account_profile": "En falsk eller villedende konto", + "report_flow.label.false_claims": "Sprer løgner for å skade ryktet til en bestemt person", + "report_flow.label.false_info": "Sprer skadelig falsk informasjon", + "report_flow.label.financial": "Kort-, bank- eller andre finansielle detaljer", + "report_flow.label.fraud": "De prøver å lure penger eller kontoer fra folk", + "report_flow.label.fraud_guild": "Lurer penger eller kontoer fra folk", + "report_flow.label.government_id": "ID-dokument eller ID-nummer", + "report_flow.label.graphic_violence": "Ekte vold vist for å sjokkere, som blodige voldsbilder eller dyremishandling", + "report_flow.label.harassment": "Mobbing, trakassering eller forfølgelse", + "report_flow.label.harassment_direct": "Retter gjentatte ganger fornærmelser eller krenkelser mot noen", + "report_flow.label.harassment_guild": "Trakassering, mobbing eller forfølgelse av folk", + "report_flow.label.harassment_profile": "Profilen deres trakasserer eller retter seg mot meg eller noen andre", + "report_flow.label.harmful_false_claims": "Falske påstander som kan forårsake alvorlig skade i den virkelige verden", + "report_flow.label.hate": "Hat eller diskriminering mot folk på grunn av hvem de er", + "report_flow.label.hate_dehumanizing": "Sammenligne folk med dyr, sykdom eller skitt, eller kalle dem mindre enn mennesker", + "report_flow.label.hate_incitement": "Oppfordringer til vold eller ekskludering mot en gruppe", + "report_flow.label.hate_other": "Andre angrep på folk på grunn av hvem de er", + "report_flow.label.hate_slurs": "Skjellsord, hatefulle symboler eller nedsettende stereotyper", + "report_flow.label.hate_violence": "Hat, vold eller ekstremisme", + "report_flow.label.identity": "Seksuell legning, kjønnsidentitet eller det å være interkjønn", + "report_flow.label.illegal_activity": "Annen ulovlig aktivitet", + "report_flow.label.illegal_goods": "Salg av narkotika, våpen eller andre ulovlige varer", + "report_flow.label.impersonation": "Utgir seg for å være noen, eller svindler folk", + "report_flow.label.impersonation_guild": "Utgir seg for å være {product_name} eller en annen organisasjon", + "report_flow.label.impersonation_organization": "Et selskap, en merkevare eller en gruppe", + "report_flow.label.impersonation_person": "Meg eller noen nær meg", + "report_flow.label.impersonation_public_figure": "En kjent person, for eksempel en innholdsskaper eller politiker", + "report_flow.label.impersonation_staff": "Ansatte eller support hos {product_name}", + "report_flow.label.intimate_image_abuse": "Intime bilder delt uten samtykke, inkludert deepfakes, eller trussel om å dele dem", + "report_flow.label.intimate_image_abuse_guild": "Deler intime bilder uten samtykke, inkludert deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime bilder av noen delt uten samtykke, inkludert deepfakes", + "report_flow.label.intimate_photo": "Intimt bilde eller nakenbilde", + "report_flow.label.invite_splash": "Invitasjonsbakgrunn", + "report_flow.label.ip_address": "IP-adresse", + "report_flow.label.learn_more": "Les retningslinjene for fellesskapet på {product_name}", + "report_flow.label.legal_name": "Ekte eller juridisk navn", + "report_flow.label.lgbtq_targeting": "Bevisst feilkjønning, «deadnaming» eller «outing» av noen, eller benektelse av deres identitet", + "report_flow.label.malware_guild": "Distribuerer skadelig programvare eller phishing-lenker", + "report_flow.label.malware_phishing": "Phishing, skadelig programvare eller hackingforsøk", + "report_flow.label.member_activity": "Hva medlemmer legger ut eller gjør der", + "report_flow.label.metric_manipulation": "Juks med antall medlemmer eller reaksjoner", + "report_flow.label.minor_contact": "Ber en mindreårig om å møtes, eller om bilder eller personlige detaljer, på en måte som tyder på at de vil utnytte den mindreårige", + "report_flow.label.minor_dating_community": "Det er et fellesskap for dating mellom mindreårige", + "report_flow.label.minor_fictional": "Tegnet, skrevet eller AI-generert seksuelt innhold av et fiktivt barn", + "report_flow.label.minor_grooming": "Grooming eller oppbygging av upassende tillit hos en mindreårig", + "report_flow.label.minor_grooming_guild": "Medlemmer driver grooming av mindreårige eller bygger upassende tillit hos dem", + "report_flow.label.minor_in_adult_space": "En mindreårig er i en 18+-kanal eller et 18+-fellesskap", + "report_flow.label.minor_in_adult_space_guild": "Mindreårige er tillatt i 18+-kanaler", + "report_flow.label.minor_risk": "Setter en mindreårig i fare", + "report_flow.label.minor_risk_guild": "Setter mindreårige i fare", + "report_flow.label.minor_sexual": "Seksualisering av en mindreårig", + "report_flow.label.minor_sexual_contact": "Flørter med en mindreårig eller sender seksuelle meldinger til dem", + "report_flow.label.minor_sexual_contact_guild": "Medlemmer flørter med mindreårige eller sender dem seksuelle meldinger", + "report_flow.label.minor_sexual_content": "En mindreårig deler selv seksuelt innhold", + "report_flow.label.minor_sexual_content_guild": "Mindreårige legger ut eller sender seksuelt innhold", + "report_flow.label.minor_sexual_content_profile": "En mindreårigs profil med seksuelt innhold", + "report_flow.label.minor_sexual_guild": "Seksualisering av mindreårige", + "report_flow.label.minor_sexualization": "Seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_guild": "Medlemmer kommer med seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_profile": "Seksuelle kommentarer om mindreårige i profilen deres", + "report_flow.label.name": "Navn", + "report_flow.label.other": "Noe som ikke er oppført her", + "report_flow.label.other_identifying": "Annen informasjon som kan identifisere eller lokalisere noen", + "report_flow.label.permits_violations": "Det tillater alvorlige brudd på reglene", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Skraping, automatisering eller annet plattformmisbruk", + "report_flow.label.private_conversation": "Private meldinger, skjermbilder eller samtaleopptak", + "report_flow.label.private_info": "Deler noens private detaljer", + "report_flow.label.private_info_profile": "Profilen deres deler noens private detaljer", + "report_flow.label.profile_text": "Profiltekst", + "report_flow.label.raid": "Organiserer eller deltar i et raid eller et samordnet angrep", + "report_flow.label.raid_guild": "Organiserer raid eller samordnede angrep mot personer eller fellesskap", + "report_flow.label.rude_language": "Banning eller frekke bemerkninger", + "report_flow.label.self_harm": "Noen kan skade seg selv, eller oppfordrer til selvskading", + "report_flow.label.self_harm_graphic": "Grafiske bilder av selvskading", + "report_flow.label.self_harm_guild": "Medlemmer presser andre til å skade seg selv", + "report_flow.label.self_harm_pressure": "Presser eller utfordrer noen til å skade seg selv", + "report_flow.label.self_harm_pressure_guild": "Presser eller utfordrer folk til å skade seg selv", + "report_flow.label.self_harm_profile": "Profilen deres antyder selvskading eller oppfordrer til det", + "report_flow.label.self_harm_promotion": "Oppfordrer til selvskading eller deler metoder", + "report_flow.label.self_harm_promotion_profile": "Profilen deres oppfordrer til selvskading", + "report_flow.label.sexual": "Seksuelt innhold", + "report_flow.label.sexual_exploitation": "Seksuell utnyttelse, tvang eller menneskehandel", + "report_flow.label.sexual_unwanted": "Seksuelle bilder eller meldinger jeg ikke ønsket", + "report_flow.label.something_else": "Noe annet", + "report_flow.label.spam": "Spam eller uønskede annonser", + "report_flow.label.spam_bulk": "Sender spam eller reklame i bulk", + "report_flow.label.spam_or_manipulation": "Spam eller plattformmanipulering", + "report_flow.label.spam_profile": "Profilen deres brukes til spam eller reklame", + "report_flow.label.suicide_promotion": "Oppfordrer til selvmord eller deler metoder", + "report_flow.label.suicide_promotion_profile": "Profilen deres oppfordrer til selvmord", + "report_flow.label.synthetic_media": "Falske eller AI-genererte medier som presenteres som ekte", + "report_flow.label.terrorism": "Terrorisme eller voldelig ekstremisme", + "report_flow.label.terrorism_guild": "Rekrutterer for eller fremmer terrorisme eller voldelig ekstremisme", + "report_flow.label.threat": "Trusler eller oppfordringer til vold", + "report_flow.label.threat_to_share": "De truer med å dele det", + "report_flow.label.too_young": "De er under minimumsalderen for å bruke {product_name}", + "report_flow.label.unwanted_contact": "Forfølgelse eller gjentatt kontakt med meg eller noen andre etter å ha blitt bedt om å stoppe, blokkert eller fjernet", + "report_flow.label.violence_glorification": "Forherliger vold i den virkelige verden", + "report_flow.label.violence_incitement": "Oppmuntring til vold eller forklaring av hvordan man skader folk", + "report_flow.label.violence_misinfo": "Vold, ekstremisme eller skadelig falsk informasjon", + "report_flow.label.violent_threat": "Sier at de vil skade noen", + "report_flow.label.worried_profile": "Jeg er bekymret for sikkerheten deres", + "report_flow.label.worried_self_harm": "Jeg er redd de kan skade seg selv", + "report_flow.label.worried_suicide": "Jeg er redd de kan forsøke selvmord", + "report_flow.notice.need_more_info.body": "For å kunne vurdere dette trenger vi en melding der de sier hvor gamle de er, eller gjør det klart at de er under minimumsalderen på {product_name}. Rapporter den meldingen i stedet.", + "report_flow.notice.need_more_info.title": "Vi kan ikke gjøre noe med dette ennå", + "report_flow.notice.need_more_info_profile.body": "For å kunne vurdere dette trenger vi å se hvor de sier hvor gamle de er, eller gjør det klart at de er under minimumsalderen på {product_name}. Rapporter den meldingen eller profilen i stedet.", + "report_flow.screen.abuse.title": "Hva innebærer det?", + "report_flow.screen.abuse_guild.title": "Hva gjør folk i dette fellesskapet?", + "report_flow.screen.age_stated_message.title": "Sier denne meldingen hvor gamle de er?", + "report_flow.screen.age_stated_profile.title": "Sier profilen deres hvor gamle de er?", + "report_flow.screen.community_parts.subtitle": "Velg så mange du trenger.", + "report_flow.screen.community_parts.title": "Hvilke deler av fellesskapet er involvert?", + "report_flow.screen.crisis_support.subtitle": "Kriselinjer tilbyr gratis, konfidensiell støtte.", + "report_flow.screen.crisis_support.title": "Noen kan hjelpe akkurat nå", + "report_flow.screen.false_info.subtitle": "Meninger, satire og debatt i god tro er tillatt. Ulovlig ærekrenkelse kan rapporteres i henhold til forordningen om digitale tjenester (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meninger, satire og debatt i god tro er tillatt.", + "report_flow.screen.false_info.title": "Hva er misvisende med det?", + "report_flow.screen.harassment.title": "Hvordan blir noen rammet?", + "report_flow.screen.hate.title": "Hvordan angriper det folk på grunn av hvem de er?", + "report_flow.screen.impersonation.subtitle": "Tydelig merket parodi eller rollespill er tillatt.", + "report_flow.screen.impersonation.title": "Hvem blir etterlignet, eller er det svindel?", + "report_flow.screen.minor_risk.title": "Hvordan setter denne personen en mindreårig i fare?", + "report_flow.screen.minor_risk_guild.title": "Hvordan setter dette fellesskapet mindreårige i fare?", + "report_flow.screen.minor_sexual.subtitle": "Tegnet, skrevet eller AI-generert innhold regnes med når en karakter beskrives som mindreårig eller tydelig er i førpubertet, inkludert lolicon, shotacon og cub.", + "report_flow.screen.minor_sexual.title": "Hva så du som involverte en mindreårig?", + "report_flow.screen.minor_sexual_guild.title": "Hva så du som involverte mindreårige?", + "report_flow.screen.private_info.subtitle": "Velg så mange du trenger. Hvis et intimt bilde viser noen under 18 år, gå tilbake og rapporter det under «Seksualisering av en mindreårig».", + "report_flow.screen.private_info.title": "Hvilke private detaljer er involvert?", + "report_flow.screen.profile_abuse.title": "Hva er skadelig med profilen deres?", + "report_flow.screen.profile_hate_violence.title": "Hva viser eller fremmer profilen deres?", + "report_flow.screen.profile_intro.options_heading": "Lær mer", + "report_flow.screen.profile_intro.subtitle": "Fortell oss hva som er galt med denne profilen. De vil ikke få vite hvem som rapporterte dem.", + "report_flow.screen.profile_intro.title": "Rapporter profil", + "report_flow.screen.profile_minor_sexual.title": "Hva i profilen deres involverer en mindreårig?", + "report_flow.screen.profile_parts.subtitle": "Velg så mange du trenger.", + "report_flow.screen.profile_parts.title": "Hvilke deler av profilen deres er et problem?", + "report_flow.screen.profile_private_info.title": "Hvilke private detaljer er i profilen deres?", + "report_flow.screen.profile_sexual.title": "Fortell oss om det seksuelle innholdet i profilen deres", + "report_flow.screen.profile_threat.title": "Hvordan involverer profilen deres vold?", + "report_flow.screen.root_guild.subtitle": "Velg alternativet som passer best med det som skjer i dette fellesskapet.", + "report_flow.screen.root_guild.title": "Hva er galt med dette fellesskapet?", + "report_flow.screen.root_message.subtitle": "Velg alternativet som passer best. Du kan se over alt før det sendes.", + "report_flow.screen.root_message.title": "Rapporter melding", + "report_flow.screen.root_user.subtitle": "Velg alternativet som passer best med det som står i profilen deres.", + "report_flow.screen.root_user.title": "Hva er galt med profilen deres?", + "report_flow.screen.self_harm.subtitle": "Ingen blir straffet for å si at de sliter. Å fortelle oss at du er bekymret hjelper oss med å tilby støtte.", + "report_flow.screen.self_harm.title": "Hva sa eller delte de?", + "report_flow.screen.self_harm_guild.title": "Hva oppfordrer medlemmene til?", + "report_flow.screen.self_harm_profile.title": "Hva sier eller viser profilen deres?", + "report_flow.screen.sexual.subtitle": "Hvis noen som vises eller er involvert, er under 18 år, velg «Seksualisering av en mindreårig».", + "report_flow.screen.sexual.title": "Fortell oss om det seksuelle innholdet", + "report_flow.screen.sexual_guild.subtitle": "Hvis noen som vises eller er involvert, er under 18 år, velg «Seksualisering av mindreårige».", + "report_flow.screen.sexual_guild.title": "Fortell oss om det seksuelle innholdet i dette fellesskapet", + "report_flow.screen.something_else_guild.title": "Hva annet skjer i dette fellesskapet?", + "report_flow.screen.something_else_message.title": "Hva annet skjer?", + "report_flow.screen.something_else_user.title": "Hva annet er galt med denne profilen?", + "report_flow.screen.spam_kind_guild.title": "Hvordan misbruker dette fellesskapet plattformen?", + "report_flow.screen.spam_profile.title": "Hvordan misbrukes kontoen?", + "report_flow.screen.threat.title": "Hvordan involverer det vold?", + "report_flow.screen.violence_misinfo.title": "Hvilket av disse passer best?", + "report_flow.screen.violence_misinfo_guild.title": "Hvilket av disse skjer i dette fellesskapet?" }); export default CONTENT_I18N_NO_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/pl.ts b/fluxer_api/src/api/content_i18n/locales/pl.ts index 6bff50da3..6b5f0fcb5 100644 --- a/fluxer_api/src/api/content_i18n/locales/pl.ts +++ b/fluxer_api/src/api/content_i18n/locales/pl.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_PL_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Kanały tekstowe", "guild.default_category_voice": "Kanały głosowe", "guild.default_channel_text": "ogólny", - "guild.default_channel_voice": "Ogólny" + "guild.default_channel_voice": "Ogólny", + "report_flow.description.name": "Nazwa użytkownika, nazwa wyświetlana lub pseudonim w społeczności", + "report_flow.description.photo": "Awatar i baner, których używają", + "report_flow.description.profile_text": "Biogram, status niestandardowy lub zaimki", + "report_flow.label.abuse": "Treści obraźliwe lub szkodliwe", + "report_flow.label.account_trading": "Sprzedaż kont lub skradzionych danych logowania albo danych kart", + "report_flow.label.account_trading_communities": "Kupowanie lub sprzedawanie kont lub społeczności", + "report_flow.label.address": "Adres domowy lub miejsce pracy", + "report_flow.label.adult_content_no_gate": "Treści dla dorosłych bez ograniczenia wiekowego 18+", + "report_flow.label.adult_content_profile": "Dosłowne treści dla dorosłych w ich profilu", + "report_flow.label.adult_content_unmarked": "Treści dla dorosłych w kanale społeczności, który nie jest oznaczony jako 18+", + "report_flow.label.age_no_message": "Nie, ta wiadomość o tym nie wspomina", + "report_flow.label.age_no_profile": "Nie, ich profil o tym nie wspomina", + "report_flow.label.age_yes_message": "Tak, wiadomość wspomina o wieku tej osoby", + "report_flow.label.age_yes_profile": "Tak, ich profil wspomina o ich wieku", + "report_flow.label.atrocity_denial": "Zaprzeczanie Holokaustowi lub innym ludobójstwom albo ich gloryfikowanie", + "report_flow.label.ban_evasion": "Omijanie bana za pomocą innego konta", + "report_flow.label.channel_names": "Nazwy kanałów", + "report_flow.label.community_banner": "Baner społeczności", + "report_flow.label.community_icon": "Ikona społeczności", + "report_flow.label.community_name": "Nazwa społeczności", + "report_flow.label.conversion_therapy": "Promowanie terapii konwersyjnej", + "report_flow.label.copyright": "Skarga dotycząca praw autorskich lub znaku towarowego", + "report_flow.label.crisis_lines": "Linie kryzysowe w Twoim kraju", + "report_flow.label.csam": "Prawdziwe lub wygenerowane przez AI obrazy lub filmy przedstawiające wykorzystywanie seksualne dzieci", + "report_flow.label.discovery_listing": "Wpis w sekcji Odkrywanie", + "report_flow.label.dislike": "To po prostu nie jest dla mnie", + "report_flow.label.dsa": "Treści, które są nielegalne w UE (akt o usługach cyfrowych)", + "report_flow.label.eating_disorder_promotion": "Zachęcanie do zaburzeń odżywiania", + "report_flow.label.eating_disorder_promotion_profile": "Ich profil promuje zaburzenia odżywiania", + "report_flow.label.email": "Adres e-mail", + "report_flow.label.emoji_stickers": "Niestandardowe emoji lub naklejki", + "report_flow.label.face_photo": "Zdjęcie ich twarzy", + "report_flow.label.fake_account": "Fałszywe konto, bot lub zautomatyzowane nadużycie", + "report_flow.label.fake_account_profile": "Fałszywe lub oszukańcze konto", + "report_flow.label.false_claims": "Rozpowszechnianie kłamstw w celu zaszkodzenia reputacji konkretnej osoby", + "report_flow.label.false_info": "Rozpowszechnianie szkodliwych fałszywych informacji", + "report_flow.label.financial": "Karta, bank lub inne dane finansowe", + "report_flow.label.fraud": "Próbują wyłudzić od ludzi pieniądze lub konta", + "report_flow.label.fraud_guild": "Wyłudzanie od ludzi pieniędzy lub kont", + "report_flow.label.government_id": "Dokument tożsamości lub numer identyfikacyjny", + "report_flow.label.graphic_violence": "Prawdziwa przemoc pokazywana, by szokować, np. krwawe sceny lub okrucieństwo wobec zwierząt", + "report_flow.label.harassment": "Zastraszanie, nękanie lub prześladowanie", + "report_flow.label.harassment_direct": "Wielokrotne obrażanie lub znęcanie się nad kimś", + "report_flow.label.harassment_guild": "Nękanie, zastraszanie lub prześladowanie ludzi", + "report_flow.label.harassment_profile": "Profil tej osoby nęka lub atakuje mnie lub kogoś innego", + "report_flow.label.harmful_false_claims": "Fałszywe twierdzenia, które mogą spowodować poważne szkody w świecie rzeczywistym", + "report_flow.label.hate": "Nienawiść lub dyskryminacja wobec ludzi ze względu na to, kim są", + "report_flow.label.hate_dehumanizing": "Porównywanie ludzi do zwierząt, chorób lub brudu, lub nazywanie ich podludźmi", + "report_flow.label.hate_incitement": "Nawoływanie do przemocy lub wykluczenia wobec grupy", + "report_flow.label.hate_other": "Inne ataki na ludzi ze względu na to, kim są", + "report_flow.label.hate_slurs": "Obraźliwe określenia, symbole nienawiści lub poniżające stereotypy", + "report_flow.label.hate_violence": "Nienawiść, przemoc lub ekstremizm", + "report_flow.label.identity": "Orientacja seksualna, tożsamość płciowa lub status interpłciowy", + "report_flow.label.illegal_activity": "Inna nielegalna działalność", + "report_flow.label.illegal_goods": "Sprzedaż narkotyków, broni lub innych nielegalnych towarów", + "report_flow.label.impersonation": "Podszywanie się pod kogoś lub oszukiwanie ludzi", + "report_flow.label.impersonation_guild": "Podszywanie się pod {product_name} lub inną organizację", + "report_flow.label.impersonation_organization": "Firma, marka lub grupa", + "report_flow.label.impersonation_person": "Ja lub ktoś mi bliski", + "report_flow.label.impersonation_public_figure": "Znana osoba, np. twórca lub polityk", + "report_flow.label.impersonation_staff": "Pracownicy lub pomoc techniczna platformy {product_name}", + "report_flow.label.intimate_image_abuse": "Intymne zdjęcia udostępnione bez zgody, w tym deepfakes, lub groźba ich udostępnienia", + "report_flow.label.intimate_image_abuse_guild": "Udostępnianie intymnych zdjęć bez zgody, w tym deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intymne zdjęcia kogoś udostępnione bez zgody, w tym deepfakes", + "report_flow.label.intimate_photo": "Intymne lub nagie zdjęcie", + "report_flow.label.invite_splash": "Tło strony zaproszenia", + "report_flow.label.ip_address": "Adres IP", + "report_flow.label.learn_more": "Przeczytaj Wytyczne społeczności {product_name}", + "report_flow.label.legal_name": "Prawdziwe lub prawne imię i nazwisko", + "report_flow.label.lgbtq_targeting": "Celowe używanie niewłaściwych form płciowych (misgendering), używanie dawnego imienia (deadnaming), ujawnianie czyjejś tożsamości wbrew woli (outing) lub zaprzeczanie czyjejś tożsamości", + "report_flow.label.malware_guild": "Rozpowszechnianie złośliwego oprogramowania lub linków phishingowych", + "report_flow.label.malware_phishing": "Phishing, złośliwe oprogramowanie lub próby włamania", + "report_flow.label.member_activity": "Co członkowie tam publikują lub robią", + "report_flow.label.metric_manipulation": "Fałszowanie liczby członków lub reakcji", + "report_flow.label.minor_contact": "Proszenie nieletniego o spotkanie, zdjęcia lub dane osobowe w sposób sugerujący zamiar wykorzystania", + "report_flow.label.minor_dating_community": "To społeczność, w której nieletni umawiają się ze sobą na randki", + "report_flow.label.minor_fictional": "Rysowane, pisane lub generowane przez AI treści seksualne przedstawiające fikcyjne dziecko", + "report_flow.label.minor_grooming": "Grooming lub budowanie nieodpowiedniego zaufania u nieletniego", + "report_flow.label.minor_grooming_guild": "Członkowie stosują grooming wobec nieletnich lub budują u nich nieodpowiednie zaufanie", + "report_flow.label.minor_in_adult_space": "Nieletni znajduje się na kanale lub w społeczności 18+", + "report_flow.label.minor_in_adult_space_guild": "Nieletnim wolno przebywać na kanałach 18+", + "report_flow.label.minor_risk": "Narażanie nieletniego na ryzyko", + "report_flow.label.minor_risk_guild": "Narażanie nieletnich na ryzyko", + "report_flow.label.minor_sexual": "Seksualizowanie nieletniego", + "report_flow.label.minor_sexual_contact": "Flirtowanie z nieletnim lub wysyłanie mu wiadomości o charakterze seksualnym", + "report_flow.label.minor_sexual_contact_guild": "Członkowie flirtują z nieletnimi lub wysyłają im wiadomości o charakterze seksualnym", + "report_flow.label.minor_sexual_content": "Nieletni sam udostępnia treści o charakterze seksualnym", + "report_flow.label.minor_sexual_content_guild": "Nieletni publikują lub wysyłają treści o charakterze seksualnym", + "report_flow.label.minor_sexual_content_profile": "Profil nieletniego z treściami o charakterze seksualnym", + "report_flow.label.minor_sexual_guild": "Seksualizowanie nieletnich", + "report_flow.label.minor_sexualization": "Komentarze o charakterze seksualnym dotyczące nieletnich", + "report_flow.label.minor_sexualization_guild": "Członkowie zamieszczają komentarze o charakterze seksualnym dotyczące nieletnich", + "report_flow.label.minor_sexualization_profile": "Komentarze o charakterze seksualnym dotyczące nieletnich w ich profilu", + "report_flow.label.name": "Nazwy", + "report_flow.label.other": "Coś, czego nie ma na liście", + "report_flow.label.other_identifying": "Inne informacje, które mogłyby zidentyfikować lub zlokalizować kogoś", + "report_flow.label.permits_violations": "Umożliwia poważne łamanie zasad", + "report_flow.label.phone": "Numer telefonu", + "report_flow.label.photo": "Obrazy", + "report_flow.label.platform_abuse": "Scraping, automatyzacja lub inne nadużycia platformy", + "report_flow.label.private_conversation": "Prywatne wiadomości, zrzuty ekranu lub nagrania rozmów", + "report_flow.label.private_info": "Udostępnianie prywatnych danych kogoś innego", + "report_flow.label.private_info_profile": "Ich profil udostępnia prywatne dane kogoś innego", + "report_flow.label.profile_text": "Tekst profilu", + "report_flow.label.raid": "Organizowanie lub dołączanie do nalotu lub nagonki", + "report_flow.label.raid_guild": "Organizowanie nalotów lub nagonki na osoby lub społeczności", + "report_flow.label.rude_language": "Przekleństwa lub niegrzeczne uwagi", + "report_flow.label.self_harm": "Ktoś może się skrzywdzić lub zachęca do samookaleczenia", + "report_flow.label.self_harm_graphic": "Drastyczne obrazy samookaleczeń", + "report_flow.label.self_harm_guild": "Członkowie namawiają innych do samookaleczenia", + "report_flow.label.self_harm_pressure": "Wywieranie presji na kogoś lub rzucanie mu wyzwania, aby zrobił sobie krzywdę", + "report_flow.label.self_harm_pressure_guild": "Wywieranie presji na ludzi lub rzucanie im wyzwania, aby zrobili sobie krzywdę", + "report_flow.label.self_harm_profile": "Ich profil sugeruje samookaleczenie lub do niego zachęca", + "report_flow.label.self_harm_promotion": "Zachęcanie do samookaleczenia lub udostępnianie metod", + "report_flow.label.self_harm_promotion_profile": "Ich profil zachęca do samookaleczeń", + "report_flow.label.sexual": "Treści o charakterze seksualnym", + "report_flow.label.sexual_exploitation": "Wykorzystywanie seksualne, przymus lub handel ludźmi", + "report_flow.label.sexual_unwanted": "Niechciane obrazy lub wiadomości o charakterze seksualnym", + "report_flow.label.something_else": "Coś innego", + "report_flow.label.spam": "Spam lub niechciane reklamy", + "report_flow.label.spam_bulk": "Wysyłanie spamu lub reklam masowo", + "report_flow.label.spam_or_manipulation": "Spam lub manipulacja platformą", + "report_flow.label.spam_profile": "Ich profil jest używany do spamu lub reklam", + "report_flow.label.suicide_promotion": "Zachęcanie do samobójstwa lub udostępnianie metod", + "report_flow.label.suicide_promotion_profile": "Ich profil zachęca do samobójstwa", + "report_flow.label.synthetic_media": "Fałszywe lub stworzone przez AI media przedstawiane jako prawdziwe", + "report_flow.label.terrorism": "Terroryzm lub brutalny ekstremizm", + "report_flow.label.terrorism_guild": "Rekrutowanie lub promowanie terroryzmu lub brutalnego ekstremizmu", + "report_flow.label.threat": "Groźby lub nawoływanie do przemocy", + "report_flow.label.threat_to_share": "Grożą, że to udostępnią", + "report_flow.label.too_young": "Ta osoba jest poniżej minimalnego wieku wymaganego do korzystania z platformy {product_name}", + "report_flow.label.unwanted_contact": "Prześladowanie lub wielokrotne kontaktowanie się ze mną lub kimś innym po prośbie o zaprzestanie, po zablokowaniu lub usunięciu", + "report_flow.label.violence_glorification": "Gloryfikowanie przemocy w świecie rzeczywistym", + "report_flow.label.violence_incitement": "Zachęcanie do przemocy lub wyjaśnianie, jak krzywdzić ludzi", + "report_flow.label.violence_misinfo": "Przemoc, ekstremizm lub szkodliwe fałszywe informacje", + "report_flow.label.violent_threat": "Grożenie komuś krzywdą", + "report_flow.label.worried_profile": "Martwię się o bezpieczeństwo tej osoby", + "report_flow.label.worried_self_harm": "Obawiam się, że ta osoba może zrobić sobie krzywdę", + "report_flow.label.worried_suicide": "Obawiam się, że ta osoba może podjąć próbę samobójczą", + "report_flow.notice.need_more_info.body": "Aby to rozpatrzyć, potrzebujemy wiadomości, w której ta osoba podaje swój wiek lub jasno daje do zrozumienia, że jest poniżej minimalnego wieku wymaganego na platformie {product_name}. Zgłoś zamiast tego taką wiadomość.", + "report_flow.notice.need_more_info.title": "Na razie nie możemy podjąć działań w tej sprawie", + "report_flow.notice.need_more_info_profile.body": "Aby to rozpatrzyć, musimy zobaczyć miejsce, w którym ta osoba podaje swój wiek lub jasno daje do zrozumienia, że jest poniżej minimalnego wieku wymaganego na platformie {product_name}. Zgłoś zamiast tego taką wiadomość lub taki profil.", + "report_flow.screen.abuse.title": "Czego to dotyczy?", + "report_flow.screen.abuse_guild.title": "Co robią ludzie w tej społeczności?", + "report_flow.screen.age_stated_message.title": "Czy w tej wiadomości podano wiek tej osoby?", + "report_flow.screen.age_stated_profile.title": "Czy w ich profilu podano wiek?", + "report_flow.screen.community_parts.subtitle": "Wybierz tyle, ile potrzebujesz.", + "report_flow.screen.community_parts.title": "Których części społeczności to dotyczy?", + "report_flow.screen.crisis_support.subtitle": "Linie kryzysowe oferują bezpłatne, poufne wsparcie.", + "report_flow.screen.crisis_support.title": "Ktoś może pomóc od razu", + "report_flow.screen.false_info.subtitle": "Opinie, satyra i debata w dobrej wierze są dozwolone. Niezgodne z prawem zniesławienie można zgłosić na podstawie aktu o usługach cyfrowych (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinie, satyra i debata w dobrej wierze są dozwolone.", + "report_flow.screen.false_info.title": "Co jest w tym mylące?", + "report_flow.screen.harassment.title": "W jaki sposób ktoś jest atakowany?", + "report_flow.screen.hate.title": "Jak atakuje ludzi ze względu na to, kim są?", + "report_flow.screen.impersonation.subtitle": "Wyraźnie oznaczone parodie lub odgrywanie ról są dozwolone.", + "report_flow.screen.impersonation.title": "Kogo dotyczy podszywanie się albo czy to oszustwo?", + "report_flow.screen.minor_risk.title": "W jaki sposób ta osoba naraża nieletniego na ryzyko?", + "report_flow.screen.minor_risk_guild.title": "W jaki sposób ta społeczność naraża nieletnich na ryzyko?", + "report_flow.screen.minor_sexual.subtitle": "Treści rysowane, pisane lub generowane przez AI również się kwalifikują, gdy postać jest opisana jako nieletnia lub jest wyraźnie przed okresem dojrzewania, w tym lolicon, shotacon i cub.", + "report_flow.screen.minor_sexual.title": "Co widać z udziałem nieletniego?", + "report_flow.screen.minor_sexual_guild.title": "Co widać z udziałem nieletnich?", + "report_flow.screen.private_info.subtitle": "Wybierz tyle, ile potrzebujesz. Jeśli intymne zdjęcie przedstawia osobę poniżej 18 roku życia, wróć i zgłoś je w kategorii „Seksualizowanie nieletniego”.", + "report_flow.screen.private_info.title": "Jakich prywatnych danych to dotyczy?", + "report_flow.screen.profile_abuse.title": "Co jest szkodliwe w ich profilu?", + "report_flow.screen.profile_hate_violence.title": "Co pokazuje lub promuje ich profil?", + "report_flow.screen.profile_intro.options_heading": "Dowiedz się więcej", + "report_flow.screen.profile_intro.subtitle": "Powiedz nam, co jest nie tak z tym profilem. Ta osoba nie dowie się, kto ją zgłosił.", + "report_flow.screen.profile_intro.title": "Zgłoś profil", + "report_flow.screen.profile_minor_sexual.title": "Co w ich profilu dotyczy nieletniego?", + "report_flow.screen.profile_parts.subtitle": "Wybierz tyle, ile potrzebujesz.", + "report_flow.screen.profile_parts.title": "Które części ich profilu stanowią problem?", + "report_flow.screen.profile_private_info.title": "Jakie prywatne dane znajdują się w ich profilu?", + "report_flow.screen.profile_sexual.title": "Powiedz nam o treściach o charakterze seksualnym w ich profilu", + "report_flow.screen.profile_threat.title": "Jak ich profil wiąże się z przemocą?", + "report_flow.screen.root_guild.subtitle": "Wybierz opcję, która najlepiej pasuje do tego, co dzieje się w tej społeczności.", + "report_flow.screen.root_guild.title": "Co jest nie tak z tą społecznością?", + "report_flow.screen.root_message.subtitle": "Wybierz opcję, która najlepiej pasuje. Przed wysłaniem możesz wszystko sprawdzić.", + "report_flow.screen.root_message.title": "Zgłoś wiadomość", + "report_flow.screen.root_user.subtitle": "Wybierz opcję, która najlepiej pasuje do tego, co jest w ich profilu.", + "report_flow.screen.root_user.title": "Co jest nie tak z ich profilem?", + "report_flow.screen.self_harm.subtitle": "Nikt nie jest karany za przyznanie, że ma trudności. Poinformowanie nas o swoich obawach pomaga nam zaoferować wsparcie.", + "report_flow.screen.self_harm.title": "Co ta osoba powiedziała lub udostępniła?", + "report_flow.screen.self_harm_guild.title": "Do czego zachęcają członkowie?", + "report_flow.screen.self_harm_profile.title": "Co mówi lub pokazuje ich profil?", + "report_flow.screen.sexual.subtitle": "Jeśli ktokolwiek pokazany lub zaangażowany ma poniżej 18 lat, wybierz „Seksualizowanie nieletniego”.", + "report_flow.screen.sexual.title": "Powiedz nam o treściach o charakterze seksualnym", + "report_flow.screen.sexual_guild.subtitle": "Jeśli ktokolwiek pokazany lub zaangażowany ma poniżej 18 lat, wybierz „Seksualizowanie nieletnich”.", + "report_flow.screen.sexual_guild.title": "Powiedz nam o treściach o charakterze seksualnym w tej społeczności", + "report_flow.screen.something_else_guild.title": "Co jeszcze dzieje się w tej społeczności?", + "report_flow.screen.something_else_message.title": "Co jeszcze się dzieje?", + "report_flow.screen.something_else_user.title": "Co jeszcze jest nie tak z tym profilem?", + "report_flow.screen.spam_kind_guild.title": "Jak ta społeczność nadużywa platformy?", + "report_flow.screen.spam_profile.title": "Jak konto jest niewłaściwie używane?", + "report_flow.screen.threat.title": "Jak to wiąże się z przemocą?", + "report_flow.screen.violence_misinfo.title": "Które z nich najlepiej to opisuje?", + "report_flow.screen.violence_misinfo_guild.title": "Które z nich ma miejsce w tej społeczności?" }); export default CONTENT_I18N_PL_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/pt-BR.ts b/fluxer_api/src/api/content_i18n/locales/pt-BR.ts index 79386b3ec..015887748 100644 --- a/fluxer_api/src/api/content_i18n/locales/pt-BR.ts +++ b/fluxer_api/src/api/content_i18n/locales/pt-BR.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_PT_BR_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Canais de texto", "guild.default_category_voice": "Canais de voz", "guild.default_channel_text": "geral", - "guild.default_channel_voice": "Geral" + "guild.default_channel_voice": "Geral", + "report_flow.description.name": "Nome de usuário, nome de exibição ou apelido na comunidade", + "report_flow.description.photo": "O que a pessoa usa como avatar e banner", + "report_flow.description.profile_text": "Biografia, status personalizado ou pronomes", + "report_flow.label.abuse": "Conteúdo abusivo ou prejudicial", + "report_flow.label.account_trading": "Venda de contas, logins roubados ou dados de cartão", + "report_flow.label.account_trading_communities": "Compra ou venda de contas ou comunidades", + "report_flow.label.address": "Endereço residencial ou local de trabalho", + "report_flow.label.adult_content_no_gate": "Conteúdo adulto sem restrição de idade 18+", + "report_flow.label.adult_content_profile": "Conteúdo adulto explícito no perfil", + "report_flow.label.adult_content_unmarked": "Conteúdo adulto em um canal da comunidade que não está marcado como 18+", + "report_flow.label.age_no_message": "Não, não menciona", + "report_flow.label.age_no_profile": "Não, não menciona", + "report_flow.label.age_yes_message": "Sim, menciona a idade da pessoa", + "report_flow.label.age_yes_profile": "Sim, o perfil menciona a idade", + "report_flow.label.atrocity_denial": "Negação ou celebração do Holocausto ou outros genocídios", + "report_flow.label.ban_evasion": "Contornar um banimento com outra conta", + "report_flow.label.channel_names": "Nomes de canais", + "report_flow.label.community_banner": "Banner da comunidade", + "report_flow.label.community_icon": "Ícone da comunidade", + "report_flow.label.community_name": "Nome da comunidade", + "report_flow.label.conversion_therapy": "Promoção de terapia de conversão", + "report_flow.label.copyright": "Reclamação de direitos autorais ou marca registrada", + "report_flow.label.crisis_lines": "Linhas de apoio em situações de crise no seu país", + "report_flow.label.csam": "Imagens ou vídeos reais ou gerados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Listagem em Descobrir", + "report_flow.label.dislike": "Não é para mim", + "report_flow.label.dsa": "Conteúdo ilegal na UE (Regulamento dos Serviços Digitais)", + "report_flow.label.eating_disorder_promotion": "Incentivando transtornos alimentares", + "report_flow.label.eating_disorder_promotion_profile": "O perfil dele(a) promove transtornos alimentares", + "report_flow.label.email": "Endereço de e-mail", + "report_flow.label.emoji_stickers": "Emojis ou figurinhas personalizados", + "report_flow.label.face_photo": "Foto do rosto dele(a)", + "report_flow.label.fake_account": "Conta falsa, bot ou abuso automatizado", + "report_flow.label.fake_account_profile": "Uma conta falsa ou enganosa", + "report_flow.label.false_claims": "Espalhar mentiras para prejudicar a reputação de uma pessoa específica", + "report_flow.label.false_info": "Espalhando informações falsas prejudiciais", + "report_flow.label.financial": "Cartão, banco ou outros detalhes financeiros", + "report_flow.label.fraud": "Estão tentando enganar pessoas para ficar com o dinheiro ou as contas delas", + "report_flow.label.fraud_guild": "Enganando pessoas para ficar com o dinheiro ou as contas delas", + "report_flow.label.government_id": "Documento de identidade ou número de identificação", + "report_flow.label.graphic_violence": "Violência real exibida para chocar, como gore ou crueldade animal", + "report_flow.label.harassment": "Bullying, assédio ou perseguição", + "report_flow.label.harassment_direct": "Atacar repetidamente alguém com insultos ou abuso", + "report_flow.label.harassment_guild": "Assédio, bullying ou perseguição a pessoas", + "report_flow.label.harassment_profile": "O perfil assedia ou ataca a mim ou a outra pessoa", + "report_flow.label.harmful_false_claims": "Alegações falsas que podem causar sérios danos no mundo real", + "report_flow.label.hate": "Ódio ou discriminação contra pessoas por quem elas são", + "report_flow.label.hate_dehumanizing": "Comparar pessoas a animais, doenças ou sujeira, ou chamá-las de menos que humanas", + "report_flow.label.hate_incitement": "Apelos à violência ou exclusão contra um grupo", + "report_flow.label.hate_other": "Outros ataques a pessoas por quem elas são", + "report_flow.label.hate_slurs": "Insultos discriminatórios, símbolos de ódio ou estereótipos depreciativos", + "report_flow.label.hate_violence": "Ódio, violência ou extremismo", + "report_flow.label.identity": "Orientação sexual, identidade de gênero ou status intersexo", + "report_flow.label.illegal_activity": "Outras atividades ilegais", + "report_flow.label.illegal_goods": "Venda de drogas, armas ou outros itens ilegais", + "report_flow.label.impersonation": "Fingir ser outra pessoa ou aplicar golpes", + "report_flow.label.impersonation_guild": "Fingir ser {product_name} ou outra organização", + "report_flow.label.impersonation_organization": "Uma empresa, marca ou grupo", + "report_flow.label.impersonation_person": "Eu ou alguém próximo a mim", + "report_flow.label.impersonation_public_figure": "Uma pessoa conhecida, como um criador de conteúdo ou político", + "report_flow.label.impersonation_staff": "Equipe ou suporte do {product_name}", + "report_flow.label.intimate_image_abuse": "Imagens íntimas compartilhadas sem consentimento, incluindo deepfakes, ou uma ameaça de compartilhá-las", + "report_flow.label.intimate_image_abuse_guild": "Compartilhamento de imagens íntimas sem consentimento, incluindo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imagens íntimas de alguém compartilhadas sem consentimento, incluindo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima ou de nudez", + "report_flow.label.invite_splash": "Imagem de fundo do convite", + "report_flow.label.ip_address": "Endereço IP", + "report_flow.label.learn_more": "Leia as Diretrizes da Comunidade do {product_name}", + "report_flow.label.legal_name": "Nome real ou nome civil", + "report_flow.label.lgbtq_targeting": "Usar de propósito o gênero errado ou o nome morto (deadnaming) de alguém, expor sua orientação ou identidade (outing) ou negar sua identidade", + "report_flow.label.malware_guild": "Distribuição de malware ou links de phishing", + "report_flow.label.malware_phishing": "Tentativas de phishing, malware ou hacking", + "report_flow.label.member_activity": "O que os membros postam ou fazem lá", + "report_flow.label.metric_manipulation": "Falsificação de contagens de membros ou reações", + "report_flow.label.minor_contact": "Pedir a um menor um encontro, fotos ou dados pessoais, de uma forma que pareça predatória", + "report_flow.label.minor_dating_community": "É uma comunidade para namoro entre menores", + "report_flow.label.minor_fictional": "Conteúdo sexual desenhado, escrito ou gerado por IA de uma criança fictícia", + "report_flow.label.minor_grooming": "Aliciar ou construir confiança inadequada com um menor", + "report_flow.label.minor_grooming_guild": "Membros aliciam ou constroem confiança inadequada com menores", + "report_flow.label.minor_in_adult_space": "Um menor está em um canal ou comunidade 18+", + "report_flow.label.minor_in_adult_space_guild": "Menores são permitidos em canais 18+", + "report_flow.label.minor_risk": "Colocando um menor em risco", + "report_flow.label.minor_risk_guild": "Colocando menores em risco", + "report_flow.label.minor_sexual": "Sexualização de menor de idade", + "report_flow.label.minor_sexual_contact": "Flertar com um menor ou enviar mensagens sexuais para ele", + "report_flow.label.minor_sexual_contact_guild": "Membros flertam com menores ou enviam mensagens sexuais para eles", + "report_flow.label.minor_sexual_content": "O próprio menor está compartilhando conteúdo sexual", + "report_flow.label.minor_sexual_content_guild": "Menores publicam ou enviam conteúdo sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de menor com conteúdo sexual", + "report_flow.label.minor_sexual_guild": "Sexualização de menores de idade", + "report_flow.label.minor_sexualization": "Comentários sexuais sobre menores", + "report_flow.label.minor_sexualization_guild": "Membros fazem comentários sexuais sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentários sexuais sobre menores no perfil", + "report_flow.label.name": "Nomes", + "report_flow.label.other": "Algo não listado aqui", + "report_flow.label.other_identifying": "Outras informações que poderiam identificar ou localizar alguém", + "report_flow.label.permits_violations": "Permite violações graves das regras", + "report_flow.label.phone": "Número de telefone", + "report_flow.label.photo": "Imagens", + "report_flow.label.platform_abuse": "Coleta de dados, automação ou outro abuso da plataforma", + "report_flow.label.private_conversation": "Mensagens privadas, capturas de tela ou gravações de chamadas", + "report_flow.label.private_info": "Compartilhamento de detalhes privados de alguém", + "report_flow.label.private_info_profile": "O perfil da pessoa compartilha detalhes privados de alguém", + "report_flow.label.profile_text": "Texto do perfil", + "report_flow.label.raid": "Organizar ou participar de um ataque ou assédio em massa", + "report_flow.label.raid_guild": "Organizar ataques ou assédios em massa contra pessoas ou comunidades", + "report_flow.label.rude_language": "Palavrões ou comentários grosseiros", + "report_flow.label.self_harm": "Alguém pode se machucar ou está incentivando automutilação", + "report_flow.label.self_harm_graphic": "Imagens gráficas de automutilação", + "report_flow.label.self_harm_guild": "Membros pressionam outras pessoas a se machucarem", + "report_flow.label.self_harm_pressure": "Pressionar ou desafiar alguém a se machucar", + "report_flow.label.self_harm_pressure_guild": "Pressionar ou desafiar pessoas a se machucarem", + "report_flow.label.self_harm_profile": "O perfil sugere automutilação ou a incentiva", + "report_flow.label.self_harm_promotion": "Incentivando automutilação ou compartilhando métodos", + "report_flow.label.self_harm_promotion_profile": "O perfil dele(a) incentiva a automutilação", + "report_flow.label.sexual": "Conteúdo sexual", + "report_flow.label.sexual_exploitation": "Exploração sexual, coerção ou tráfico de pessoas", + "report_flow.label.sexual_unwanted": "Imagens ou mensagens sexuais que eu não queria", + "report_flow.label.something_else": "Outra coisa", + "report_flow.label.spam": "Spam ou anúncios indesejados", + "report_flow.label.spam_bulk": "Envio de spam ou publicidade em massa", + "report_flow.label.spam_or_manipulation": "Spam ou manipulação da plataforma", + "report_flow.label.spam_profile": "O perfil é usado para spam ou publicidade", + "report_flow.label.suicide_promotion": "Incentivando suicídio ou compartilhando métodos", + "report_flow.label.suicide_promotion_profile": "O perfil incentiva o suicídio", + "report_flow.label.synthetic_media": "Mídia falsa ou criada por IA apresentada como real", + "report_flow.label.terrorism": "Terrorismo ou extremismo violento", + "report_flow.label.terrorism_guild": "Recrutamento ou promoção de terrorismo ou extremismo violento", + "report_flow.label.threat": "Ameaças ou apelos à violência", + "report_flow.label.threat_to_share": "A pessoa está ameaçando compartilhar isso", + "report_flow.label.too_young": "Essa pessoa não tem a idade mínima para usar o {product_name}", + "report_flow.label.unwanted_contact": "Perseguição ou contato repetido comigo ou com outra pessoa após pedido para parar, bloqueio ou remoção", + "report_flow.label.violence_glorification": "Glorificando violência do mundo real", + "report_flow.label.violence_incitement": "Incentivo à violência ou explicação de como machucar pessoas", + "report_flow.label.violence_misinfo": "Violência, extremismo ou informações falsas prejudiciais", + "report_flow.label.violent_threat": "Dizendo que vai machucar alguém", + "report_flow.label.worried_profile": "Estou preocupado(a) com a segurança dessa pessoa", + "report_flow.label.worried_self_harm": "Tenho medo de que essa pessoa se machuque", + "report_flow.label.worried_suicide": "Tenho medo de que essa pessoa tente se suicidar", + "report_flow.notice.need_more_info.body": "Para analisar isso, precisamos de uma mensagem em que a pessoa diga quantos anos tem ou deixe claro que não tem a idade mínima para usar o {product_name}. Denuncie essa mensagem em vez disso.", + "report_flow.notice.need_more_info.title": "Ainda não podemos agir", + "report_flow.notice.need_more_info_profile.body": "Para analisar isso, precisamos ver onde a pessoa diz quantos anos tem ou deixa claro que não tem a idade mínima para usar o {product_name}. Denuncie essa mensagem ou perfil em vez disso.", + "report_flow.screen.abuse.title": "O que isso envolve?", + "report_flow.screen.abuse_guild.title": "O que as pessoas nesta comunidade estão fazendo?", + "report_flow.screen.age_stated_message.title": "Esta mensagem diz a idade da pessoa?", + "report_flow.screen.age_stated_profile.title": "O perfil dessa pessoa diz quantos anos ela tem?", + "report_flow.screen.community_parts.subtitle": "Selecione quantas precisar.", + "report_flow.screen.community_parts.title": "Quais partes da comunidade estão envolvidas?", + "report_flow.screen.crisis_support.subtitle": "As linhas de apoio em situações de crise oferecem suporte gratuito e confidencial.", + "report_flow.screen.crisis_support.title": "Alguém pode ajudar agora", + "report_flow.screen.false_info.subtitle": "Opiniões, sátiras e debates de boa-fé são permitidos. Difamação ilegal pode ser denunciada nos termos do Regulamento dos Serviços Digitais.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opiniões, sátiras e debates de boa-fé são permitidos.", + "report_flow.screen.false_info.title": "O que há de enganoso nisso?", + "report_flow.screen.harassment.title": "De que forma alguém está sendo atacado(a)?", + "report_flow.screen.hate.title": "Como isso ataca pessoas por quem elas são?", + "report_flow.screen.impersonation.subtitle": "Paródias ou encenações claramente identificadas são permitidas.", + "report_flow.screen.impersonation.title": "Quem a pessoa está fingindo ser, ou é um golpe?", + "report_flow.screen.minor_risk.title": "Como esta pessoa está colocando um menor em risco?", + "report_flow.screen.minor_risk_guild.title": "Como esta comunidade coloca menores em risco?", + "report_flow.screen.minor_sexual.subtitle": "Conteúdo desenhado, escrito ou gerado por IA conta quando um personagem é descrito como menor ou é claramente pré-púbere, incluindo lolicon, shotacon e cub.", + "report_flow.screen.minor_sexual.title": "O que você viu envolvendo um menor?", + "report_flow.screen.minor_sexual_guild.title": "O que você viu envolvendo menores?", + "report_flow.screen.private_info.subtitle": "Selecione quantas precisar. Se uma foto íntima mostrar alguém com menos de 18 anos, volte e denuncie em “Sexualização de menor de idade”.", + "report_flow.screen.private_info.title": "Quais detalhes privados estão envolvidos?", + "report_flow.screen.profile_abuse.title": "O que há de prejudicial no perfil dele(a)?", + "report_flow.screen.profile_hate_violence.title": "O que o perfil dele(a) mostra ou promove?", + "report_flow.screen.profile_intro.options_heading": "Saiba mais", + "report_flow.screen.profile_intro.subtitle": "Conte-nos o que há de errado com este perfil. A pessoa não saberá quem a denunciou.", + "report_flow.screen.profile_intro.title": "Denunciar perfil", + "report_flow.screen.profile_minor_sexual.title": "O que no perfil dele(a) envolve um menor?", + "report_flow.screen.profile_parts.subtitle": "Selecione quantas precisar.", + "report_flow.screen.profile_parts.title": "Quais partes do perfil dele(a) são um problema?", + "report_flow.screen.profile_private_info.title": "Quais detalhes privados estão no perfil dele(a)?", + "report_flow.screen.profile_sexual.title": "Conte-nos sobre o conteúdo sexual no perfil dele(a)", + "report_flow.screen.profile_threat.title": "Como o perfil dele(a) envolve violência?", + "report_flow.screen.root_guild.subtitle": "Escolha a opção que melhor descreve o que está acontecendo nesta comunidade.", + "report_flow.screen.root_guild.title": "O que há de errado nesta comunidade?", + "report_flow.screen.root_message.subtitle": "Escolha a opção mais próxima. Você poderá revisar tudo antes do envio.", + "report_flow.screen.root_message.title": "Denunciar mensagem", + "report_flow.screen.root_user.subtitle": "Escolha a opção que melhor descreve o que há no perfil dele(a).", + "report_flow.screen.root_user.title": "O que há de errado no perfil dele(a)?", + "report_flow.screen.self_harm.subtitle": "Ninguém é punido por dizer que está passando por dificuldades. Contar para nós que você está preocupado(a) nos ajuda a oferecer apoio.", + "report_flow.screen.self_harm.title": "O que ele(a) disse ou compartilhou?", + "report_flow.screen.self_harm_guild.title": "O que os membros estão incentivando?", + "report_flow.screen.self_harm_profile.title": "O que o perfil dele(a) diz ou mostra?", + "report_flow.screen.sexual.subtitle": "Se alguém mostrado ou envolvido tiver menos de 18 anos, escolha “Sexualização de menor de idade”.", + "report_flow.screen.sexual.title": "Conte-nos sobre o conteúdo sexual", + "report_flow.screen.sexual_guild.subtitle": "Se alguém mostrado ou envolvido tiver menos de 18 anos, escolha “Sexualização de menores de idade”.", + "report_flow.screen.sexual_guild.title": "Conte-nos sobre o conteúdo sexual nesta comunidade", + "report_flow.screen.something_else_guild.title": "O que mais está acontecendo nesta comunidade?", + "report_flow.screen.something_else_message.title": "O que mais está acontecendo?", + "report_flow.screen.something_else_user.title": "O que mais está errado neste perfil?", + "report_flow.screen.spam_kind_guild.title": "Como esta comunidade está abusando da plataforma?", + "report_flow.screen.spam_profile.title": "Como a conta está sendo mal utilizada?", + "report_flow.screen.threat.title": "Como isso envolve violência?", + "report_flow.screen.violence_misinfo.title": "Qual destas opções corresponde?", + "report_flow.screen.violence_misinfo_guild.title": "Qual destas opções acontece nesta comunidade?" }); export default CONTENT_I18N_PT_BR_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/ro.ts b/fluxer_api/src/api/content_i18n/locales/ro.ts index a0b6e5e36..090ad67ed 100644 --- a/fluxer_api/src/api/content_i18n/locales/ro.ts +++ b/fluxer_api/src/api/content_i18n/locales/ro.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_RO_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Canale text", "guild.default_category_voice": "Canale de voce", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nume de utilizator, nume afișat sau pseudonim în comunitate", + "report_flow.description.photo": "Ce folosește ca avatar și banner", + "report_flow.description.profile_text": "Biografie, stare personalizată sau pronume", + "report_flow.label.abuse": "Conținut abuziv sau dăunător", + "report_flow.label.account_trading": "Vânzarea de conturi, de date de autentificare furate sau de date de card furate", + "report_flow.label.account_trading_communities": "Cumpărarea sau vânzarea de conturi sau comunități", + "report_flow.label.address": "Adresă de domiciliu sau loc de muncă", + "report_flow.label.adult_content_no_gate": "Conținut pentru adulți fără restricție de vârstă 18+", + "report_flow.label.adult_content_profile": "Conținut explicit pentru adulți în profilul său", + "report_flow.label.adult_content_unmarked": "Conținut pentru adulți într-un canal al comunității care nu este marcat 18+", + "report_flow.label.age_no_message": "Nu, mesajul nu menționează vârsta", + "report_flow.label.age_no_profile": "Nu, profilul nu menționează vârsta", + "report_flow.label.age_yes_message": "Da, mesajul menționează vârsta persoanei", + "report_flow.label.age_yes_profile": "Da, profilul menționează vârsta", + "report_flow.label.atrocity_denial": "Negarea sau celebrarea Holocaustului sau a altor genocide", + "report_flow.label.ban_evasion": "Ocolirea unei interdicții cu un alt cont", + "report_flow.label.channel_names": "Numele canalelor", + "report_flow.label.community_banner": "Bannerul comunității", + "report_flow.label.community_icon": "Pictograma comunității", + "report_flow.label.community_name": "Numele comunității", + "report_flow.label.conversion_therapy": "Promovarea terapiei de conversie", + "report_flow.label.copyright": "Plângere privind drepturile de autor sau marca comercială", + "report_flow.label.crisis_lines": "Linii de sprijin pentru situații de criză din țara ta", + "report_flow.label.csam": "Imagini sau videoclipuri reale sau generate de AI cu abuz sexual asupra copiilor", + "report_flow.label.discovery_listing": "Listarea în Discovery", + "report_flow.label.dislike": "Pur și simplu nu este pentru mine", + "report_flow.label.dsa": "Conținut ilegal în UE (Regulamentul privind serviciile digitale)", + "report_flow.label.eating_disorder_promotion": "Încurajarea tulburărilor de alimentație", + "report_flow.label.eating_disorder_promotion_profile": "Profilul său promovează tulburările de alimentație", + "report_flow.label.email": "Adresă de e-mail", + "report_flow.label.emoji_stickers": "Emoji sau stickere personalizate", + "report_flow.label.face_photo": "Fotografie cu fața sa", + "report_flow.label.fake_account": "Cont fals, bot sau abuz automatizat", + "report_flow.label.fake_account_profile": "Un cont fals sau înșelător", + "report_flow.label.false_claims": "Răspândirea de minciuni pentru a dăuna reputației unei anumite persoane", + "report_flow.label.false_info": "Răspândirea de informații false dăunătoare", + "report_flow.label.financial": "Card, bancă sau alte detalii financiare", + "report_flow.label.fraud": "Încearcă să obțină prin înșelăciune bani sau conturi de la oameni", + "report_flow.label.fraud_guild": "Înșelarea oamenilor pentru a obține bani sau conturi", + "report_flow.label.government_id": "Document de identitate sau număr de identificare", + "report_flow.label.graphic_violence": "Violență reală arătată pentru a șoca, de exemplu scene sângeroase (gore) sau cruzime față de animale", + "report_flow.label.harassment": "Hărțuire, intimidare sau urmărire", + "report_flow.label.harassment_direct": "Țintirea repetată a cuiva cu insulte sau abuzuri", + "report_flow.label.harassment_guild": "Hărțuirea, intimidarea sau urmărirea persoanelor", + "report_flow.label.harassment_profile": "Profilul său mă hărțuiește sau mă vizează pe mine sau pe altcineva", + "report_flow.label.harmful_false_claims": "Afirmații false care ar putea provoca daune grave în lumea reală", + "report_flow.label.hate": "Ură sau discriminare împotriva oamenilor pentru ceea ce sunt", + "report_flow.label.hate_dehumanizing": "Compararea oamenilor cu animalele, bolile sau murdăria, sau numirea lor ca fiind mai puțin decât oameni", + "report_flow.label.hate_incitement": "Apeluri la violență sau excludere împotriva unui grup", + "report_flow.label.hate_other": "Alte atacuri asupra oamenilor pentru ceea ce sunt", + "report_flow.label.hate_slurs": "Jigniri, simboluri de ură sau stereotipuri denigratoare", + "report_flow.label.hate_violence": "Ură, violență sau extremism", + "report_flow.label.identity": "Orientare sexuală, identitate de gen sau statut intersexual", + "report_flow.label.illegal_activity": "Alte activități ilegale", + "report_flow.label.illegal_goods": "Vânzări de droguri, arme sau alte bunuri ilegale", + "report_flow.label.impersonation": "Uzurparea identității cuiva sau înșelarea oamenilor", + "report_flow.label.impersonation_guild": "Pretinzând a fi {product_name} sau o altă organizație", + "report_flow.label.impersonation_organization": "O companie, marcă sau grup", + "report_flow.label.impersonation_person": "Eu sau cineva apropiat mie", + "report_flow.label.impersonation_public_figure": "O persoană cunoscută, precum un creator sau politician", + "report_flow.label.impersonation_staff": "Personal sau asistență {product_name}", + "report_flow.label.intimate_image_abuse": "Imagini intime distribuite fără consimțământ, inclusiv deepfake-uri, sau amenințarea de a le distribui", + "report_flow.label.intimate_image_abuse_guild": "Distribuirea de imagini intime fără consimțământ, inclusiv deepfake-uri", + "report_flow.label.intimate_image_abuse_profile": "Imagini intime ale cuiva distribuite fără consimțământ, inclusiv deepfake-uri", + "report_flow.label.intimate_photo": "Fotografie intimă sau nudă", + "report_flow.label.invite_splash": "Imagine de fundal a invitației", + "report_flow.label.ip_address": "Adresă IP", + "report_flow.label.learn_more": "Citește Ghidul Comunității {product_name}", + "report_flow.label.legal_name": "Nume real sau legal", + "report_flow.label.lgbtq_targeting": "Identificarea greșită deliberată a genului, deadnaming-ul sau dezvăluirea fără consimțământ a orientării sexuale sau a identității de gen a cuiva, ori negarea identității sale", + "report_flow.label.malware_guild": "Distribuirea de malware sau linkuri de phishing", + "report_flow.label.malware_phishing": "Tentative de phishing, malware sau hacking", + "report_flow.label.member_activity": "Ce postează sau fac membrii acolo", + "report_flow.label.metric_manipulation": "Falsificarea numărului de membri sau de reacții", + "report_flow.label.minor_contact": "Solicitarea unei întâlniri cu un minor sau a unor fotografii ori date personale de la acesta, într-un mod care pare prădător", + "report_flow.label.minor_dating_community": "Este o comunitate pentru întâlniri amoroase între minori", + "report_flow.label.minor_fictional": "Conținut sexual desenat, scris sau generat de AI cu un copil fictiv", + "report_flow.label.minor_grooming": "Adescare (grooming) sau câștigarea în mod nepotrivit a încrederii unui minor", + "report_flow.label.minor_grooming_guild": "Membrii adescă minori (grooming) sau câștigă în mod nepotrivit încrederea minorilor", + "report_flow.label.minor_in_adult_space": "Un minor se află într-un canal sau o comunitate 18+", + "report_flow.label.minor_in_adult_space_guild": "Minorilor li se permite accesul în canale 18+", + "report_flow.label.minor_risk": "Punerea în pericol a unui minor", + "report_flow.label.minor_risk_guild": "Punerea în pericol a minorilor", + "report_flow.label.minor_sexual": "Sexualizarea unui minor", + "report_flow.label.minor_sexual_contact": "Flirtarea cu un minor sau trimiterea de mesaje sexuale către acesta", + "report_flow.label.minor_sexual_contact_guild": "Membrii flirtează cu minori sau le trimit mesaje sexuale", + "report_flow.label.minor_sexual_content": "Un minor își distribuie singur conținut sexual", + "report_flow.label.minor_sexual_content_guild": "Minorii postează sau trimit conținut sexual", + "report_flow.label.minor_sexual_content_profile": "Profilul unui minor cu conținut sexual", + "report_flow.label.minor_sexual_guild": "Sexualizarea minorilor", + "report_flow.label.minor_sexualization": "Comentarii sexuale despre minori", + "report_flow.label.minor_sexualization_guild": "Membrii fac comentarii sexuale despre minori", + "report_flow.label.minor_sexualization_profile": "Comentarii sexuale despre minori în profilul său", + "report_flow.label.name": "Nume", + "report_flow.label.other": "Ceva ce nu este listat aici", + "report_flow.label.other_identifying": "Alte informații care ar putea identifica sau localiza pe cineva", + "report_flow.label.permits_violations": "Permite încălcări grave ale regulilor", + "report_flow.label.phone": "Număr de telefon", + "report_flow.label.photo": "Imagini", + "report_flow.label.platform_abuse": "Extragerea datelor, automatizarea sau alte abuzuri ale platformei", + "report_flow.label.private_conversation": "Mesaje private, capturi de ecran sau înregistrări de apeluri", + "report_flow.label.private_info": "Distribuirea detaliilor private ale cuiva", + "report_flow.label.private_info_profile": "Profilul său distribuie detaliile private ale cuiva", + "report_flow.label.profile_text": "Text de profil", + "report_flow.label.raid": "Organizarea sau participarea la un raid sau o agresiune în grup", + "report_flow.label.raid_guild": "Organizarea de raiduri sau agresiuni în grup împotriva persoanelor sau comunităților", + "report_flow.label.rude_language": "Înjurături sau remarci nepoliticoase", + "report_flow.label.self_harm": "Cineva s-ar putea răni sau încurajează autovătămarea", + "report_flow.label.self_harm_graphic": "Imagini explicite cu autovătămare", + "report_flow.label.self_harm_guild": "Membrii îi îndeamnă pe alții să se rănească", + "report_flow.label.self_harm_pressure": "Exercitarea de presiuni asupra cuiva sau provocarea cuiva să își facă rău", + "report_flow.label.self_harm_pressure_guild": "Exercitarea de presiuni asupra oamenilor sau provocarea lor să își facă rău", + "report_flow.label.self_harm_profile": "Profilul său sugerează autovătămarea sau o încurajează", + "report_flow.label.self_harm_promotion": "Încurajarea autovătămării sau partajarea metodelor", + "report_flow.label.self_harm_promotion_profile": "Profilul său încurajează autovătămarea", + "report_flow.label.sexual": "Conținut sexual", + "report_flow.label.sexual_exploitation": "Exploatare sexuală, constrângere sau trafic de persoane", + "report_flow.label.sexual_unwanted": "Imagini sau mesaje sexuale pe care nu le-am dorit", + "report_flow.label.something_else": "Altceva", + "report_flow.label.spam": "Spam sau reclame nedorite", + "report_flow.label.spam_bulk": "Trimiterea de spam sau publicitate în masă", + "report_flow.label.spam_or_manipulation": "Spam sau manipularea platformei", + "report_flow.label.spam_profile": "Profilul său este folosit pentru spam sau publicitate", + "report_flow.label.suicide_promotion": "Încurajarea sinuciderii sau partajarea metodelor", + "report_flow.label.suicide_promotion_profile": "Profilul său încurajează sinuciderea", + "report_flow.label.synthetic_media": "Materiale media false sau generate de AI, prezentate ca fiind reale", + "report_flow.label.terrorism": "Terorism sau extremism violent", + "report_flow.label.terrorism_guild": "Recrutarea sau promovarea terorismului sau a extremismului violent", + "report_flow.label.threat": "Amenințări sau apeluri la violență", + "report_flow.label.threat_to_share": "Amenință că o va distribui", + "report_flow.label.too_young": "Persoana este sub vârsta minimă pentru a folosi {product_name}", + "report_flow.label.unwanted_contact": "Urmărirea sau contactarea repetată a mea sau a altcuiva după ce i s-a cerut să înceteze, a fost blocat sau eliminat", + "report_flow.label.violence_glorification": "Glorificarea violenței din lumea reală", + "report_flow.label.violence_incitement": "Încurajarea violenței sau explicarea modului de a răni oamenii", + "report_flow.label.violence_misinfo": "Violență, extremism sau informații false dăunătoare", + "report_flow.label.violent_threat": "Spune că va răni pe cineva", + "report_flow.label.worried_profile": "Sunt îngrijorat(ă) de siguranța acestei persoane", + "report_flow.label.worried_self_harm": "Mi-e teamă că s-ar putea răni", + "report_flow.label.worried_suicide": "Mi-e teamă că ar putea încerca să se sinucidă", + "report_flow.notice.need_more_info.body": "Pentru a examina acest caz, avem nevoie de un mesaj în care persoana spune câți ani are sau face clar că este sub vârsta minimă pentru a folosi {product_name}. Raportează în schimb acel mesaj.", + "report_flow.notice.need_more_info.title": "Încă nu putem acționa", + "report_flow.notice.need_more_info_profile.body": "Pentru a examina acest caz, trebuie să vedem unde persoana spune câți ani are sau face clar că este sub vârsta minimă pentru a folosi {product_name}. Raportează în schimb acel mesaj sau profil.", + "report_flow.screen.abuse.title": "Ce implică?", + "report_flow.screen.abuse_guild.title": "Ce fac oamenii din această comunitate?", + "report_flow.screen.age_stated_message.title": "Acest mesaj spune câți ani are persoana?", + "report_flow.screen.age_stated_profile.title": "Profilul său menționează câți ani are persoana?", + "report_flow.screen.community_parts.subtitle": "Alege câte ai nevoie.", + "report_flow.screen.community_parts.title": "Ce părți ale comunității sunt implicate?", + "report_flow.screen.crisis_support.subtitle": "Liniile de sprijin pentru situații de criză oferă ajutor gratuit și confidențial.", + "report_flow.screen.crisis_support.title": "Cineva te poate ajuta chiar acum", + "report_flow.screen.false_info.subtitle": "Opiniile, satira și dezbaterile de bună-credință sunt permise. Defăimarea ilegală poate fi raportată în temeiul Regulamentului privind serviciile digitale.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opiniile, satira și dezbaterile de bună-credință sunt permise.", + "report_flow.screen.false_info.title": "Ce anume induce în eroare?", + "report_flow.screen.harassment.title": "Cum este vizat cineva?", + "report_flow.screen.hate.title": "Cum atacă oamenii pentru ceea ce sunt?", + "report_flow.screen.impersonation.subtitle": "Parodia sau jocul de rol etichetate clar sunt permise.", + "report_flow.screen.impersonation.title": "Cui i se uzurpă identitatea sau este vorba despre o înșelătorie?", + "report_flow.screen.minor_risk.title": "Cum pune această persoană un minor în pericol?", + "report_flow.screen.minor_risk_guild.title": "Cum pune această comunitate minorii în pericol?", + "report_flow.screen.minor_sexual.subtitle": "Conținutul desenat, scris sau generat de AI contează atunci când un personaj este descris ca minor sau este în mod clar prepubertal, inclusiv lolicon, shotacon și cub.", + "report_flow.screen.minor_sexual.title": "Ce ai văzut care implică un minor?", + "report_flow.screen.minor_sexual_guild.title": "Ce ai văzut care implică minori?", + "report_flow.screen.private_info.subtitle": "Alege câte ai nevoie. Dacă o fotografie intimă prezintă o persoană sub 18 ani, întoarce-te și raportează-o la „Sexualizarea unui minor”.", + "report_flow.screen.private_info.title": "Ce detalii private sunt implicate?", + "report_flow.screen.profile_abuse.title": "Ce este dăunător la profilul său?", + "report_flow.screen.profile_hate_violence.title": "Ce arată sau promovează profilul său?", + "report_flow.screen.profile_intro.options_heading": "Află mai multe", + "report_flow.screen.profile_intro.subtitle": "Spune-ne ce nu este în regulă cu acest profil. Persoana nu va fi informată cine a raportat-o.", + "report_flow.screen.profile_intro.title": "Raportează profilul", + "report_flow.screen.profile_minor_sexual.title": "Ce anume din profilul său implică un minor?", + "report_flow.screen.profile_parts.subtitle": "Alege câte ai nevoie.", + "report_flow.screen.profile_parts.title": "Ce părți ale profilului său sunt o problemă?", + "report_flow.screen.profile_private_info.title": "Ce detalii private se află în profilul său?", + "report_flow.screen.profile_sexual.title": "Spune-ne despre conținutul sexual din profilul său", + "report_flow.screen.profile_threat.title": "Cum implică profilul său violența?", + "report_flow.screen.root_guild.subtitle": "Alege cea mai potrivită descriere pentru ceea ce se întâmplă în această comunitate.", + "report_flow.screen.root_guild.title": "Ce nu este în regulă cu această comunitate?", + "report_flow.screen.root_message.subtitle": "Alege cea mai potrivită variantă. Poți verifica totul înainte de a fi trimis.", + "report_flow.screen.root_message.title": "Raportează mesajul", + "report_flow.screen.root_user.subtitle": "Alege cea mai potrivită opțiune pentru ceea ce se află în profilul său.", + "report_flow.screen.root_user.title": "Ce nu este în regulă cu profilul său?", + "report_flow.screen.self_harm.subtitle": "Nimeni nu este pedepsit pentru că spune că îi este greu. Faptul că ne spui că îți faci griji ne ajută să oferim sprijin.", + "report_flow.screen.self_harm.title": "Ce a spus sau a distribuit?", + "report_flow.screen.self_harm_guild.title": "Ce încurajează membrii?", + "report_flow.screen.self_harm_profile.title": "Ce spune sau arată profilul său?", + "report_flow.screen.sexual.subtitle": "Dacă oricare persoană afișată sau implicată are sub 18 ani, alege „Sexualizarea unui minor”.", + "report_flow.screen.sexual.title": "Spune-ne despre conținutul sexual", + "report_flow.screen.sexual_guild.subtitle": "Dacă oricare persoană afișată sau implicată are sub 18 ani, alege „Sexualizarea minorilor”.", + "report_flow.screen.sexual_guild.title": "Spune-ne despre conținutul sexual din această comunitate", + "report_flow.screen.something_else_guild.title": "Ce altceva se mai întâmplă în această comunitate?", + "report_flow.screen.something_else_message.title": "Ce altceva se întâmplă?", + "report_flow.screen.something_else_user.title": "Ce altceva este în neregulă cu acest profil?", + "report_flow.screen.spam_kind_guild.title": "Cum abuzează această comunitate de platformă?", + "report_flow.screen.spam_profile.title": "Cum este folosit abuziv contul?", + "report_flow.screen.threat.title": "Cum implică violența?", + "report_flow.screen.violence_misinfo.title": "Care dintre acestea se potrivește?", + "report_flow.screen.violence_misinfo_guild.title": "Care dintre acestea se întâmplă în această comunitate?" }); export default CONTENT_I18N_RO_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/ru.ts b/fluxer_api/src/api/content_i18n/locales/ru.ts index f6f4e6a35..27bc64d50 100644 --- a/fluxer_api/src/api/content_i18n/locales/ru.ts +++ b/fluxer_api/src/api/content_i18n/locales/ru.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_RU_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Текстовые каналы", "guild.default_category_voice": "Голосовые каналы", "guild.default_channel_text": "общий", - "guild.default_channel_voice": "Общий" + "guild.default_channel_voice": "Общий", + "report_flow.description.name": "Имя пользователя, отображаемое имя или никнейм в сообществе", + "report_flow.description.photo": "Что они используют в качестве аватара и баннера", + "report_flow.description.profile_text": "О себе, свой статус или местоимения", + "report_flow.label.abuse": "Оскорбительный или вредоносный контент", + "report_flow.label.account_trading": "Продажа аккаунтов, украденные логины или данные карт", + "report_flow.label.account_trading_communities": "Покупка или продажа аккаунтов или сообществ", + "report_flow.label.address": "Домашний адрес или место работы", + "report_flow.label.adult_content_no_gate": "Контент для взрослых без возрастного ограничения 18+", + "report_flow.label.adult_content_profile": "Явный контент для взрослых в профиле", + "report_flow.label.adult_content_unmarked": "Контент для взрослых в канале сообщества, который не помечен как 18+", + "report_flow.label.age_no_message": "Нет, там об этом не сказано", + "report_flow.label.age_no_profile": "Нет, в нём это не упоминается", + "report_flow.label.age_yes_message": "Да, там указан их возраст", + "report_flow.label.age_yes_profile": "Да, в их профиле указан возраст", + "report_flow.label.atrocity_denial": "Отрицание или прославление Холокоста или других геноцидов", + "report_flow.label.ban_evasion": "Обход бана с помощью другого аккаунта", + "report_flow.label.channel_names": "Названия каналов", + "report_flow.label.community_banner": "Баннер сообщества", + "report_flow.label.community_icon": "Значок сообщества", + "report_flow.label.community_name": "Название сообщества", + "report_flow.label.conversion_therapy": "Пропаганда конверсионной терапии", + "report_flow.label.copyright": "Жалоба на нарушение авторских прав или прав на товарный знак", + "report_flow.label.crisis_lines": "Телефоны доверия в вашей стране", + "report_flow.label.csam": "Реальные или созданные ИИ изображения или видео сексуального насилия над детьми", + "report_flow.label.discovery_listing": "Запись в каталоге", + "report_flow.label.dislike": "Мне это не подходит", + "report_flow.label.dsa": "Незаконный в ЕС контент (Закон о цифровых услугах, DSA)", + "report_flow.label.eating_disorder_promotion": "Поощрение расстройств пищевого поведения", + "report_flow.label.eating_disorder_promotion_profile": "Их профиль пропагандирует расстройства пищевого поведения", + "report_flow.label.email": "Адрес электронной почты", + "report_flow.label.emoji_stickers": "Пользовательские эмодзи или стикеры", + "report_flow.label.face_photo": "Фотография их лица", + "report_flow.label.fake_account": "Фейковый аккаунт, бот или автоматизированное злоупотребление", + "report_flow.label.fake_account_profile": "Фейковый или обманный аккаунт", + "report_flow.label.false_claims": "Распространение лжи для нанесения ущерба репутации конкретного человека", + "report_flow.label.false_info": "Распространение вредоносной ложной информации", + "report_flow.label.financial": "Карта, банковские или другие финансовые данные", + "report_flow.label.fraud": "Они пытаются обмануть людей, чтобы выманить деньги или аккаунты", + "report_flow.label.fraud_guild": "Обман людей с целью получения денег или доступа к аккаунтам", + "report_flow.label.government_id": "Удостоверение личности или номер удостоверения личности", + "report_flow.label.graphic_violence": "Реальное насилие, показанное ради шока, например кровавые сцены или жестокое обращение с животными", + "report_flow.label.harassment": "Травля, преследование или домогательство", + "report_flow.label.harassment_direct": "Повторяющиеся оскорбления или нападки на кого-либо", + "report_flow.label.harassment_guild": "Домогательства, издевательства или преследование людей", + "report_flow.label.harassment_profile": "Профиль пользователя содержит домогательства или нападки на меня или кого-то другого", + "report_flow.label.harmful_false_claims": "Ложные заявления, которые могут нанести серьёзный вред в реальном мире", + "report_flow.label.hate": "Ненависть или дискриминация в отношении людей из-за того, кем они являются", + "report_flow.label.hate_dehumanizing": "Сравнение людей с животными, болезнями или грязью либо называние их недочеловеками", + "report_flow.label.hate_incitement": "Призывы к насилию или исключению группы", + "report_flow.label.hate_other": "Другие нападки на людей из-за того, кем они являются", + "report_flow.label.hate_slurs": "Оскорбительные эпитеты, символы ненависти или унизительные стереотипы", + "report_flow.label.hate_violence": "Ненависть, насилие или экстремизм", + "report_flow.label.identity": "Сексуальная ориентация, гендерная идентичность или интерсекс-статус", + "report_flow.label.illegal_activity": "Другая незаконная деятельность", + "report_flow.label.illegal_goods": "Продажа наркотиков, оружия или других незаконных товаров", + "report_flow.label.impersonation": "Выдача себя за другое лицо или обман людей", + "report_flow.label.impersonation_guild": "Выдача себя за {product_name} или другую организацию", + "report_flow.label.impersonation_organization": "Компания, бренд или группа", + "report_flow.label.impersonation_person": "Я или кто-то из моих близких", + "report_flow.label.impersonation_public_figure": "Известный человек, например автор контента или политик", + "report_flow.label.impersonation_staff": "Сотрудник {product_name} или служба поддержки", + "report_flow.label.intimate_image_abuse": "Интимные изображения, распространенные без согласия, включая дипфейки, или угроза их распространения", + "report_flow.label.intimate_image_abuse_guild": "Распространение интимных изображений без согласия, включая дипфейки", + "report_flow.label.intimate_image_abuse_profile": "Интимные изображения кого-либо, распространенные без согласия, включая дипфейки", + "report_flow.label.intimate_photo": "Интимное или обнаженное фото", + "report_flow.label.invite_splash": "Заставка приглашения", + "report_flow.label.ip_address": "IP-адрес", + "report_flow.label.learn_more": "Ознакомьтесь с правилами сообщества {product_name}", + "report_flow.label.legal_name": "Настоящее или юридическое имя", + "report_flow.label.lgbtq_targeting": "Намеренное использование неверных местоимений или прежнего имени человека (мисгендеринг, дедейминг), раскрытие чьей-либо ориентации или гендерной идентичности без согласия либо отрицание его идентичности", + "report_flow.label.malware_guild": "Распространение вредоносного ПО или фишинговых ссылок", + "report_flow.label.malware_phishing": "Фишинг, вредоносное ПО или попытки взлома", + "report_flow.label.member_activity": "Что участники публикуют или делают там", + "report_flow.label.metric_manipulation": "Фальсификация количества участников или реакций", + "report_flow.label.minor_contact": "Приглашение несовершеннолетнего на встречу или просьба прислать фото или личные данные, что выглядит как хищническое поведение", + "report_flow.label.minor_dating_community": "Это сообщество для знакомств между несовершеннолетними", + "report_flow.label.minor_fictional": "Нарисованный, написанный или сгенерированный ИИ сексуальный контент с вымышленным ребенком", + "report_flow.label.minor_grooming": "Груминг или выстраивание неподобающего доверия с несовершеннолетним", + "report_flow.label.minor_grooming_guild": "Участники занимаются грумингом или выстраивают неподобающие доверительные отношения с несовершеннолетними", + "report_flow.label.minor_in_adult_space": "Несовершеннолетний находится в канале или сообществе 18+", + "report_flow.label.minor_in_adult_space_guild": "Несовершеннолетним разрешено находиться в каналах 18+", + "report_flow.label.minor_risk": "Подвергание несовершеннолетнего риску", + "report_flow.label.minor_risk_guild": "Подвергание несовершеннолетних риску", + "report_flow.label.minor_sexual": "Сексуализация несовершеннолетнего", + "report_flow.label.minor_sexual_contact": "Флирт с несовершеннолетним или отправка ему сообщений сексуального характера", + "report_flow.label.minor_sexual_contact_guild": "Участники флиртуют с несовершеннолетними или отправляют им сексуальные сообщения", + "report_flow.label.minor_sexual_content": "Несовершеннолетний сам делится сексуальным контентом", + "report_flow.label.minor_sexual_content_guild": "Несовершеннолетние публикуют или отправляют контент сексуального характера", + "report_flow.label.minor_sexual_content_profile": "Профиль несовершеннолетнего с сексуальным контентом", + "report_flow.label.minor_sexual_guild": "Сексуализация несовершеннолетних", + "report_flow.label.minor_sexualization": "Сексуальные комментарии о несовершеннолетних", + "report_flow.label.minor_sexualization_guild": "Участники делают сексуальные комментарии о несовершеннолетних", + "report_flow.label.minor_sexualization_profile": "Сексуальные комментарии о несовершеннолетних в профиле", + "report_flow.label.name": "Имена", + "report_flow.label.other": "Что-то, чего нет в списке", + "report_flow.label.other_identifying": "Другая информация, которая может идентифицировать или определить местонахождение человека", + "report_flow.label.permits_violations": "Это допускает серьёзные нарушения правил", + "report_flow.label.phone": "Номер телефона", + "report_flow.label.photo": "Изображения", + "report_flow.label.platform_abuse": "Скрапинг, автоматизация или другое злоупотребление платформой", + "report_flow.label.private_conversation": "Личные сообщения, снимки экрана или записи звонков", + "report_flow.label.private_info": "Распространение чьей-либо личной информации", + "report_flow.label.private_info_profile": "В их профиле распространяется чья-либо личная информация", + "report_flow.label.profile_text": "Текст профиля", + "report_flow.label.raid": "Организация или участие в рейдах или травле", + "report_flow.label.raid_guild": "Организация рейдов или травли против людей или сообществ", + "report_flow.label.rude_language": "Нецензурная лексика или грубые высказывания", + "report_flow.label.self_harm": "Кто-то может причинить себе вред или призывает к причинению вреда себе", + "report_flow.label.self_harm_graphic": "Натуралистичные изображения самоповреждения", + "report_flow.label.self_harm_guild": "Участники подталкивают других к причинению себе вреда", + "report_flow.label.self_harm_pressure": "Давление на кого-либо или подначивание причинить себе вред", + "report_flow.label.self_harm_pressure_guild": "Давление на людей или подначивание причинить себе вред", + "report_flow.label.self_harm_profile": "Их профиль намекает на причинение вреда себе или поощряет его", + "report_flow.label.self_harm_promotion": "Призывы к причинению вреда себе или распространение способов", + "report_flow.label.self_harm_promotion_profile": "Их профиль поощряет причинение вреда себе", + "report_flow.label.sexual": "Контент сексуального характера", + "report_flow.label.sexual_exploitation": "Сексуальная эксплуатация, принуждение или торговля людьми", + "report_flow.label.sexual_unwanted": "Нежелательные изображения или сообщения сексуального характера", + "report_flow.label.something_else": "Что-то другое", + "report_flow.label.spam": "Спам или нежелательная реклама", + "report_flow.label.spam_bulk": "Массовая рассылка спама или рекламы", + "report_flow.label.spam_or_manipulation": "Спам или манипулирование платформой", + "report_flow.label.spam_profile": "Их профиль используется для спама или рекламы", + "report_flow.label.suicide_promotion": "Призывы к суициду или распространение способов", + "report_flow.label.suicide_promotion_profile": "Их профиль поощряет суицид", + "report_flow.label.synthetic_media": "Фейковые или созданные ИИ медиа, выдаваемые за настоящие", + "report_flow.label.terrorism": "Терроризм или насильственный экстремизм", + "report_flow.label.terrorism_guild": "Вербовка или пропаганда терроризма или насильственного экстремизма", + "report_flow.label.threat": "Угрозы или призывы к насилию", + "report_flow.label.threat_to_share": "Они угрожают поделиться этим", + "report_flow.label.too_young": "Они младше минимального возраста для использования {product_name}", + "report_flow.label.unwanted_contact": "Преследование или неоднократные попытки связаться со мной или кем-либо еще после просьбы прекратить, блокировки или удаления", + "report_flow.label.violence_glorification": "Прославление реального насилия", + "report_flow.label.violence_incitement": "Поощрение насилия или объяснение, как причинить вред людям", + "report_flow.label.violence_misinfo": "Насилие, экстремизм или вредоносная ложная информация", + "report_flow.label.violent_threat": "Говорит, что причинит кому-то вред", + "report_flow.label.worried_profile": "Я беспокоюсь о безопасности этого человека", + "report_flow.label.worried_self_harm": "Я боюсь, что этот человек может причинить себе вред", + "report_flow.label.worried_suicide": "Я боюсь, что этот человек может попытаться покончить с собой", + "report_flow.notice.need_more_info.body": "Чтобы это рассмотреть, нам нужно сообщение, в котором человек указывает свой возраст или даёт понять, что он младше минимального возраста для использования {product_name}. Пожалуйтесь лучше на такое сообщение.", + "report_flow.notice.need_more_info.title": "Пока не можем принять меры", + "report_flow.notice.need_more_info_profile.body": "Чтобы это рассмотреть, нам нужно увидеть, где человек указывает свой возраст или даёт понять, что он младше минимального возраста для использования {product_name}. Пожалуйтесь лучше на такое сообщение или профиль.", + "report_flow.screen.abuse.title": "О чём идёт речь?", + "report_flow.screen.abuse_guild.title": "Что делают люди в этом сообществе?", + "report_flow.screen.age_stated_message.title": "Указан ли в этом сообщении их возраст?", + "report_flow.screen.age_stated_profile.title": "Указан ли в их профиле их возраст?", + "report_flow.screen.community_parts.subtitle": "Выберите столько, сколько вам нужно.", + "report_flow.screen.community_parts.title": "Какие части сообщества затронуты?", + "report_flow.screen.crisis_support.subtitle": "Телефоны доверия оказывают бесплатную и конфиденциальную помощь.", + "report_flow.screen.crisis_support.title": "Вам могут помочь прямо сейчас", + "report_flow.screen.false_info.subtitle": "Мнения, сатира и добросовестные дебаты разрешены. О незаконной клевете можно сообщить в соответствии с Законом о цифровых услугах (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Мнения, сатира и добросовестные дебаты разрешены.", + "report_flow.screen.false_info.title": "Что именно вводит в заблуждение?", + "report_flow.screen.harassment.title": "В чём проявляются нападки на человека?", + "report_flow.screen.hate.title": "Как это направлено против людей из-за того, кем они являются?", + "report_flow.screen.impersonation.subtitle": "Чётко обозначенные пародии или ролевые игры разрешены.", + "report_flow.screen.impersonation.title": "За кого себя выдают, или это мошенничество?", + "report_flow.screen.minor_risk.title": "Как этот человек подвергает несовершеннолетнего риску?", + "report_flow.screen.minor_risk_guild.title": "Как это сообщество подвергает несовершеннолетних риску?", + "report_flow.screen.minor_sexual.subtitle": "Нарисованный, написанный или созданный ИИ контент тоже подпадает под это, если персонаж описан как несовершеннолетний или явно не достиг полового созревания, включая lolicon, shotacon и cub.", + "report_flow.screen.minor_sexual.title": "Что вы видели с участием несовершеннолетнего?", + "report_flow.screen.minor_sexual_guild.title": "Что вы видели с участием несовершеннолетних?", + "report_flow.screen.private_info.subtitle": "Выберите столько, сколько вам нужно. Если на интимном фото изображён человек младше 18 лет, вернитесь назад и пожалуйтесь на это в разделе «Сексуализация несовершеннолетнего».", + "report_flow.screen.private_info.title": "Какие личные сведения затронуты?", + "report_flow.screen.profile_abuse.title": "Что именно вредоносного в их профиле?", + "report_flow.screen.profile_hate_violence.title": "Что показывает или продвигает их профиль?", + "report_flow.screen.profile_intro.options_heading": "Подробнее", + "report_flow.screen.profile_intro.subtitle": "Расскажите, что не так с этим профилем. Пользователю не сообщат, кто на него пожаловался.", + "report_flow.screen.profile_intro.title": "Пожаловаться на профиль", + "report_flow.screen.profile_minor_sexual.title": "Что в их профиле связано с несовершеннолетним?", + "report_flow.screen.profile_parts.subtitle": "Выберите столько, сколько вам нужно.", + "report_flow.screen.profile_parts.title": "Какие части профиля вызывают проблемы?", + "report_flow.screen.profile_private_info.title": "Какие личные сведения содержатся в их профиле?", + "report_flow.screen.profile_sexual.title": "Расскажите о сексуальном контенте в их профиле", + "report_flow.screen.profile_threat.title": "Как профиль связан с насилием?", + "report_flow.screen.root_guild.subtitle": "Выберите наиболее подходящий вариант того, что происходит в этом сообществе.", + "report_flow.screen.root_guild.title": "Что не так с этим сообществом?", + "report_flow.screen.root_message.subtitle": "Выберите наиболее подходящий вариант. Перед отправкой вы сможете всё проверить.", + "report_flow.screen.root_message.title": "Пожаловаться на сообщение", + "report_flow.screen.root_user.subtitle": "Выберите наиболее подходящий вариант того, что находится в их профиле.", + "report_flow.screen.root_user.title": "Что не так с их профилем?", + "report_flow.screen.self_harm.subtitle": "Никто не будет наказан за то, что говорит о своих трудностях. Если вы сообщите нам о своих опасениях, мы сможем предложить поддержку.", + "report_flow.screen.self_harm.title": "Что они сказали или чем поделились?", + "report_flow.screen.self_harm_guild.title": "Что участники поощряют?", + "report_flow.screen.self_harm_profile.title": "Что говорится или показывается в профиле?", + "report_flow.screen.sexual.subtitle": "Если кто-либо из показанных или вовлечённых лиц младше 18 лет, выберите «Сексуализация несовершеннолетнего».", + "report_flow.screen.sexual.title": "Расскажите о сексуальном контенте", + "report_flow.screen.sexual_guild.subtitle": "Если кто-либо из показанных или вовлеченных лиц младше 18 лет, выберите «Сексуализация несовершеннолетних».", + "report_flow.screen.sexual_guild.title": "Расскажите о сексуальном контенте в этом сообществе", + "report_flow.screen.something_else_guild.title": "Что еще происходит в этом сообществе?", + "report_flow.screen.something_else_message.title": "Что еще происходит?", + "report_flow.screen.something_else_user.title": "Что еще не так с этим профилем?", + "report_flow.screen.spam_kind_guild.title": "Как это сообщество злоупотребляет платформой?", + "report_flow.screen.spam_profile.title": "Как аккаунт используется не по назначению?", + "report_flow.screen.threat.title": "Как это связано с насилием?", + "report_flow.screen.violence_misinfo.title": "Что из этого подходит?", + "report_flow.screen.violence_misinfo_guild.title": "Что из этого происходит в этом сообществе?" }); export default CONTENT_I18N_RU_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/sv-SE.ts b/fluxer_api/src/api/content_i18n/locales/sv-SE.ts index b154f143f..d3eac75f4 100644 --- a/fluxer_api/src/api/content_i18n/locales/sv-SE.ts +++ b/fluxer_api/src/api/content_i18n/locales/sv-SE.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_SV_SE_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Textkanaler", "guild.default_category_voice": "Röstkanaler", "guild.default_channel_text": "allmänt", - "guild.default_channel_voice": "Allmänt" + "guild.default_channel_voice": "Allmänt", + "report_flow.description.name": "Användarnamn, visningsnamn eller smeknamn i communityn", + "report_flow.description.photo": "Vad de använder som avatar och banner", + "report_flow.description.profile_text": "Presentation, anpassad status eller pronomen", + "report_flow.label.abuse": "Kränkande eller skadligt innehåll", + "report_flow.label.account_trading": "Säljer konton, eller stulna inloggningar eller kortuppgifter", + "report_flow.label.account_trading_communities": "Köper eller säljer konton eller communities", + "report_flow.label.address": "Hemadress eller arbetsplats", + "report_flow.label.adult_content_no_gate": "Innehåll för vuxna utan åldersbegränsning 18+", + "report_flow.label.adult_content_profile": "Explicit innehåll för vuxna i deras profil", + "report_flow.label.adult_content_unmarked": "Innehåll för vuxna i en communitykanal som inte är markerad som 18+", + "report_flow.label.age_no_message": "Nej, det nämns inte", + "report_flow.label.age_no_profile": "Nej, det nämns inte", + "report_flow.label.age_yes_message": "Ja, deras ålder nämns", + "report_flow.label.age_yes_profile": "Ja, deras profil nämner deras ålder", + "report_flow.label.atrocity_denial": "Förnekar eller hyllar Förintelsen eller andra folkmord", + "report_flow.label.ban_evasion": "Kringgår en avstängning genom att använda ett annat konto", + "report_flow.label.channel_names": "Kanalnamn", + "report_flow.label.community_banner": "Communitybanner", + "report_flow.label.community_icon": "Communityikon", + "report_flow.label.community_name": "Namn på community", + "report_flow.label.conversion_therapy": "Främjar konverteringsterapi", + "report_flow.label.copyright": "Klagomål om upphovsrätt eller varumärke", + "report_flow.label.crisis_lines": "Krislinjer i ditt land", + "report_flow.label.csam": "Verkliga eller AI-genererade bilder eller videor av sexuella övergrepp mot barn", + "report_flow.label.discovery_listing": "Listning i Upptäck", + "report_flow.label.dislike": "Det är bara inget för mig", + "report_flow.label.dsa": "Innehåll som är olagligt i EU (förordningen om digitala tjänster)", + "report_flow.label.eating_disorder_promotion": "Uppmuntrar till ätstörningar", + "report_flow.label.eating_disorder_promotion_profile": "Deras profil främjar ätstörningar", + "report_flow.label.email": "E-postadress", + "report_flow.label.emoji_stickers": "Anpassade emoji eller klistermärken", + "report_flow.label.face_photo": "Foto av deras ansikte", + "report_flow.label.fake_account": "Falskt konto, bot eller automatiserat missbruk", + "report_flow.label.fake_account_profile": "Ett falskt eller bedrägligt konto", + "report_flow.label.false_claims": "Sprider lögner för att skada en viss persons rykte", + "report_flow.label.false_info": "Sprider skadlig falsk information", + "report_flow.label.financial": "Kort-, bank- eller andra finansiella uppgifter", + "report_flow.label.fraud": "De försöker lura folk på pengar eller konton", + "report_flow.label.fraud_guild": "Lurar folk på pengar eller konton", + "report_flow.label.government_id": "ID-handling eller ID-nummer", + "report_flow.label.graphic_violence": "Verkligt våld som visas för att chockera, till exempel blodiga våldsbilder eller djurplågeri", + "report_flow.label.harassment": "Mobbning, trakasserier eller förföljelse", + "report_flow.label.harassment_direct": "Angriper någon upprepade gånger med förolämpningar eller kränkningar", + "report_flow.label.harassment_guild": "Trakasserar, mobbar eller förföljer personer", + "report_flow.label.harassment_profile": "Deras profil trakasserar eller riktar sig mot mig eller någon annan", + "report_flow.label.harmful_false_claims": "Falska påståenden som kan orsaka allvarlig skada i verkligheten", + "report_flow.label.hate": "Hat eller diskriminering mot människor på grund av vilka de är", + "report_flow.label.hate_dehumanizing": "Jämför människor med djur, sjukdomar eller smuts, eller kallar dem mindre än mänskliga", + "report_flow.label.hate_incitement": "Uppmanar till våld eller uteslutning mot en grupp", + "report_flow.label.hate_other": "Andra attacker mot människor på grund av vilka de är", + "report_flow.label.hate_slurs": "Skällsord, hatiska symboler eller förnedrande stereotyper", + "report_flow.label.hate_violence": "Hat, våld eller extremism", + "report_flow.label.identity": "Sexuell läggning, könsidentitet eller intersexstatus", + "report_flow.label.illegal_activity": "Annan olaglig aktivitet", + "report_flow.label.illegal_goods": "Försäljning av droger, vapen eller andra olagliga varor", + "report_flow.label.impersonation": "Utger sig för att vara någon annan, eller lurar folk", + "report_flow.label.impersonation_guild": "Utger sig för att vara {product_name} eller en annan organisation", + "report_flow.label.impersonation_organization": "Ett företag, ett varumärke eller en grupp", + "report_flow.label.impersonation_person": "Mig eller någon nära mig", + "report_flow.label.impersonation_public_figure": "En välkänd person, till exempel en innehållsskapare eller politiker", + "report_flow.label.impersonation_staff": "Personal eller support på {product_name}", + "report_flow.label.intimate_image_abuse": "Intima bilder som delas utan samtycke, inklusive deepfakes, eller hot om att dela dem", + "report_flow.label.intimate_image_abuse_guild": "Delar intima bilder utan samtycke, inklusive deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intima bilder av någon som delas utan samtycke, inklusive deepfakes", + "report_flow.label.intimate_photo": "Intimt foto eller nakenfoto", + "report_flow.label.invite_splash": "Inbjudningsbakgrund", + "report_flow.label.ip_address": "IP-adress", + "report_flow.label.learn_more": "Läs communityriktlinjerna för {product_name}", + "report_flow.label.legal_name": "Riktigt eller juridiskt namn", + "report_flow.label.lgbtq_targeting": "Medvetet felkönar, använder någons tidigare namn eller outar någon, eller förnekar deras identitet", + "report_flow.label.malware_guild": "Distribuerar skadlig programvara eller nätfiskelänkar", + "report_flow.label.malware_phishing": "Nätfiske, skadlig programvara eller hackningsförsök", + "report_flow.label.member_activity": "Vad medlemmar publicerar eller gör där", + "report_flow.label.metric_manipulation": "Förfalskar medlems- eller reaktionsantal", + "report_flow.label.minor_contact": "Ber en minderårig att träffas, eller om foton eller personliga uppgifter, på ett sätt som verkar syfta till att utnyttja den minderåriga", + "report_flow.label.minor_dating_community": "Det är en community för dejting mellan minderåriga", + "report_flow.label.minor_fictional": "Tecknat, skrivet eller AI-genererat sexuellt innehåll som föreställer ett fiktivt barn", + "report_flow.label.minor_grooming": "Grooming, eller att bygga upp olämpligt förtroende hos en minderårig", + "report_flow.label.minor_grooming_guild": "Medlemmar utsätter minderåriga för grooming eller bygger upp olämpligt förtroende hos dem", + "report_flow.label.minor_in_adult_space": "En minderårig befinner sig i en kanal eller community för 18+", + "report_flow.label.minor_in_adult_space_guild": "Minderåriga tillåts i kanaler för 18+", + "report_flow.label.minor_risk": "Utsätter en minderårig för risk", + "report_flow.label.minor_risk_guild": "Utsätter minderåriga för risk", + "report_flow.label.minor_sexual": "Sexualisering av en minderårig", + "report_flow.label.minor_sexual_contact": "Flörtar med en minderårig eller skickar sexuella meddelanden till den minderåriga", + "report_flow.label.minor_sexual_contact_guild": "Medlemmar flörtar med minderåriga eller skickar sexuella meddelanden till dem", + "report_flow.label.minor_sexual_content": "En minderårig delar själv sexuellt innehåll", + "report_flow.label.minor_sexual_content_guild": "Minderåriga publicerar eller skickar sexuellt innehåll", + "report_flow.label.minor_sexual_content_profile": "En minderårigs profil med sexuellt innehåll", + "report_flow.label.minor_sexual_guild": "Sexualisering av minderåriga", + "report_flow.label.minor_sexualization": "Sexuella kommentarer om minderåriga", + "report_flow.label.minor_sexualization_guild": "Medlemmar kommer med sexuella kommentarer om minderåriga", + "report_flow.label.minor_sexualization_profile": "Sexuella kommentarer om minderåriga i deras profil", + "report_flow.label.name": "Namn", + "report_flow.label.other": "Något som inte finns med här", + "report_flow.label.other_identifying": "Annan information som kan identifiera eller lokalisera någon", + "report_flow.label.permits_violations": "Det tillåter allvarliga regelbrott", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Skrapning, automatisering eller annat missbruk av plattformen", + "report_flow.label.private_conversation": "Privata meddelanden, skärmbilder eller samtalsinspelningar", + "report_flow.label.private_info": "Delar någons privata uppgifter", + "report_flow.label.private_info_profile": "Deras profil delar någons privata uppgifter", + "report_flow.label.profile_text": "Profiltext", + "report_flow.label.raid": "Organiserar eller deltar i en raid eller ett massangrepp", + "report_flow.label.raid_guild": "Organiserar raider eller massangrepp mot personer eller communities", + "report_flow.label.rude_language": "Svordomar eller oförskämda kommentarer", + "report_flow.label.self_harm": "Någon kan komma att skada sig själv, eller uppmuntrar till självskadebeteende", + "report_flow.label.self_harm_graphic": "Explicita bilder av självskadebeteende", + "report_flow.label.self_harm_guild": "Medlemmar pressar andra att skada sig själva", + "report_flow.label.self_harm_pressure": "Pressar eller utmanar någon att skada sig själv", + "report_flow.label.self_harm_pressure_guild": "Pressar eller utmanar människor att skada sig själva", + "report_flow.label.self_harm_profile": "Deras profil antyder självskadebeteende eller uppmuntrar till det", + "report_flow.label.self_harm_promotion": "Uppmuntrar till självskadebeteende eller delar metoder", + "report_flow.label.self_harm_promotion_profile": "Deras profil uppmuntrar till självskadebeteende", + "report_flow.label.sexual": "Sexuellt innehåll", + "report_flow.label.sexual_exploitation": "Sexuell exploatering, tvång eller människohandel", + "report_flow.label.sexual_unwanted": "Sexuella bilder eller meddelanden jag inte ville ha", + "report_flow.label.something_else": "Något annat", + "report_flow.label.spam": "Skräppost eller oönskad reklam", + "report_flow.label.spam_bulk": "Skickar skräppost eller reklam i stora mängder", + "report_flow.label.spam_or_manipulation": "Skräppost eller manipulation av plattformen", + "report_flow.label.spam_profile": "Deras profil används för skräppost eller reklam", + "report_flow.label.suicide_promotion": "Uppmuntrar till självmord eller delar metoder", + "report_flow.label.suicide_promotion_profile": "Deras profil uppmuntrar till självmord", + "report_flow.label.synthetic_media": "Falska eller AI-skapade medier som presenteras som verkliga", + "report_flow.label.terrorism": "Terrorism eller våldsbejakande extremism", + "report_flow.label.terrorism_guild": "Rekryterar för eller främjar terrorism eller våldsbejakande extremism", + "report_flow.label.threat": "Hot eller uppmaningar till våld", + "report_flow.label.threat_to_share": "De hotar med att dela det", + "report_flow.label.too_young": "De är yngre än minimiåldern för att använda {product_name}", + "report_flow.label.unwanted_contact": "Förföljer, eller kontaktar upprepade gånger, mig eller någon annan efter att ha blivit ombedd att sluta, blivit blockerad eller blivit borttagen", + "report_flow.label.violence_glorification": "Förhärligar våld i verkligheten", + "report_flow.label.violence_incitement": "Uppmuntrar till våld eller förklarar hur man skadar människor", + "report_flow.label.violence_misinfo": "Våld, extremism eller skadlig falsk information", + "report_flow.label.violent_threat": "Säger att de kommer att skada någon", + "report_flow.label.worried_profile": "Jag är orolig för deras säkerhet", + "report_flow.label.worried_self_harm": "Jag är rädd att de kan skada sig själva", + "report_flow.label.worried_suicide": "Jag är rädd att de kan försöka begå självmord", + "report_flow.notice.need_more_info.body": "För att kunna granska detta behöver vi ett meddelande där de anger hur gamla de är eller gör det tydligt att de är under minimiåldern för att använda {product_name}. Anmäl det meddelandet i stället.", + "report_flow.notice.need_more_info.title": "Vi kan inte agera på detta än", + "report_flow.notice.need_more_info_profile.body": "För att kunna granska detta behöver vi se var de anger hur gamla de är eller gör det tydligt att de är under minimiåldern för att använda {product_name}. Anmäl i stället det meddelandet eller den profilen.", + "report_flow.screen.abuse.title": "Vad handlar det om?", + "report_flow.screen.abuse_guild.title": "Vad gör folk i den här communityn?", + "report_flow.screen.age_stated_message.title": "Står det i meddelandet hur gammal personen är?", + "report_flow.screen.age_stated_profile.title": "Står det i profilen hur gammal personen är?", + "report_flow.screen.community_parts.subtitle": "Välj så många som du behöver.", + "report_flow.screen.community_parts.title": "Vilka delar av communityn är inblandade?", + "report_flow.screen.crisis_support.subtitle": "Krislinjer erbjuder gratis, konfidentiellt stöd.", + "report_flow.screen.crisis_support.title": "Någon kan hjälpa dig just nu", + "report_flow.screen.false_info.subtitle": "Åsikter, satir och debatt i god tro är tillåtna. Olagligt förtal kan anmälas enligt förordningen om digitala tjänster (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Åsikter, satir och debatt i god tro är tillåtna.", + "report_flow.screen.false_info.title": "Vad är vilseledande med det?", + "report_flow.screen.harassment.title": "Hur riktas det mot någon?", + "report_flow.screen.hate.title": "Hur angriper det människor på grund av vilka de är?", + "report_flow.screen.impersonation.subtitle": "Tydligt märkt parodi eller rollspel är tillåtet.", + "report_flow.screen.impersonation.title": "Vem imiteras, eller är det ett bedrägeri?", + "report_flow.screen.minor_risk.title": "Hur utsätter den här personen en minderårig för risk?", + "report_flow.screen.minor_risk_guild.title": "Hur utsätter den här communityn minderåriga för risk?", + "report_flow.screen.minor_sexual.subtitle": "Tecknat, skrivet eller AI-genererat innehåll räknas när en karaktär beskrivs som minderårig eller är tydligt prepubertal, inklusive lolicon, shotacon och cub.", + "report_flow.screen.minor_sexual.title": "Vad såg du som involverade en minderårig?", + "report_flow.screen.minor_sexual_guild.title": "Vad såg du som involverade minderåriga?", + "report_flow.screen.private_info.subtitle": "Välj så många som du behöver. Om ett intimt foto visar någon under 18, gå tillbaka och anmäl det under ”Sexualisering av en minderårig”.", + "report_flow.screen.private_info.title": "Vilka privata uppgifter är inblandade?", + "report_flow.screen.profile_abuse.title": "Vad är skadligt med profilen?", + "report_flow.screen.profile_hate_violence.title": "Vad visar eller främjar profilen?", + "report_flow.screen.profile_intro.options_heading": "Läs mer", + "report_flow.screen.profile_intro.subtitle": "Berätta vad som är fel med den här profilen. De får inte veta vem som har anmält dem.", + "report_flow.screen.profile_intro.title": "Anmäl profil", + "report_flow.screen.profile_minor_sexual.title": "Vad i profilen involverar en minderårig?", + "report_flow.screen.profile_parts.subtitle": "Välj så många som du behöver.", + "report_flow.screen.profile_parts.title": "Vilka delar av profilen är ett problem?", + "report_flow.screen.profile_private_info.title": "Vilka privata uppgifter finns i deras profil?", + "report_flow.screen.profile_sexual.title": "Berätta om det sexuella innehållet i deras profil", + "report_flow.screen.profile_threat.title": "Hur involverar deras profil våld?", + "report_flow.screen.root_guild.subtitle": "Välj det alternativ som passar bäst för det som pågår i den här communityn.", + "report_flow.screen.root_guild.title": "Vad är fel med den här communityn?", + "report_flow.screen.root_message.subtitle": "Välj det alternativ som passar bäst. Du kan se över allt innan det skickas.", + "report_flow.screen.root_message.title": "Anmäl meddelande", + "report_flow.screen.root_user.subtitle": "Välj det alternativ som passar bäst för det som finns i deras profil.", + "report_flow.screen.root_user.title": "Vad är fel med deras profil?", + "report_flow.screen.self_harm.subtitle": "Ingen straffas för att ha berättat att de har det svårt. Att berätta att du är orolig hjälper oss att erbjuda stöd.", + "report_flow.screen.self_harm.title": "Vad sa eller delade de?", + "report_flow.screen.self_harm_guild.title": "Vad uppmuntrar medlemmarna till?", + "report_flow.screen.self_harm_profile.title": "Vad säger eller visar deras profil?", + "report_flow.screen.sexual.subtitle": "Om någon som visas eller är inblandad är under 18, välj ”Sexualisering av en minderårig”.", + "report_flow.screen.sexual.title": "Berätta om det sexuella innehållet", + "report_flow.screen.sexual_guild.subtitle": "Om någon som visas eller är inblandad är under 18, välj ”Sexualisering av minderåriga”.", + "report_flow.screen.sexual_guild.title": "Berätta om det sexuella innehållet i den här communityn", + "report_flow.screen.something_else_guild.title": "Vad mer pågår i den här communityn?", + "report_flow.screen.something_else_message.title": "Vad mer pågår?", + "report_flow.screen.something_else_user.title": "Vad mer är fel med den här profilen?", + "report_flow.screen.spam_kind_guild.title": "Hur missbrukar den här communityn plattformen?", + "report_flow.screen.spam_profile.title": "Hur missbrukas kontot?", + "report_flow.screen.threat.title": "Hur involverar det våld?", + "report_flow.screen.violence_misinfo.title": "Vilket av dessa stämmer in?", + "report_flow.screen.violence_misinfo_guild.title": "Vilket av dessa sker i den här communityn?" }); export default CONTENT_I18N_SV_SE_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/th.ts b/fluxer_api/src/api/content_i18n/locales/th.ts index e1c544982..643215994 100644 --- a/fluxer_api/src/api/content_i18n/locales/th.ts +++ b/fluxer_api/src/api/content_i18n/locales/th.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_TH_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "ช่องข้อความ", "guild.default_category_voice": "ช่องเสียง", "guild.default_channel_text": "ทั่วไป", - "guild.default_channel_voice": "ทั่วไป" + "guild.default_channel_voice": "ทั่วไป", + "report_flow.description.name": "ชื่อผู้ใช้ ชื่อที่แสดง หรือชื่อเล่นในคอมมูนิตี้", + "report_flow.description.photo": "สิ่งที่พวกเขาใช้เป็นรูปโปรไฟล์และแบนเนอร์", + "report_flow.description.profile_text": "ประวัติส่วนตัว สถานะกำหนดเอง หรือคำสรรพนาม", + "report_flow.label.abuse": "เนื้อหาที่ล่วงละเมิดหรือเป็นอันตราย", + "report_flow.label.account_trading": "การขายบัญชี หรือข้อมูลการเข้าสู่ระบบหรือรายละเอียดบัตรที่ถูกขโมย", + "report_flow.label.account_trading_communities": "การซื้อหรือขายบัญชีหรือคอมมูนิตี้", + "report_flow.label.address": "ที่อยู่บ้านหรือที่ทำงาน", + "report_flow.label.adult_content_no_gate": "เนื้อหาสำหรับผู้ใหญ่ที่ไม่มีการจำกัดอายุ 18+", + "report_flow.label.adult_content_profile": "เนื้อหาสำหรับผู้ใหญ่ที่โจ่งแจ้งในโปรไฟล์", + "report_flow.label.adult_content_unmarked": "เนื้อหาสำหรับผู้ใหญ่ในช่องคอมมูนิตี้ที่ไม่ได้ระบุว่าเป็น 18+", + "report_flow.label.age_no_message": "ไม่ ไม่ได้ระบุอายุ", + "report_flow.label.age_no_profile": "ไม่ ไม่ได้ระบุอายุ", + "report_flow.label.age_yes_message": "ใช่ มีการระบุอายุของพวกเขา", + "report_flow.label.age_yes_profile": "ใช่ โปรไฟล์ของพวกเขาระบุอายุ", + "report_flow.label.atrocity_denial": "การปฏิเสธหรือเฉลิมฉลองฮอโลคอสต์หรือการฆ่าล้างเผ่าพันธุ์อื่นๆ", + "report_flow.label.ban_evasion": "การหลีกเลี่ยงการแบนด้วยบัญชีอื่น", + "report_flow.label.channel_names": "ชื่อช่อง", + "report_flow.label.community_banner": "แบนเนอร์คอมมูนิตี้", + "report_flow.label.community_icon": "ไอคอนคอมมูนิตี้", + "report_flow.label.community_name": "ชื่อคอมมูนิตี้", + "report_flow.label.conversion_therapy": "ส่งเสริมการบำบัดเพื่อเปลี่ยนรสนิยมทางเพศหรืออัตลักษณ์ทางเพศ", + "report_flow.label.copyright": "การร้องเรียนเรื่องลิขสิทธิ์หรือเครื่องหมายการค้า", + "report_flow.label.crisis_lines": "สายด่วนช่วยเหลือภาวะวิกฤตในประเทศของคุณ", + "report_flow.label.csam": "ภาพหรือวิดีโอการล่วงละเมิดทางเพศเด็ก ไม่ว่าจะเป็นของจริงหรือสร้างโดย AI", + "report_flow.label.discovery_listing": "รายการใน Discovery", + "report_flow.label.dislike": "ไม่เหมาะกับฉัน", + "report_flow.label.dsa": "เนื้อหาที่ผิดกฎหมายในสหภาพยุโรป (กฎหมายบริการดิจิทัล หรือ DSA)", + "report_flow.label.eating_disorder_promotion": "ส่งเสริมพฤติกรรมการกินที่ผิดปกติ", + "report_flow.label.eating_disorder_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมความผิดปกติในการกิน", + "report_flow.label.email": "ที่อยู่อีเมล", + "report_flow.label.emoji_stickers": "อิโมจิหรือสติกเกอร์ที่กำหนดเอง", + "report_flow.label.face_photo": "รูปถ่ายใบหน้าของพวกเขา", + "report_flow.label.fake_account": "บัญชีปลอม บอท หรือการละเมิดอัตโนมัติ", + "report_flow.label.fake_account_profile": "บัญชีปลอมหรือหลอกลวง", + "report_flow.label.false_claims": "การเผยแพร่เรื่องโกหกเพื่อทำลายชื่อเสียงของบุคคลใดบุคคลหนึ่ง", + "report_flow.label.false_info": "เผยแพร่ข้อมูลเท็จที่เป็นอันตราย", + "report_flow.label.financial": "บัตร บัญชีธนาคาร หรือรายละเอียดทางการเงินอื่นๆ", + "report_flow.label.fraud": "พวกเขากำลังพยายามหลอกลวงผู้คนเพื่อเอาเงินหรือบัญชี", + "report_flow.label.fraud_guild": "หลอกลวงผู้คนให้เสียเงินหรือบัญชี", + "report_flow.label.government_id": "เอกสารประจำตัวหรือหมายเลขประจำตัว", + "report_flow.label.graphic_violence": "ความรุนแรงจริงที่แสดงเพื่อสร้างความตกใจ เช่น ภาพสยดสยองหรือการทารุณกรรมสัตว์", + "report_flow.label.harassment": "การกลั่นแกล้ง การคุกคาม หรือการสะกดรอยตาม", + "report_flow.label.harassment_direct": "การโจมตีบุคคลซ้ำๆ ด้วยคำพูดดูถูกหรือการล่วงละเมิด", + "report_flow.label.harassment_guild": "การคุกคาม การกลั่นแกล้ง หรือการสะกดรอยตามผู้อื่น", + "report_flow.label.harassment_profile": "โปรไฟล์ของพวกเขาคุกคามหรือมุ่งเป้าโจมตีฉันหรือผู้อื่น", + "report_flow.label.harmful_false_claims": "การกล่าวอ้างเท็จที่อาจก่อให้เกิดอันตรายร้ายแรงในโลกแห่งความเป็นจริง", + "report_flow.label.hate": "ความเกลียดชังหรือการเลือกปฏิบัติต่อผู้คนเพราะตัวตนของพวกเขา", + "report_flow.label.hate_dehumanizing": "การเปรียบเทียบผู้คนกับสัตว์ โรคภัยไข้เจ็บ หรือสิ่งสกปรก หรือการเรียกพวกเขาว่าด้อยกว่ามนุษย์", + "report_flow.label.hate_incitement": "การเรียกร้องให้ใช้ความรุนแรงหรือการกีดกันกลุ่มคน", + "report_flow.label.hate_other": "การโจมตีอื่นๆ ต่อผู้คนเพราะตัวตนของพวกเขา", + "report_flow.label.hate_slurs": "คำเหยียด สัญลักษณ์แสดงความเกลียดชัง หรือการเหมารวมที่ดูถูกเหยียดหยาม", + "report_flow.label.hate_violence": "ความเกลียดชัง ความรุนแรง หรือแนวคิดสุดโต่ง", + "report_flow.label.identity": "รสนิยมทางเพศ อัตลักษณ์ทางเพศ หรือภาวะอินเตอร์เซ็กซ์", + "report_flow.label.illegal_activity": "กิจกรรมที่ผิดกฎหมายอื่นๆ", + "report_flow.label.illegal_goods": "การขายยาเสพติด อาวุธ หรือสิ่งผิดกฎหมายอื่นๆ", + "report_flow.label.impersonation": "การแอบอ้างเป็นผู้อื่น หรือการหลอกลวงผู้คน", + "report_flow.label.impersonation_guild": "การแอบอ้างเป็น {product_name} หรือองค์กรอื่น", + "report_flow.label.impersonation_organization": "บริษัท แบรนด์ หรือกลุ่ม", + "report_flow.label.impersonation_person": "ฉันหรือคนใกล้ชิด", + "report_flow.label.impersonation_public_figure": "บุคคลที่มีชื่อเสียง เช่น ครีเอเตอร์หรือนักการเมือง", + "report_flow.label.impersonation_staff": "เจ้าหน้าที่ {product_name} หรือฝ่ายสนับสนุน", + "report_flow.label.intimate_image_abuse": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวซึ่งถูกแชร์โดยไม่ได้รับความยินยอม รวมถึง Deepfake หรือการขู่ว่าจะแชร์ภาพเหล่านั้น", + "report_flow.label.intimate_image_abuse_guild": "การแชร์ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวโดยไม่ได้รับความยินยอม รวมถึง Deepfake", + "report_flow.label.intimate_image_abuse_profile": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวของบุคคลซึ่งถูกแชร์โดยไม่ได้รับความยินยอม รวมถึง Deepfake", + "report_flow.label.intimate_photo": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัว", + "report_flow.label.invite_splash": "ภาพปกคำเชิญ", + "report_flow.label.ip_address": "ที่อยู่ IP", + "report_flow.label.learn_more": "อ่านหลักเกณฑ์คอมมูนิตี้ของ {product_name}", + "report_flow.label.legal_name": "ชื่อจริงหรือชื่อตามกฎหมาย", + "report_flow.label.lgbtq_targeting": "การจงใจเรียกผิดเพศ การเรียกด้วยชื่อเดิมที่เลิกใช้แล้ว การเปิดเผยอัตลักษณ์ทางเพศของใครโดยไม่ได้รับความยินยอม หรือการปฏิเสธอัตลักษณ์ของเขา", + "report_flow.label.malware_guild": "การเผยแพร่มัลแวร์หรือลิงก์ฟิชชิ่ง", + "report_flow.label.malware_phishing": "ความพยายามในการฟิชชิ่ง มัลแวร์ หรือแฮ็ก", + "report_flow.label.member_activity": "สิ่งที่สมาชิกโพสต์หรือทำที่นั่น", + "report_flow.label.metric_manipulation": "การปลอมแปลงจำนวนสมาชิกหรือจำนวนรีแอ็กชัน", + "report_flow.label.minor_contact": "การขอให้ผู้เยาว์มาพบ หรือขอรูปภาพหรือรายละเอียดส่วนตัว ในลักษณะที่ดูเหมือนเป็นการล่าเหยื่อ", + "report_flow.label.minor_dating_community": "เป็นคอมมูนิตี้สำหรับการออกเดทระหว่างผู้เยาว์", + "report_flow.label.minor_fictional": "เนื้อหาทางเพศเกี่ยวกับตัวละครเด็กที่วาด เขียน หรือสร้างโดย AI", + "report_flow.label.minor_grooming": "การล่อลวงผู้เยาว์ (grooming) หรือการสร้างความไว้วางใจที่ไม่เหมาะสมกับผู้เยาว์", + "report_flow.label.minor_grooming_guild": "สมาชิกล่อลวงผู้เยาว์ (grooming) หรือสร้างความไว้วางใจที่ไม่เหมาะสมกับผู้เยาว์", + "report_flow.label.minor_in_adult_space": "ผู้เยาว์อยู่ในช่องหรือคอมมูนิตี้ 18+", + "report_flow.label.minor_in_adult_space_guild": "อนุญาตให้ผู้เยาว์เข้าช่อง 18+", + "report_flow.label.minor_risk": "ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยง", + "report_flow.label.minor_risk_guild": "ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยง", + "report_flow.label.minor_sexual": "การทำให้ผู้เยาว์เป็นวัตถุทางเพศ", + "report_flow.label.minor_sexual_contact": "การเกี้ยวพาราสีผู้เยาว์หรือส่งข้อความทางเพศถึงผู้เยาว์", + "report_flow.label.minor_sexual_contact_guild": "สมาชิกเกี้ยวพาราสีผู้เยาว์หรือส่งข้อความทางเพศถึงผู้เยาว์", + "report_flow.label.minor_sexual_content": "ผู้เยาว์แชร์เนื้อหาทางเพศด้วยตนเอง", + "report_flow.label.minor_sexual_content_guild": "ผู้เยาว์โพสต์หรือส่งเนื้อหาทางเพศ", + "report_flow.label.minor_sexual_content_profile": "โปรไฟล์ของผู้เยาว์ที่มีเนื้อหาทางเพศ", + "report_flow.label.minor_sexual_guild": "การทำให้ผู้เยาว์เป็นวัตถุทางเพศ", + "report_flow.label.minor_sexualization": "ความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์", + "report_flow.label.minor_sexualization_guild": "สมาชิกแสดงความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์", + "report_flow.label.minor_sexualization_profile": "ความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์ในโปรไฟล์ของพวกเขา", + "report_flow.label.name": "ชื่อ", + "report_flow.label.other": "สิ่งอื่นที่ไม่ได้ระบุไว้ที่นี่", + "report_flow.label.other_identifying": "ข้อมูลอื่นที่สามารถใช้ระบุตัวตนหรือระบุตำแหน่งที่อยู่ของบุคคลได้", + "report_flow.label.permits_violations": "อนุญาตให้มีการละเมิดกฎอย่างร้ายแรง", + "report_flow.label.phone": "หมายเลขโทรศัพท์", + "report_flow.label.photo": "รูปภาพ", + "report_flow.label.platform_abuse": "การขูดข้อมูล ระบบอัตโนมัติ หรือการละเมิดแพลตฟอร์มอื่นๆ", + "report_flow.label.private_conversation": "ข้อความส่วนตัว ภาพหน้าจอ หรือบันทึกการโทร", + "report_flow.label.private_info": "การแชร์รายละเอียดส่วนตัวของผู้อื่น", + "report_flow.label.private_info_profile": "โปรไฟล์ของพวกเขาแชร์รายละเอียดส่วนตัวของผู้อื่น", + "report_flow.label.profile_text": "ข้อความโปรไฟล์", + "report_flow.label.raid": "การจัดหรือเข้าร่วมการบุกโจมตีหรือรุมโจมตี", + "report_flow.label.raid_guild": "การจัดการบุกโจมตีหรือรุมโจมตีผู้คนหรือคอมมูนิตี้", + "report_flow.label.rude_language": "คำหยาบหรือคำพูดหยาบคาย", + "report_flow.label.self_harm": "มีคนอาจทำร้ายตัวเอง หรือกำลังส่งเสริมการทำร้ายตัวเอง", + "report_flow.label.self_harm_graphic": "ภาพการทำร้ายตัวเองที่โจ่งแจ้ง", + "report_flow.label.self_harm_guild": "สมาชิกยุยงให้ผู้อื่นทำร้ายตัวเอง", + "report_flow.label.self_harm_pressure": "การกดดันหรือท้าทายให้ใครบางคนทำร้ายตัวเอง", + "report_flow.label.self_harm_pressure_guild": "การกดดันหรือท้าทายให้ผู้คนทำร้ายตัวเอง", + "report_flow.label.self_harm_profile": "โปรไฟล์ของพวกเขาบ่งบอกถึงการทำร้ายตัวเองหรือส่งเสริมให้ทำร้ายตัวเอง", + "report_flow.label.self_harm_promotion": "ส่งเสริมการทำร้ายตัวเองหรือแบ่งปันวิธีการ", + "report_flow.label.self_harm_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมการทำร้ายตัวเอง", + "report_flow.label.sexual": "เนื้อหาทางเพศ", + "report_flow.label.sexual_exploitation": "การแสวงหาประโยชน์ทางเพศ การบีบบังคับ หรือการค้ามนุษย์", + "report_flow.label.sexual_unwanted": "รูปภาพหรือข้อความทางเพศที่ฉันไม่ต้องการ", + "report_flow.label.something_else": "อย่างอื่น", + "report_flow.label.spam": "สแปมหรือโฆษณาที่ไม่ต้องการ", + "report_flow.label.spam_bulk": "การส่งสแปมหรือโฆษณาจำนวนมาก", + "report_flow.label.spam_or_manipulation": "สแปมหรือการบิดเบือนแพลตฟอร์ม", + "report_flow.label.spam_profile": "โปรไฟล์ของพวกเขาใช้สำหรับสแปมหรือโฆษณา", + "report_flow.label.suicide_promotion": "ส่งเสริมการฆ่าตัวตายหรือแบ่งปันวิธีการ", + "report_flow.label.suicide_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมการฆ่าตัวตาย", + "report_flow.label.synthetic_media": "สื่อปลอมหรือสื่อที่สร้างโดย AI ที่นำเสนอว่าเป็นของจริง", + "report_flow.label.terrorism": "การก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง", + "report_flow.label.terrorism_guild": "การชักชวนหรือส่งเสริมการก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง", + "report_flow.label.threat": "การข่มขู่หรือการยุยงให้ใช้ความรุนแรง", + "report_flow.label.threat_to_share": "พวกเขากำลังขู่ว่าจะแชร์", + "report_flow.label.too_young": "พวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำในการใช้ {product_name}", + "report_flow.label.unwanted_contact": "การสะกดรอยตามหรือติดต่อฉันหรือผู้อื่นซ้ำๆ หลังจากถูกขอให้หยุด บล็อก หรือลบออก", + "report_flow.label.violence_glorification": "ยกย่องความรุนแรงในโลกแห่งความเป็นจริง", + "report_flow.label.violence_incitement": "การส่งเสริมความรุนแรงหรืออธิบายวิธีทำร้ายผู้อื่น", + "report_flow.label.violence_misinfo": "ความรุนแรง แนวคิดสุดโต่ง หรือข้อมูลเท็จที่เป็นอันตราย", + "report_flow.label.violent_threat": "บอกว่าจะทำร้ายใครบางคน", + "report_flow.label.worried_profile": "ฉันกังวลเกี่ยวกับความปลอดภัยของพวกเขา", + "report_flow.label.worried_self_harm": "ฉันกลัวว่าพวกเขาอาจทำร้ายตัวเอง", + "report_flow.label.worried_suicide": "ฉันกลัวว่าพวกเขาอาจพยายามฆ่าตัวตาย", + "report_flow.notice.need_more_info.body": "ในการตรวจสอบ เราต้องการข้อความที่พวกเขาบอกอายุของตนเอง หรือทำให้ชัดเจนว่าพวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำของ {product_name} โปรดรายงานข้อความนั้นแทน", + "report_flow.notice.need_more_info.title": "เรายังดำเนินการไม่ได้", + "report_flow.notice.need_more_info_profile.body": "ในการตรวจสอบ เราต้องการเห็นว่าพวกเขาบอกอายุของตนเองที่ไหน หรือทำให้ชัดเจนว่าพวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำของ {product_name} โปรดรายงานข้อความหรือโปรไฟล์นั้นแทน", + "report_flow.screen.abuse.title": "เกี่ยวข้องกับอะไร", + "report_flow.screen.abuse_guild.title": "ผู้คนในคอมมูนิตี้นี้กำลังทำอะไรอยู่", + "report_flow.screen.age_stated_message.title": "ข้อความนี้ระบุอายุของพวกเขาหรือไม่", + "report_flow.screen.age_stated_profile.title": "โปรไฟล์ของพวกเขาระบุอายุหรือไม่", + "report_flow.screen.community_parts.subtitle": "เลือกได้มากเท่าที่คุณต้องการ", + "report_flow.screen.community_parts.title": "ส่วนใดของคอมมูนิตี้ที่เกี่ยวข้อง", + "report_flow.screen.crisis_support.subtitle": "สายด่วนช่วยเหลือภาวะวิกฤตให้คำปรึกษาฟรีและเก็บเป็นความลับ", + "report_flow.screen.crisis_support.title": "มีคนพร้อมช่วยเหลือคุณได้ทันที", + "report_flow.screen.false_info.subtitle": "ความคิดเห็น การเสียดสี และการถกเถียงโดยสุจริตเป็นสิ่งที่อนุญาต การหมิ่นประมาทที่ผิดกฎหมายสามารถรายงานได้ภายใต้กฎหมายบริการดิจิทัล (DSA)", + "report_flow.screen.false_info.subtitle_self_hosted": "ความคิดเห็น การเสียดสี และการถกเถียงโดยสุจริตเป็นสิ่งที่อนุญาต", + "report_flow.screen.false_info.title": "สิ่งนี้ทำให้เข้าใจผิดอย่างไร", + "report_flow.screen.harassment.title": "มีคนถูกมุ่งเป้าโจมตีอย่างไร", + "report_flow.screen.hate.title": "โจมตีผู้คนเพราะตัวตนของพวกเขาอย่างไร", + "report_flow.screen.impersonation.subtitle": "การล้อเลียนหรือการสวมบทบาทที่ระบุไว้อย่างชัดเจนเป็นสิ่งที่อนุญาต", + "report_flow.screen.impersonation.title": "ใครถูกแอบอ้าง หรือเป็นการหลอกลวง", + "report_flow.screen.minor_risk.title": "บุคคลนี้ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยงได้อย่างไร", + "report_flow.screen.minor_risk_guild.title": "คอมมูนิตี้นี้ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยงได้อย่างไร", + "report_flow.screen.minor_sexual.subtitle": "เนื้อหาที่วาด เขียน หรือสร้างโดย AI จะนับรวมเมื่อตัวละครถูกอธิบายว่าเป็นผู้เยาว์ หรือเป็นเด็กก่อนวัยแรกรุ่นอย่างชัดเจน รวมถึง lolicon, shotacon และ cub", + "report_flow.screen.minor_sexual.title": "คุณเห็นอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.minor_sexual_guild.title": "คุณเห็นอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.private_info.subtitle": "เลือกได้มากเท่าที่คุณต้องการ หากภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวแสดงบุคคลที่อายุต่ำกว่า 18 ปี ให้ย้อนกลับไปและรายงานภายใต้ “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.private_info.title": "มีรายละเอียดส่วนตัวใดบ้างที่เกี่ยวข้อง", + "report_flow.screen.profile_abuse.title": "โปรไฟล์ของพวกเขามีอันตรายอย่างไร", + "report_flow.screen.profile_hate_violence.title": "โปรไฟล์ของพวกเขากำลังแสดงหรือส่งเสริมอะไร", + "report_flow.screen.profile_intro.options_heading": "ดูเพิ่มเติม", + "report_flow.screen.profile_intro.subtitle": "บอกเราว่ามีอะไรผิดปกติกับโปรไฟล์นี้ พวกเขาจะไม่ทราบว่าใครเป็นผู้รายงาน", + "report_flow.screen.profile_intro.title": "รายงานโปรไฟล์", + "report_flow.screen.profile_minor_sexual.title": "โปรไฟล์ของพวกเขามีอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.profile_parts.subtitle": "เลือกได้มากเท่าที่คุณต้องการ", + "report_flow.screen.profile_parts.title": "ส่วนใดของโปรไฟล์ของพวกเขามีปัญหา", + "report_flow.screen.profile_private_info.title": "มีรายละเอียดส่วนตัวใดบ้างในโปรไฟล์ของพวกเขา", + "report_flow.screen.profile_sexual.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศในโปรไฟล์ของพวกเขา", + "report_flow.screen.profile_threat.title": "โปรไฟล์ของพวกเขามีส่วนเกี่ยวข้องกับความรุนแรงได้อย่างไร", + "report_flow.screen.root_guild.subtitle": "เลือกข้อที่ตรงที่สุดกับสิ่งที่เกิดขึ้นในคอมมูนิตี้นี้", + "report_flow.screen.root_guild.title": "มีอะไรผิดปกติกับคอมมูนิตี้นี้", + "report_flow.screen.root_message.subtitle": "เลือกข้อที่ตรงที่สุด คุณสามารถตรวจสอบทุกอย่างก่อนที่จะส่งได้", + "report_flow.screen.root_message.title": "รายงานข้อความ", + "report_flow.screen.root_user.subtitle": "เลือกข้อที่ตรงที่สุดกับสิ่งที่อยู่ในโปรไฟล์ของพวกเขา", + "report_flow.screen.root_user.title": "มีอะไรผิดปกติกับโปรไฟล์ของพวกเขา", + "report_flow.screen.self_harm.subtitle": "ไม่มีใครถูกลงโทษจากการบอกว่าพวกเขากำลังประสบปัญหา การบอกเราว่าคุณกังวลช่วยให้เราสามารถให้การสนับสนุนได้", + "report_flow.screen.self_harm.title": "พวกเขาพูดหรือแชร์อะไร", + "report_flow.screen.self_harm_guild.title": "สมาชิกกำลังยุยงหรือส่งเสริมอะไร", + "report_flow.screen.self_harm_profile.title": "โปรไฟล์ของพวกเขากล่าวหรือแสดงอะไร", + "report_flow.screen.sexual.subtitle": "หากบุคคลที่ปรากฏหรือเกี่ยวข้องคนใดมีอายุต่ำกว่า 18 ปี ให้เลือก “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.sexual.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศ", + "report_flow.screen.sexual_guild.subtitle": "หากบุคคลที่ปรากฏหรือเกี่ยวข้องคนใดมีอายุต่ำกว่า 18 ปี ให้เลือก “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.sexual_guild.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศในคอมมูนิตี้นี้", + "report_flow.screen.something_else_guild.title": "มีอะไรอีกบ้างที่เกิดขึ้นในคอมมูนิตี้นี้", + "report_flow.screen.something_else_message.title": "มีอะไรอีกบ้างที่เกิดขึ้น", + "report_flow.screen.something_else_user.title": "มีอะไรอีกบ้างที่ผิดปกติกับโปรไฟล์นี้", + "report_flow.screen.spam_kind_guild.title": "คอมมูนิตี้นี้ละเมิดแพลตฟอร์มอย่างไร", + "report_flow.screen.spam_profile.title": "บัญชีนี้ถูกนำไปใช้ในทางที่ผิดอย่างไร", + "report_flow.screen.threat.title": "มันเกี่ยวข้องกับความรุนแรงได้อย่างไร", + "report_flow.screen.violence_misinfo.title": "ข้อใดตรงกับเรื่องนี้", + "report_flow.screen.violence_misinfo_guild.title": "ข้อใดเกิดขึ้นในคอมมูนิตี้นี้" }); export default CONTENT_I18N_TH_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/tr.ts b/fluxer_api/src/api/content_i18n/locales/tr.ts index 1090fa694..131558cbf 100644 --- a/fluxer_api/src/api/content_i18n/locales/tr.ts +++ b/fluxer_api/src/api/content_i18n/locales/tr.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_TR_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Metin kanalları", "guild.default_category_voice": "Sesli kanallar", "guild.default_channel_text": "genel", - "guild.default_channel_voice": "Genel" + "guild.default_channel_voice": "Genel", + "report_flow.description.name": "Kullanıcı adı, görünen ad veya topluluk takma adı", + "report_flow.description.photo": "Avatar ve banner olarak kullandıkları", + "report_flow.description.profile_text": "Biyografi, özel durum veya zamirler", + "report_flow.label.abuse": "Saldırgan veya zararlı içerik", + "report_flow.label.account_trading": "Hesap satışı veya çalınan giriş bilgileri ya da kart detayları", + "report_flow.label.account_trading_communities": "Hesap veya topluluk satın alma veya satma", + "report_flow.label.address": "Ev adresi veya iş yeri", + "report_flow.label.adult_content_no_gate": "18+ yaş kısıtlaması olmayan yetişkin içeriği", + "report_flow.label.adult_content_profile": "Profilinde açık cinsel içerikli yetişkin içeriği", + "report_flow.label.adult_content_unmarked": "18+ olarak işaretlenmemiş bir topluluk kanalındaki yetişkinlere yönelik içerik", + "report_flow.label.age_no_message": "Hayır, yaşlarını belirtmiyor", + "report_flow.label.age_no_profile": "Hayır, profilleri yaşlarını belirtmiyor", + "report_flow.label.age_yes_message": "Evet, yaşlarını belirtiyor", + "report_flow.label.age_yes_profile": "Evet, profilleri yaşlarını belirtiyor", + "report_flow.label.atrocity_denial": "Holokost'u veya diğer soykırımları inkâr etme ya da kutlama", + "report_flow.label.ban_evasion": "Başka bir hesapla yasaklamayı aşma", + "report_flow.label.channel_names": "Kanal adları", + "report_flow.label.community_banner": "Topluluk banner'ı", + "report_flow.label.community_icon": "Topluluk simgesi", + "report_flow.label.community_name": "Topluluk adı", + "report_flow.label.conversion_therapy": "Dönüşüm terapisini teşvik etme", + "report_flow.label.copyright": "Telif hakkı veya ticari marka şikayeti", + "report_flow.label.crisis_lines": "Ülkenizdeki kriz hatları", + "report_flow.label.csam": "Çocuk cinsel istismarına ait gerçek veya yapay zeka ile üretilmiş görseller ya da videolar", + "report_flow.label.discovery_listing": "Keşfet listesi", + "report_flow.label.dislike": "Bana göre değil", + "report_flow.label.dsa": "AB'de yasa dışı içerik (Dijital Hizmetler Yasası)", + "report_flow.label.eating_disorder_promotion": "Düzensiz yeme davranışlarını teşvik etme", + "report_flow.label.eating_disorder_promotion_profile": "Profili yeme bozukluklarını teşvik ediyor", + "report_flow.label.email": "E-posta adresi", + "report_flow.label.emoji_stickers": "Özel emoji veya çıkartmalar", + "report_flow.label.face_photo": "Yüzlerinin fotoğrafı", + "report_flow.label.fake_account": "Sahte hesap, bot veya otomatik kötüye kullanım", + "report_flow.label.fake_account_profile": "Sahte veya yanıltıcı bir hesap", + "report_flow.label.false_claims": "Belirli bir kişinin itibarını zedelemek için yalan yayma", + "report_flow.label.false_info": "Zararlı yanlış bilgiler yayma", + "report_flow.label.financial": "Kart, banka veya diğer finansal bilgiler", + "report_flow.label.fraud": "İnsanların parasını veya hesaplarını dolandırıcılıkla ele geçirmeye çalışıyorlar", + "report_flow.label.fraud_guild": "İnsanların parasını veya hesaplarını dolandırıcılıkla ele geçirme", + "report_flow.label.government_id": "Kimlik belgesi veya kimlik numarası", + "report_flow.label.graphic_violence": "Şok etmek için gösterilen gerçek şiddet, örneğin vahşet görüntüleri veya hayvanlara zulüm", + "report_flow.label.harassment": "Zorbalık, taciz veya takip", + "report_flow.label.harassment_direct": "Birini tekrar tekrar hakaret veya tacizle hedef alma", + "report_flow.label.harassment_guild": "İnsanları taciz etme, onlara zorbalık yapma veya onları takip etme", + "report_flow.label.harassment_profile": "Profili beni veya başka birini taciz ediyor ya da hedef alıyor", + "report_flow.label.harmful_false_claims": "Gerçek dünyada ciddi zarara yol açabilecek yanlış iddialar", + "report_flow.label.hate": "İnsanlara kim oldukları nedeniyle yöneltilen nefret veya ayrımcılık", + "report_flow.label.hate_dehumanizing": "İnsanları hayvanlarla, hastalıkla veya pislikle kıyaslama ya da insanlıktan aşağı olarak niteleme", + "report_flow.label.hate_incitement": "Bir gruba karşı şiddet veya dışlama çağrıları", + "report_flow.label.hate_other": "İnsanlara kim oldukları nedeniyle yapılan diğer saldırılar", + "report_flow.label.hate_slurs": "Aşağılayıcı hakaret sözcükleri, nefret sembolleri veya küçük düşürücü kalıp yargılar", + "report_flow.label.hate_violence": "Nefret, şiddet veya aşırıcılık", + "report_flow.label.identity": "Cinsel yönelim, cinsiyet kimliği veya interseks durumu", + "report_flow.label.illegal_activity": "Diğer yasa dışı etkinlik", + "report_flow.label.illegal_goods": "Uyuşturucu, silah veya başka yasa dışı satışlar", + "report_flow.label.impersonation": "Başka biri gibi davranma veya insanları dolandırma", + "report_flow.label.impersonation_guild": "{product_name} veya başka bir kuruluş gibi davranma", + "report_flow.label.impersonation_organization": "Bir şirket, marka veya grup", + "report_flow.label.impersonation_person": "Ben veya bana yakın biri", + "report_flow.label.impersonation_public_figure": "Tanınmış bir kişi, örneğin bir içerik üreticisi veya politikacı", + "report_flow.label.impersonation_staff": "{product_name} personeli veya destek ekibi", + "report_flow.label.intimate_image_abuse": "Deepfake'ler dahil, rıza olmadan paylaşılan mahrem görüntüler veya bunları paylaşma tehdidi", + "report_flow.label.intimate_image_abuse_guild": "Deepfake'ler dahil, mahrem görüntüleri rıza olmadan paylaşma", + "report_flow.label.intimate_image_abuse_profile": "Deepfake'ler dahil, birinin mahrem görüntülerinin rıza olmadan paylaşılması", + "report_flow.label.intimate_photo": "Mahrem veya çıplak fotoğraf", + "report_flow.label.invite_splash": "Davet karşılama görseli", + "report_flow.label.ip_address": "IP adresi", + "report_flow.label.learn_more": "{product_name} Topluluk Yönergeleri'ni okuyun", + "report_flow.label.legal_name": "Gerçek veya yasal ad", + "report_flow.label.lgbtq_targeting": "Birine kasıtlı olarak yanlış cinsiyetle hitap etme, eski adıyla hitap etme (deadnaming), kimliğini ifşa etme ya da kimliğini inkâr etme", + "report_flow.label.malware_guild": "Kötü amaçlı yazılım veya kimlik avı bağlantıları dağıtma", + "report_flow.label.malware_phishing": "Kimlik avı, kötü amaçlı yazılım veya bilgisayar korsanlığı girişimleri", + "report_flow.label.member_activity": "Üyelerin orada paylaştıkları veya yaptıkları", + "report_flow.label.metric_manipulation": "Üye veya tepki sayılarını sahteleme", + "report_flow.label.minor_contact": "Reşit olmayan birinden, istismarcı nitelikte görünen bir şekilde buluşma, fotoğraf veya kişisel bilgi isteme", + "report_flow.label.minor_dating_community": "Reşit olmayanlar arasında flörtleşme için bir topluluktur", + "report_flow.label.minor_fictional": "Çizilmiş, yazılmış veya yapay zeka tarafından oluşturulmuş kurgusal bir çocuğun cinsel içeriği", + "report_flow.label.minor_grooming": "Reşit olmayan birini istismar amacıyla ayartma (grooming) veya onunla uygunsuz bir güven ilişkisi kurma", + "report_flow.label.minor_grooming_guild": "Üyeler reşit olmayanları istismar amacıyla ayartıyor (grooming) veya onlarla uygunsuz bir güven ilişkisi kuruyor", + "report_flow.label.minor_in_adult_space": "Reşit olmayan biri 18+ bir kanalda veya toplulukta", + "report_flow.label.minor_in_adult_space_guild": "18+ kanallarda reşit olmayanlara izin veriliyor", + "report_flow.label.minor_risk": "Reşit olmayan birini riske atma", + "report_flow.label.minor_risk_guild": "Reşit olmayanları riske atma", + "report_flow.label.minor_sexual": "Reşit olmayan birini cinselleştirme", + "report_flow.label.minor_sexual_contact": "Reşit olmayan biriyle flört etme veya ona cinsel içerikli mesajlar gönderme", + "report_flow.label.minor_sexual_contact_guild": "Üyeler reşit olmayanlarla flört ediyor veya onlara cinsel içerikli mesajlar gönderiyor", + "report_flow.label.minor_sexual_content": "Reşit olmayan biri kendisi cinsel içerik paylaşıyor", + "report_flow.label.minor_sexual_content_guild": "Reşit olmayanlar cinsel içerik paylaşıyor veya gönderiyor", + "report_flow.label.minor_sexual_content_profile": "Cinsel içerik barındıran, reşit olmayan birine ait profil", + "report_flow.label.minor_sexual_guild": "Reşit olmayanları cinselleştirme", + "report_flow.label.minor_sexualization": "Reşit olmayanlar hakkında cinsel yorumlar", + "report_flow.label.minor_sexualization_guild": "Üyeler reşit olmayanlar hakkında cinsel yorumlar yapıyor", + "report_flow.label.minor_sexualization_profile": "Profilinde reşit olmayanlar hakkında cinsel yorumlar", + "report_flow.label.name": "Adlar", + "report_flow.label.other": "Burada listelenmeyen bir şey", + "report_flow.label.other_identifying": "Birini tanımlayabilecek veya yerini belirleyebilecek diğer bilgiler", + "report_flow.label.permits_violations": "Ciddi kural ihlallerine izin veriyor", + "report_flow.label.phone": "Telefon numarası", + "report_flow.label.photo": "Resimler", + "report_flow.label.platform_abuse": "Kazıma, otomasyon veya diğer platform suistimalleri", + "report_flow.label.private_conversation": "Özel mesajlar, ekran görüntüleri veya arama kayıtları", + "report_flow.label.private_info": "Birinin özel bilgilerini paylaşma", + "report_flow.label.private_info_profile": "Profili birinin özel bilgilerini paylaşıyor", + "report_flow.label.profile_text": "Profil metni", + "report_flow.label.raid": "Bir baskın veya toplu saldırı düzenleme ya da bunlara katılma", + "report_flow.label.raid_guild": "Kişilere veya topluluklara karşı baskınlar veya toplu saldırılar düzenleme", + "report_flow.label.rude_language": "Küfür veya kaba sözler", + "report_flow.label.self_harm": "Birisi kendine zarar verebilir veya kendine zarar vermeyi teşvik ediyor", + "report_flow.label.self_harm_graphic": "Kendine zarar vermeyi açıkça gösteren görüntüler", + "report_flow.label.self_harm_guild": "Üyeler başkalarını kendilerine zarar vermeye itiyor", + "report_flow.label.self_harm_pressure": "Birine kendine zarar vermesi için baskı yapma veya ona bunu yapması için meydan okuma", + "report_flow.label.self_harm_pressure_guild": "İnsanlara kendilerine zarar vermeleri için baskı yapma veya meydan okuma", + "report_flow.label.self_harm_profile": "Profili kendine zarar vermeyi ima ediyor veya teşvik ediyor", + "report_flow.label.self_harm_promotion": "Kendine zarar vermeyi teşvik etme veya yöntemlerini paylaşma", + "report_flow.label.self_harm_promotion_profile": "Profilinde kendine zarar verme teşvik ediliyor", + "report_flow.label.sexual": "Cinsel içerik", + "report_flow.label.sexual_exploitation": "Cinsel istismar, zorlama veya insan ticareti", + "report_flow.label.sexual_unwanted": "İstemediğim cinsel içerikli görseller veya mesajlar", + "report_flow.label.something_else": "Başka bir şey", + "report_flow.label.spam": "Spam veya istenmeyen reklamlar", + "report_flow.label.spam_bulk": "Toplu olarak spam veya reklam gönderme", + "report_flow.label.spam_or_manipulation": "Spam veya platform manipülasyonu", + "report_flow.label.spam_profile": "Profilleri spam veya reklam için kullanılıyor", + "report_flow.label.suicide_promotion": "İntiharı teşvik etme veya yöntemlerini paylaşma", + "report_flow.label.suicide_promotion_profile": "Profilleri intiharı teşvik ediyor", + "report_flow.label.synthetic_media": "Gerçek gibi gösterilen sahte veya yapay zeka ürünü medya", + "report_flow.label.terrorism": "Terörizm veya şiddet yanlısı aşırıcılık", + "report_flow.label.terrorism_guild": "Terörizm veya şiddet yanlısı aşırıcılık için eleman toplama veya teşvik etme", + "report_flow.label.threat": "Tehditler veya şiddet çağrıları", + "report_flow.label.threat_to_share": "Paylaşmakla tehdit ediyorlar", + "report_flow.label.too_young": "{product_name} kullanmak için gereken minimum yaşın altındalar", + "report_flow.label.unwanted_contact": "Durması istendikten, engellendikten veya kaldırıldıktan sonra beni veya başkasını takip etme veya tekrar tekrar iletişime geçme", + "report_flow.label.violence_glorification": "Gerçek dünyadaki şiddeti yüceltme", + "report_flow.label.violence_incitement": "Şiddeti teşvik etme veya insanlara nasıl zarar verileceğini açıklama", + "report_flow.label.violence_misinfo": "Şiddet, aşırıcılık veya zararlı yanlış bilgi", + "report_flow.label.violent_threat": "Birine zarar vereceklerini söyleme", + "report_flow.label.worried_profile": "Onların güvenliği konusunda endişeliyim", + "report_flow.label.worried_self_harm": "Kendilerine zarar verebileceklerinden korkuyorum", + "report_flow.label.worried_suicide": "İntihar girişiminde bulunabileceklerinden korkuyorum", + "report_flow.notice.need_more_info.body": "Bunu inceleyebilmemiz için, kaç yaşında olduklarını söyledikleri veya {product_name} kullanmak için gereken minimum yaşın altında olduklarını açıkça belirttikleri bir mesaja ihtiyacımız var. Bunun yerine o mesajı bildirin.", + "report_flow.notice.need_more_info.title": "Henüz işlem yapamayız", + "report_flow.notice.need_more_info_profile.body": "Bunu inceleyebilmemiz için, kaç yaşında olduklarını söyledikleri veya {product_name} kullanmak için gereken minimum yaşın altında olduklarını açıkça belirttikleri yeri görmemiz gerekiyor. Bunun yerine o mesajı veya profili bildirin.", + "report_flow.screen.abuse.title": "Neler içeriyor?", + "report_flow.screen.abuse_guild.title": "Bu topluluktaki kişiler neler yapıyor?", + "report_flow.screen.age_stated_message.title": "Bu mesaj kaç yaşında olduklarını belirtiyor mu?", + "report_flow.screen.age_stated_profile.title": "Profilleri kaç yaşında olduklarını belirtiyor mu?", + "report_flow.screen.community_parts.subtitle": "İhtiyacınız kadarını seçin.", + "report_flow.screen.community_parts.title": "Topluluğun hangi bölümleri söz konusu?", + "report_flow.screen.crisis_support.subtitle": "Kriz hatları ücretsiz, gizli destek sunar.", + "report_flow.screen.crisis_support.title": "Şu anda size yardım edebilecek biri var", + "report_flow.screen.false_info.subtitle": "Fikirler, hiciv ve iyi niyetli tartışmalara izin verilir. Yasa dışı iftira, Dijital Hizmetler Yasası kapsamında bildirilebilir.", + "report_flow.screen.false_info.subtitle_self_hosted": "Fikirler, hiciv ve iyi niyetli tartışmalara izin verilir.", + "report_flow.screen.false_info.title": "Nesi yanıltıcı?", + "report_flow.screen.harassment.title": "Birisi nasıl hedef alınıyor?", + "report_flow.screen.hate.title": "İnsanlara kim oldukları nedeniyle nasıl saldırıyor?", + "report_flow.screen.impersonation.subtitle": "Açıkça belirtilmiş parodi veya rol yapmaya izin verilir.", + "report_flow.screen.impersonation.title": "Kimin kimliğine bürünülüyor veya bu bir dolandırıcılık mı?", + "report_flow.screen.minor_risk.title": "Bu kişi reşit olmayan birini nasıl riske atıyor?", + "report_flow.screen.minor_risk_guild.title": "Bu topluluk reşit olmayanları nasıl riske atıyor?", + "report_flow.screen.minor_sexual.subtitle": "Çizilmiş, yazılmış veya yapay zeka ile üretilmiş içerikler, bir karakter reşit olmayan biri olarak tanımlandığında veya açıkça ergenlik öncesi çağda olduğunda (lolicon, shotacon ve cub dahil) bu kapsama girer.", + "report_flow.screen.minor_sexual.title": "Reşit olmayan biriyle ilgili ne gördünüz?", + "report_flow.screen.minor_sexual_guild.title": "Reşit olmayanlarla ilgili ne gördünüz?", + "report_flow.screen.private_info.subtitle": "İhtiyacınız kadarını seçin. Mahrem bir fotoğraf 18 yaşın altındaki birini gösteriyorsa, geri dönün ve bunu “Reşit olmayan birini cinselleştirme” seçeneği altında bildirin.", + "report_flow.screen.private_info.title": "Hangi özel bilgiler söz konusu?", + "report_flow.screen.profile_abuse.title": "Profilinde ne zararlı?", + "report_flow.screen.profile_hate_violence.title": "Profilleri ne gösteriyor veya neyi teşvik ediyor?", + "report_flow.screen.profile_intro.options_heading": "Daha fazla bilgi edinin", + "report_flow.screen.profile_intro.subtitle": "Bu profilde neyin yanlış olduğunu bize söyleyin. Bildirimi kimin yaptığı onlara söylenmeyecek.", + "report_flow.screen.profile_intro.title": "Profili bildir", + "report_flow.screen.profile_minor_sexual.title": "Profillerinde reşit olmayan biriyle ilgili olan ne var?", + "report_flow.screen.profile_parts.subtitle": "İhtiyacınız kadarını seçin.", + "report_flow.screen.profile_parts.title": "Profilinin hangi kısımları sorunlu?", + "report_flow.screen.profile_private_info.title": "Profilinde hangi özel bilgiler yer alıyor?", + "report_flow.screen.profile_sexual.title": "Profillerindeki cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.profile_threat.title": "Profillerinde şiddet nasıl yer alıyor?", + "report_flow.screen.root_guild.subtitle": "Bu toplulukta olup bitene en yakın seçeneği belirleyin.", + "report_flow.screen.root_guild.title": "Bu toplulukla ilgili sorun nedir?", + "report_flow.screen.root_message.subtitle": "En yakın seçeneği belirleyin. Göndermeden önce her şeyi kontrol edebilirsiniz.", + "report_flow.screen.root_message.title": "Mesajı bildir", + "report_flow.screen.root_user.subtitle": "Profillerinde olana en yakın seçeneği belirleyin.", + "report_flow.screen.root_user.title": "Profillerindeki sorun nedir?", + "report_flow.screen.self_harm.subtitle": "Kimse zorlandığını söylediği için cezalandırılmaz. Endişeli olduğunuzu bize söylemeniz, destek sunmamıza yardımcı olur.", + "report_flow.screen.self_harm.title": "Ne söylediler veya paylaştılar?", + "report_flow.screen.self_harm_guild.title": "Üyeler neyi teşvik ediyor?", + "report_flow.screen.self_harm_profile.title": "Profilleri ne söylüyor veya ne gösteriyor?", + "report_flow.screen.sexual.subtitle": "Gösterilen veya dahil olan herhangi biri 18 yaşın altındaysa “Reşit olmayan birini cinselleştirme” seçeneğini belirleyin.", + "report_flow.screen.sexual.title": "Cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.sexual_guild.subtitle": "Gösterilen veya dahil olan herhangi biri 18 yaşın altındaysa “Reşit olmayanları cinselleştirme” seçeneğini belirleyin.", + "report_flow.screen.sexual_guild.title": "Bu topluluktaki cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.something_else_guild.title": "Bu toplulukta başka ne oluyor?", + "report_flow.screen.something_else_message.title": "Başka ne oluyor?", + "report_flow.screen.something_else_user.title": "Bu profilde başka ne sorun var?", + "report_flow.screen.spam_kind_guild.title": "Bu topluluk platformu nasıl kötüye kullanıyor?", + "report_flow.screen.spam_profile.title": "Hesap nasıl kötüye kullanılıyor?", + "report_flow.screen.threat.title": "Şiddet nasıl yer alıyor?", + "report_flow.screen.violence_misinfo.title": "Bunlardan hangisi buna uyuyor?", + "report_flow.screen.violence_misinfo_guild.title": "Bunlardan hangisi bu toplulukta oluyor?" }); export default CONTENT_I18N_TR_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/uk.ts b/fluxer_api/src/api/content_i18n/locales/uk.ts index f6ae54229..8b77c19d8 100644 --- a/fluxer_api/src/api/content_i18n/locales/uk.ts +++ b/fluxer_api/src/api/content_i18n/locales/uk.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_UK_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Текстові канали", "guild.default_category_voice": "Голосові канали", "guild.default_channel_text": "загальний", - "guild.default_channel_voice": "Загальний" + "guild.default_channel_voice": "Загальний", + "report_flow.description.name": "Ім'я користувача, ім'я для відображення або псевдонім у спільноті", + "report_flow.description.photo": "Аватар і банер, які вони використовують", + "report_flow.description.profile_text": "Біографія, власний статус або займенники", + "report_flow.label.abuse": "Образливий або шкідливий вміст", + "report_flow.label.account_trading": "Продаж облікових записів, викрадених даних для входу чи даних карток", + "report_flow.label.account_trading_communities": "Купівля або продаж облікових записів чи спільнот", + "report_flow.label.address": "Домашня адреса або місце роботи", + "report_flow.label.adult_content_no_gate": "Вміст для дорослих без вікового обмеження 18+", + "report_flow.label.adult_content_profile": "Відвертий вміст для дорослих у їхньому профілі", + "report_flow.label.adult_content_unmarked": "Вміст для дорослих у каналі спільноти, який не позначено як 18+", + "report_flow.label.age_no_message": "Ні, у повідомленні вік не згадано", + "report_flow.label.age_no_profile": "Ні, у профілі вік не згадано", + "report_flow.label.age_yes_message": "Так, у повідомленні згадано їхній вік", + "report_flow.label.age_yes_profile": "Так, у профілі згадано їхній вік", + "report_flow.label.atrocity_denial": "Заперечення або прославляння Голокосту чи інших геноцидів", + "report_flow.label.ban_evasion": "Обхід бану через інший обліковий запис", + "report_flow.label.channel_names": "Назви каналів", + "report_flow.label.community_banner": "Банер спільноти", + "report_flow.label.community_icon": "Іконка спільноти", + "report_flow.label.community_name": "Назва спільноти", + "report_flow.label.conversion_therapy": "Пропаганда конверсійної терапії", + "report_flow.label.copyright": "Скарга щодо авторських прав або торговельної марки", + "report_flow.label.crisis_lines": "Гарячі лінії кризової допомоги у вашій країні", + "report_flow.label.csam": "Реальні або згенеровані ШІ зображення чи відео сексуального насильства над дітьми", + "report_flow.label.discovery_listing": "Запис у Discovery", + "report_flow.label.dislike": "Мені це просто не підходить", + "report_flow.label.dsa": "Вміст, незаконний в ЄС (Акт про цифрові послуги)", + "report_flow.label.eating_disorder_promotion": "Заохочення розладів харчової поведінки", + "report_flow.label.eating_disorder_promotion_profile": "Їхній профіль пропагує розлади харчової поведінки", + "report_flow.label.email": "Адреса електронної пошти", + "report_flow.label.emoji_stickers": "Власні емоджі або стікери", + "report_flow.label.face_photo": "Фото їхнього обличчя", + "report_flow.label.fake_account": "Фейковий обліковий запис, бот або автоматизоване зловживання", + "report_flow.label.fake_account_profile": "Фейковий або оманливий обліковий запис", + "report_flow.label.false_claims": "Поширення брехні, щоб зашкодити репутації конкретної людини", + "report_flow.label.false_info": "Поширення шкідливої неправдивої інформації", + "report_flow.label.financial": "Дані картки, банківські або інші фінансові дані", + "report_flow.label.fraud": "Вони намагаються виманити в людей гроші або облікові записи", + "report_flow.label.fraud_guild": "Виманювання в людей грошей або облікових записів", + "report_flow.label.government_id": "Документ, що посвідчує особу, або ідентифікаційний номер", + "report_flow.label.graphic_violence": "Реальне насильство, показане, щоб шокувати, як-от криваві сцени чи жорстоке поводження з тваринами", + "report_flow.label.harassment": "Булінг, переслідування або сталкінг", + "report_flow.label.harassment_direct": "Неодноразове цькування когось образами чи знущаннями", + "report_flow.label.harassment_guild": "Переслідування, булінг або сталкінг людей", + "report_flow.label.harassment_profile": "Їхній профіль переслідує або цькує мене чи когось іншого", + "report_flow.label.harmful_false_claims": "Неправдиві заяви, які можуть завдати серйозної шкоди в реальному світі", + "report_flow.label.hate": "Ненависть або дискримінація людей через те, ким вони є", + "report_flow.label.hate_dehumanizing": "Порівняння людей із тваринами, хворобами чи брудом або твердження, що вони менш ніж люди", + "report_flow.label.hate_incitement": "Заклики до насильства щодо групи людей або до її виключення", + "report_flow.label.hate_other": "Інші напади на людей через те, ким вони є", + "report_flow.label.hate_slurs": "Образливі слова щодо груп людей, символи ненависті або принизливі стереотипи", + "report_flow.label.hate_violence": "Ненависть, насильство чи екстремізм", + "report_flow.label.identity": "Сексуальна орієнтація, гендерна ідентичність або інтерсексуальність", + "report_flow.label.illegal_activity": "Інша незаконна діяльність", + "report_flow.label.illegal_goods": "Продаж наркотиків, зброї чи інших незаконних товарів", + "report_flow.label.impersonation": "Видавання себе за когось або шахрайство", + "report_flow.label.impersonation_guild": "Видавання себе за {product_name} або іншу організацію", + "report_flow.label.impersonation_organization": "Компанія, бренд або група", + "report_flow.label.impersonation_person": "Я або хтось із моїх близьких", + "report_flow.label.impersonation_public_figure": "Відома особа, наприклад автор вмісту чи політик", + "report_flow.label.impersonation_staff": "Співробітник {product_name} або служба підтримки", + "report_flow.label.intimate_image_abuse": "Інтимні зображення, поширені без згоди, включно з діпфейками, або погроза їх поширення", + "report_flow.label.intimate_image_abuse_guild": "Поширення інтимних зображень без згоди, включно з діпфейками", + "report_flow.label.intimate_image_abuse_profile": "Інтимні зображення когось, поширені без згоди, включно з діпфейками", + "report_flow.label.intimate_photo": "Інтимне або оголене фото", + "report_flow.label.invite_splash": "Заставка запрошення", + "report_flow.label.ip_address": "IP-адреса", + "report_flow.label.learn_more": "Ознайомтеся з правилами спільноти {product_name}", + "report_flow.label.legal_name": "Справжнє або юридичне ім'я", + "report_flow.label.lgbtq_targeting": "Навмисний місджендеринг, використання колишнього імені людини (деднеймінг), аутинг або заперечення її ідентичності", + "report_flow.label.malware_guild": "Розповсюдження шкідливого програмного забезпечення або фішингових посилань", + "report_flow.label.malware_phishing": "Фішинг, шкідливе програмне забезпечення або спроби злому", + "report_flow.label.member_activity": "Що публікують або роблять там учасники", + "report_flow.label.metric_manipulation": "Фальсифікація кількості учасників або реакцій", + "report_flow.label.minor_contact": "Прохання до неповнолітнього зустрітися, надіслати фото чи особисті дані так, що це схоже на хижацьку поведінку", + "report_flow.label.minor_dating_community": "Це спільнота для знайомств між неповнолітніми", + "report_flow.label.minor_fictional": "Намальований, написаний або згенерований ШІ вміст сексуального характеру із вигаданою дитиною", + "report_flow.label.minor_grooming": "Грумінг або побудова неналежної довіри з неповнолітнім", + "report_flow.label.minor_grooming_guild": "Учасники займаються грумінгом неповнолітніх або будують з ними неналежні довірчі стосунки", + "report_flow.label.minor_in_adult_space": "Неповнолітній перебуває в каналі або спільноті 18+", + "report_flow.label.minor_in_adult_space_guild": "Неповнолітні особи допускаються до каналів 18+", + "report_flow.label.minor_risk": "Наражання неповнолітньої особи на ризик", + "report_flow.label.minor_risk_guild": "Наражання неповнолітніх осіб на ризик", + "report_flow.label.minor_sexual": "Сексуалізація неповнолітньої особи", + "report_flow.label.minor_sexual_contact": "Флірт із неповнолітньою особою або надсилання їй повідомлень сексуального характеру", + "report_flow.label.minor_sexual_contact_guild": "Учасники фліртують із неповнолітніми особами або надсилають їм повідомлення сексуального характеру", + "report_flow.label.minor_sexual_content": "Неповнолітня особа сама поширює вміст сексуального характеру", + "report_flow.label.minor_sexual_content_guild": "Неповнолітні особи публікують або надсилають вміст сексуального характеру", + "report_flow.label.minor_sexual_content_profile": "Профіль неповнолітньої особи з вмістом сексуального характеру", + "report_flow.label.minor_sexual_guild": "Сексуалізація неповнолітніх осіб", + "report_flow.label.minor_sexualization": "Сексуальні коментарі про неповнолітніх осіб", + "report_flow.label.minor_sexualization_guild": "Учасники роблять сексуальні коментарі про неповнолітніх осіб", + "report_flow.label.minor_sexualization_profile": "Сексуальні коментарі про неповнолітніх осіб у їхньому профілі", + "report_flow.label.name": "Імена", + "report_flow.label.other": "Щось, чого немає в цьому списку", + "report_flow.label.other_identifying": "Інша інформація, яка може ідентифікувати або визначити місцезнаходження особи", + "report_flow.label.permits_violations": "Це дозволяє серйозно порушувати правила", + "report_flow.label.phone": "Номер телефону", + "report_flow.label.photo": "Зображення", + "report_flow.label.platform_abuse": "Збирання даних, автоматизація або інше зловживання платформою", + "report_flow.label.private_conversation": "Приватні повідомлення, знімки екрана або записи дзвінків", + "report_flow.label.private_info": "Поширення чиїхось приватних даних", + "report_flow.label.private_info_profile": "Їхній профіль поширює чиїсь приватні дані", + "report_flow.label.profile_text": "Текст профілю", + "report_flow.label.raid": "Організація або приєднання до рейду чи цькування", + "report_flow.label.raid_guild": "Організація рейдів або цькування проти людей чи спільнот", + "report_flow.label.rude_language": "Нецензурна лексика або грубі висловлювання", + "report_flow.label.self_harm": "Хтось може заподіяти собі шкоду або заохочує до цього", + "report_flow.label.self_harm_graphic": "Натуралістичні зображення заподіяння собі шкоди", + "report_flow.label.self_harm_guild": "Учасники спонукають інших заподіяти собі шкоду", + "report_flow.label.self_harm_pressure": "Тиск на когось або підбурювання «на слабо» заподіяти собі шкоду", + "report_flow.label.self_harm_pressure_guild": "Тиск на людей або підбурювання «на слабо» заподіяти собі шкоду", + "report_flow.label.self_harm_profile": "Їхній профіль вказує на заподіяння собі шкоди або заохочує до нього", + "report_flow.label.self_harm_promotion": "Заохочення до заподіяння собі шкоди або поширення методів", + "report_flow.label.self_harm_promotion_profile": "Їхній профіль заохочує до заподіяння собі шкоди", + "report_flow.label.sexual": "Сексуальний вміст", + "report_flow.label.sexual_exploitation": "Сексуальна експлуатація, примус або торгівля людьми", + "report_flow.label.sexual_unwanted": "Сексуальні зображення або повідомлення, яких я не хотів(-ла)", + "report_flow.label.something_else": "Щось інше", + "report_flow.label.spam": "Спам або небажана реклама", + "report_flow.label.spam_bulk": "Масова розсилка спаму або реклами", + "report_flow.label.spam_or_manipulation": "Спам або маніпуляції платформою", + "report_flow.label.spam_profile": "Їхній профіль використовується для спаму або реклами", + "report_flow.label.suicide_promotion": "Заохочення до самогубства або поширення методів", + "report_flow.label.suicide_promotion_profile": "Їхній профіль заохочує самогубство", + "report_flow.label.synthetic_media": "Фейкові або створені ШІ медіа, представлені як справжні", + "report_flow.label.terrorism": "Тероризм або насильницький екстремізм", + "report_flow.label.terrorism_guild": "Вербування або пропаганда тероризму чи насильницького екстремізму", + "report_flow.label.threat": "Погрози або заклики до насильства", + "report_flow.label.threat_to_share": "Вони погрожують поширити це", + "report_flow.label.too_young": "Вони не досягли мінімального віку, щоб користуватися {product_name}", + "report_flow.label.unwanted_contact": "Сталкінг або багаторазові контакти зі мною чи кимось іншим після прохання припинити, блокування або видалення", + "report_flow.label.violence_glorification": "Прославлення реального насильства", + "report_flow.label.violence_incitement": "Заохочення насильства або пояснення, як завдати шкоди людям", + "report_flow.label.violence_misinfo": "Насильство, екстремізм або шкідлива неправдива інформація", + "report_flow.label.violent_threat": "Вони кажуть, що завдадуть комусь шкоди", + "report_flow.label.worried_profile": "Я турбуюся про безпеку цієї людини", + "report_flow.label.worried_self_harm": "Я боюся, що ця людина може заподіяти собі шкоду", + "report_flow.label.worried_suicide": "Я боюся, що ця людина може спробувати вчинити самогубство", + "report_flow.notice.need_more_info.body": "Щоб розглянути це, нам потрібне повідомлення, де людина вказує свій вік або дає зрозуміти, що не досягла мінімального віку для користування {product_name}. Натомість поскаржтеся на таке повідомлення.", + "report_flow.notice.need_more_info.title": "Поки що ми не можемо вжити заходів", + "report_flow.notice.need_more_info_profile.body": "Щоб розглянути це, нам потрібно побачити, де людина вказує свій вік або дає зрозуміти, що не досягла мінімального віку для користування {product_name}. Натомість поскаржтеся на таке повідомлення або профіль.", + "report_flow.screen.abuse.title": "Чого це стосується?", + "report_flow.screen.abuse_guild.title": "Що роблять люди в цій спільноті?", + "report_flow.screen.age_stated_message.title": "Чи в цьому повідомленні вказано їхній вік?", + "report_flow.screen.age_stated_profile.title": "Чи вказано в їхньому профілі вік?", + "report_flow.screen.community_parts.subtitle": "Виберіть стільки, скільки потрібно.", + "report_flow.screen.community_parts.title": "Яких частин спільноти це стосується?", + "report_flow.screen.crisis_support.subtitle": "Гарячі лінії кризової допомоги пропонують безкоштовну конфіденційну підтримку.", + "report_flow.screen.crisis_support.title": "Хтось може допомогти просто зараз", + "report_flow.screen.false_info.subtitle": "Думки, сатира та добросовісні дебати дозволені. Про незаконний наклеп можна повідомити відповідно до Акту про цифрові послуги.", + "report_flow.screen.false_info.subtitle_self_hosted": "Думки, сатира та добросовісні дебати дозволені.", + "report_flow.screen.false_info.title": "Що вводить в оману?", + "report_flow.screen.harassment.title": "Як саме когось цькують?", + "report_flow.screen.hate.title": "Як це спрямовано проти людей через те, ким вони є?", + "report_flow.screen.impersonation.subtitle": "Чітко позначені пародії або рольові ігри дозволені.", + "report_flow.screen.impersonation.title": "За кого видають себе, чи це шахрайство?", + "report_flow.screen.minor_risk.title": "Як ця особа наражає неповнолітнього на ризик?", + "report_flow.screen.minor_risk_guild.title": "Як ця спільнота наражає неповнолітніх на ризик?", + "report_flow.screen.minor_sexual.subtitle": "Намальований, написаний або створений ШІ вміст враховується, якщо персонажа описано як неповнолітнього або він явно допубертатного віку, зокрема lolicon, shotacon і cub.", + "report_flow.screen.minor_sexual.title": "Що ви бачили за участю неповнолітньої особи?", + "report_flow.screen.minor_sexual_guild.title": "Що ви бачили за участю неповнолітніх осіб?", + "report_flow.screen.private_info.subtitle": "Виберіть стільки, скільки потрібно. Якщо на інтимному фото зображено особу, якій менше 18 років, поверніться назад і поскаржтеся на це в розділі «Сексуалізація неповнолітньої особи».", + "report_flow.screen.private_info.title": "Яких приватних даних це стосується?", + "report_flow.screen.profile_abuse.title": "Що шкідливого в їхньому профілі?", + "report_flow.screen.profile_hate_violence.title": "Що показує або пропагує їхній профіль?", + "report_flow.screen.profile_intro.options_heading": "Докладніше", + "report_flow.screen.profile_intro.subtitle": "Розкажіть, що не так із цим профілем. Особа не дізнається, хто на неї поскаржився.", + "report_flow.screen.profile_intro.title": "Поскаржитися на профіль", + "report_flow.screen.profile_minor_sexual.title": "Що в їхньому профілі стосується неповнолітньої особи?", + "report_flow.screen.profile_parts.subtitle": "Виберіть стільки, скільки потрібно.", + "report_flow.screen.profile_parts.title": "Які частини їхнього профілю є проблемою?", + "report_flow.screen.profile_private_info.title": "Які приватні дані містяться в їхньому профілі?", + "report_flow.screen.profile_sexual.title": "Розкажіть про сексуальний вміст у їхньому профілі", + "report_flow.screen.profile_threat.title": "Як їхній профіль пов'язаний із насильством?", + "report_flow.screen.root_guild.subtitle": "Виберіть найближчий варіант того, що відбувається в цій спільноті.", + "report_flow.screen.root_guild.title": "Що не так із цією спільнотою?", + "report_flow.screen.root_message.subtitle": "Виберіть найближчий варіант. Ви можете перевірити все перед надсиланням.", + "report_flow.screen.root_message.title": "Поскаржитися на повідомлення", + "report_flow.screen.root_user.subtitle": "Виберіть найближчий варіант того, що є в їхньому профілі.", + "report_flow.screen.root_user.title": "Що не так із їхнім профілем?", + "report_flow.screen.self_harm.subtitle": "Нікого не карають за те, що людина говорить про свої труднощі. Якщо ви повідомите нам про свої побоювання, це допоможе нам надати підтримку.", + "report_flow.screen.self_harm.title": "Що вони сказали або чим поділилися?", + "report_flow.screen.self_harm_guild.title": "Що заохочують учасники?", + "report_flow.screen.self_harm_profile.title": "Що сказано чи показано в їхньому профілі?", + "report_flow.screen.sexual.subtitle": "Якщо комусь із показаних або залучених осіб менше 18 років, виберіть «Сексуалізація неповнолітньої особи».", + "report_flow.screen.sexual.title": "Розкажіть про сексуальний вміст", + "report_flow.screen.sexual_guild.subtitle": "Якщо комусь із показаних або залучених осіб менше 18 років, виберіть «Сексуалізація неповнолітніх осіб».", + "report_flow.screen.sexual_guild.title": "Розкажіть про сексуальний вміст у цій спільноті", + "report_flow.screen.something_else_guild.title": "Що ще відбувається в цій спільноті?", + "report_flow.screen.something_else_message.title": "Що ще відбувається?", + "report_flow.screen.something_else_user.title": "Що ще не так із цим профілем?", + "report_flow.screen.spam_kind_guild.title": "Як ця спільнота зловживає платформою?", + "report_flow.screen.spam_profile.title": "Як обліковий запис використовується не за призначенням?", + "report_flow.screen.threat.title": "Як це пов'язано з насильством?", + "report_flow.screen.violence_misinfo.title": "Що з цього найбільше підходить?", + "report_flow.screen.violence_misinfo_guild.title": "Що з цього відбувається в цій спільноті?" }); export default CONTENT_I18N_UK_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/vi.ts b/fluxer_api/src/api/content_i18n/locales/vi.ts index 9e6d6689c..adf4e6caf 100644 --- a/fluxer_api/src/api/content_i18n/locales/vi.ts +++ b/fluxer_api/src/api/content_i18n/locales/vi.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_VI_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "Kênh văn bản", "guild.default_category_voice": "Kênh thoại", "guild.default_channel_text": "chung", - "guild.default_channel_voice": "Chung" + "guild.default_channel_voice": "Chung", + "report_flow.description.name": "Tên người dùng, tên hiển thị hoặc biệt danh cộng đồng", + "report_flow.description.photo": "Ảnh đại diện và ảnh bìa họ dùng", + "report_flow.description.profile_text": "Tiểu sử, trạng thái tùy chỉnh hoặc đại từ nhân xưng", + "report_flow.label.abuse": "Nội dung lạm dụng hoặc có hại", + "report_flow.label.account_trading": "Bán tài khoản, hoặc thông tin đăng nhập hoặc chi tiết thẻ bị đánh cắp", + "report_flow.label.account_trading_communities": "Mua hoặc bán tài khoản hoặc cộng đồng", + "report_flow.label.address": "Địa chỉ nhà hoặc nơi làm việc", + "report_flow.label.adult_content_no_gate": "Nội dung người lớn không có giới hạn 18+", + "report_flow.label.adult_content_profile": "Nội dung người lớn lộ liễu trong hồ sơ của họ", + "report_flow.label.adult_content_unmarked": "Nội dung người lớn trong kênh cộng đồng không được đánh dấu 18+", + "report_flow.label.age_no_message": "Không, tin nhắn không đề cập đến tuổi", + "report_flow.label.age_no_profile": "Không, hồ sơ không đề cập đến tuổi", + "report_flow.label.age_yes_message": "Có, tin nhắn đề cập đến tuổi của họ", + "report_flow.label.age_yes_profile": "Có, hồ sơ của họ có đề cập đến tuổi", + "report_flow.label.atrocity_denial": "Phủ nhận hoặc ca ngợi Holocaust hoặc các cuộc diệt chủng khác", + "report_flow.label.ban_evasion": "Lách lệnh cấm bằng một tài khoản khác", + "report_flow.label.channel_names": "Tên kênh", + "report_flow.label.community_banner": "Ảnh bìa cộng đồng", + "report_flow.label.community_icon": "Biểu tượng cộng đồng", + "report_flow.label.community_name": "Tên cộng đồng", + "report_flow.label.conversion_therapy": "Quảng bá liệu pháp chuyển đổi", + "report_flow.label.copyright": "Khiếu nại bản quyền hoặc nhãn hiệu", + "report_flow.label.crisis_lines": "Đường dây nóng khủng hoảng tại quốc gia của bạn", + "report_flow.label.csam": "Ảnh hoặc video lạm dụng tình dục trẻ em, dù là thật hay do AI tạo ra", + "report_flow.label.discovery_listing": "Danh sách khám phá", + "report_flow.label.dislike": "Không hợp với tôi", + "report_flow.label.dsa": "Nội dung bất hợp pháp tại EU (Đạo luật Dịch vụ Kỹ thuật số)", + "report_flow.label.eating_disorder_promotion": "Khuyến khích chứng rối loạn ăn uống", + "report_flow.label.eating_disorder_promotion_profile": "Hồ sơ của họ quảng bá chứng rối loạn ăn uống", + "report_flow.label.email": "Địa chỉ email", + "report_flow.label.emoji_stickers": "Biểu tượng cảm xúc hoặc nhãn dán tùy chỉnh", + "report_flow.label.face_photo": "Ảnh khuôn mặt của họ", + "report_flow.label.fake_account": "Tài khoản giả mạo, bot hoặc lạm dụng tự động", + "report_flow.label.fake_account_profile": "Một tài khoản giả hoặc mang tính lừa dối", + "report_flow.label.false_claims": "Lan truyền lời nói dối để làm tổn hại danh tiếng của một người cụ thể", + "report_flow.label.false_info": "Lan truyền thông tin sai lệch có hại", + "report_flow.label.financial": "Thẻ, ngân hàng hoặc các chi tiết tài chính khác", + "report_flow.label.fraud": "Họ đang cố lừa lấy tiền hoặc tài khoản của mọi người", + "report_flow.label.fraud_guild": "Lừa lấy tiền hoặc tài khoản của mọi người", + "report_flow.label.government_id": "Giấy tờ tùy thân hoặc số giấy tờ tùy thân", + "report_flow.label.graphic_violence": "Bạo lực thật được hiển thị để gây sốc, như cảnh máu me hoặc ngược đãi động vật", + "report_flow.label.harassment": "Bắt nạt, quấy rối hoặc theo dõi", + "report_flow.label.harassment_direct": "Liên tục nhắm vào ai đó bằng lời lăng mạ hoặc xúc phạm", + "report_flow.label.harassment_guild": "Quấy rối, bắt nạt hoặc theo dõi người khác", + "report_flow.label.harassment_profile": "Hồ sơ của họ quấy rối hoặc nhắm mục tiêu vào tôi hoặc người khác", + "report_flow.label.harmful_false_claims": "Tuyên bố sai sự thật có thể gây ra tác hại nghiêm trọng trong thế giới thực", + "report_flow.label.hate": "Thù ghét hoặc phân biệt đối xử với mọi người vì họ là ai", + "report_flow.label.hate_dehumanizing": "So sánh người với động vật, bệnh tật hoặc rác rưởi, hoặc gọi họ là kém hơn con người", + "report_flow.label.hate_incitement": "Kêu gọi bạo lực hoặc loại trừ một nhóm", + "report_flow.label.hate_other": "Các cuộc tấn công khác vào mọi người vì họ là ai", + "report_flow.label.hate_slurs": "Từ ngữ miệt thị, biểu tượng thù ghét hoặc định kiến hạ thấp nhân phẩm", + "report_flow.label.hate_violence": "Thù ghét, bạo lực hoặc chủ nghĩa cực đoan", + "report_flow.label.identity": "Xu hướng tính dục, bản dạng giới hoặc tình trạng liên giới tính", + "report_flow.label.illegal_activity": "Hoạt động trái phép khác", + "report_flow.label.illegal_goods": "Buôn bán ma túy, vũ khí hoặc các mặt hàng bất hợp pháp khác", + "report_flow.label.impersonation": "Mạo danh người khác hoặc lừa đảo mọi người", + "report_flow.label.impersonation_guild": "Giả mạo {product_name} hoặc một tổ chức khác", + "report_flow.label.impersonation_organization": "Một công ty, thương hiệu hoặc nhóm", + "report_flow.label.impersonation_person": "Tôi hoặc người thân thiết với tôi", + "report_flow.label.impersonation_public_figure": "Một người nổi tiếng, như người sáng tạo nội dung hoặc chính trị gia", + "report_flow.label.impersonation_staff": "Nhân viên hoặc bộ phận hỗ trợ của {product_name}", + "report_flow.label.intimate_image_abuse": "Hình ảnh nhạy cảm được chia sẻ mà không có sự đồng ý, bao gồm deepfake hoặc đe dọa chia sẻ chúng", + "report_flow.label.intimate_image_abuse_guild": "Chia sẻ hình ảnh nhạy cảm mà không có sự đồng ý, bao gồm deepfake", + "report_flow.label.intimate_image_abuse_profile": "Hình ảnh nhạy cảm của ai đó được chia sẻ mà không có sự đồng ý, bao gồm deepfake", + "report_flow.label.intimate_photo": "Ảnh nhạy cảm hoặc ảnh khỏa thân", + "report_flow.label.invite_splash": "Ảnh bìa lời mời", + "report_flow.label.ip_address": "Địa chỉ IP", + "report_flow.label.learn_more": "Đọc Nguyên tắc Cộng đồng của {product_name}", + "report_flow.label.legal_name": "Tên thật hoặc tên pháp lý", + "report_flow.label.lgbtq_targeting": "Cố ý gọi sai giới tính, dùng tên cũ (deadname) hoặc tiết lộ trái ý muốn xu hướng tính dục hay bản dạng giới của ai đó, hoặc phủ nhận danh tính của họ", + "report_flow.label.malware_guild": "Phát tán phần mềm độc hại hoặc liên kết phishing", + "report_flow.label.malware_phishing": "Phishing, phần mềm độc hại hoặc nỗ lực xâm nhập trái phép (hack)", + "report_flow.label.member_activity": "Những gì thành viên đăng hoặc làm ở đó", + "report_flow.label.metric_manipulation": "Làm giả số lượng thành viên hoặc lượt phản ứng", + "report_flow.label.minor_contact": "Yêu cầu trẻ vị thành niên gặp mặt, hoặc xin ảnh hoặc thông tin cá nhân, theo cách có vẻ có ý đồ xâm hại", + "report_flow.label.minor_dating_community": "Đây là một cộng đồng hẹn hò giữa trẻ vị thành niên", + "report_flow.label.minor_fictional": "Nội dung tình dục được vẽ, viết hoặc tạo bằng AI về một đứa trẻ hư cấu", + "report_flow.label.minor_grooming": "Dụ dỗ (grooming) hoặc xây dựng lòng tin không phù hợp với trẻ vị thành niên", + "report_flow.label.minor_grooming_guild": "Các thành viên dụ dỗ (grooming) hoặc xây dựng lòng tin không phù hợp với trẻ vị thành niên", + "report_flow.label.minor_in_adult_space": "Trẻ vị thành niên đang ở trong kênh hoặc cộng đồng 18+", + "report_flow.label.minor_in_adult_space_guild": "Trẻ vị thành niên được phép vào kênh 18+", + "report_flow.label.minor_risk": "Gây nguy hiểm cho trẻ vị thành niên", + "report_flow.label.minor_risk_guild": "Gây nguy hiểm cho trẻ vị thành niên", + "report_flow.label.minor_sexual": "Tình dục hóa trẻ vị thành niên", + "report_flow.label.minor_sexual_contact": "Tán tỉnh hoặc nhắn tin tình dục với trẻ vị thành niên", + "report_flow.label.minor_sexual_contact_guild": "Các thành viên tán tỉnh hoặc nhắn tin tình dục với trẻ vị thành niên", + "report_flow.label.minor_sexual_content": "Trẻ vị thành niên tự chia sẻ nội dung tình dục", + "report_flow.label.minor_sexual_content_guild": "Trẻ vị thành niên đăng hoặc gửi nội dung tình dục", + "report_flow.label.minor_sexual_content_profile": "Hồ sơ của trẻ vị thành niên có nội dung tình dục", + "report_flow.label.minor_sexual_guild": "Tình dục hóa trẻ vị thành niên", + "report_flow.label.minor_sexualization": "Bình luận tình dục về trẻ vị thành niên", + "report_flow.label.minor_sexualization_guild": "Các thành viên đưa ra bình luận tình dục về trẻ vị thành niên", + "report_flow.label.minor_sexualization_profile": "Bình luận tình dục về trẻ vị thành niên trong hồ sơ của họ", + "report_flow.label.name": "Tên", + "report_flow.label.other": "Một điều gì đó không được liệt kê ở đây", + "report_flow.label.other_identifying": "Thông tin khác có thể nhận dạng hoặc định vị ai đó", + "report_flow.label.permits_violations": "Nó cho phép vi phạm quy tắc nghiêm trọng", + "report_flow.label.phone": "Số điện thoại", + "report_flow.label.photo": "Ảnh", + "report_flow.label.platform_abuse": "Thu thập dữ liệu trái phép (scraping), tự động hóa hoặc lạm dụng nền tảng theo cách khác", + "report_flow.label.private_conversation": "Tin nhắn riêng tư, ảnh chụp màn hình hoặc bản ghi cuộc gọi", + "report_flow.label.private_info": "Chia sẻ thông tin riêng tư của ai đó", + "report_flow.label.private_info_profile": "Hồ sơ của họ chia sẻ thông tin riêng tư của ai đó", + "report_flow.label.profile_text": "Văn bản trong hồ sơ", + "report_flow.label.raid": "Tổ chức hoặc tham gia một cuộc raid hoặc xúm vào công kích", + "report_flow.label.raid_guild": "Tổ chức các cuộc raid hoặc xúm vào công kích người khác hoặc cộng đồng", + "report_flow.label.rude_language": "Chửi thề hoặc lời lẽ thô lỗ", + "report_flow.label.self_harm": "Ai đó có thể tự làm hại bản thân, hoặc đang khuyến khích tự làm hại bản thân", + "report_flow.label.self_harm_graphic": "Hình ảnh gây sốc về việc tự làm hại bản thân", + "report_flow.label.self_harm_guild": "Các thành viên xúi giục người khác tự làm hại bản thân", + "report_flow.label.self_harm_pressure": "Gây áp lực hoặc thách thức ai đó tự làm hại bản thân", + "report_flow.label.self_harm_pressure_guild": "Gây áp lực hoặc thách thức mọi người tự làm hại bản thân", + "report_flow.label.self_harm_profile": "Hồ sơ của họ cho thấy dấu hiệu tự làm hại bản thân hoặc khuyến khích việc đó", + "report_flow.label.self_harm_promotion": "Khuyến khích tự làm hại bản thân hoặc chia sẻ phương pháp", + "report_flow.label.self_harm_promotion_profile": "Hồ sơ của họ khuyến khích hành vi tự làm hại bản thân", + "report_flow.label.sexual": "Nội dung tình dục", + "report_flow.label.sexual_exploitation": "Bóc lột, ép buộc hoặc buôn người vì mục đích tình dục", + "report_flow.label.sexual_unwanted": "Hình ảnh hoặc tin nhắn tình dục mà tôi không muốn", + "report_flow.label.something_else": "Một điều gì đó khác", + "report_flow.label.spam": "Spam hoặc quảng cáo không mong muốn", + "report_flow.label.spam_bulk": "Gửi spam hoặc quảng cáo hàng loạt", + "report_flow.label.spam_or_manipulation": "Spam hoặc thao túng nền tảng", + "report_flow.label.spam_profile": "Hồ sơ của họ được dùng để gửi spam hoặc quảng cáo", + "report_flow.label.suicide_promotion": "Khuyến khích tự tử hoặc chia sẻ phương pháp", + "report_flow.label.suicide_promotion_profile": "Hồ sơ của họ khuyến khích tự tử", + "report_flow.label.synthetic_media": "Phương tiện truyền thông giả mạo hoặc do AI tạo ra được trình bày như thật", + "report_flow.label.terrorism": "Khủng bố hoặc chủ nghĩa cực đoan bạo lực", + "report_flow.label.terrorism_guild": "Tuyển mộ hoặc cổ xúy khủng bố hoặc chủ nghĩa cực đoan bạo lực", + "report_flow.label.threat": "Đe dọa hoặc kêu gọi bạo lực", + "report_flow.label.threat_to_share": "Họ đang đe dọa chia sẻ nó", + "report_flow.label.too_young": "Họ dưới độ tuổi tối thiểu để sử dụng {product_name}", + "report_flow.label.unwanted_contact": "Theo dõi hoặc liên tục liên hệ với tôi hoặc người khác sau khi bị yêu cầu dừng lại, bị chặn hoặc bị xóa", + "report_flow.label.violence_glorification": "Tôn vinh bạo lực ngoài đời thực", + "report_flow.label.violence_incitement": "Khuyến khích bạo lực hoặc giải thích cách làm hại người khác", + "report_flow.label.violence_misinfo": "Bạo lực, chủ nghĩa cực đoan hoặc thông tin sai lệch có hại", + "report_flow.label.violent_threat": "Nói rằng họ sẽ làm hại ai đó", + "report_flow.label.worried_profile": "Tôi lo lắng về sự an toàn của họ", + "report_flow.label.worried_self_harm": "Tôi lo rằng họ có thể tự làm hại bản thân", + "report_flow.label.worried_suicide": "Tôi lo rằng họ có thể cố gắng tự tử", + "report_flow.notice.need_more_info.body": "Để xem xét điều này, chúng tôi cần một tin nhắn mà họ nói rõ tuổi của mình hoặc cho thấy họ dưới độ tuổi tối thiểu của {product_name}. Thay vào đó, hãy báo cáo tin nhắn đó.", + "report_flow.notice.need_more_info.title": "Chúng tôi chưa thể xử lý", + "report_flow.notice.need_more_info_profile.body": "Để xem xét điều này, chúng tôi cần xem nơi họ nói rõ tuổi của mình hoặc cho thấy họ dưới độ tuổi tối thiểu của {product_name}. Thay vào đó, hãy báo cáo tin nhắn hoặc hồ sơ đó.", + "report_flow.screen.abuse.title": "Nó liên quan đến điều gì?", + "report_flow.screen.abuse_guild.title": "Mọi người trong cộng đồng này đang làm gì?", + "report_flow.screen.age_stated_message.title": "Tin nhắn này có nói rõ tuổi của họ không?", + "report_flow.screen.age_stated_profile.title": "Hồ sơ của họ có ghi rõ tuổi không?", + "report_flow.screen.community_parts.subtitle": "Chọn nhiều mục nếu cần.", + "report_flow.screen.community_parts.title": "Những phần nào của cộng đồng có liên quan?", + "report_flow.screen.crisis_support.subtitle": "Các đường dây nóng khủng hoảng cung cấp hỗ trợ miễn phí, bảo mật.", + "report_flow.screen.crisis_support.title": "Có người có thể giúp ngay bây giờ", + "report_flow.screen.false_info.subtitle": "Ý kiến, châm biếm và tranh luận thiện chí được cho phép. Hành vi phỉ báng bất hợp pháp có thể bị báo cáo theo Đạo luật Dịch vụ Kỹ thuật số.", + "report_flow.screen.false_info.subtitle_self_hosted": "Ý kiến, châm biếm và tranh luận thiện chí được cho phép.", + "report_flow.screen.false_info.title": "Nội dung này gây hiểu lầm như thế nào?", + "report_flow.screen.harassment.title": "Ai đó đang bị nhắm đến bằng cách nào?", + "report_flow.screen.hate.title": "Nó tấn công mọi người vì họ là ai như thế nào?", + "report_flow.screen.impersonation.subtitle": "Hành vi nhại lại hoặc nhập vai được dán nhãn rõ ràng là được phép.", + "report_flow.screen.impersonation.title": "Ai đang bị mạo danh, hay đây là một vụ lừa đảo?", + "report_flow.screen.minor_risk.title": "Người này đang gây nguy hiểm cho trẻ vị thành niên như thế nào?", + "report_flow.screen.minor_risk_guild.title": "Cộng đồng này gây nguy hiểm cho trẻ vị thành niên như thế nào?", + "report_flow.screen.minor_sexual.subtitle": "Nội dung vẽ, viết hoặc AI được tính khi một nhân vật được mô tả là trẻ vị thành niên hoặc rõ ràng là chưa dậy thì, bao gồm lolicon, shotacon và cub.", + "report_flow.screen.minor_sexual.title": "Bạn đã thấy gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.minor_sexual_guild.title": "Bạn đã thấy gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.private_info.subtitle": "Chọn nhiều mục nếu cần. Nếu ảnh nhạy cảm có hình người dưới 18 tuổi, hãy quay lại và báo cáo ảnh đó trong mục “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.private_info.title": "Những chi tiết riêng tư nào có liên quan?", + "report_flow.screen.profile_abuse.title": "Điều gì gây hại về hồ sơ của họ?", + "report_flow.screen.profile_hate_violence.title": "Hồ sơ của họ hiển thị hoặc quảng bá điều gì?", + "report_flow.screen.profile_intro.options_heading": "Tìm hiểu thêm", + "report_flow.screen.profile_intro.subtitle": "Cho chúng tôi biết có gì sai với hồ sơ này. Họ sẽ không biết ai đã báo cáo họ.", + "report_flow.screen.profile_intro.title": "Báo cáo hồ sơ", + "report_flow.screen.profile_minor_sexual.title": "Hồ sơ của họ có gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.profile_parts.subtitle": "Chọn nhiều mục nếu cần.", + "report_flow.screen.profile_parts.title": "Những phần nào trong hồ sơ của họ có vấn đề?", + "report_flow.screen.profile_private_info.title": "Những chi tiết riêng tư nào có trong hồ sơ của họ?", + "report_flow.screen.profile_sexual.title": "Hãy cho chúng tôi biết về nội dung tình dục trong hồ sơ của họ", + "report_flow.screen.profile_threat.title": "Hồ sơ của họ liên quan đến bạo lực như thế nào?", + "report_flow.screen.root_guild.subtitle": "Chọn mục khớp nhất với những gì đang diễn ra trong cộng đồng này.", + "report_flow.screen.root_guild.title": "Có vấn đề gì với cộng đồng này?", + "report_flow.screen.root_message.subtitle": "Chọn mục khớp nhất. Bạn có thể xem lại mọi thứ trước khi gửi.", + "report_flow.screen.root_message.title": "Báo cáo tin nhắn", + "report_flow.screen.root_user.subtitle": "Chọn mục khớp nhất với những gì có trong hồ sơ của họ.", + "report_flow.screen.root_user.title": "Có vấn đề gì với hồ sơ của họ?", + "report_flow.screen.self_harm.subtitle": "Không ai bị trừng phạt vì nói rằng họ đang gặp khó khăn. Việc bạn nói với chúng tôi rằng bạn đang lo lắng sẽ giúp chúng tôi hỗ trợ.", + "report_flow.screen.self_harm.title": "Họ đã nói hoặc chia sẻ điều gì?", + "report_flow.screen.self_harm_guild.title": "Các thành viên đang khuyến khích điều gì?", + "report_flow.screen.self_harm_profile.title": "Hồ sơ của họ nói hoặc thể hiện điều gì?", + "report_flow.screen.sexual.subtitle": "Nếu bất kỳ ai xuất hiện hoặc có liên quan dưới 18 tuổi, hãy chọn “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.sexual.title": "Hãy cho chúng tôi biết về nội dung tình dục", + "report_flow.screen.sexual_guild.subtitle": "Nếu bất kỳ ai xuất hiện hoặc có liên quan dưới 18 tuổi, hãy chọn “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.sexual_guild.title": "Hãy cho chúng tôi biết về nội dung tình dục trong cộng đồng này", + "report_flow.screen.something_else_guild.title": "Còn điều gì khác đang diễn ra trong cộng đồng này?", + "report_flow.screen.something_else_message.title": "Còn điều gì khác đang diễn ra?", + "report_flow.screen.something_else_user.title": "Còn điều gì khác không ổn với hồ sơ này?", + "report_flow.screen.spam_kind_guild.title": "Cộng đồng này đang lạm dụng nền tảng như thế nào?", + "report_flow.screen.spam_profile.title": "Tài khoản đang bị lạm dụng như thế nào?", + "report_flow.screen.threat.title": "Nó liên quan đến bạo lực như thế nào?", + "report_flow.screen.violence_misinfo.title": "Mục nào trong số này khớp với trường hợp này?", + "report_flow.screen.violence_misinfo_guild.title": "Điều nào trong số này xảy ra trong cộng đồng này?" }); export default CONTENT_I18N_VI_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/zh-CN.ts b/fluxer_api/src/api/content_i18n/locales/zh-CN.ts index 87a962327..66dd05b46 100644 --- a/fluxer_api/src/api/content_i18n/locales/zh-CN.ts +++ b/fluxer_api/src/api/content_i18n/locales/zh-CN.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_ZH_CN_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "文字频道", "guild.default_category_voice": "语音频道", "guild.default_channel_text": "综合", - "guild.default_channel_voice": "综合" + "guild.default_channel_voice": "综合", + "report_flow.description.name": "用户名、显示名称或社区昵称", + "report_flow.description.photo": "他们用作头像和横幅的图片", + "report_flow.description.profile_text": "个人简介、自定义状态或代词", + "report_flow.label.abuse": "辱骂性或有害的内容", + "report_flow.label.account_trading": "出售账号,或被盗的登录信息或银行卡信息", + "report_flow.label.account_trading_communities": "买卖账号或社区", + "report_flow.label.address": "家庭住址或工作地点", + "report_flow.label.adult_content_no_gate": "未设置 18+ 年龄限制的成人内容", + "report_flow.label.adult_content_profile": "个人资料中的露骨成人内容", + "report_flow.label.adult_content_unmarked": "社区频道中未标记为 18+ 的成人内容", + "report_flow.label.age_no_message": "否,消息中没有提及", + "report_flow.label.age_no_profile": "否,个人资料中没有提及", + "report_flow.label.age_yes_message": "是,消息中提到了他们的年龄", + "report_flow.label.age_yes_profile": "是,其个人资料提到了他们的年龄", + "report_flow.label.atrocity_denial": "否认或美化犹太人大屠杀或其他种族灭绝", + "report_flow.label.ban_evasion": "使用其他账号规避封禁", + "report_flow.label.channel_names": "频道名称", + "report_flow.label.community_banner": "社区横幅", + "report_flow.label.community_icon": "社区图标", + "report_flow.label.community_name": "社区名称", + "report_flow.label.conversion_therapy": "宣传转化疗法", + "report_flow.label.copyright": "版权或商标投诉", + "report_flow.label.crisis_lines": "你所在国家或地区的危机热线", + "report_flow.label.csam": "真实或 AI 生成的儿童性虐待图像或视频", + "report_flow.label.discovery_listing": "社区发现列表", + "report_flow.label.dislike": "我就是不喜欢", + "report_flow.label.dsa": "在欧盟属违法的内容(《数字服务法》)", + "report_flow.label.eating_disorder_promotion": "鼓励进食障碍行为", + "report_flow.label.eating_disorder_promotion_profile": "其个人资料宣传进食障碍", + "report_flow.label.email": "电子邮件地址", + "report_flow.label.emoji_stickers": "自定义表情或贴纸", + "report_flow.label.face_photo": "他们的脸部照片", + "report_flow.label.fake_account": "虚假账号、机器人或自动化滥用", + "report_flow.label.fake_account_profile": "虚假或欺骗性账号", + "report_flow.label.false_claims": "散布谎言以损害特定个人的声誉", + "report_flow.label.false_info": "散布有害的虚假信息", + "report_flow.label.financial": "银行卡、银行账户或其他财务信息", + "report_flow.label.fraud": "他们试图骗取他人的钱财或账号", + "report_flow.label.fraud_guild": "骗取他人的钱财或账号", + "report_flow.label.government_id": "身份证件或证件号码", + "report_flow.label.graphic_violence": "真实的暴力场面,旨在造成冲击,例如血腥或虐待动物", + "report_flow.label.harassment": "欺凌、骚扰或跟踪", + "report_flow.label.harassment_direct": "反复用侮辱或辱骂的言行针对某人", + "report_flow.label.harassment_guild": "骚扰、欺凌或跟踪他人", + "report_flow.label.harassment_profile": "其个人资料骚扰或针对我或其他人", + "report_flow.label.harmful_false_claims": "可能造成严重现实伤害的虚假声明", + "report_flow.label.hate": "因身份而针对他人的仇恨或歧视", + "report_flow.label.hate_dehumanizing": "将人比作动物、疾病或污秽,或称其不算是人", + "report_flow.label.hate_incitement": "煽动对某个群体的暴力或排斥", + "report_flow.label.hate_other": "其他基于身份的攻击", + "report_flow.label.hate_slurs": "侮辱性词语、仇恨符号或贬低性刻板印象", + "report_flow.label.hate_violence": "仇恨、暴力或极端主义", + "report_flow.label.identity": "性取向、性别认同或间性人身份", + "report_flow.label.illegal_activity": "其他违法活动", + "report_flow.label.illegal_goods": "销售毒品、武器或其他违法物品", + "report_flow.label.impersonation": "冒充他人或诈骗他人", + "report_flow.label.impersonation_guild": "冒充 {product_name} 或其他组织", + "report_flow.label.impersonation_organization": "公司、品牌或团体", + "report_flow.label.impersonation_person": "我或我身边的人", + "report_flow.label.impersonation_public_figure": "知名人士,如创作者或政治家", + "report_flow.label.impersonation_staff": "{product_name} 员工或客服", + "report_flow.label.intimate_image_abuse": "未经同意分享私密图片,包括深度伪造,或威胁分享这些图片", + "report_flow.label.intimate_image_abuse_guild": "未经同意分享私密图片,包括深度伪造", + "report_flow.label.intimate_image_abuse_profile": "未经同意分享某人的私密图片,包括深度伪造", + "report_flow.label.intimate_photo": "私密或裸露的照片", + "report_flow.label.invite_splash": "邀请背景图", + "report_flow.label.ip_address": "IP 地址", + "report_flow.label.learn_more": "阅读 {product_name} 社区准则", + "report_flow.label.legal_name": "真实姓名或法定姓名", + "report_flow.label.lgbtq_targeting": "故意错称性别、使用曾用名称呼,或未经本人同意公开其性取向或性别身份,或否认其身份", + "report_flow.label.malware_guild": "分发恶意软件或网络钓鱼链接", + "report_flow.label.malware_phishing": "网络钓鱼、恶意软件或黑客攻击", + "report_flow.label.member_activity": "成员在那里发布或做的事", + "report_flow.label.metric_manipulation": "伪造成员数量或表情回应数量", + "report_flow.label.minor_contact": "以看似意图诱骗或侵害的方式要求未成年人见面,或索要其照片或个人信息", + "report_flow.label.minor_dating_community": "这是一个供未成年人之间约会的社区", + "report_flow.label.minor_fictional": "绘制、撰写或 AI 生成的涉及虚构儿童的性内容", + "report_flow.label.minor_grooming": "诱骗未成年人,或与未成年人建立不当信任", + "report_flow.label.minor_grooming_guild": "成员诱骗未成年人,或与未成年人建立不当信任", + "report_flow.label.minor_in_adult_space": "未成年人在 18+ 频道或社区中", + "report_flow.label.minor_in_adult_space_guild": "未成年人被允许进入 18+ 频道", + "report_flow.label.minor_risk": "使未成年人处于危险之中", + "report_flow.label.minor_risk_guild": "使未成年人处于危险之中", + "report_flow.label.minor_sexual": "性化未成年人", + "report_flow.label.minor_sexual_contact": "与未成年人调情,或向其发送带性意味的消息", + "report_flow.label.minor_sexual_contact_guild": "成员与未成年人调情,或向其发送带性意味的消息", + "report_flow.label.minor_sexual_content": "未成年人自己分享性内容", + "report_flow.label.minor_sexual_content_guild": "未成年人发布或发送性内容", + "report_flow.label.minor_sexual_content_profile": "未成年人的个人资料中含有性内容", + "report_flow.label.minor_sexual_guild": "性化未成年人", + "report_flow.label.minor_sexualization": "对未成年人发表带性意味的评论", + "report_flow.label.minor_sexualization_guild": "成员对未成年人发表带性意味的评论", + "report_flow.label.minor_sexualization_profile": "个人资料中有对未成年人发表的带性意味的评论", + "report_flow.label.name": "名称", + "report_flow.label.other": "此处未列出的内容", + "report_flow.label.other_identifying": "可能识别或定位某人的信息", + "report_flow.label.permits_violations": "允许严重违反规则的行为", + "report_flow.label.phone": "电话号码", + "report_flow.label.photo": "图片", + "report_flow.label.platform_abuse": "抓取、自动化或其他平台滥用", + "report_flow.label.private_conversation": "私密消息、屏幕截图或通话录音", + "report_flow.label.private_info": "泄露他人的私人信息", + "report_flow.label.private_info_profile": "其个人资料泄露了他人的私人信息", + "report_flow.label.profile_text": "个人资料文字", + "report_flow.label.raid": "组织或参与突袭或围攻", + "report_flow.label.raid_guild": "组织针对个人或社区的突袭或围攻", + "report_flow.label.rude_language": "说脏话或粗鲁言论", + "report_flow.label.self_harm": "有人可能伤害自己,或在鼓励自残", + "report_flow.label.self_harm_graphic": "血腥的自残图片", + "report_flow.label.self_harm_guild": "成员怂恿他人伤害自己", + "report_flow.label.self_harm_pressure": "逼迫他人自残,或以挑战的形式怂恿他人自残", + "report_flow.label.self_harm_pressure_guild": "逼迫他人自残,或以挑战的形式怂恿他人自残", + "report_flow.label.self_harm_profile": "他们的个人资料暗示自残或鼓励自残", + "report_flow.label.self_harm_promotion": "鼓励自残或分享方法", + "report_flow.label.self_harm_promotion_profile": "其个人资料鼓励自残", + "report_flow.label.sexual": "性内容", + "report_flow.label.sexual_exploitation": "性剥削、胁迫或人口贩运", + "report_flow.label.sexual_unwanted": "我不想要的带有性内容的图片或消息", + "report_flow.label.something_else": "其他", + "report_flow.label.spam": "垃圾信息或不请自来的广告", + "report_flow.label.spam_bulk": "批量发送垃圾信息或广告", + "report_flow.label.spam_or_manipulation": "垃圾信息或平台操控", + "report_flow.label.spam_profile": "其个人资料用于发送垃圾信息或广告", + "report_flow.label.suicide_promotion": "鼓励自杀或分享方法", + "report_flow.label.suicide_promotion_profile": "其个人资料鼓励自杀", + "report_flow.label.synthetic_media": "冒充真实内容的虚假或 AI 生成媒体", + "report_flow.label.terrorism": "恐怖主义或暴力极端主义", + "report_flow.label.terrorism_guild": "招募或宣扬恐怖主义或暴力极端主义", + "report_flow.label.threat": "威胁或煽动暴力", + "report_flow.label.threat_to_share": "他们威胁要分享", + "report_flow.label.too_young": "他们未满 {product_name} 的最低使用年龄", + "report_flow.label.unwanted_contact": "在被要求停止、被屏蔽或被移除后,仍跟踪或反复联系我或他人", + "report_flow.label.violence_glorification": "美化现实暴力", + "report_flow.label.violence_incitement": "鼓励暴力或讲解如何伤害他人", + "report_flow.label.violence_misinfo": "暴力、极端主义或有害的虚假信息", + "report_flow.label.violent_threat": "扬言要伤害某人", + "report_flow.label.worried_profile": "我担心他们的安全", + "report_flow.label.worried_self_harm": "我担心他们会伤害自己", + "report_flow.label.worried_suicide": "我担心他们会尝试自杀", + "report_flow.notice.need_more_info.body": "为了审核此内容,我们需要一条他们说明自己年龄,或明确表示未满 {product_name} 的最低使用年龄的消息。请改为举报该消息。", + "report_flow.notice.need_more_info.title": "暂时无法处理", + "report_flow.notice.need_more_info_profile.body": "为了审核此内容,我们需要看到他们说明自己年龄,或明确表示未满 {product_name} 的最低使用年龄的位置。请改为举报该消息或个人资料。", + "report_flow.screen.abuse.title": "涉及什么?", + "report_flow.screen.abuse_guild.title": "这个社区的成员在做什么?", + "report_flow.screen.age_stated_message.title": "这条消息是否说明了他们的年龄?", + "report_flow.screen.age_stated_profile.title": "他们的个人资料中说明了他们的年龄吗?", + "report_flow.screen.community_parts.subtitle": "按需选择,可多选。", + "report_flow.screen.community_parts.title": "涉及社区的哪些部分?", + "report_flow.screen.crisis_support.subtitle": "危机热线提供免费、保密的帮助。", + "report_flow.screen.crisis_support.title": "现在就有人能帮助你", + "report_flow.screen.false_info.subtitle": "允许发表意见、讽刺和善意辩论。违法诽谤可根据《数字服务法》举报。", + "report_flow.screen.false_info.subtitle_self_hosted": "允许发表意见、讽刺和善意辩论。", + "report_flow.screen.false_info.title": "它有什么误导性?", + "report_flow.screen.harassment.title": "有人是如何被针对的?", + "report_flow.screen.hate.title": "它如何基于身份攻击他人?", + "report_flow.screen.impersonation.subtitle": "明确标注的恶搞或角色扮演是允许的。", + "report_flow.screen.impersonation.title": "谁被冒充了,或者这是个骗局?", + "report_flow.screen.minor_risk.title": "此人如何让未成年人面临风险?", + "report_flow.screen.minor_risk_guild.title": "此社区如何让未成年人面临风险?", + "report_flow.screen.minor_sexual.subtitle": "当角色被描述为未成年人或明显处于青春期前时,绘制、书写或 AI 生成的内容同样适用,包括 lolicon、shotacon 和 cub。", + "report_flow.screen.minor_sexual.title": "你看到了什么涉及未成年人的内容?", + "report_flow.screen.minor_sexual_guild.title": "你看到了什么涉及未成年人的内容?", + "report_flow.screen.private_info.subtitle": "按需选择,可多选。如果私密照片中的人未满 18 岁,请返回并在“性化未成年人”下举报。", + "report_flow.screen.private_info.title": "涉及哪些私人信息?", + "report_flow.screen.profile_abuse.title": "他们的个人资料有什么有害之处?", + "report_flow.screen.profile_hate_violence.title": "他们的个人资料显示或宣传了什么?", + "report_flow.screen.profile_intro.options_heading": "了解详情", + "report_flow.screen.profile_intro.subtitle": "告诉我们这个个人资料有什么问题。对方不会知道是谁举报的。", + "report_flow.screen.profile_intro.title": "举报个人资料", + "report_flow.screen.profile_minor_sexual.title": "他们的个人资料中有哪些涉及未成年人的内容?", + "report_flow.screen.profile_parts.subtitle": "按需选择,可多选。", + "report_flow.screen.profile_parts.title": "他们的个人资料中有哪些部分有问题?", + "report_flow.screen.profile_private_info.title": "他们的个人资料中有哪些私人信息?", + "report_flow.screen.profile_sexual.title": "请说明其个人资料中的性内容", + "report_flow.screen.profile_threat.title": "其个人资料如何涉及暴力?", + "report_flow.screen.root_guild.subtitle": "请选择最能描述此社区情况的选项。", + "report_flow.screen.root_guild.title": "此社区有什么问题?", + "report_flow.screen.root_message.subtitle": "请选择最接近的选项。发送前你可以检查所有内容。", + "report_flow.screen.root_message.title": "举报消息", + "report_flow.screen.root_user.subtitle": "请选择最能描述其个人资料内容的选项。", + "report_flow.screen.root_user.title": "其个人资料有什么问题?", + "report_flow.screen.self_harm.subtitle": "没有人会因为说自己状态不好而受到惩罚。告诉我们你的担忧,有助于我们提供支持。", + "report_flow.screen.self_harm.title": "他们说了或分享了什么?", + "report_flow.screen.self_harm_guild.title": "成员在鼓励什么?", + "report_flow.screen.self_harm_profile.title": "其个人资料说了或展示了什么?", + "report_flow.screen.sexual.subtitle": "如果所示或涉及的任何人未满 18 岁,请选择“性化未成年人”。", + "report_flow.screen.sexual.title": "请说明性内容", + "report_flow.screen.sexual_guild.subtitle": "如果所示或涉及的任何人未满 18 岁,请选择“性化未成年人”。", + "report_flow.screen.sexual_guild.title": "请说明此社区中的性内容", + "report_flow.screen.something_else_guild.title": "此社区还有其他什么情况?", + "report_flow.screen.something_else_message.title": "还有什么情况?", + "report_flow.screen.something_else_user.title": "此个人资料还有什么问题?", + "report_flow.screen.spam_kind_guild.title": "此社区如何滥用平台?", + "report_flow.screen.spam_profile.title": "该账号被如何滥用?", + "report_flow.screen.threat.title": "它如何涉及暴力?", + "report_flow.screen.violence_misinfo.title": "以下哪项符合?", + "report_flow.screen.violence_misinfo_guild.title": "此社区中发生了以下哪种情况?" }); export default CONTENT_I18N_ZH_CN_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/locales/zh-TW.ts b/fluxer_api/src/api/content_i18n/locales/zh-TW.ts index ef7af2ac5..28f1a671d 100644 --- a/fluxer_api/src/api/content_i18n/locales/zh-TW.ts +++ b/fluxer_api/src/api/content_i18n/locales/zh-TW.ts @@ -18,7 +18,204 @@ const CONTENT_I18N_ZH_TW_MESSAGES = defineContentI18nLocaleMessages({ "guild.default_category_text": "文字頻道", "guild.default_category_voice": "語音頻道", "guild.default_channel_text": "一般", - "guild.default_channel_voice": "一般" + "guild.default_channel_voice": "一般", + "report_flow.description.name": "使用者名稱、顯示名稱或社群暱稱", + "report_flow.description.photo": "他們使用的大頭貼和橫幅", + "report_flow.description.profile_text": "個人簡介、自訂狀態或代名詞", + "report_flow.label.abuse": "辱罵性或有害的內容", + "report_flow.label.account_trading": "販售帳號,或被盜的登入資訊或卡片資料", + "report_flow.label.account_trading_communities": "買賣帳號或社群", + "report_flow.label.address": "住家地址或工作地點", + "report_flow.label.adult_content_no_gate": "未設 18 歲以上年齡限制的成人內容", + "report_flow.label.adult_content_profile": "個人檔案中的露骨成人內容", + "report_flow.label.adult_content_unmarked": "社群頻道中未標示為 18 歲以上的成人內容", + "report_flow.label.age_no_message": "否,沒有提到", + "report_flow.label.age_no_profile": "否,沒有提到", + "report_flow.label.age_yes_message": "是,有提到他們的年齡", + "report_flow.label.age_yes_profile": "是,他們的個人檔案中有提到年齡", + "report_flow.label.atrocity_denial": "否認或慶祝猶太人大屠殺或其他種族滅絕", + "report_flow.label.ban_evasion": "使用其他帳號規避停權", + "report_flow.label.channel_names": "頻道名稱", + "report_flow.label.community_banner": "社群橫幅", + "report_flow.label.community_icon": "社群圖示", + "report_flow.label.community_name": "社群名稱", + "report_flow.label.conversion_therapy": "宣傳性傾向矯正治療", + "report_flow.label.copyright": "著作權或商標投訴", + "report_flow.label.crisis_lines": "您所在國家/地區的危機專線", + "report_flow.label.csam": "兒童性虐待的真實或 AI 生成圖片或影片", + "report_flow.label.discovery_listing": "探索列表", + "report_flow.label.dislike": "對我來說不太適合", + "report_flow.label.dsa": "在歐盟屬違法的內容(《數位服務法》)", + "report_flow.label.eating_disorder_promotion": "鼓勵飲食失調", + "report_flow.label.eating_disorder_promotion_profile": "他們的個人檔案宣傳飲食失調", + "report_flow.label.email": "電子郵件地址", + "report_flow.label.emoji_stickers": "自訂表情符號或貼圖", + "report_flow.label.face_photo": "他們的臉部照片", + "report_flow.label.fake_account": "假帳號、機器人或自動化濫用", + "report_flow.label.fake_account_profile": "虛假或具欺騙性的帳號", + "report_flow.label.false_claims": "散佈謊言以損害特定人士的名譽", + "report_flow.label.false_info": "散佈有害的虛假資訊", + "report_flow.label.financial": "卡片、銀行或其他財務詳細資料", + "report_flow.label.fraud": "他們試圖詐騙人們的錢財或帳號", + "report_flow.label.fraud_guild": "騙取他人的金錢或帳號", + "report_flow.label.government_id": "身分證明文件或身分證號碼", + "report_flow.label.graphic_violence": "顯示真實暴力以造成震驚,例如血腥畫面或虐待動物", + "report_flow.label.harassment": "霸凌、騷擾或跟蹤", + "report_flow.label.harassment_direct": "不斷針對某人進行辱罵或言語攻擊", + "report_flow.label.harassment_guild": "騷擾、霸凌或跟蹤他人", + "report_flow.label.harassment_profile": "他們的個人檔案騷擾或針對我或其他人", + "report_flow.label.harmful_false_claims": "可能造成嚴重現實傷害的虛假聲明", + "report_flow.label.hate": "針對他人身分的仇恨或歧視", + "report_flow.label.hate_dehumanizing": "將人比作動物、疾病或污穢,或稱其為非人類", + "report_flow.label.hate_incitement": "煽動對某群體的暴力或排斥", + "report_flow.label.hate_other": "其他針對他人身分的攻擊", + "report_flow.label.hate_slurs": "歧視性辱稱、仇恨符號或貶低性刻板印象", + "report_flow.label.hate_violence": "仇恨、暴力或極端主義", + "report_flow.label.identity": "性傾向、性別認同或雙性人狀態", + "report_flow.label.illegal_activity": "其他非法活動", + "report_flow.label.illegal_goods": "毒品、武器或其他非法商品販售", + "report_flow.label.impersonation": "冒充他人或詐騙他人", + "report_flow.label.impersonation_guild": "冒充 {product_name} 或其他組織", + "report_flow.label.impersonation_organization": "一家公司、品牌或團體", + "report_flow.label.impersonation_person": "我或我親近的人", + "report_flow.label.impersonation_public_figure": "知名人士,例如創作者或政治人物", + "report_flow.label.impersonation_staff": "{product_name} 員工或客服", + "report_flow.label.intimate_image_abuse": "未經同意分享私密影像(包括深偽 deepfake 影像),或威脅分享這些影像", + "report_flow.label.intimate_image_abuse_guild": "未經同意分享私密影像(包括深偽 deepfake 影像)", + "report_flow.label.intimate_image_abuse_profile": "未經同意分享某人的私密影像(包括深偽 deepfake 影像)", + "report_flow.label.intimate_photo": "私密或裸露照片", + "report_flow.label.invite_splash": "邀請背景圖", + "report_flow.label.ip_address": "IP 位址", + "report_flow.label.learn_more": "閱讀 {product_name} 社群指南", + "report_flow.label.legal_name": "真實姓名或法定姓名", + "report_flow.label.lgbtq_targeting": "故意錯稱性別、使用舊名或揭露他人性向,或否認他人的身分", + "report_flow.label.malware_guild": "散佈惡意軟體或網路釣魚連結", + "report_flow.label.malware_phishing": "網路釣魚、惡意軟體或駭客攻擊", + "report_flow.label.member_activity": "成員在其中發布的內容或所做的事", + "report_flow.label.metric_manipulation": "造假成員人數或反應數量", + "report_flow.label.minor_contact": "以看似意圖不軌的方式,要求未成年人見面,或索取照片或個人資料", + "report_flow.label.minor_dating_community": "這是供未成年人彼此約會的社群", + "report_flow.label.minor_fictional": "虛構兒童的繪畫、文字或 AI 生成的性內容", + "report_flow.label.minor_grooming": "對未成年人進行誘騙(grooming),或與其建立不當信任關係", + "report_flow.label.minor_grooming_guild": "成員對未成年人進行誘騙(grooming),或與其建立不當信任關係", + "report_flow.label.minor_in_adult_space": "未成年人在 18 歲以上頻道或社群中", + "report_flow.label.minor_in_adult_space_guild": "允許未成年人進入 18+ 頻道", + "report_flow.label.minor_risk": "讓未成年人身陷險境", + "report_flow.label.minor_risk_guild": "讓未成年人身陷險境", + "report_flow.label.minor_sexual": "性化未成年人", + "report_flow.label.minor_sexual_contact": "與未成年人調情,或向其傳送性相關訊息", + "report_flow.label.minor_sexual_contact_guild": "成員與未成年人調情,或向其傳送性相關訊息", + "report_flow.label.minor_sexual_content": "未成年人自行分享性內容", + "report_flow.label.minor_sexual_content_guild": "未成年人發布或傳送性內容", + "report_flow.label.minor_sexual_content_profile": "未成年人的個人檔案含有性內容", + "report_flow.label.minor_sexual_guild": "性化未成年人", + "report_flow.label.minor_sexualization": "關於未成年人的性相關言論", + "report_flow.label.minor_sexualization_guild": "成員發表關於未成年人的性相關言論", + "report_flow.label.minor_sexualization_profile": "個人檔案中有關於未成年人的性相關言論", + "report_flow.label.name": "名稱", + "report_flow.label.other": "此處未列出的內容", + "report_flow.label.other_identifying": "其他可能識別或定位某人的資訊", + "report_flow.label.permits_violations": "它容許嚴重違反規則的行為", + "report_flow.label.phone": "電話號碼", + "report_flow.label.photo": "圖片", + "report_flow.label.platform_abuse": "資料爬取、自動化操作或其他濫用平台的行為", + "report_flow.label.private_conversation": "私人訊息、螢幕截圖或通話錄音", + "report_flow.label.private_info": "分享他人的個人資訊", + "report_flow.label.private_info_profile": "他們的個人檔案分享了他人的個人資訊", + "report_flow.label.profile_text": "個人檔案文字", + "report_flow.label.raid": "組織或參與突襲或圍攻", + "report_flow.label.raid_guild": "組織針對個人或社群的突襲或圍攻", + "report_flow.label.rude_language": "髒話或無禮言論", + "report_flow.label.self_harm": "有人可能傷害自己,或在鼓勵自殘", + "report_flow.label.self_harm_graphic": "血腥的自殘圖片", + "report_flow.label.self_harm_guild": "成員慫恿他人傷害自己", + "report_flow.label.self_harm_pressure": "逼迫他人傷害自己,或以挑戰的形式慫恿他人傷害自己", + "report_flow.label.self_harm_pressure_guild": "逼迫他人傷害自己,或以挑戰的形式慫恿他人傷害自己", + "report_flow.label.self_harm_profile": "他們的個人檔案暗示或鼓勵自殘", + "report_flow.label.self_harm_promotion": "鼓勵自殘或分享方法", + "report_flow.label.self_harm_promotion_profile": "他們的個人檔案鼓勵自殘", + "report_flow.label.sexual": "性內容", + "report_flow.label.sexual_exploitation": "性剝削、脅迫或人口販運", + "report_flow.label.sexual_unwanted": "我不想收到的性圖片或訊息", + "report_flow.label.something_else": "其他", + "report_flow.label.spam": "垃圾訊息或不想要的廣告", + "report_flow.label.spam_bulk": "大量傳送垃圾訊息或廣告", + "report_flow.label.spam_or_manipulation": "垃圾訊息或平台操控", + "report_flow.label.spam_profile": "他們的個人檔案用於傳送垃圾訊息或廣告", + "report_flow.label.suicide_promotion": "鼓勵自殺或分享方法", + "report_flow.label.suicide_promotion_profile": "他們的個人檔案鼓勵自殺", + "report_flow.label.synthetic_media": "將偽造或 AI 製作的媒體內容呈現為真實內容", + "report_flow.label.terrorism": "恐怖主義或暴力極端主義", + "report_flow.label.terrorism_guild": "招募或宣揚恐怖主義或暴力極端主義", + "report_flow.label.threat": "威脅或煽動暴力", + "report_flow.label.threat_to_share": "他們威脅要分享", + "report_flow.label.too_young": "他們未達使用 {product_name} 的最低年齡", + "report_flow.label.unwanted_contact": "在要求停止、封鎖或移除後,仍跟蹤或重複聯絡我或其他人", + "report_flow.label.violence_glorification": "頌揚現實世界的暴力", + "report_flow.label.violence_incitement": "鼓勵暴力或解釋如何傷害他人", + "report_flow.label.violence_misinfo": "暴力、極端主義或有害的虛假資訊", + "report_flow.label.violent_threat": "揚言要傷害某人", + "report_flow.label.worried_profile": "我擔心他們的安全", + "report_flow.label.worried_self_harm": "我擔心他們可能會傷害自己", + "report_flow.label.worried_suicide": "我擔心他們可能會嘗試自殺", + "report_flow.notice.need_more_info.body": "為了審核,我們需要一則他們說明自己年齡,或明確表示未滿 {product_name} 最低年齡的訊息。請改為檢舉該則訊息。", + "report_flow.notice.need_more_info.title": "目前無法處理", + "report_flow.notice.need_more_info_profile.body": "為了審核,我們需要看到他們在哪裡說明自己的年齡,或明確表示未滿 {product_name} 最低年齡。請改為檢舉該則訊息或個人檔案。", + "report_flow.screen.abuse.title": "涉及哪些內容?", + "report_flow.screen.abuse_guild.title": "這個社群的成員在做什麼?", + "report_flow.screen.age_stated_message.title": "這則訊息有提到他們的年齡嗎?", + "report_flow.screen.age_stated_profile.title": "他們的個人檔案有提到他們的年齡嗎?", + "report_flow.screen.community_parts.subtitle": "請選擇所有適用的項目。", + "report_flow.screen.community_parts.title": "涉及社群的哪些部分?", + "report_flow.screen.crisis_support.subtitle": "危機專線提供免費、保密的支援。", + "report_flow.screen.crisis_support.title": "有人可以立即提供協助", + "report_flow.screen.false_info.subtitle": "意見、諷刺和善意的辯論是允許的。違法誹謗可依《數位服務法》檢舉。", + "report_flow.screen.false_info.subtitle_self_hosted": "意見、諷刺和善意的辯論是允許的。", + "report_flow.screen.false_info.title": "內容哪裡具有誤導性?", + "report_flow.screen.harassment.title": "有人是如何被針對的?", + "report_flow.screen.hate.title": "內容如何針對他人的身分進行攻擊?", + "report_flow.screen.impersonation.subtitle": "明確標示的惡搞或角色扮演是允許的。", + "report_flow.screen.impersonation.title": "是誰被冒充,或這是詐騙?", + "report_flow.screen.minor_risk.title": "此人如何讓未成年人面臨風險?", + "report_flow.screen.minor_risk_guild.title": "此社群如何讓未成年人面臨風險?", + "report_flow.screen.minor_sexual.subtitle": "當角色被描述為未成年人或明顯尚未進入青春期時,繪製、文字或 AI 內容也包含在內,包括 lolicon、shotacon 和 cub。", + "report_flow.screen.minor_sexual.title": "您看到了什麼涉及未成年人的內容?", + "report_flow.screen.minor_sexual_guild.title": "您看到了什麼涉及未成年人的內容?", + "report_flow.screen.private_info.subtitle": "請選擇所有適用的項目。如果私密照片中的人未滿 18 歲,請返回並以「性化未成年人」檢舉。", + "report_flow.screen.private_info.title": "涉及哪些個人資訊?", + "report_flow.screen.profile_abuse.title": "他們的個人檔案有什麼有害之處?", + "report_flow.screen.profile_hate_violence.title": "他們的個人檔案顯示或宣傳了什麼內容?", + "report_flow.screen.profile_intro.options_heading": "瞭解詳情", + "report_flow.screen.profile_intro.subtitle": "請告訴我們這個個人檔案的問題所在。對方不會知道是誰檢舉的。", + "report_flow.screen.profile_intro.title": "檢舉個人檔案", + "report_flow.screen.profile_minor_sexual.title": "他們的個人檔案中,有什麼涉及未成年人?", + "report_flow.screen.profile_parts.subtitle": "請選擇所有適用的項目。", + "report_flow.screen.profile_parts.title": "他們的個人檔案的哪些部分有問題?", + "report_flow.screen.profile_private_info.title": "他們的個人檔案中有哪些個人資訊?", + "report_flow.screen.profile_sexual.title": "告訴我們他們個人檔案中的性內容", + "report_flow.screen.profile_threat.title": "他們的個人檔案如何涉及暴力?", + "report_flow.screen.root_guild.subtitle": "請選擇最符合此社群情況的選項。", + "report_flow.screen.root_guild.title": "這個社群有什麼問題?", + "report_flow.screen.root_message.subtitle": "請選擇最接近的選項。送出檢舉前,您可以檢查所有內容。", + "report_flow.screen.root_message.title": "檢舉訊息", + "report_flow.screen.root_user.subtitle": "請選擇最符合他們個人檔案內容的選項。", + "report_flow.screen.root_user.title": "他們的個人檔案有什麼問題?", + "report_flow.screen.self_harm.subtitle": "沒有人會因為說自己過得很辛苦而受到懲罰。告訴我們您的擔憂,有助於我們提供支援。", + "report_flow.screen.self_harm.title": "他們說了或分享了什麼?", + "report_flow.screen.self_harm_guild.title": "成員們在鼓勵什麼?", + "report_flow.screen.self_harm_profile.title": "他們的個人檔案說了或顯示了什麼?", + "report_flow.screen.sexual.subtitle": "如果顯示或涉及的任何人未滿 18 歲,請選擇「性化未成年人」。", + "report_flow.screen.sexual.title": "告訴我們性內容的相關資訊", + "report_flow.screen.sexual_guild.subtitle": "如果顯示或涉及的任何人未滿 18 歲,請選擇「性化未成年人」。", + "report_flow.screen.sexual_guild.title": "告訴我們這個社群中的性內容", + "report_flow.screen.something_else_guild.title": "這個社群還有什麼其他情況?", + "report_flow.screen.something_else_message.title": "還有什麼其他情況?", + "report_flow.screen.something_else_user.title": "這個個人檔案還有什麼其他問題?", + "report_flow.screen.spam_kind_guild.title": "這個社群如何濫用平台?", + "report_flow.screen.spam_profile.title": "該帳號如何被濫用?", + "report_flow.screen.threat.title": "它如何涉及暴力?", + "report_flow.screen.violence_misinfo.title": "哪一個最符合?", + "report_flow.screen.violence_misinfo_guild.title": "社群中發生了哪種情況?" }); export default CONTENT_I18N_ZH_TW_MESSAGES; diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/ar.json b/fluxer_api/src/api/content_i18n/weblate/locales/ar.json index a0b6458a2..751dd7496 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/ar.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/ar.json @@ -14,5 +14,202 @@ "guild.default_category_text": "القنوات النصية", "guild.default_category_voice": "القنوات الصوتية", "guild.default_channel_text": "عام", - "guild.default_channel_voice": "عام" + "guild.default_channel_voice": "عام", + "report_flow.description.name": "اسم المستخدم أو اسم العرض أو الاسم المستعار في المجتمع", + "report_flow.description.photo": "الصورة الرمزية واللافتة التي يستخدمونها", + "report_flow.description.profile_text": "نبذة شخصية أو الحالة المخصصة أو الضمائر", + "report_flow.label.abuse": "محتوى مسيء أو ضار", + "report_flow.label.account_trading": "بيع الحسابات، أو بيانات تسجيل الدخول أو بيانات البطاقات المسروقة", + "report_flow.label.account_trading_communities": "شراء أو بيع الحسابات أو المجتمعات", + "report_flow.label.address": "عنوان المنزل أو مكان العمل", + "report_flow.label.adult_content_no_gate": "محتوى للبالغين بدون قيود عمرية 18+", + "report_flow.label.adult_content_profile": "محتوى صريح للبالغين في ملفهم الشخصي", + "report_flow.label.adult_content_unmarked": "محتوى للبالغين في قناة مجتمع غير مقيدة بالعمر (18+)", + "report_flow.label.age_no_message": "لا، الرسالة لا تذكر ذلك", + "report_flow.label.age_no_profile": "لا، لا يذكر ملفهم الشخصي ذلك", + "report_flow.label.age_yes_message": "نعم، تذكر الرسالة عمرهم", + "report_flow.label.age_yes_profile": "نعم، يذكر ملفهم الشخصي عمرهم", + "report_flow.label.atrocity_denial": "إنكار أو تمجيد الهولوكوست أو الإبادات الجماعية الأخرى", + "report_flow.label.ban_evasion": "التحايل على الحظر باستخدام حساب آخر", + "report_flow.label.channel_names": "أسماء القنوات", + "report_flow.label.community_banner": "لافتة المجتمع", + "report_flow.label.community_icon": "أيقونة المجتمع", + "report_flow.label.community_name": "اسم المجتمع", + "report_flow.label.conversion_therapy": "الترويج للعلاج التحويلي", + "report_flow.label.copyright": "شكوى حقوق الطبع والنشر أو العلامة التجارية", + "report_flow.label.crisis_lines": "خطوط المساعدة في حالات الأزمات في بلدك", + "report_flow.label.csam": "صور أو مقاطع فيديو حقيقية أو مولدة بالذكاء الاصطناعي تُظهر اعتداءً جنسيًا على الأطفال", + "report_flow.label.discovery_listing": "قائمة الاكتشاف", + "report_flow.label.dislike": "هذا ببساطة لا يناسبني", + "report_flow.label.dsa": "محتوى غير قانوني في الاتحاد الأوروبي (قانون الخدمات الرقمية)", + "report_flow.label.eating_disorder_promotion": "تشجيع سلوكيات الأكل المضطربة", + "report_flow.label.eating_disorder_promotion_profile": "ملفهم الشخصي يروج لاضطرابات الأكل", + "report_flow.label.email": "عنوان البريد الإلكتروني", + "report_flow.label.emoji_stickers": "رموز تعبيرية أو ملصقات مخصصة", + "report_flow.label.face_photo": "صورة وجههم", + "report_flow.label.fake_account": "حساب مزيف أو روبوت أو إساءة استخدام آلية", + "report_flow.label.fake_account_profile": "حساب مزيف أو خادع", + "report_flow.label.false_claims": "نشر أكاذيب للإضرار بسمعة شخص معين", + "report_flow.label.false_info": "نشر معلومات كاذبة ضارة", + "report_flow.label.financial": "تفاصيل البطاقة أو البنك أو التفاصيل المالية الأخرى", + "report_flow.label.fraud": "إنهم يحاولون خداع الناس للحصول على أموالهم أو حساباتهم", + "report_flow.label.fraud_guild": "خداع الناس للحصول على أموالهم أو حساباتهم", + "report_flow.label.government_id": "وثيقة هوية أو رقم هوية", + "report_flow.label.graphic_violence": "عنف حقيقي يُعرض لإثارة الصدمة، مثل المشاهد الدموية أو القسوة على الحيوانات", + "report_flow.label.harassment": "تنمر أو مضايقة أو مطاردة", + "report_flow.label.harassment_direct": "استهداف شخص ما بشكل متكرر بالإهانات أو الإساءة", + "report_flow.label.harassment_guild": "مضايقة الأشخاص أو التنمر عليهم أو مطاردتهم", + "report_flow.label.harassment_profile": "ملفهم الشخصي يضايقني أو يستهدفني، أو يضايق شخصًا آخر أو يستهدفه", + "report_flow.label.harmful_false_claims": "ادعاءات كاذبة قد تسبب ضررًا جسيمًا في العالم الحقيقي", + "report_flow.label.hate": "الكراهية أو التمييز ضد الأشخاص بسبب هويتهم", + "report_flow.label.hate_dehumanizing": "مقارنة الأشخاص بالحيوانات أو الأمراض أو القذارة، أو وصفهم بأنهم أقل من البشر", + "report_flow.label.hate_incitement": "دعوات للعنف أو الإقصاء ضد مجموعة", + "report_flow.label.hate_other": "هجمات أخرى على الأشخاص بسبب هويتهم", + "report_flow.label.hate_slurs": "شتائم أو رموز كراهية أو صور نمطية مهينة", + "report_flow.label.hate_violence": "كراهية أو عنف أو تطرف", + "report_flow.label.identity": "الميول الجنسية أو الهوية الجندرية أو حالة ثنائيي الجنس", + "report_flow.label.illegal_activity": "نشاط غير قانوني آخر", + "report_flow.label.illegal_goods": "بيع المخدرات أو الأسلحة أو غيرها من السلع غير القانونية", + "report_flow.label.impersonation": "انتحال شخصية شخص ما، أو الاحتيال على الناس", + "report_flow.label.impersonation_guild": "التظاهر بأنه {product_name} أو منظمة أخرى", + "report_flow.label.impersonation_organization": "شركة أو علامة تجارية أو مجموعة", + "report_flow.label.impersonation_person": "أنا أو شخص قريب مني", + "report_flow.label.impersonation_public_figure": "شخص مشهور، مثل صانع محتوى أو سياسي", + "report_flow.label.impersonation_staff": "موظفو {product_name} أو فريق الدعم", + "report_flow.label.intimate_image_abuse": "مشاركة صور حميمية بدون موافقة، بما في ذلك التزييف العميق، أو التهديد بمشاركتها", + "report_flow.label.intimate_image_abuse_guild": "مشاركة صور حميمية بدون موافقة، بما في ذلك التزييف العميق", + "report_flow.label.intimate_image_abuse_profile": "صور حميمية لشخص تمت مشاركتها بدون موافقة، بما في ذلك التزييف العميق", + "report_flow.label.intimate_photo": "صورة حميمية أو عارية", + "report_flow.label.invite_splash": "خلفية الدعوة", + "report_flow.label.ip_address": "عنوان IP", + "report_flow.label.learn_more": "اقرأ إرشادات مجتمع {product_name}", + "report_flow.label.legal_name": "الاسم الحقيقي أو القانوني", + "report_flow.label.lgbtq_targeting": "تعمّد مخاطبة شخص بغير جنسه الذي يعرّف به، أو استخدام اسمه السابق، أو الكشف عن ميوله أو هويته دون موافقته، أو إنكار هويته", + "report_flow.label.malware_guild": "توزيع برامج ضارة أو روابط تصيد احتيالي", + "report_flow.label.malware_phishing": "محاولات تصيد احتيالي أو برامج ضارة أو اختراق", + "report_flow.label.member_activity": "ما ينشره الأعضاء أو يفعلونه هناك", + "report_flow.label.metric_manipulation": "تزوير عدد الأعضاء أو التفاعلات", + "report_flow.label.minor_contact": "طلب لقاء من قاصر، أو طلب صور أو تفاصيل شخصية منه، بطريقة توحي بنية استغلالية", + "report_flow.label.minor_dating_community": "إنه مجتمع للمواعدة بين القاصرين", + "report_flow.label.minor_fictional": "محتوى جنسي مرسوم أو مكتوب أو تم إنشاؤه بواسطة الذكاء الاصطناعي لطفل خيالي", + "report_flow.label.minor_grooming": "استدراج قاصر أو بناء ثقة غير لائقة معه", + "report_flow.label.minor_grooming_guild": "يقوم الأعضاء باستدراج القاصرين أو بناء ثقة غير لائقة معهم", + "report_flow.label.minor_in_adult_space": "قاصر موجود في قناة أو مجتمع مخصص لمن هم 18 عامًا فأكثر", + "report_flow.label.minor_in_adult_space_guild": "يُسمح للقاصرين بدخول القنوات المقيدة بالعمر (18+)", + "report_flow.label.minor_risk": "تعريض قاصر للخطر", + "report_flow.label.minor_risk_guild": "تعريض القاصرين للخطر", + "report_flow.label.minor_sexual": "إضفاء طابع جنسي على قاصر", + "report_flow.label.minor_sexual_contact": "مغازلة قاصر أو مراسلته جنسيًا", + "report_flow.label.minor_sexual_contact_guild": "يقوم الأعضاء بمغازلة القاصرين أو مراسلتهم جنسيًا", + "report_flow.label.minor_sexual_content": "يقوم قاصر بمشاركة محتوى جنسي بنفسه", + "report_flow.label.minor_sexual_content_guild": "ينشر القاصرون أو يرسلون محتوى جنسيًا", + "report_flow.label.minor_sexual_content_profile": "ملف شخصي لقاصر يحتوي على محتوى جنسي", + "report_flow.label.minor_sexual_guild": "إضفاء طابع جنسي على قاصرين", + "report_flow.label.minor_sexualization": "تعليقات جنسية حول قاصرين", + "report_flow.label.minor_sexualization_guild": "يبدي الأعضاء تعليقات جنسية عن القاصرين", + "report_flow.label.minor_sexualization_profile": "تعليقات جنسية حول قاصرين في ملفهم الشخصي", + "report_flow.label.name": "الأسماء", + "report_flow.label.other": "شيء غير مدرج هنا", + "report_flow.label.other_identifying": "معلومات أخرى يمكن أن تحدد هوية شخص أو مكانه", + "report_flow.label.permits_violations": "يسمح بانتهاكات خطيرة للقواعد", + "report_flow.label.phone": "رقم الهاتف", + "report_flow.label.photo": "الصور", + "report_flow.label.platform_abuse": "كشط البيانات أو الأتمتة أو غير ذلك من إساءة استخدام المنصة", + "report_flow.label.private_conversation": "الرسائل الخاصة أو لقطات الشاشة أو تسجيلات المكالمات", + "report_flow.label.private_info": "مشاركة معلومات خاصة بشخص ما", + "report_flow.label.private_info_profile": "يشارك ملفهم الشخصي معلومات خاصة بشخص ما", + "report_flow.label.profile_text": "نص الملف الشخصي", + "report_flow.label.raid": "تنظيم أو الانضمام إلى هجوم أو مضايقة جماعية", + "report_flow.label.raid_guild": "تنظيم هجمات أو مضايقات جماعية ضد أشخاص أو مجتمعات", + "report_flow.label.rude_language": "شتائم أو عبارات فظة", + "report_flow.label.self_harm": "قد يؤذي شخص نفسه، أو هناك من يشجع على إيذاء النفس", + "report_flow.label.self_harm_graphic": "صور صريحة لإيذاء النفس", + "report_flow.label.self_harm_guild": "يدفع الأعضاء الآخرين لإيذاء أنفسهم", + "report_flow.label.self_harm_pressure": "الضغط على شخص أو تحديه لإيذاء نفسه", + "report_flow.label.self_harm_pressure_guild": "الضغط على الأشخاص أو تحديهم لإيذاء أنفسهم", + "report_flow.label.self_harm_profile": "يشير ملفهم الشخصي إلى إيذاء النفس أو يشجع عليه", + "report_flow.label.self_harm_promotion": "التشجيع على إيذاء النفس أو مشاركة طرقه", + "report_flow.label.self_harm_promotion_profile": "ملفهم الشخصي يشجع على إيذاء النفس", + "report_flow.label.sexual": "محتوى جنسي", + "report_flow.label.sexual_exploitation": "الاستغلال الجنسي أو الإكراه أو الاتجار بالبشر", + "report_flow.label.sexual_unwanted": "صور أو رسائل جنسية لم أكن أرغب بها", + "report_flow.label.something_else": "شيء آخر", + "report_flow.label.spam": "رسائل مزعجة أو إعلانات غير مرغوب فيها", + "report_flow.label.spam_bulk": "إرسال رسائل مزعجة أو إعلانات بكميات كبيرة", + "report_flow.label.spam_or_manipulation": "رسائل مزعجة أو تلاعب بالمنصة", + "report_flow.label.spam_profile": "ملفهم الشخصي يُستخدم لإرسال رسائل مزعجة أو إعلانات", + "report_flow.label.suicide_promotion": "التشجيع على الانتحار أو مشاركة طرقه", + "report_flow.label.suicide_promotion_profile": "ملفهم الشخصي يشجع على الانتحار", + "report_flow.label.synthetic_media": "وسائط مزيفة أو مصنوعة بالذكاء الاصطناعي تُقدم على أنها حقيقية", + "report_flow.label.terrorism": "الإرهاب أو التطرف العنيف", + "report_flow.label.terrorism_guild": "التجنيد أو الترويج للإرهاب أو التطرف العنيف", + "report_flow.label.threat": "تهديدات أو دعوات للعنف", + "report_flow.label.threat_to_share": "إنهم يهددون بمشاركتها", + "report_flow.label.too_young": "إنهم أصغر من الحد الأدنى للسن لاستخدام {product_name}", + "report_flow.label.unwanted_contact": "مطاردتي أو مراسلتي بشكل متكرر، أو مطاردة شخص آخر أو مراسلته، بعد طلب التوقف أو بعد الحظر أو الإزالة", + "report_flow.label.violence_glorification": "تمجيد العنف في العالم الحقيقي", + "report_flow.label.violence_incitement": "التشجيع على العنف أو شرح كيفية إيذاء الأشخاص", + "report_flow.label.violence_misinfo": "العنف أو التطرف أو معلومات خاطئة ضارة", + "report_flow.label.violent_threat": "قولهم إنهم سيؤذون شخصًا ما", + "report_flow.label.worried_profile": "أنا قلق بشأن سلامتهم", + "report_flow.label.worried_self_harm": "أخشى أن يؤذوا أنفسهم", + "report_flow.label.worried_suicide": "أخشى أن يحاولوا الانتحار", + "report_flow.notice.need_more_info.body": "لمراجعة هذا، نحتاج إلى رسالة يذكرون فيها أعمارهم أو يوضحون أنهم أصغر من الحد الأدنى لسن {product_name}. قم بالإبلاغ عن تلك الرسالة بدلاً من ذلك.", + "report_flow.notice.need_more_info.title": "لا يمكننا اتخاذ إجراء بشأن هذا بعد", + "report_flow.notice.need_more_info_profile.body": "لمراجعة هذا، نحتاج إلى رؤية المكان الذي يذكرون فيه أعمارهم أو يوضحون أنهم أصغر من الحد الأدنى لسن {product_name}. قم بالإبلاغ عن تلك الرسالة أو الملف الشخصي بدلاً من ذلك.", + "report_flow.screen.abuse.title": "ما الذي يتضمنه؟", + "report_flow.screen.abuse_guild.title": "ماذا يفعل الأشخاص في هذا المجتمع؟", + "report_flow.screen.age_stated_message.title": "هل تذكر هذه الرسالة عمرهم؟", + "report_flow.screen.age_stated_profile.title": "هل يذكر ملفهم الشخصي عمرهم؟", + "report_flow.screen.community_parts.subtitle": "يمكنك اختيار أكثر من خيار.", + "report_flow.screen.community_parts.title": "ما أجزاء المجتمع المعنية؟", + "report_flow.screen.crisis_support.subtitle": "تقدم خطوط المساعدة في حالات الأزمات دعمًا مجانيًا وسريًا.", + "report_flow.screen.crisis_support.title": "هناك من يمكنه مساعدتك الآن", + "report_flow.screen.false_info.subtitle": "الآراء والسخرية والنقاش بحسن نية مسموح بها. يمكن الإبلاغ عن التشهير غير القانوني بموجب قانون الخدمات الرقمية.", + "report_flow.screen.false_info.subtitle_self_hosted": "الآراء والسخرية والنقاش بحسن نية مسموح بها.", + "report_flow.screen.false_info.title": "ما الذي يجعله مضللًا؟", + "report_flow.screen.harassment.title": "كيف يُستهدف شخص ما؟", + "report_flow.screen.hate.title": "كيف يهاجم الناس بسبب هويتهم؟", + "report_flow.screen.impersonation.subtitle": "يُسمح بالمحاكاة الساخرة أو لعب الأدوار المحددة بوضوح.", + "report_flow.screen.impersonation.title": "من يتم انتحال شخصيته، أم أنها عملية احتيال؟", + "report_flow.screen.minor_risk.title": "كيف يعرض هذا الشخص قاصرًا للخطر؟", + "report_flow.screen.minor_risk_guild.title": "كيف يعرض هذا المجتمع القاصرين للخطر؟", + "report_flow.screen.minor_sexual.subtitle": "يُعدّ المحتوى المرسوم أو المكتوب أو المُنشأ بالذكاء الاصطناعي ضمن هذا التصنيف عندما تُوصف شخصية بأنها قاصر أو تبدو بوضوح قبل سن البلوغ، ويشمل ذلك lolicon وshotacon وcub.", + "report_flow.screen.minor_sexual.title": "ما الذي رأيته ويتعلق بقاصر؟", + "report_flow.screen.minor_sexual_guild.title": "ما الذي رأيته ويتعلق بقاصرين؟", + "report_flow.screen.private_info.subtitle": "يمكنك اختيار أكثر من خيار. إذا كانت صورة حميمية تُظهر شخصًا دون 18 عامًا، فارجع وأبلغ عنها ضمن «إضفاء طابع جنسي على قاصر».", + "report_flow.screen.private_info.title": "ما المعلومات الخاصة المعنية؟", + "report_flow.screen.profile_abuse.title": "ما الضار في ملفهم الشخصي؟", + "report_flow.screen.profile_hate_violence.title": "ماذا يُظهر ملفهم الشخصي أو يروّج له؟", + "report_flow.screen.profile_intro.options_heading": "معرفة المزيد", + "report_flow.screen.profile_intro.subtitle": "أخبرنا ما المشكلة في هذا الملف الشخصي. لن يعرفوا من أبلغ عنهم.", + "report_flow.screen.profile_intro.title": "الإبلاغ عن الملف الشخصي", + "report_flow.screen.profile_minor_sexual.title": "ما الذي في ملفهم الشخصي يتعلق بقاصر؟", + "report_flow.screen.profile_parts.subtitle": "يمكنك اختيار أكثر من خيار.", + "report_flow.screen.profile_parts.title": "ما هي أجزاء ملفهم الشخصي التي تمثل مشكلة؟", + "report_flow.screen.profile_private_info.title": "ما المعلومات الخاصة الموجودة في ملفهم الشخصي؟", + "report_flow.screen.profile_sexual.title": "أخبرنا عن المحتوى الجنسي في ملفهم الشخصي", + "report_flow.screen.profile_threat.title": "كيف يتضمن ملفهم الشخصي العنف؟", + "report_flow.screen.root_guild.subtitle": "اختر الخيار الأقرب لما يحدث في هذا المجتمع.", + "report_flow.screen.root_guild.title": "ما المشكلة في هذا المجتمع؟", + "report_flow.screen.root_message.subtitle": "اختر الخيار الأقرب. يمكنك مراجعة كل شيء قبل إرساله.", + "report_flow.screen.root_message.title": "الإبلاغ عن الرسالة", + "report_flow.screen.root_user.subtitle": "اختر الخيار الأقرب لما يوجد في ملفهم الشخصي.", + "report_flow.screen.root_user.title": "ما المشكلة في ملفهم الشخصي؟", + "report_flow.screen.self_harm.subtitle": "لا يُعاقب أحد على قوله إنه يعاني. إخبارنا بأنك قلق يساعدنا في تقديم الدعم.", + "report_flow.screen.self_harm.title": "ماذا قالوا أو شاركوا؟", + "report_flow.screen.self_harm_guild.title": "ما الذي يشجع عليه الأعضاء؟", + "report_flow.screen.self_harm_profile.title": "ماذا يقول أو يظهر ملفهم الشخصي؟", + "report_flow.screen.sexual.subtitle": "إذا كان أي شخص ظاهر أو متورط دون سن 18 عامًا، فاختر «إضفاء طابع جنسي على قاصر».", + "report_flow.screen.sexual.title": "أخبرنا عن المحتوى الجنسي", + "report_flow.screen.sexual_guild.subtitle": "إذا كان أي شخص ظاهر أو متورط دون سن 18 عامًا، فاختر «إضفاء طابع جنسي على قاصرين».", + "report_flow.screen.sexual_guild.title": "أخبرنا عن المحتوى الجنسي في هذا المجتمع", + "report_flow.screen.something_else_guild.title": "ما الذي يحدث أيضًا في هذا المجتمع؟", + "report_flow.screen.something_else_message.title": "ما الذي يحدث أيضًا؟", + "report_flow.screen.something_else_user.title": "ما المشكلة الأخرى في هذا الملف الشخصي؟", + "report_flow.screen.spam_kind_guild.title": "كيف يسيء هذا المجتمع استخدام المنصة؟", + "report_flow.screen.spam_profile.title": "كيف يُساء استخدام الحساب؟", + "report_flow.screen.threat.title": "كيف يتضمن ذلك عنفًا؟", + "report_flow.screen.violence_misinfo.title": "أي من هذه الخيارات ينطبق عليه؟", + "report_flow.screen.violence_misinfo_guild.title": "أي من هذه الخيارات يحدث في هذا المجتمع؟" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/bg.json b/fluxer_api/src/api/content_i18n/weblate/locales/bg.json index 12098b3be..d7ebc2055 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/bg.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/bg.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Текстови канали", "guild.default_category_voice": "Гласови канали", "guild.default_channel_text": "общ", - "guild.default_channel_voice": "Общ" + "guild.default_channel_voice": "Общ", + "report_flow.description.name": "Потребителско име, показвано име или прякор в общността", + "report_flow.description.photo": "Какво използват за аватар и банер", + "report_flow.description.profile_text": "Биография, персонализиран статус или местоимения", + "report_flow.label.abuse": "Обидно или вредно съдържание", + "report_flow.label.account_trading": "Продажба на акаунти или на откраднати данни за вход или за карти", + "report_flow.label.account_trading_communities": "Купуване или продаване на акаунти или общности", + "report_flow.label.address": "Домашен адрес или работно място", + "report_flow.label.adult_content_no_gate": "Съдържание за възрастни без възрастово ограничение 18+", + "report_flow.label.adult_content_profile": "Явно съдържание за възрастни в профила им", + "report_flow.label.adult_content_unmarked": "Съдържание за възрастни в канал в общност, който не е маркиран като 18+", + "report_flow.label.age_no_message": "Не, не се споменава", + "report_flow.label.age_no_profile": "Не, не се споменава", + "report_flow.label.age_yes_message": "Да, споменава възрастта им", + "report_flow.label.age_yes_profile": "Да, профилът им споменава възрастта им", + "report_flow.label.atrocity_denial": "Отричане или възхваляване на Холокоста или други геноциди", + "report_flow.label.ban_evasion": "Заобикаляне на забрана с друг акаунт", + "report_flow.label.channel_names": "Имена на канали", + "report_flow.label.community_banner": "Банер на общността", + "report_flow.label.community_icon": "Икона на общността", + "report_flow.label.community_name": "Име на общността", + "report_flow.label.conversion_therapy": "Насърчаване на конверсионна терапия", + "report_flow.label.copyright": "Жалба за авторски права или търговска марка", + "report_flow.label.crisis_lines": "Телефонни линии за кризисна помощ в твоята страна", + "report_flow.label.csam": "Реални или генерирани от изкуствен интелект изображения или видеоклипове на сексуално насилие над деца", + "report_flow.label.discovery_listing": "Списък за откриване", + "report_flow.label.dislike": "Просто не е за мен", + "report_flow.label.dsa": "Съдържание, което е незаконно в ЕС (Акт за цифровите услуги)", + "report_flow.label.eating_disorder_promotion": "Насърчаване на хранителни разстройства", + "report_flow.label.eating_disorder_promotion_profile": "Профилът им насърчава хранителни разстройства", + "report_flow.label.email": "Имейл адрес", + "report_flow.label.emoji_stickers": "Персонализирани емоджи или стикери", + "report_flow.label.face_photo": "Снимка на лицето им", + "report_flow.label.fake_account": "Фалшив акаунт, бот или автоматизирана злоупотреба", + "report_flow.label.fake_account_profile": "Фалшив или измамен акаунт", + "report_flow.label.false_claims": "Разпространение на лъжи, за да се навреди на репутацията на конкретен човек", + "report_flow.label.false_info": "Разпространяване на вредна невярна информация", + "report_flow.label.financial": "Карта, банка или други финансови данни", + "report_flow.label.fraud": "Опитват се да измамят хора и да им вземат пари или акаунти", + "report_flow.label.fraud_guild": "Измамване на хора с цел отнемане на пари или акаунти", + "report_flow.label.government_id": "Документ за самоличност или личен номер", + "report_flow.label.graphic_violence": "Реално насилие, показано с цел шокиране, като кървави сцени или жестокост към животни", + "report_flow.label.harassment": "Булинг, тормоз или преследване", + "report_flow.label.harassment_direct": "Многократно насочване на обиди или тормоз към някого", + "report_flow.label.harassment_guild": "Тормоз, булинг или преследване на хора", + "report_flow.label.harassment_profile": "Профилът им тормози или набелязва мен или някой друг", + "report_flow.label.harmful_false_claims": "Фалшиви твърдения, които биха могли да причинят сериозни вреди в реалния свят", + "report_flow.label.hate": "Омраза или дискриминация срещу хора заради това, което са", + "report_flow.label.hate_dehumanizing": "Сравняване на хора с животни, болести или мръсотия или твърдение, че са по-малко от хора", + "report_flow.label.hate_incitement": "Призиви за насилие или изключване на дадена група", + "report_flow.label.hate_other": "Други атаки срещу хора заради това, което са", + "report_flow.label.hate_slurs": "Обиди, символи на омраза или унизителни стереотипи", + "report_flow.label.hate_violence": "Език на омразата, насилие или екстремизъм", + "report_flow.label.identity": "Сексуална ориентация, полова идентичност или интерсексуален статус", + "report_flow.label.illegal_activity": "Друга незаконна дейност", + "report_flow.label.illegal_goods": "Продажба на наркотици, оръжия или други незаконни стоки", + "report_flow.label.impersonation": "Представяне за някой друг или измама на хора", + "report_flow.label.impersonation_guild": "Представяне за {product_name} или за друга организация", + "report_flow.label.impersonation_organization": "Компания, марка или група", + "report_flow.label.impersonation_person": "Мен или някой близък до мен", + "report_flow.label.impersonation_public_figure": "Известна личност, например създател на съдържание или политик", + "report_flow.label.impersonation_staff": "Служител или поддръжка на {product_name}", + "report_flow.label.intimate_image_abuse": "Интимни изображения, споделени без съгласие, включително дийпфейкове, или заплаха за споделянето им", + "report_flow.label.intimate_image_abuse_guild": "Споделяне на интимни изображения без съгласие, включително дийпфейкове", + "report_flow.label.intimate_image_abuse_profile": "Интимни изображения на някого, споделени без съгласие, включително дийпфейкове", + "report_flow.label.intimate_photo": "Снимка с интимно или голо съдържание", + "report_flow.label.invite_splash": "Фон на поканата", + "report_flow.label.ip_address": "IP адрес", + "report_flow.label.learn_more": "Прочети правилата на общността на {product_name}", + "report_flow.label.legal_name": "Истинско или официално име", + "report_flow.label.lgbtq_targeting": "Умишлено използване на грешен пол или старо име за някого, разкриване на нечия ориентация или идентичност или отричане на нечия идентичност", + "report_flow.label.malware_guild": "Разпространение на зловреден софтуер или фишинг линкове", + "report_flow.label.malware_phishing": "Фишинг, зловреден софтуер или опити за хакване", + "report_flow.label.member_activity": "Какво публикуват или правят членовете там", + "report_flow.label.metric_manipulation": "Фалшифициране на броя на членовете или реакциите", + "report_flow.label.minor_contact": "Канене на непълнолетен на среща или искане от него на снимки или лични данни по начин, който изглежда хищнически", + "report_flow.label.minor_dating_community": "Това е общност за запознанства между непълнолетни", + "report_flow.label.minor_fictional": "Нарисувано, написано или генерирано от изкуствен интелект сексуално съдържание на измислено дете", + "report_flow.label.minor_grooming": "Груминг или изграждане на неподходящо доверие у непълнолетен", + "report_flow.label.minor_grooming_guild": "Членовете извършват груминг или изграждат неподходящо доверие у непълнолетни", + "report_flow.label.minor_in_adult_space": "Непълнолетен е в канал или общност за 18+", + "report_flow.label.minor_in_adult_space_guild": "Непълнолетни лица са допуснати в канали 18+", + "report_flow.label.minor_risk": "Излагане на непълнолетен на риск", + "report_flow.label.minor_risk_guild": "Излагане на непълнолетни на риск", + "report_flow.label.minor_sexual": "Сексуализиране на непълнолетен", + "report_flow.label.minor_sexual_contact": "Флирт с непълнолетен или изпращане на сексуални съобщения до него", + "report_flow.label.minor_sexual_contact_guild": "Членове флиртуват с непълнолетни или им изпращат сексуални съобщения", + "report_flow.label.minor_sexual_content": "Непълнолетен сам споделя сексуално съдържание", + "report_flow.label.minor_sexual_content_guild": "Непълнолетни публикуват или изпращат сексуално съдържание", + "report_flow.label.minor_sexual_content_profile": "Профил на непълнолетен със сексуално съдържание", + "report_flow.label.minor_sexual_guild": "Сексуализиране на непълнолетни", + "report_flow.label.minor_sexualization": "Сексуални коментари за непълнолетни", + "report_flow.label.minor_sexualization_guild": "Членове правят сексуални коментари за непълнолетни", + "report_flow.label.minor_sexualization_profile": "Сексуални коментари за непълнолетни в профила им", + "report_flow.label.name": "Имена", + "report_flow.label.other": "Нещо, което не е посочено тук", + "report_flow.label.other_identifying": "Друга информация, която може да идентифицира някого или да разкрие къде се намира", + "report_flow.label.permits_violations": "Позволява се сериозно нарушаване на правилата", + "report_flow.label.phone": "Телефонен номер", + "report_flow.label.photo": "Изображения", + "report_flow.label.platform_abuse": "Извличане на данни, автоматизация или друга злоупотреба с платформата", + "report_flow.label.private_conversation": "Лични съобщения, екранни снимки или записи на разговори", + "report_flow.label.private_info": "Споделяне на лични данни на някого", + "report_flow.label.private_info_profile": "Профилът им споделя лични данни на някого", + "report_flow.label.profile_text": "Текст на профила", + "report_flow.label.raid": "Организиране или участие в рейд или групова атака", + "report_flow.label.raid_guild": "Организиране на рейдове или групови атаки срещу хора или общности", + "report_flow.label.rude_language": "Ругатни или груби забележки", + "report_flow.label.self_harm": "Някой може да се самонарани или насърчава самонараняване", + "report_flow.label.self_harm_graphic": "Натуралистични изображения на самонараняване", + "report_flow.label.self_harm_guild": "Членове подтикват други да се наранят", + "report_flow.label.self_harm_pressure": "Натиск или предизвикване на някого да се нарани", + "report_flow.label.self_harm_pressure_guild": "Натиск или предизвикване на хора да се наранят", + "report_flow.label.self_harm_profile": "Профилът им загатва за самонараняване или го насърчава", + "report_flow.label.self_harm_promotion": "Насърчаване на самонараняване или споделяне на методи", + "report_flow.label.self_harm_promotion_profile": "Профилът им насърчава самонараняване", + "report_flow.label.sexual": "Сексуално съдържание", + "report_flow.label.sexual_exploitation": "Сексуална експлоатация, принуда или трафик на хора", + "report_flow.label.sexual_unwanted": "Сексуални изображения или съобщения, които не исках", + "report_flow.label.something_else": "Нещо друго", + "report_flow.label.spam": "Спам или нежелани реклами", + "report_flow.label.spam_bulk": "Масово изпращане на спам или реклама", + "report_flow.label.spam_or_manipulation": "Спам или манипулация на платформата", + "report_flow.label.spam_profile": "Профилът им се използва за спам или реклама", + "report_flow.label.suicide_promotion": "Насърчаване на самоубийство или споделяне на методи", + "report_flow.label.suicide_promotion_profile": "Профилът им насърчава самоубийство", + "report_flow.label.synthetic_media": "Фалшиви или създадени с изкуствен интелект медии, представени като реални", + "report_flow.label.terrorism": "Тероризъм или насилствен екстремизъм", + "report_flow.label.terrorism_guild": "Вербуване за или насърчаване на тероризъм или насилствен екстремизъм", + "report_flow.label.threat": "Заплахи или призиви за насилие", + "report_flow.label.threat_to_share": "Заплашват да го споделят", + "report_flow.label.too_young": "Те са под минималната възраст за използване на {product_name}", + "report_flow.label.unwanted_contact": "Преследване или многократни опити за контакт с мен или с някой друг, след като е бил помолен да спре, блокиран или отстранен", + "report_flow.label.violence_glorification": "Възхваляване на насилие в реалния свят", + "report_flow.label.violence_incitement": "Насърчаване на насилие или обясняване как да се нараняват хора", + "report_flow.label.violence_misinfo": "Насилие, екстремизъм или вредна невярна информация", + "report_flow.label.violent_threat": "Казва, че ще нарани някого", + "report_flow.label.worried_profile": "Притеснявам се за безопасността на този човек", + "report_flow.label.worried_self_harm": "Страхувам се, че този човек може да се нарани", + "report_flow.label.worried_suicide": "Страхувам се, че този човек може да опита да се самоубие", + "report_flow.notice.need_more_info.body": "За да прегледаме това, ни трябва съобщение, в което посочват на колко години са или ясно показват, че са под минималната възраст за {product_name}. Вместо това докладвай съобщението.", + "report_flow.notice.need_more_info.title": "Все още не можем да предприемем действия по това", + "report_flow.notice.need_more_info_profile.body": "За да прегледаме това, трябва да видим къде посочват на колко години са или ясно показват, че са под минималната възраст за {product_name}. Вместо това докладвай съобщението или профила.", + "report_flow.screen.abuse.title": "Какво включва?", + "report_flow.screen.abuse_guild.title": "Какво правят хората в тази общност?", + "report_flow.screen.age_stated_message.title": "Казва ли се в това съобщение на колко години е?", + "report_flow.screen.age_stated_profile.title": "Профилът им посочва ли възрастта им?", + "report_flow.screen.community_parts.subtitle": "Избери колкото ти трябват.", + "report_flow.screen.community_parts.title": "Кои части на общността са замесени?", + "report_flow.screen.crisis_support.subtitle": "Телефонните линии за кризисна помощ предлагат безплатна и поверителна подкрепа.", + "report_flow.screen.crisis_support.title": "Има кой да помогне още сега", + "report_flow.screen.false_info.subtitle": "Мнения, сатира и добросъвестен дебат са разрешени. За незаконна клевета може да се подаде сигнал съгласно Акта за цифровите услуги (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Мнения, сатира и добросъвестен дебат са разрешени.", + "report_flow.screen.false_info.title": "Какво има подвеждащо в него?", + "report_flow.screen.harassment.title": "Как е насочено това към някого?", + "report_flow.screen.hate.title": "Как атакува хора заради това кои са те?", + "report_flow.screen.impersonation.subtitle": "Ясно обозначената пародия или ролева игра са разрешени.", + "report_flow.screen.impersonation.title": "За кого се представя човекът или е измама?", + "report_flow.screen.minor_risk.title": "Как този човек излага непълнолетен на риск?", + "report_flow.screen.minor_risk_guild.title": "Как тази общност излага непълнолетни на риск?", + "report_flow.screen.minor_sexual.subtitle": "Нарисувано, написано или генерирано от изкуствен интелект съдържание също се отчита, когато героят е описан като непълнолетен или очевидно е в предпубертетна възраст, включително lolicon, shotacon и cub.", + "report_flow.screen.minor_sexual.title": "Какво видя, свързано с непълнолетен?", + "report_flow.screen.minor_sexual_guild.title": "Какво видя, свързано с непълнолетни?", + "report_flow.screen.private_info.subtitle": "Избери колкото ти трябват. Ако интимна снимка показва човек под 18 години, върни се и я докладвай като „Сексуализиране на непълнолетен“.", + "report_flow.screen.private_info.title": "Какви лични данни са замесени?", + "report_flow.screen.profile_abuse.title": "Какво има вредно в профила им?", + "report_flow.screen.profile_hate_violence.title": "Какво показва или насърчава профилът им?", + "report_flow.screen.profile_intro.options_heading": "Научи повече", + "report_flow.screen.profile_intro.subtitle": "Кажи ни какво не е наред с този профил. Човекът няма да научи кой го е докладвал.", + "report_flow.screen.profile_intro.title": "Докладване на профил", + "report_flow.screen.profile_minor_sexual.title": "Какво в профила им е свързано с непълнолетен?", + "report_flow.screen.profile_parts.subtitle": "Избери колкото ти трябват.", + "report_flow.screen.profile_parts.title": "Кои части на профила им са проблемни?", + "report_flow.screen.profile_private_info.title": "Какви лични данни има в профила им?", + "report_flow.screen.profile_sexual.title": "Разкажи ни за сексуалното съдържание в профила им", + "report_flow.screen.profile_threat.title": "Как профилът им е свързан с насилие?", + "report_flow.screen.root_guild.subtitle": "Избери най-близкото съвпадение за случващото се в тази общност.", + "report_flow.screen.root_guild.title": "Какво не е наред с тази общност?", + "report_flow.screen.root_message.subtitle": "Избери най-близкото съвпадение. Можеш да прегледаш всичко, преди да бъде изпратено.", + "report_flow.screen.root_message.title": "Докладване на съобщение", + "report_flow.screen.root_user.subtitle": "Избери най-близкото съвпадение за съдържанието в профила им.", + "report_flow.screen.root_user.title": "Какво не е наред с профила им?", + "report_flow.screen.self_harm.subtitle": "Никой не се наказва за това, че споделя, че му е трудно. Ако ни кажеш, че се тревожиш, ни помагаш да предложим подкрепа.", + "report_flow.screen.self_harm.title": "Какво казаха или споделиха?", + "report_flow.screen.self_harm_guild.title": "Какво насърчават членовете?", + "report_flow.screen.self_harm_profile.title": "Какво казва или показва профилът им?", + "report_flow.screen.sexual.subtitle": "Ако някой от показаните или замесените е под 18 години, избери „Сексуализиране на непълнолетен“.", + "report_flow.screen.sexual.title": "Разкажи ни за сексуалното съдържание", + "report_flow.screen.sexual_guild.subtitle": "Ако някой от показаните или замесените е под 18 години, избери „Сексуализиране на непълнолетни“.", + "report_flow.screen.sexual_guild.title": "Разкажи ни за сексуалното съдържание в тази общност", + "report_flow.screen.something_else_guild.title": "Какво друго се случва в тази общност?", + "report_flow.screen.something_else_message.title": "Какво друго се случва?", + "report_flow.screen.something_else_user.title": "Какво друго не е наред с този профил?", + "report_flow.screen.spam_kind_guild.title": "Как тази общност злоупотребява с платформата?", + "report_flow.screen.spam_profile.title": "Как се злоупотребява с акаунта?", + "report_flow.screen.threat.title": "Как е свързано с насилие?", + "report_flow.screen.violence_misinfo.title": "Кое от тези съвпада?", + "report_flow.screen.violence_misinfo_guild.title": "Кое от това се случва в тази общност?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/cs.json b/fluxer_api/src/api/content_i18n/weblate/locales/cs.json index d7219f840..623cbee2f 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/cs.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/cs.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Textové kanály", "guild.default_category_voice": "Hlasové kanály", "guild.default_channel_text": "obecný", - "guild.default_channel_voice": "Obecný" + "guild.default_channel_voice": "Obecný", + "report_flow.description.name": "Uživatelské jméno, zobrazované jméno nebo přezdívka v komunitě", + "report_flow.description.photo": "Co používají jako avatar a banner", + "report_flow.description.profile_text": "Popis, vlastní stav nebo zájmena", + "report_flow.label.abuse": "Zneužívající nebo škodlivý obsah", + "report_flow.label.account_trading": "Prodej účtů nebo ukradených přihlašovacích údajů či údajů o kartě", + "report_flow.label.account_trading_communities": "Nákup nebo prodej účtů či komunit", + "report_flow.label.address": "Domácí adresa nebo pracoviště", + "report_flow.label.adult_content_no_gate": "Obsah pro dospělé bez věkového omezení 18+", + "report_flow.label.adult_content_profile": "Explicitní obsah pro dospělé v jejich profilu", + "report_flow.label.adult_content_unmarked": "Obsah pro dospělé v komunitním kanálu, který není označen jako 18+", + "report_flow.label.age_no_message": "Ne, nezmiňuje se o tom", + "report_flow.label.age_no_profile": "Ne, nezmiňuje se o tom", + "report_flow.label.age_yes_message": "Ano, zmiňuje jejich věk", + "report_flow.label.age_yes_profile": "Ano, jejich profil zmiňuje jejich věk", + "report_flow.label.atrocity_denial": "Popírání nebo oslavování holokaustu či jiných genocid", + "report_flow.label.ban_evasion": "Obcházení zákazu pomocí jiného účtu", + "report_flow.label.channel_names": "Názvy kanálů", + "report_flow.label.community_banner": "Banner komunity", + "report_flow.label.community_icon": "Ikona komunity", + "report_flow.label.community_name": "Název komunity", + "report_flow.label.conversion_therapy": "Propagace konverzní terapie", + "report_flow.label.copyright": "Stížnost na porušení autorských práv nebo ochranné známky", + "report_flow.label.crisis_lines": "Krizové linky ve vaší zemi", + "report_flow.label.csam": "Skutečné nebo pomocí AI vytvořené obrázky či videa sexuálního zneužívání dětí", + "report_flow.label.discovery_listing": "Záznam v seznamu objevování", + "report_flow.label.dislike": "Prostě to není pro mě", + "report_flow.label.dsa": "Obsah, který je v EU nelegální (akt o digitálních službách)", + "report_flow.label.eating_disorder_promotion": "Nabádání k poruchám příjmu potravy", + "report_flow.label.eating_disorder_promotion_profile": "Jejich profil propaguje poruchy příjmu potravy", + "report_flow.label.email": "E-mailová adresa", + "report_flow.label.emoji_stickers": "Vlastní emoji nebo samolepky", + "report_flow.label.face_photo": "Fotografie jejich obličeje", + "report_flow.label.fake_account": "Falešný účet, bot nebo automatizované zneužívání", + "report_flow.label.fake_account_profile": "Falešný nebo podvodný účet", + "report_flow.label.false_claims": "Šíření lží s cílem poškodit pověst konkrétní osoby", + "report_flow.label.false_info": "Šíření škodlivých falešných informací", + "report_flow.label.financial": "Údaje o kartě, bankovním účtu nebo jiné finanční údaje", + "report_flow.label.fraud": "Snaží se od lidí podvodně vylákat peníze nebo účty", + "report_flow.label.fraud_guild": "Podvodné vylákávání peněz nebo účtů od lidí", + "report_flow.label.government_id": "Doklad totožnosti nebo číslo dokladu totožnosti", + "report_flow.label.graphic_violence": "Skutečné násilí zobrazené za účelem šokování, například krvavé záběry nebo týrání zvířat", + "report_flow.label.harassment": "Šikana, obtěžování nebo pronásledování", + "report_flow.label.harassment_direct": "Opakované napadání někoho urážkami nebo jiným špatným zacházením", + "report_flow.label.harassment_guild": "Obtěžování, šikana nebo pronásledování lidí", + "report_flow.label.harassment_profile": "Jejich profil obtěžuje nebo cílí na mě nebo někoho jiného", + "report_flow.label.harmful_false_claims": "Nepravdivá tvrzení, která by mohla způsobit vážnou újmu v reálném světě", + "report_flow.label.hate": "Nenávist nebo diskriminace lidí za to, kým jsou", + "report_flow.label.hate_dehumanizing": "Přirovnávání lidí ke zvířatům, nemocem nebo špíně, nebo tvrzení, že jsou méně než lidé", + "report_flow.label.hate_incitement": "Výzvy k násilí vůči skupině nebo k jejímu vyloučení", + "report_flow.label.hate_other": "Jiné útoky na lidi za to, kým jsou", + "report_flow.label.hate_slurs": "Hanlivá označení, nenávistné symboly nebo ponižující stereotypy", + "report_flow.label.hate_violence": "Nenávist, násilí nebo extremismus", + "report_flow.label.identity": "Sexuální orientace, genderová identita nebo intersexualita", + "report_flow.label.illegal_activity": "Jiná nezákonná aktivita", + "report_flow.label.illegal_goods": "Prodej drog, zbraní nebo jiného nezákonného zboží", + "report_flow.label.impersonation": "Vydávání se za někoho jiného nebo podvádění lidí", + "report_flow.label.impersonation_guild": "Vydávání se za {product_name} nebo jinou organizaci", + "report_flow.label.impersonation_organization": "Společnost, značka nebo skupina", + "report_flow.label.impersonation_person": "Já nebo někdo blízký", + "report_flow.label.impersonation_public_figure": "Známá osoba, například tvůrce nebo politik", + "report_flow.label.impersonation_staff": "Zaměstnanci {product_name} nebo podpora", + "report_flow.label.intimate_image_abuse": "Intimní snímky sdílené bez souhlasu, včetně deepfake, nebo hrozba jejich sdílení", + "report_flow.label.intimate_image_abuse_guild": "Sdílení intimních snímků bez souhlasu, včetně deepfake", + "report_flow.label.intimate_image_abuse_profile": "Intimní snímky někoho sdílené bez souhlasu, včetně deepfake", + "report_flow.label.intimate_photo": "Intimní nebo nahý snímek", + "report_flow.label.invite_splash": "Pozadí pozvánky", + "report_flow.label.ip_address": "IP adresa", + "report_flow.label.learn_more": "Přečtěte si Komunitní pokyny {product_name}", + "report_flow.label.legal_name": "Skutečné nebo právní jméno", + "report_flow.label.lgbtq_targeting": "Úmyslný misgendering, deadnaming nebo zveřejnění něčí orientace či identity bez souhlasu (outing), nebo popírání jeho identity", + "report_flow.label.malware_guild": "Distribuce malwaru nebo phishingových odkazů", + "report_flow.label.malware_phishing": "Pokusy o phishing, malware nebo hacking", + "report_flow.label.member_activity": "Co tam členové zveřejňují nebo dělají", + "report_flow.label.metric_manipulation": "Falšování počtu členů nebo reakcí", + "report_flow.label.minor_contact": "Žádání nezletilého o schůzku, fotografie nebo osobní údaje způsobem, který působí predátorsky", + "report_flow.label.minor_dating_community": "Jedná se o komunitu pro seznamování mezi nezletilými", + "report_flow.label.minor_fictional": "Kreslený, psaný nebo pomocí AI vytvořený sexuální obsah zobrazující fiktivní dítě", + "report_flow.label.minor_grooming": "Grooming nebo budování nevhodné důvěry u nezletilého", + "report_flow.label.minor_grooming_guild": "Členové provádějí grooming nebo budují nevhodnou důvěru u nezletilých", + "report_flow.label.minor_in_adult_space": "Nezletilý je v kanálu nebo komunitě 18+", + "report_flow.label.minor_in_adult_space_guild": "Nezletilým je povolen přístup do kanálů 18+", + "report_flow.label.minor_risk": "Ohrožování nezletilého", + "report_flow.label.minor_risk_guild": "Ohrožování nezletilých", + "report_flow.label.minor_sexual": "Sexualizace nezletilé osoby", + "report_flow.label.minor_sexual_contact": "Flirtování s nezletilým nebo posílání sexuálních zpráv nezletilému", + "report_flow.label.minor_sexual_contact_guild": "Členové flirtují s nezletilými nebo jim posílají sexuální zprávy", + "report_flow.label.minor_sexual_content": "Nezletilý sám sdílí sexuální obsah", + "report_flow.label.minor_sexual_content_guild": "Nezletilí zveřejňují nebo posílají sexuální obsah", + "report_flow.label.minor_sexual_content_profile": "Profil nezletilé osoby se sexuálním obsahem", + "report_flow.label.minor_sexual_guild": "Sexualizace nezletilých osob", + "report_flow.label.minor_sexualization": "Sexuální komentáře o nezletilých", + "report_flow.label.minor_sexualization_guild": "Členové sexuálně komentují nezletilé", + "report_flow.label.minor_sexualization_profile": "Sexuální komentáře o nezletilých v jejich profilu", + "report_flow.label.name": "Jména", + "report_flow.label.other": "Něco, co zde není uvedeno", + "report_flow.label.other_identifying": "Další informace, které by mohly někoho identifikovat nebo lokalizovat", + "report_flow.label.permits_violations": "Umožňuje vážné porušování pravidel", + "report_flow.label.phone": "Telefonní číslo", + "report_flow.label.photo": "Obrázky", + "report_flow.label.platform_abuse": "Scraping, automatizace nebo jiné zneužití platformy", + "report_flow.label.private_conversation": "Soukromé zprávy, snímky obrazovky nebo nahrávky hovorů", + "report_flow.label.private_info": "Sdílení soukromých údajů někoho jiného", + "report_flow.label.private_info_profile": "Jejich profil sdílí soukromé údaje někoho jiného", + "report_flow.label.profile_text": "Profilový text", + "report_flow.label.raid": "Organizování nebo připojení se k nájezdu nebo hromadnému útoku", + "report_flow.label.raid_guild": "Organizování nájezdů nebo hromadných útoků proti lidem nebo komunitám", + "report_flow.label.rude_language": "Nadávky nebo hrubé poznámky", + "report_flow.label.self_harm": "Někdo by si mohl ublížit nebo nabádá k sebepoškozování", + "report_flow.label.self_harm_graphic": "Drastické snímky sebepoškozování", + "report_flow.label.self_harm_guild": "Členové nabádají ostatní k sebepoškozování", + "report_flow.label.self_harm_pressure": "Nátlak na někoho nebo vyzývání někoho k sebepoškozování", + "report_flow.label.self_harm_pressure_guild": "Nátlak na lidi nebo vyzývání lidí k sebepoškozování", + "report_flow.label.self_harm_profile": "Jejich profil naznačuje sebepoškozování nebo k němu nabádá", + "report_flow.label.self_harm_promotion": "Nabádání k sebepoškozování nebo sdílení metod", + "report_flow.label.self_harm_promotion_profile": "Jejich profil nabádá k sebepoškozování", + "report_flow.label.sexual": "Sexuální obsah", + "report_flow.label.sexual_exploitation": "Sexuální vykořisťování, nátlak nebo obchodování s lidmi", + "report_flow.label.sexual_unwanted": "Nevyžádané sexuální obrázky nebo zprávy", + "report_flow.label.something_else": "Něco jiného", + "report_flow.label.spam": "Spam nebo nevyžádané reklamy", + "report_flow.label.spam_bulk": "Hromadné rozesílání spamu nebo reklamy", + "report_flow.label.spam_or_manipulation": "Spam nebo manipulace s platformou", + "report_flow.label.spam_profile": "Jejich profil je používán ke spamu nebo reklamě", + "report_flow.label.suicide_promotion": "Nabádání k sebevraždě nebo sdílení metod", + "report_flow.label.suicide_promotion_profile": "Jejich profil nabádá k sebevraždě", + "report_flow.label.synthetic_media": "Falešná nebo umělou inteligencí vytvořená média prezentovaná jako skutečná", + "report_flow.label.terrorism": "Terorismus nebo násilný extremismus", + "report_flow.label.terrorism_guild": "Nábor nebo propagace terorismu či násilného extremismu", + "report_flow.label.threat": "Výhrůžky nebo výzvy k násilí", + "report_flow.label.threat_to_share": "Vyhrožují, že to budou sdílet", + "report_flow.label.too_young": "Tato osoba je mladší než minimální věk pro používání {product_name}", + "report_flow.label.unwanted_contact": "Pronásledování nebo opakované kontaktování mě či někoho jiného i po výzvě k ukončení kontaktu, po zablokování nebo odebrání", + "report_flow.label.violence_glorification": "Oslavování násilí v reálném světě", + "report_flow.label.violence_incitement": "Podněcování k násilí nebo vysvětlování, jak ublížit lidem", + "report_flow.label.violence_misinfo": "Násilí, extremismus nebo škodlivé falešné informace", + "report_flow.label.violent_threat": "Říká, že někomu ublíží", + "report_flow.label.worried_profile": "Mám obavy o bezpečnost této osoby", + "report_flow.label.worried_self_harm": "Obávám se, že by si tato osoba mohla ublížit", + "report_flow.label.worried_suicide": "Obávám se, že by se tato osoba mohla pokusit o sebevraždu", + "report_flow.notice.need_more_info.body": "Abychom to mohli posoudit, potřebujeme zprávu, ve které daná osoba uvádí svůj věk nebo jasně dává najevo, že je mladší než minimální věk pro používání {product_name}. Nahlaste místo toho tu zprávu.", + "report_flow.notice.need_more_info.title": "Zatím na to nemůžeme reagovat", + "report_flow.notice.need_more_info_profile.body": "Abychom to mohli posoudit, potřebujeme vidět, kde daná osoba uvádí svůj věk nebo jasně dává najevo, že je mladší než minimální věk pro používání {product_name}. Nahlaste místo toho tu zprávu nebo ten profil.", + "report_flow.screen.abuse.title": "Čeho se to týká?", + "report_flow.screen.abuse_guild.title": "Co dělají lidé v této komunitě?", + "report_flow.screen.age_stated_message.title": "Uvádí tato zpráva jejich věk?", + "report_flow.screen.age_stated_profile.title": "Uvádí jejich profil, kolik jim je let?", + "report_flow.screen.community_parts.subtitle": "Vyberte tolik, kolik potřebujete.", + "report_flow.screen.community_parts.title": "Kterých částí komunity se to týká?", + "report_flow.screen.crisis_support.subtitle": "Krizové linky nabízejí bezplatnou a důvěrnou podporu.", + "report_flow.screen.crisis_support.title": "Někdo vám může pomoci hned teď", + "report_flow.screen.false_info.subtitle": "Názory, satira a debaty v dobré víře jsou povoleny. Nezákonné pomluvy lze nahlásit podle aktu o digitálních službách.", + "report_flow.screen.false_info.subtitle_self_hosted": "Názory, satira a debaty v dobré víře jsou povoleny.", + "report_flow.screen.false_info.title": "Co je na tom zavádějící?", + "report_flow.screen.harassment.title": "Jak je někdo napadán?", + "report_flow.screen.hate.title": "Jak útočí na lidi za to, kým jsou?", + "report_flow.screen.impersonation.subtitle": "Jasně označená parodie nebo hraní rolí jsou povoleny.", + "report_flow.screen.impersonation.title": "Za koho se někdo vydává, nebo jde o podvod?", + "report_flow.screen.minor_risk.title": "Jak tato osoba ohrožuje nezletilého?", + "report_flow.screen.minor_risk_guild.title": "Jak tato komunita ohrožuje nezletilé?", + "report_flow.screen.minor_sexual.subtitle": "Zahrnuje to i kreslený, psaný nebo AI obsah, pokud je postava popsána jako nezletilá nebo je zjevně předpubertální, včetně lolicon, shotacon a cub.", + "report_flow.screen.minor_sexual.title": "Co jste viděli v souvislosti s nezletilou osobou?", + "report_flow.screen.minor_sexual_guild.title": "Co jste viděli v souvislosti s nezletilými?", + "report_flow.screen.private_info.subtitle": "Vyberte tolik, kolik potřebujete. Pokud intimní fotografie zobrazuje osobu mladší 18 let, vraťte se a nahlaste ji v části „Sexualizace nezletilé osoby“.", + "report_flow.screen.private_info.title": "Které soukromé údaje jsou v tom zahrnuty?", + "report_flow.screen.profile_abuse.title": "Co je na jejich profilu škodlivé?", + "report_flow.screen.profile_hate_violence.title": "Co jejich profil ukazuje nebo propaguje?", + "report_flow.screen.profile_intro.options_heading": "Zjistit více", + "report_flow.screen.profile_intro.subtitle": "Řekněte nám, co je s tímto profilem v nepořádku. Nebude jim řečeno, kdo je nahlásil.", + "report_flow.screen.profile_intro.title": "Nahlásit profil", + "report_flow.screen.profile_minor_sexual.title": "Co v jejich profilu zahrnuje nezletilou osobu?", + "report_flow.screen.profile_parts.subtitle": "Vyberte tolik, kolik potřebujete.", + "report_flow.screen.profile_parts.title": "Které části jejich profilu jsou problém?", + "report_flow.screen.profile_private_info.title": "Jaké soukromé údaje jsou v jejich profilu?", + "report_flow.screen.profile_sexual.title": "Řekněte nám o sexuálním obsahu v jejich profilu", + "report_flow.screen.profile_threat.title": "Jak jejich profil souvisí s násilím?", + "report_flow.screen.root_guild.subtitle": "Vyberte možnost, která nejlépe odpovídá tomu, co se v této komunitě děje.", + "report_flow.screen.root_guild.title": "Co je s touto komunitou špatně?", + "report_flow.screen.root_message.subtitle": "Vyberte možnost, která nejlépe odpovídá. Před odesláním si vše můžete zkontrolovat.", + "report_flow.screen.root_message.title": "Nahlásit zprávu", + "report_flow.screen.root_user.subtitle": "Vyberte možnost, která nejlépe odpovídá tomu, co je v jejich profilu.", + "report_flow.screen.root_user.title": "Co je s jejich profilem špatně?", + "report_flow.screen.self_harm.subtitle": "Nikdo není potrestán za to, že řekne, že se potýká s problémy. Když nám řeknete, že se obáváte, pomůžete nám nabídnout podporu.", + "report_flow.screen.self_harm.title": "Co řekli nebo sdíleli?", + "report_flow.screen.self_harm_guild.title": "K čemu členové nabádají?", + "report_flow.screen.self_harm_profile.title": "Co říká nebo ukazuje jejich profil?", + "report_flow.screen.sexual.subtitle": "Pokud je kdokoli zobrazený nebo zapojený mladší 18 let, vyberte „Sexualizace nezletilé osoby“.", + "report_flow.screen.sexual.title": "Řekněte nám o sexuálním obsahu", + "report_flow.screen.sexual_guild.subtitle": "Pokud je kdokoli zobrazený nebo zapojený mladší 18 let, vyberte „Sexualizace nezletilých osob“.", + "report_flow.screen.sexual_guild.title": "Řekněte nám o sexuálním obsahu v této komunitě", + "report_flow.screen.something_else_guild.title": "Co dalšího se v této komunitě děje?", + "report_flow.screen.something_else_message.title": "Co dalšího se děje?", + "report_flow.screen.something_else_user.title": "Co dalšího je s tímto profilem špatně?", + "report_flow.screen.spam_kind_guild.title": "Jak tato komunita zneužívá platformu?", + "report_flow.screen.spam_profile.title": "Jak je účet zneužíván?", + "report_flow.screen.threat.title": "Jak to souvisí s násilím?", + "report_flow.screen.violence_misinfo.title": "Co z toho odpovídá?", + "report_flow.screen.violence_misinfo_guild.title": "Co z toho se v této komunitě děje?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/da.json b/fluxer_api/src/api/content_i18n/weblate/locales/da.json index 676f9ecca..220b7cad5 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/da.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/da.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Tekstkanaler", "guild.default_category_voice": "Talekanaler", "guild.default_channel_text": "generelt", - "guild.default_channel_voice": "Generelt" + "guild.default_channel_voice": "Generelt", + "report_flow.description.name": "Brugernavn, visningsnavn eller kaldenavn i fællesskabet", + "report_flow.description.photo": "Hvad de bruger som avatar og banner", + "report_flow.description.profile_text": "Bio, tilpasset status eller pronominer", + "report_flow.label.abuse": "Krænkende eller skadeligt indhold", + "report_flow.label.account_trading": "Salg af konti eller stjålne login- eller kortoplysninger", + "report_flow.label.account_trading_communities": "Køb eller salg af konti eller fællesskaber", + "report_flow.label.address": "Hjemmeadresse eller arbejdsplads", + "report_flow.label.adult_content_no_gate": "Voksenindhold uden en 18+-aldersbegrænsning", + "report_flow.label.adult_content_profile": "Eksplicit voksenindhold i deres profil", + "report_flow.label.adult_content_unmarked": "Voksenindhold i en fællesskabskanal, der ikke er markeret som 18+", + "report_flow.label.age_no_message": "Nej, den nævner det ikke", + "report_flow.label.age_no_profile": "Nej, den nævner det ikke", + "report_flow.label.age_yes_message": "Ja, den nævner deres alder", + "report_flow.label.age_yes_profile": "Ja, deres profil nævner deres alder", + "report_flow.label.atrocity_denial": "Benægtelse eller hyldest af Holocaust eller andre folkedrab", + "report_flow.label.ban_evasion": "Omgåelse af et forbud med en anden konto", + "report_flow.label.channel_names": "Kanalnavne", + "report_flow.label.community_banner": "Fællesskabsbanner", + "report_flow.label.community_icon": "Fællesskabsikon", + "report_flow.label.community_name": "Navn på fællesskab", + "report_flow.label.conversion_therapy": "Fremmer konverteringsterapi", + "report_flow.label.copyright": "Klage over ophavsret eller varemærke", + "report_flow.label.crisis_lines": "Kriselinjer i dit land", + "report_flow.label.csam": "Ægte eller AI-genererede billeder eller videoer af seksuelle overgreb mod børn", + "report_flow.label.discovery_listing": "Opslag i Opdag", + "report_flow.label.dislike": "Det er bare ikke noget for mig", + "report_flow.label.dsa": "Indhold, der er ulovligt i EU (retsakten om digitale tjenester, DSA)", + "report_flow.label.eating_disorder_promotion": "Opfordrer til spiseforstyrrelser", + "report_flow.label.eating_disorder_promotion_profile": "Deres profil fremmer spiseforstyrrelser", + "report_flow.label.email": "E-mailadresse", + "report_flow.label.emoji_stickers": "Tilpassede emoji eller klistermærker", + "report_flow.label.face_photo": "Billede af deres ansigt", + "report_flow.label.fake_account": "Falsk konto, bot eller automatiseret misbrug", + "report_flow.label.fake_account_profile": "En falsk eller vildledende konto", + "report_flow.label.false_claims": "Spredning af løgne for at skade en bestemt persons omdømme", + "report_flow.label.false_info": "Spreder skadelig falsk information", + "report_flow.label.financial": "Kort-, bank- eller andre finansielle oplysninger", + "report_flow.label.fraud": "De forsøger at franarre folk penge eller konti", + "report_flow.label.fraud_guild": "At franarre folk penge eller konti", + "report_flow.label.government_id": "ID-dokument eller ID-nummer", + "report_flow.label.graphic_violence": "Ægte vold vist for at chokere, som gore eller dyremishandling", + "report_flow.label.harassment": "Mobning, chikane eller forfølgelse", + "report_flow.label.harassment_direct": "Gentagne fornærmelser eller krænkelser rettet mod nogen", + "report_flow.label.harassment_guild": "Chikanerer, mobber eller forfølger folk", + "report_flow.label.harassment_profile": "Deres profil chikanerer eller retter sig mod mig eller en anden", + "report_flow.label.harmful_false_claims": "Falske påstande, der kan forårsage alvorlig skade i den virkelige verden", + "report_flow.label.hate": "Had eller diskrimination mod folk på grund af, hvem de er", + "report_flow.label.hate_dehumanizing": "Sammenligner folk med dyr, sygdom eller snavs, eller kalder dem mindre end mennesker", + "report_flow.label.hate_incitement": "Opfordrer til vold eller udelukkelse af en gruppe", + "report_flow.label.hate_other": "Andre angreb på folk på grund af, hvem de er", + "report_flow.label.hate_slurs": "Skældsord, hadefulde symboler eller nedværdigende stereotyper", + "report_flow.label.hate_violence": "Had, vold eller ekstremisme", + "report_flow.label.identity": "Seksuel orientering, kønsidentitet eller interkønnet status", + "report_flow.label.illegal_activity": "Anden ulovlig aktivitet", + "report_flow.label.illegal_goods": "Salg af stoffer, våben eller andet ulovligt", + "report_flow.label.impersonation": "Udgiver sig for at være en anden eller svindler folk", + "report_flow.label.impersonation_guild": "Udgiver sig for at være {product_name} eller en anden organisation", + "report_flow.label.impersonation_organization": "En virksomhed, et brand eller en gruppe", + "report_flow.label.impersonation_person": "Mig eller en person tæt på mig", + "report_flow.label.impersonation_public_figure": "En kendt person, f.eks. en indholdsskaber eller politiker", + "report_flow.label.impersonation_staff": "Personale eller support hos {product_name}", + "report_flow.label.intimate_image_abuse": "Intime billeder delt uden samtykke, herunder deepfakes, eller en trussel om at dele dem", + "report_flow.label.intimate_image_abuse_guild": "Deling af intime billeder uden samtykke, herunder deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime billeder af nogen delt uden samtykke, herunder deepfakes", + "report_flow.label.intimate_photo": "Intimt billede eller nøgenbillede", + "report_flow.label.invite_splash": "Invitationsbaggrund", + "report_flow.label.ip_address": "IP-adresse", + "report_flow.label.learn_more": "Læs fællesskabsretningslinjerne for {product_name}", + "report_flow.label.legal_name": "Rigtigt eller juridisk navn", + "report_flow.label.lgbtq_targeting": "Bevidst at bruge forkert køn om nogen, deadnaming eller outing af nogen, eller benægtelse af nogens identitet", + "report_flow.label.malware_guild": "Distribution af malware eller phishing-links", + "report_flow.label.malware_phishing": "Phishing, malware eller hackingforsøg", + "report_flow.label.member_activity": "Hvad medlemmer poster eller gør der", + "report_flow.label.metric_manipulation": "Forfalskning af antal medlemmer eller reaktioner", + "report_flow.label.minor_contact": "At bede en mindreårig om at mødes eller om billeder eller personlige oplysninger på en måde, der tyder på, at de vil udnytte den mindreårige", + "report_flow.label.minor_dating_community": "Det er et fællesskab for dating mellem mindreårige", + "report_flow.label.minor_fictional": "Tegnet, skrevet eller AI-genereret seksuelt indhold af et fiktivt barn", + "report_flow.label.minor_grooming": "Grooming eller opbygning af upassende tillid til en mindreårig", + "report_flow.label.minor_grooming_guild": "Medlemmer groomer mindreårige eller opbygger upassende tillid til dem", + "report_flow.label.minor_in_adult_space": "En mindreårig er i en 18+-kanal eller et 18+-fællesskab", + "report_flow.label.minor_in_adult_space_guild": "Mindreårige får lov til at være i 18+-kanaler", + "report_flow.label.minor_risk": "Udsætter en mindreårig for fare", + "report_flow.label.minor_risk_guild": "Udsætter mindreårige for fare", + "report_flow.label.minor_sexual": "Seksualisering af en mindreårig", + "report_flow.label.minor_sexual_contact": "Flirt med en mindreårig eller seksuelle beskeder til vedkommende", + "report_flow.label.minor_sexual_contact_guild": "Medlemmer flirter med mindreårige eller sender dem seksuelle beskeder", + "report_flow.label.minor_sexual_content": "En mindreårig deler selv seksuelt indhold", + "report_flow.label.minor_sexual_content_guild": "Mindreårige slår seksuelt indhold op eller sender det", + "report_flow.label.minor_sexual_content_profile": "En mindreårigs profil med seksuelt indhold", + "report_flow.label.minor_sexual_guild": "Seksualisering af mindreårige", + "report_flow.label.minor_sexualization": "Seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_guild": "Medlemmer kommer med seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_profile": "Seksuelle kommentarer om mindreårige i deres profil", + "report_flow.label.name": "Navne", + "report_flow.label.other": "Noget, der ikke er nævnt her", + "report_flow.label.other_identifying": "Andre oplysninger, der kan identificere eller lokalisere nogen", + "report_flow.label.permits_violations": "Det tillader alvorlige regelbrud", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Billeder", + "report_flow.label.platform_abuse": "Scraping, automatisering eller andet platformsmisbrug", + "report_flow.label.private_conversation": "Private beskeder, skærmbilleder eller optagelser af opkald", + "report_flow.label.private_info": "Deling af en persons private oplysninger", + "report_flow.label.private_info_profile": "Deres profil deler en persons private oplysninger", + "report_flow.label.profile_text": "Profiltekst", + "report_flow.label.raid": "Organisering eller deltagelse i et raid eller en hetz", + "report_flow.label.raid_guild": "Organisering af raids eller hetz mod personer eller fællesskaber", + "report_flow.label.rude_language": "Banning eller uhøflige bemærkninger", + "report_flow.label.self_harm": "Nogen kan komme til at skade sig selv eller opfordrer til selvskade", + "report_flow.label.self_harm_graphic": "Grafiske billeder af selvskade", + "report_flow.label.self_harm_guild": "Medlemmer opfordrer andre til at skade sig selv", + "report_flow.label.self_harm_pressure": "Presser eller udfordrer nogen til at skade sig selv", + "report_flow.label.self_harm_pressure_guild": "Presser eller udfordrer folk til at skade sig selv", + "report_flow.label.self_harm_profile": "Deres profil antyder selvskade eller opfordrer til det", + "report_flow.label.self_harm_promotion": "Opfordrer til selvskade eller deler metoder", + "report_flow.label.self_harm_promotion_profile": "Deres profil opfordrer til selvskade", + "report_flow.label.sexual": "Seksuelt indhold", + "report_flow.label.sexual_exploitation": "Seksuel udnyttelse, tvang eller menneskehandel", + "report_flow.label.sexual_unwanted": "Seksuelle billeder eller beskeder, jeg ikke ønskede", + "report_flow.label.something_else": "Noget andet", + "report_flow.label.spam": "Spam eller uønskede reklamer", + "report_flow.label.spam_bulk": "Sender spam eller reklamer i store mængder", + "report_flow.label.spam_or_manipulation": "Spam eller platformsmanipulation", + "report_flow.label.spam_profile": "Deres profil bruges til spam eller reklamer", + "report_flow.label.suicide_promotion": "Opfordrer til selvmord eller deler metoder", + "report_flow.label.suicide_promotion_profile": "Deres profil opfordrer til selvmord", + "report_flow.label.synthetic_media": "Falske eller AI-genererede medier præsenteret som ægte", + "report_flow.label.terrorism": "Terrorisme eller voldelig ekstremisme", + "report_flow.label.terrorism_guild": "Rekruttering til eller fremme af terrorisme eller voldelig ekstremisme", + "report_flow.label.threat": "Trusler eller opfordringer til vold", + "report_flow.label.threat_to_share": "De truer med at dele det", + "report_flow.label.too_young": "De er under minimumsalderen for at bruge {product_name}", + "report_flow.label.unwanted_contact": "Forfølgelse eller gentagen kontakt til mig eller en anden, efter at personen er blevet bedt om at stoppe, er blevet blokeret eller fjernet", + "report_flow.label.violence_glorification": "Forherligelse af vold i den virkelige verden", + "report_flow.label.violence_incitement": "Opmuntring til vold eller forklaring af, hvordan man skader folk", + "report_flow.label.violence_misinfo": "Vold, ekstremisme eller skadelig falsk information", + "report_flow.label.violent_threat": "Siger, at de vil skade nogen", + "report_flow.label.worried_profile": "Jeg er bekymret for deres sikkerhed", + "report_flow.label.worried_self_harm": "Jeg er bange for, at de kan komme til at skade sig selv", + "report_flow.label.worried_suicide": "Jeg er bange for, at de kan forsøge at begå selvmord", + "report_flow.notice.need_more_info.body": "For at kunne gennemgå dette har vi brug for en besked, hvor de siger, hvor gamle de er, eller gør det klart, at de er under minimumsalderen for at bruge {product_name}. Anmeld i stedet den besked.", + "report_flow.notice.need_more_info.title": "Vi kan ikke gøre noget ved det endnu", + "report_flow.notice.need_more_info_profile.body": "For at kunne gennemgå dette har vi brug for at se, hvor de siger, hvor gamle de er, eller gør det klart, at de er under minimumsalderen for at bruge {product_name}. Anmeld i stedet den besked eller profil.", + "report_flow.screen.abuse.title": "Hvad handler det om?", + "report_flow.screen.abuse_guild.title": "Hvad laver folk i dette fællesskab?", + "report_flow.screen.age_stated_message.title": "Siger denne besked, hvor gamle de er?", + "report_flow.screen.age_stated_profile.title": "Siger deres profil, hvor gamle de er?", + "report_flow.screen.community_parts.subtitle": "Vælg så mange, som du har brug for.", + "report_flow.screen.community_parts.title": "Hvilke dele af fællesskabet er involveret?", + "report_flow.screen.crisis_support.subtitle": "Kriselinjer tilbyder gratis, fortrolig støtte.", + "report_flow.screen.crisis_support.title": "Nogen kan hjælpe lige nu", + "report_flow.screen.false_info.subtitle": "Meninger, satire og debat i god tro er tilladt. Ulovlig ærekrænkelse kan anmeldes i henhold til retsakten om digitale tjenester (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meninger, satire og debat i god tro er tilladt.", + "report_flow.screen.false_info.title": "Hvad er misvisende ved det?", + "report_flow.screen.harassment.title": "Hvordan bliver nogen gjort til mål?", + "report_flow.screen.hate.title": "Hvordan angriber det folk på grund af, hvem de er?", + "report_flow.screen.impersonation.subtitle": "Tydeligt mærket parodi eller rollespil er tilladt.", + "report_flow.screen.impersonation.title": "Hvem udgiver nogen sig for at være, eller er det svindel?", + "report_flow.screen.minor_risk.title": "Hvordan bringer denne person en mindreårig i fare?", + "report_flow.screen.minor_risk_guild.title": "Hvordan bringer dette fællesskab mindreårige i fare?", + "report_flow.screen.minor_sexual.subtitle": "Tegnet, skrevet eller AI-indhold tæller, når en karakter beskrives som mindreårig eller er tydeligt præpubertær, herunder lolicon, shotacon og cub.", + "report_flow.screen.minor_sexual.title": "Hvad så du, der involverede en mindreårig?", + "report_flow.screen.minor_sexual_guild.title": "Hvad så du, der involverede mindreårige?", + "report_flow.screen.private_info.subtitle": "Vælg så mange, som du har brug for. Hvis et intimt billede viser en person under 18, skal du gå tilbage og anmelde det under »Seksualisering af en mindreårig«.", + "report_flow.screen.private_info.title": "Hvilke private oplysninger er involveret?", + "report_flow.screen.profile_abuse.title": "Hvad er skadeligt ved deres profil?", + "report_flow.screen.profile_hate_violence.title": "Hvad viser eller fremmer deres profil?", + "report_flow.screen.profile_intro.options_heading": "Læs mere", + "report_flow.screen.profile_intro.subtitle": "Fortæl os, hvad der er galt med denne profil. De vil ikke få at vide, hvem der har anmeldt dem.", + "report_flow.screen.profile_intro.title": "Anmeld profil", + "report_flow.screen.profile_minor_sexual.title": "Hvad i deres profil involverer en mindreårig?", + "report_flow.screen.profile_parts.subtitle": "Vælg så mange, som du har brug for.", + "report_flow.screen.profile_parts.title": "Hvilke dele af deres profil er et problem?", + "report_flow.screen.profile_private_info.title": "Hvilke private oplysninger står der i deres profil?", + "report_flow.screen.profile_sexual.title": "Fortæl os om det seksuelle indhold i deres profil", + "report_flow.screen.profile_threat.title": "Hvordan involverer deres profil vold?", + "report_flow.screen.root_guild.subtitle": "Vælg den mest passende beskrivelse af, hvad der foregår i dette fællesskab.", + "report_flow.screen.root_guild.title": "Hvad er der galt med dette fællesskab?", + "report_flow.screen.root_message.subtitle": "Vælg den mest passende beskrivelse. Du kan tjekke alt, før det bliver sendt.", + "report_flow.screen.root_message.title": "Anmeld besked", + "report_flow.screen.root_user.subtitle": "Vælg den mest passende beskrivelse af, hvad der er på deres profil.", + "report_flow.screen.root_user.title": "Hvad er der galt med deres profil?", + "report_flow.screen.self_harm.subtitle": "Ingen bliver straffet for at sige, at de kæmper. At fortælle os, at du er bekymret, hjælper os med at tilbyde støtte.", + "report_flow.screen.self_harm.title": "Hvad sagde eller delte de?", + "report_flow.screen.self_harm_guild.title": "Hvad opfordrer medlemmerne til?", + "report_flow.screen.self_harm_profile.title": "Hvad siger eller viser deres profil?", + "report_flow.screen.sexual.subtitle": "Hvis nogen, der er vist eller involveret, er under 18, skal du vælge »Seksualisering af en mindreårig«.", + "report_flow.screen.sexual.title": "Fortæl os om det seksuelle indhold", + "report_flow.screen.sexual_guild.subtitle": "Hvis nogen, der er vist eller involveret, er under 18, skal du vælge »Seksualisering af mindreårige«.", + "report_flow.screen.sexual_guild.title": "Fortæl os om det seksuelle indhold i dette fællesskab", + "report_flow.screen.something_else_guild.title": "Hvad foregår der ellers i dette fællesskab?", + "report_flow.screen.something_else_message.title": "Hvad foregår der ellers?", + "report_flow.screen.something_else_user.title": "Hvad er der ellers galt med denne profil?", + "report_flow.screen.spam_kind_guild.title": "Hvordan misbruger dette fællesskab platformen?", + "report_flow.screen.spam_profile.title": "Hvordan misbruges kontoen?", + "report_flow.screen.threat.title": "Hvordan involverer det vold?", + "report_flow.screen.violence_misinfo.title": "Hvilken af disse passer bedst?", + "report_flow.screen.violence_misinfo_guild.title": "Hvilken af disse sker i dette fællesskab?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/de.json b/fluxer_api/src/api/content_i18n/weblate/locales/de.json index 22c7d077d..2e2001d9b 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/de.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/de.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Textkanäle", "guild.default_category_voice": "Sprachkanäle", "guild.default_channel_text": "allgemein", - "guild.default_channel_voice": "Allgemein" + "guild.default_channel_voice": "Allgemein", + "report_flow.description.name": "Benutzername, Anzeigename oder Community-Spitzname", + "report_flow.description.photo": "Was die Person als Avatar und Banner verwendet", + "report_flow.description.profile_text": "Biografie, eigener Status oder Pronomen", + "report_flow.label.abuse": "Missbräuchliche oder schädliche Inhalte", + "report_flow.label.account_trading": "Verkauf von Accounts oder gestohlenen Zugangsdaten oder Kartendaten", + "report_flow.label.account_trading_communities": "Kauf oder Verkauf von Accounts oder Communities", + "report_flow.label.address": "Wohnadresse oder Arbeitsplatz", + "report_flow.label.adult_content_no_gate": "Inhalte für Erwachsene ohne Altersbeschränkung (18+)", + "report_flow.label.adult_content_profile": "Explizite Inhalte für Erwachsene im Profil", + "report_flow.label.adult_content_unmarked": "Inhalte für Erwachsene in einem Community-Kanal ohne Altersbeschränkung (18+)", + "report_flow.label.age_no_message": "Nein, die Nachricht erwähnt es nicht", + "report_flow.label.age_no_profile": "Nein, das Profil erwähnt es nicht", + "report_flow.label.age_yes_message": "Ja, die Nachricht erwähnt das Alter der Person", + "report_flow.label.age_yes_profile": "Ja, das Profil erwähnt das Alter der Person", + "report_flow.label.atrocity_denial": "Leugnung oder Verherrlichung des Holocaust oder anderer Völkermorde", + "report_flow.label.ban_evasion": "Umgehung eines Banns mit einem anderen Account", + "report_flow.label.channel_names": "Kanalnamen", + "report_flow.label.community_banner": "Community-Banner", + "report_flow.label.community_icon": "Community-Icon", + "report_flow.label.community_name": "Community-Name", + "report_flow.label.conversion_therapy": "Förderung von Konversionstherapie", + "report_flow.label.copyright": "Urheberrechts- oder Markenbeschwerde", + "report_flow.label.crisis_lines": "Krisenhotlines in deinem Land", + "report_flow.label.csam": "Reale oder KI-generierte Bilder oder Videos von sexuellem Kindesmissbrauch", + "report_flow.label.discovery_listing": "Eintrag in „Entdecken“", + "report_flow.label.dislike": "Das ist einfach nichts für mich", + "report_flow.label.dsa": "Inhalte, die in der EU illegal sind (Gesetz über digitale Dienste)", + "report_flow.label.eating_disorder_promotion": "Zu gestörtem Essverhalten ermutigen", + "report_flow.label.eating_disorder_promotion_profile": "Das Profil der Person fördert Essstörungen", + "report_flow.label.email": "E-Mail-Adresse", + "report_flow.label.emoji_stickers": "Benutzerdefinierte Emojis oder Sticker", + "report_flow.label.face_photo": "Foto vom Gesicht der Person", + "report_flow.label.fake_account": "Fake-Account, Bot oder automatisierter Missbrauch", + "report_flow.label.fake_account_profile": "Ein gefälschter oder täuschender Account", + "report_flow.label.false_claims": "Lügen verbreiten, um den Ruf einer bestimmten Person zu schädigen", + "report_flow.label.false_info": "Verbreitung schädlicher Falschinformationen", + "report_flow.label.financial": "Karten-, Bank- oder andere Finanzdaten", + "report_flow.label.fraud": "Die Person versucht, andere um Geld oder Accounts zu betrügen", + "report_flow.label.fraud_guild": "Personen um Geld oder Accounts betrügen", + "report_flow.label.government_id": "Ausweisdokument oder Ausweisnummer", + "report_flow.label.graphic_violence": "Echte Gewaltdarstellungen zur Schockwirkung, etwa Gore oder Tierquälerei", + "report_flow.label.harassment": "Mobbing, Belästigung oder Stalking", + "report_flow.label.harassment_direct": "Jemanden wiederholt mit Beleidigungen oder Beschimpfungen angreifen", + "report_flow.label.harassment_guild": "Belästigung, Mobbing oder Stalking von Personen", + "report_flow.label.harassment_profile": "Das Profil belästigt oder greift mich oder andere an", + "report_flow.label.harmful_false_claims": "Falsche Behauptungen, die ernsthaften Schaden in der realen Welt verursachen könnten", + "report_flow.label.hate": "Hass oder Diskriminierung von Menschen aufgrund ihrer Identität", + "report_flow.label.hate_dehumanizing": "Menschen mit Tieren, Krankheiten oder Schmutz vergleichen oder sie als weniger als menschlich bezeichnen", + "report_flow.label.hate_incitement": "Aufrufe zu Gewalt oder Ausgrenzung gegen eine Gruppe", + "report_flow.label.hate_other": "Andere Angriffe auf Menschen aufgrund ihrer Identität", + "report_flow.label.hate_slurs": "Diskriminierende Beleidigungen, Hasssymbole oder erniedrigende Stereotype", + "report_flow.label.hate_violence": "Hass, Gewalt oder Extremismus", + "report_flow.label.identity": "Sexuelle Orientierung, Geschlechtsidentität oder Intersexualität", + "report_flow.label.illegal_activity": "Andere illegale Aktivitäten", + "report_flow.label.illegal_goods": "Verkauf von Drogen, Waffen oder anderen illegalen Gütern", + "report_flow.label.impersonation": "Sich als jemand anderes ausgeben oder Personen betrügen", + "report_flow.label.impersonation_guild": "Sich als {product_name} oder eine andere Organisation ausgeben", + "report_flow.label.impersonation_organization": "Ein Unternehmen, eine Marke oder eine Gruppe", + "report_flow.label.impersonation_person": "Ich oder jemand, der mir nahesteht", + "report_flow.label.impersonation_public_figure": "Eine bekannte Person, zum Beispiel aus der Creator-Szene oder der Politik", + "report_flow.label.impersonation_staff": "Mitarbeitende oder Support von {product_name}", + "report_flow.label.intimate_image_abuse": "Intime Bilder, die ohne Zustimmung geteilt wurden, einschließlich Deepfakes, oder die Drohung, diese zu teilen", + "report_flow.label.intimate_image_abuse_guild": "Teilen intimer Bilder ohne Zustimmung, einschließlich Deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime Bilder von jemandem, die ohne Zustimmung geteilt wurden, einschließlich Deepfakes", + "report_flow.label.intimate_photo": "Intimes oder nacktes Foto", + "report_flow.label.invite_splash": "Einladungshintergrund", + "report_flow.label.ip_address": "IP-Adresse", + "report_flow.label.learn_more": "Lies die Community-Richtlinien von {product_name}", + "report_flow.label.legal_name": "Realname oder amtlicher Name", + "report_flow.label.lgbtq_targeting": "Absichtliches Misgendern, Deadnaming oder Outing einer Person oder die Leugnung ihrer Identität", + "report_flow.label.malware_guild": "Verbreitung von Malware oder Phishing-Links", + "report_flow.label.malware_phishing": "Phishing-, Malware- oder Hacking-Versuche", + "report_flow.label.member_activity": "Was Mitglieder dort posten oder tun", + "report_flow.label.metric_manipulation": "Fälschen von Mitglieder- oder Reaktionszahlen", + "report_flow.label.minor_contact": "Eine minderjährige Person um ein Treffen, um Fotos oder persönliche Daten bitten, auf eine Weise, die den Eindruck erweckt, dass Missbrauch angebahnt werden soll", + "report_flow.label.minor_dating_community": "Es ist eine Community für Dating zwischen Minderjährigen", + "report_flow.label.minor_fictional": "Gezeichnete, geschriebene oder KI-generierte sexuelle Inhalte eines fiktiven Kindes", + "report_flow.label.minor_grooming": "Grooming oder Aufbau von unangemessenem Vertrauen zu einer minderjährigen Person", + "report_flow.label.minor_grooming_guild": "Mitglieder betreiben Grooming oder bauen unangemessenes Vertrauen zu Minderjährigen auf", + "report_flow.label.minor_in_adult_space": "Eine minderjährige Person befindet sich in einem 18+-Kanal oder einer 18+-Community", + "report_flow.label.minor_in_adult_space_guild": "Minderjährige sind in 18+-Kanälen erlaubt", + "report_flow.label.minor_risk": "Eine minderjährige Person gefährden", + "report_flow.label.minor_risk_guild": "Minderjährige gefährden", + "report_flow.label.minor_sexual": "Sexualisierung einer minderjährigen Person", + "report_flow.label.minor_sexual_contact": "Mit einer minderjährigen Person flirten oder ihr sexuelle Nachrichten schreiben", + "report_flow.label.minor_sexual_contact_guild": "Mitglieder flirten mit Minderjährigen oder schreiben ihnen sexuelle Nachrichten", + "report_flow.label.minor_sexual_content": "Eine minderjährige Person teilt selbst sexuelle Inhalte", + "report_flow.label.minor_sexual_content_guild": "Minderjährige posten oder senden sexuelle Inhalte", + "report_flow.label.minor_sexual_content_profile": "Profil einer minderjährigen Person mit sexuellen Inhalten", + "report_flow.label.minor_sexual_guild": "Sexualisierung von Minderjährigen", + "report_flow.label.minor_sexualization": "Sexuelle Kommentare über Minderjährige", + "report_flow.label.minor_sexualization_guild": "Mitglieder machen sexuelle Kommentare über Minderjährige", + "report_flow.label.minor_sexualization_profile": "Sexuelle Kommentare über Minderjährige im Profil der Person", + "report_flow.label.name": "Namen", + "report_flow.label.other": "Etwas, das hier nicht aufgeführt ist", + "report_flow.label.other_identifying": "Andere Informationen, die jemanden identifizieren oder lokalisieren könnten", + "report_flow.label.permits_violations": "Es erlaubt schwerwiegende Regelverstöße", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Scraping, Automatisierung oder anderer Plattformmissbrauch", + "report_flow.label.private_conversation": "Private Nachrichten, Screenshots oder Anrufaufzeichnungen", + "report_flow.label.private_info": "Teilen privater Details einer Person", + "report_flow.label.private_info_profile": "Das Profil der Person teilt private Details von jemandem", + "report_flow.label.profile_text": "Profiltext", + "report_flow.label.raid": "Organisation oder Teilnahme an einem Raid oder einer Hetzjagd", + "report_flow.label.raid_guild": "Organisation von Raids oder Hetzjagden gegen Personen oder Communities", + "report_flow.label.rude_language": "Schimpfwörter oder unhöfliche Bemerkungen", + "report_flow.label.self_harm": "Jemand könnte sich selbst verletzen oder ermutigt zur Selbstverletzung", + "report_flow.label.self_harm_graphic": "Drastische Bilder von Selbstverletzung", + "report_flow.label.self_harm_guild": "Mitglieder drängen andere, sich selbst zu verletzen", + "report_flow.label.self_harm_pressure": "Jemanden unter Druck setzen oder herausfordern, sich selbst zu verletzen", + "report_flow.label.self_harm_pressure_guild": "Personen unter Druck setzen oder herausfordern, sich selbst zu verletzen", + "report_flow.label.self_harm_profile": "Das Profil der Person deutet auf Selbstverletzung hin oder ermutigt dazu", + "report_flow.label.self_harm_promotion": "Zu Selbstverletzung ermutigen oder Methoden teilen", + "report_flow.label.self_harm_promotion_profile": "Das Profil der Person ermutigt zur Selbstverletzung", + "report_flow.label.sexual": "Sexuelle Inhalte", + "report_flow.label.sexual_exploitation": "Sexuelle Ausbeutung, Nötigung oder Menschenhandel", + "report_flow.label.sexual_unwanted": "Unerwünschte sexuelle Bilder oder Nachrichten", + "report_flow.label.something_else": "Etwas anderes", + "report_flow.label.spam": "Spam oder unerwünschte Werbung", + "report_flow.label.spam_bulk": "Massenhaft Spam oder Werbung versenden", + "report_flow.label.spam_or_manipulation": "Spam oder Plattform-Manipulation", + "report_flow.label.spam_profile": "Das Profil der Person wird für Spam oder Werbung genutzt", + "report_flow.label.suicide_promotion": "Zu Suizid ermutigen oder Methoden teilen", + "report_flow.label.suicide_promotion_profile": "Das Profil der Person ermutigt zum Suizid", + "report_flow.label.synthetic_media": "Gefälschte oder KI-generierte Medien, die als echt dargestellt werden", + "report_flow.label.terrorism": "Terrorismus oder gewalttätiger Extremismus", + "report_flow.label.terrorism_guild": "Rekrutierung für oder Förderung von Terrorismus oder gewalttätigem Extremismus", + "report_flow.label.threat": "Drohungen oder Aufrufe zur Gewalt", + "report_flow.label.threat_to_share": "Die Person droht, es zu teilen", + "report_flow.label.too_young": "Die Person ist jünger als das Mindestalter für die Nutzung von {product_name}", + "report_flow.label.unwanted_contact": "Stalking oder wiederholte Kontaktaufnahme mit mir oder jemand anderem, obwohl die Person aufgefordert wurde aufzuhören, blockiert oder entfernt wurde", + "report_flow.label.violence_glorification": "Verherrlichung von realer Gewalt", + "report_flow.label.violence_incitement": "Anstiftung zur Gewalt oder Erklärung, wie man Menschen verletzen kann", + "report_flow.label.violence_misinfo": "Gewalt, Extremismus oder schädliche Falschinformationen", + "report_flow.label.violent_threat": "Sagen, dass die Person jemandem wehtun wird", + "report_flow.label.worried_profile": "Ich mache mir Sorgen um die Sicherheit dieser Person", + "report_flow.label.worried_self_harm": "Ich fürchte, die Person könnte sich selbst verletzen", + "report_flow.label.worried_suicide": "Ich fürchte, die Person könnte einen Suizidversuch unternehmen", + "report_flow.notice.need_more_info.body": "Um das zu prüfen, brauchen wir eine Nachricht, in der die Person sagt, wie alt sie ist, oder deutlich macht, dass sie unter dem Mindestalter von {product_name} liegt. Melde stattdessen diese Nachricht.", + "report_flow.notice.need_more_info.title": "Wir können noch nichts unternehmen", + "report_flow.notice.need_more_info_profile.body": "Um das zu prüfen, müssen wir sehen, wo die Person sagt, wie alt sie ist, oder deutlich macht, dass sie unter dem Mindestalter von {product_name} liegt. Melde stattdessen diese Nachricht oder dieses Profil.", + "report_flow.screen.abuse.title": "Worum geht es dabei?", + "report_flow.screen.abuse_guild.title": "Was tun die Leute in dieser Community?", + "report_flow.screen.age_stated_message.title": "Sagt diese Nachricht, wie alt die Person ist?", + "report_flow.screen.age_stated_profile.title": "Steht im Profil, wie alt die Person ist?", + "report_flow.screen.community_parts.subtitle": "Wähle so viele aus, wie du brauchst.", + "report_flow.screen.community_parts.title": "Welche Teile der Community sind betroffen?", + "report_flow.screen.crisis_support.subtitle": "Krisenhotlines bieten kostenlose, vertrauliche Unterstützung.", + "report_flow.screen.crisis_support.title": "Jemand kann dir jetzt helfen", + "report_flow.screen.false_info.subtitle": "Meinungen, Satire und Debatten in gutem Glauben sind erlaubt. Rechtswidrige Verleumdung kann gemäß dem Gesetz über digitale Dienste gemeldet werden.", + "report_flow.screen.false_info.subtitle_self_hosted": "Meinungen, Satire und Debatten in gutem Glauben sind erlaubt.", + "report_flow.screen.false_info.title": "Was ist daran irreführend?", + "report_flow.screen.harassment.title": "Wie wird jemand ins Visier genommen?", + "report_flow.screen.hate.title": "Wie greift es Menschen aufgrund ihrer Identität an?", + "report_flow.screen.impersonation.subtitle": "Eindeutig gekennzeichnete Parodien oder Rollenspiele sind erlaubt.", + "report_flow.screen.impersonation.title": "Wer wird imitiert oder ist es ein Betrug?", + "report_flow.screen.minor_risk.title": "Wie gefährdet diese Person eine minderjährige Person?", + "report_flow.screen.minor_risk_guild.title": "Wie gefährdet diese Community Minderjährige?", + "report_flow.screen.minor_sexual.subtitle": "Gezeichnete, geschriebene oder KI-generierte Inhalte zählen, wenn eine Figur als Minderjährige beschrieben wird oder eindeutig präpubertär ist, einschließlich Lolicon, Shotacon und Cub.", + "report_flow.screen.minor_sexual.title": "Was hast du im Zusammenhang mit einer minderjährigen Person gesehen?", + "report_flow.screen.minor_sexual_guild.title": "Was hast du im Zusammenhang mit Minderjährigen gesehen?", + "report_flow.screen.private_info.subtitle": "Wähle so viele aus, wie du brauchst. Wenn ein intimes Foto eine Person unter 18 Jahren zeigt, geh zurück und melde es unter „Sexualisierung einer minderjährigen Person“.", + "report_flow.screen.private_info.title": "Welche privaten Details sind betroffen?", + "report_flow.screen.profile_abuse.title": "Was ist an diesem Profil schädlich?", + "report_flow.screen.profile_hate_violence.title": "Was zeigt oder fördert dieses Profil?", + "report_flow.screen.profile_intro.options_heading": "Mehr erfahren", + "report_flow.screen.profile_intro.subtitle": "Beschreibe, was mit diesem Profil nicht stimmt. Die Person erfährt nicht, wer es gemeldet hat.", + "report_flow.screen.profile_intro.title": "Profil melden", + "report_flow.screen.profile_minor_sexual.title": "Was in diesem Profil hat mit einer minderjährigen Person zu tun?", + "report_flow.screen.profile_parts.subtitle": "Wähle so viele aus, wie du brauchst.", + "report_flow.screen.profile_parts.title": "Welche Teile dieses Profils sind problematisch?", + "report_flow.screen.profile_private_info.title": "Welche privaten Details sind in diesem Profil enthalten?", + "report_flow.screen.profile_sexual.title": "Erzähl uns vom sexuellen Inhalt in diesem Profil", + "report_flow.screen.profile_threat.title": "Wie hat dieses Profil mit Gewalt zu tun?", + "report_flow.screen.root_guild.subtitle": "Wähle die zutreffendste Option für das, was in dieser Community vor sich geht.", + "report_flow.screen.root_guild.title": "Was stimmt mit dieser Community nicht?", + "report_flow.screen.root_message.subtitle": "Wähle die zutreffendste Option. Du kannst alles überprüfen, bevor es gesendet wird.", + "report_flow.screen.root_message.title": "Nachricht melden", + "report_flow.screen.root_user.subtitle": "Wähle die zutreffendste Option für das, was in diesem Profil steht.", + "report_flow.screen.root_user.title": "Was stimmt mit diesem Profil nicht?", + "report_flow.screen.self_harm.subtitle": "Niemand wird dafür bestraft, über eigene Schwierigkeiten zu sprechen. Wenn du uns mitteilst, dass du dir Sorgen machst, können wir Unterstützung anbieten.", + "report_flow.screen.self_harm.title": "Was hat die Person gesagt oder geteilt?", + "report_flow.screen.self_harm_guild.title": "Wozu ermutigen die Mitglieder?", + "report_flow.screen.self_harm_profile.title": "Was sagt oder zeigt dieses Profil?", + "report_flow.screen.sexual.subtitle": "Wenn eine gezeigte oder beteiligte Person unter 18 ist, wähle „Sexualisierung einer minderjährigen Person“.", + "report_flow.screen.sexual.title": "Erzähl uns vom sexuellen Inhalt", + "report_flow.screen.sexual_guild.subtitle": "Wenn eine gezeigte oder beteiligte Person unter 18 ist, wähle „Sexualisierung von Minderjährigen“.", + "report_flow.screen.sexual_guild.title": "Erzähl uns vom sexuellen Inhalt in dieser Community", + "report_flow.screen.something_else_guild.title": "Was ist sonst noch in dieser Community los?", + "report_flow.screen.something_else_message.title": "Was ist sonst noch los?", + "report_flow.screen.something_else_user.title": "Was stimmt sonst noch mit diesem Profil nicht?", + "report_flow.screen.spam_kind_guild.title": "Wie missbraucht diese Community die Plattform?", + "report_flow.screen.spam_profile.title": "Wie wird der Account missbraucht?", + "report_flow.screen.threat.title": "Wie ist es mit Gewalt verbunden?", + "report_flow.screen.violence_misinfo.title": "Was davon trifft zu?", + "report_flow.screen.violence_misinfo_guild.title": "Was davon passiert in dieser Community?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/el.json b/fluxer_api/src/api/content_i18n/weblate/locales/el.json index 4572220ee..0a8c3e05c 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/el.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/el.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Κανάλια κειμένου", "guild.default_category_voice": "Φωνητικά κανάλια", "guild.default_channel_text": "γενικό", - "guild.default_channel_voice": "Γενικό" + "guild.default_channel_voice": "Γενικό", + "report_flow.description.name": "Όνομα χρήστη, όνομα εμφάνισης ή ψευδώνυμο κοινότητας", + "report_flow.description.photo": "Η εικόνα προφίλ και το banner που χρησιμοποιούν", + "report_flow.description.profile_text": "Βιογραφικό, προσαρμοσμένη κατάσταση ή αντωνυμίες", + "report_flow.label.abuse": "Κακοποιητικό ή επιβλαβές περιεχόμενο", + "report_flow.label.account_trading": "Πώληση λογαριασμών ή κλεμμένων στοιχείων σύνδεσης ή κάρτας", + "report_flow.label.account_trading_communities": "Αγορά ή πώληση λογαριασμών ή κοινοτήτων", + "report_flow.label.address": "Διεύθυνση κατοικίας ή εργασίας", + "report_flow.label.adult_content_no_gate": "Περιεχόμενο ενηλίκων χωρίς περιορισμό ηλικίας 18+", + "report_flow.label.adult_content_profile": "Ρητό περιεχόμενο ενηλίκων στο προφίλ τους", + "report_flow.label.adult_content_unmarked": "Περιεχόμενο ενηλίκων σε κανάλι κοινότητας που δεν φέρει σήμανση 18+", + "report_flow.label.age_no_message": "Όχι, δεν αναφέρει την ηλικία τους", + "report_flow.label.age_no_profile": "Όχι, δεν αναφέρει την ηλικία τους", + "report_flow.label.age_yes_message": "Ναι, αναφέρει την ηλικία τους", + "report_flow.label.age_yes_profile": "Ναι, το προφίλ τους αναφέρει την ηλικία τους", + "report_flow.label.atrocity_denial": "Άρνηση ή εξύμνηση του Ολοκαυτώματος ή άλλων γενοκτονιών", + "report_flow.label.ban_evasion": "Παράκαμψη απαγόρευσης με άλλο λογαριασμό", + "report_flow.label.channel_names": "Ονόματα καναλιών", + "report_flow.label.community_banner": "Banner κοινότητας", + "report_flow.label.community_icon": "Εικονίδιο κοινότητας", + "report_flow.label.community_name": "Όνομα κοινότητας", + "report_flow.label.conversion_therapy": "Προώθηση θεραπείας μεταστροφής", + "report_flow.label.copyright": "Καταγγελία πνευματικών δικαιωμάτων ή εμπορικού σήματος", + "report_flow.label.crisis_lines": "Γραμμές βοήθειας για καταστάσεις κρίσης στη χώρα σας", + "report_flow.label.csam": "Πραγματικές ή δημιουργημένες με AI εικόνες ή βίντεο σεξουαλικής κακοποίησης παιδιών", + "report_flow.label.discovery_listing": "Καταχώριση ανακάλυψης", + "report_flow.label.dislike": "Απλά δεν μου ταιριάζει", + "report_flow.label.dsa": "Περιεχόμενο που είναι παράνομο στην ΕΕ (πράξη για τις ψηφιακές υπηρεσίες, DSA)", + "report_flow.label.eating_disorder_promotion": "Ενθάρρυνση διατροφικών διαταραχών", + "report_flow.label.eating_disorder_promotion_profile": "Το προφίλ τους προωθεί διατροφικές διαταραχές", + "report_flow.label.email": "Διεύθυνση email", + "report_flow.label.emoji_stickers": "Προσαρμοσμένα emoji ή αυτοκόλλητα", + "report_flow.label.face_photo": "Φωτογραφία του προσώπου τους", + "report_flow.label.fake_account": "Ψεύτικος λογαριασμός, bot ή αυτοματοποιημένη κατάχρηση", + "report_flow.label.fake_account_profile": "Ένας ψεύτικος ή παραπλανητικός λογαριασμός", + "report_flow.label.false_claims": "Διάδοση ψεμάτων για να βλάψουν τη φήμη ενός συγκεκριμένου ατόμου", + "report_flow.label.false_info": "Διάδοση επιβλαβών ψευδών πληροφοριών", + "report_flow.label.financial": "Κάρτα, τράπεζα ή άλλα οικονομικά στοιχεία", + "report_flow.label.fraud": "Προσπαθούν να εξαπατήσουν άτομα για χρήματα ή λογαριασμούς", + "report_flow.label.fraud_guild": "Εξαπάτηση ατόμων για χρήματα ή λογαριασμούς", + "report_flow.label.government_id": "Έγγραφο ταυτότητας ή αριθμός ταυτότητας", + "report_flow.label.graphic_violence": "Πραγματική βία που προβάλλεται για να σοκάρει, όπως σκηνές αιματοχυσίας ή σκληρότητα προς ζώα", + "report_flow.label.harassment": "Εκφοβισμός, παρενόχληση ή καταδίωξη", + "report_flow.label.harassment_direct": "Επανειλημμένη στόχευση κάποιου με προσβολές ή υβριστικές επιθέσεις", + "report_flow.label.harassment_guild": "Παρενόχληση, εκφοβισμός ή καταδίωξη ατόμων", + "report_flow.label.harassment_profile": "Το προφίλ τους παρενοχλεί ή στοχεύει εμένα ή κάποιον άλλο", + "report_flow.label.harmful_false_claims": "Ψευδείς ισχυρισμοί που θα μπορούσαν να προκαλέσουν σοβαρή βλάβη στον πραγματικό κόσμο", + "report_flow.label.hate": "Μίσος ή διακρίσεις εναντίον ανθρώπων για αυτό που είναι", + "report_flow.label.hate_dehumanizing": "Σύγκριση ανθρώπων με ζώα, ασθένειες ή βρωμιά, ή χαρακτηρισμός τους ως λιγότερο από ανθρώπους", + "report_flow.label.hate_incitement": "Εκκλήσεις για βία ή αποκλεισμό εναντίον μιας ομάδας", + "report_flow.label.hate_other": "Άλλες επιθέσεις σε ανθρώπους για αυτό που είναι", + "report_flow.label.hate_slurs": "Υβριστικές εκφράσεις, σύμβολα μίσους ή υποτιμητικά στερεότυπα", + "report_flow.label.hate_violence": "Μίσος, βία ή εξτρεμισμός", + "report_flow.label.identity": "Σεξουαλικός προσανατολισμός, ταυτότητα φύλου ή κατάσταση ίντερσεξ", + "report_flow.label.illegal_activity": "Άλλη παράνομη δραστηριότητα", + "report_flow.label.illegal_goods": "Πωλήσεις ναρκωτικών, όπλων ή άλλων παράνομων αντικειμένων", + "report_flow.label.impersonation": "Προσποιούνται ότι είναι κάποιος άλλος ή εξαπατούν άτομα", + "report_flow.label.impersonation_guild": "Προσποίηση ότι είναι {product_name} ή άλλος οργανισμός", + "report_flow.label.impersonation_organization": "Μια εταιρεία, μάρκα ή ομάδα", + "report_flow.label.impersonation_person": "Εμένα ή κάποιον κοντινό μου", + "report_flow.label.impersonation_public_figure": "Ένα γνωστό πρόσωπο, όπως δημιουργός περιεχομένου ή πολιτικός", + "report_flow.label.impersonation_staff": "Προσωπικό ή υποστήριξη του {product_name}", + "report_flow.label.intimate_image_abuse": "Οικείες εικόνες που κοινοποιήθηκαν χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes, ή απειλή κοινοποίησής τους", + "report_flow.label.intimate_image_abuse_guild": "Κοινοποίηση οικείων εικόνων χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Οικείες εικόνες κάποιου που κοινοποιήθηκαν χωρίς συγκατάθεση, συμπεριλαμβανομένων των deepfakes", + "report_flow.label.intimate_photo": "Οικεία ή γυμνή φωτογραφία", + "report_flow.label.invite_splash": "Φόντο πρόσκλησης", + "report_flow.label.ip_address": "Διεύθυνση IP", + "report_flow.label.learn_more": "Διαβάστε τις οδηγίες κοινότητας του {product_name}", + "report_flow.label.legal_name": "Πραγματικό ή νόμιμο όνομα", + "report_flow.label.lgbtq_targeting": "Εσκεμμένη λανθασμένη αναφορά φύλου, deadnaming ή αποκάλυψη σεξουαλικού προσανατολισμού κάποιου, ή άρνηση της ταυτότητάς του", + "report_flow.label.malware_guild": "Διανομή κακόβουλου λογισμικού ή συνδέσμων phishing", + "report_flow.label.malware_phishing": "Phishing, κακόβουλο λογισμικό ή απόπειρες hacking", + "report_flow.label.member_activity": "Τι δημοσιεύουν ή κάνουν τα μέλη εκεί", + "report_flow.label.metric_manipulation": "Πλαστογράφηση μετρήσεων μελών ή αντιδράσεων", + "report_flow.label.minor_contact": "Αίτημα συνάντησης με ανήλικο, ή για φωτογραφίες ή προσωπικά στοιχεία, με τρόπο που φαίνεται αρπακτικός", + "report_flow.label.minor_dating_community": "Είναι μια κοινότητα για γνωριμίες μεταξύ ανηλίκων", + "report_flow.label.minor_fictional": "Σεξουαλικό περιεχόμενο με φανταστικό παιδί, σχεδιασμένο, γραπτό ή δημιουργημένο με τεχνητή νοημοσύνη", + "report_flow.label.minor_grooming": "Αποπλάνηση (grooming) ή καλλιέργεια ακατάλληλης εμπιστοσύνης με ανήλικο", + "report_flow.label.minor_grooming_guild": "Τα μέλη αποπλανούν ανηλίκους (grooming) ή καλλιεργούν ακατάλληλη εμπιστοσύνη μαζί τους", + "report_flow.label.minor_in_adult_space": "Ένας ανήλικος βρίσκεται σε κανάλι ή κοινότητα 18+", + "report_flow.label.minor_in_adult_space_guild": "Επιτρέπονται ανήλικοι σε κανάλια 18+", + "report_flow.label.minor_risk": "Θέτει σε κίνδυνο ανήλικο", + "report_flow.label.minor_risk_guild": "Θέτει ανηλίκους σε κίνδυνο", + "report_flow.label.minor_sexual": "Σεξουαλικοποίηση ανηλίκου", + "report_flow.label.minor_sexual_contact": "Φλερτ ή αποστολή σεξουαλικών μηνυμάτων σε ανήλικο", + "report_flow.label.minor_sexual_contact_guild": "Μέλη φλερτάρουν με ανηλίκους ή τους στέλνουν σεξουαλικά μηνύματα", + "report_flow.label.minor_sexual_content": "Ανήλικος μοιράζεται ο ίδιος σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_content_guild": "Ανήλικοι δημοσιεύουν ή στέλνουν σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_content_profile": "Προφίλ ανηλίκου με σεξουαλικό περιεχόμενο", + "report_flow.label.minor_sexual_guild": "Σεξουαλικοποίηση ανηλίκων", + "report_flow.label.minor_sexualization": "Σεξουαλικά σχόλια για ανηλίκους", + "report_flow.label.minor_sexualization_guild": "Μέλη κάνουν σεξουαλικά σχόλια για ανηλίκους", + "report_flow.label.minor_sexualization_profile": "Σεξουαλικά σχόλια για ανηλίκους στο προφίλ τους", + "report_flow.label.name": "Ονόματα", + "report_flow.label.other": "Κάτι που δεν αναφέρεται εδώ", + "report_flow.label.other_identifying": "Άλλες πληροφορίες που θα μπορούσαν να αναγνωρίσουν ή να εντοπίσουν κάποιον", + "report_flow.label.permits_violations": "Επιτρέπει σοβαρές παραβιάσεις κανόνων", + "report_flow.label.phone": "Αριθμός τηλεφώνου", + "report_flow.label.photo": "Εικόνες", + "report_flow.label.platform_abuse": "Απόξεση, αυτοματοποίηση ή άλλη κατάχρηση πλατφόρμας", + "report_flow.label.private_conversation": "Ιδιωτικά μηνύματα, στιγμιότυπα οθόνης ή ηχογραφήσεις κλήσεων", + "report_flow.label.private_info": "Κοινοποίηση προσωπικών στοιχείων κάποιου", + "report_flow.label.private_info_profile": "Το προφίλ τους κοινοποιεί προσωπικά στοιχεία κάποιου", + "report_flow.label.profile_text": "Κείμενο προφίλ", + "report_flow.label.raid": "Οργάνωση ή συμμετοχή σε επιδρομή ή ομαδική επίθεση", + "report_flow.label.raid_guild": "Οργάνωση επιδρομών ή ομαδικών επιθέσεων εναντίον ατόμων ή κοινοτήτων", + "report_flow.label.rude_language": "Βρισιές ή αγενείς παρατηρήσεις", + "report_flow.label.self_harm": "Κάποιος μπορεί να αυτοτραυματιστεί ή ενθαρρύνει τον αυτοτραυματισμό", + "report_flow.label.self_harm_graphic": "Σκληρές εικόνες αυτοτραυματισμού", + "report_flow.label.self_harm_guild": "Μέλη ωθούν άλλους να αυτοτραυματιστούν", + "report_flow.label.self_harm_pressure": "Πίεση ή πρόκληση κάποιου να αυτοτραυματιστεί", + "report_flow.label.self_harm_pressure_guild": "Πίεση ή πρόκληση ατόμων να αυτοτραυματιστούν", + "report_flow.label.self_harm_profile": "Το προφίλ τους υποδηλώνει αυτοτραυματισμό ή τον ενθαρρύνει", + "report_flow.label.self_harm_promotion": "Ενθάρρυνση αυτοτραυματισμού ή κοινοποίηση μεθόδων", + "report_flow.label.self_harm_promotion_profile": "Το προφίλ τους ενθαρρύνει τον αυτοτραυματισμό", + "report_flow.label.sexual": "Σεξουαλικό περιεχόμενο", + "report_flow.label.sexual_exploitation": "Σεξουαλική εκμετάλλευση, εξαναγκασμός ή εμπορία ανθρώπων", + "report_flow.label.sexual_unwanted": "Σεξουαλικές εικόνες ή μηνύματα που δεν ήθελα", + "report_flow.label.something_else": "Κάτι άλλο", + "report_flow.label.spam": "Spam ή ανεπιθύμητες διαφημίσεις", + "report_flow.label.spam_bulk": "Αποστολή ανεπιθύμητων μηνυμάτων ή διαφημίσεων μαζικά", + "report_flow.label.spam_or_manipulation": "Ανεπιθύμητα μηνύματα ή χειραγώγηση πλατφόρμας", + "report_flow.label.spam_profile": "Το προφίλ τους χρησιμοποιείται για ανεπιθύμητα μηνύματα ή διαφημίσεις", + "report_flow.label.suicide_promotion": "Ενθάρρυνση αυτοκτονίας ή κοινοποίηση μεθόδων", + "report_flow.label.suicide_promotion_profile": "Το προφίλ τους ενθαρρύνει την αυτοκτονία", + "report_flow.label.synthetic_media": "Ψεύτικα ή δημιουργημένα με τεχνητή νοημοσύνη μέσα που παρουσιάζονται ως αληθινά", + "report_flow.label.terrorism": "Τρομοκρατία ή βίαιος εξτρεμισμός", + "report_flow.label.terrorism_guild": "Στρατολόγηση ή προώθηση τρομοκρατίας ή βίαιου εξτρεμισμού", + "report_flow.label.threat": "Απειλές ή εκκλήσεις για βία", + "report_flow.label.threat_to_share": "Απειλούν να το μοιραστούν", + "report_flow.label.too_young": "Είναι κάτω από την ελάχιστη ηλικία χρήσης του {product_name}", + "report_flow.label.unwanted_contact": "Καταδίωξη ή επανειλημμένη επικοινωνία με εμένα ή κάποιον άλλο, αφού του ζητήθηκε να σταματήσει ή αφού μπλοκαρίστηκε ή αφαιρέθηκε", + "report_flow.label.violence_glorification": "Εξύμνηση της βίας στον πραγματικό κόσμο", + "report_flow.label.violence_incitement": "Ενθάρρυνση βίας ή εξήγηση του πώς να βλάψει κανείς άλλους", + "report_flow.label.violence_misinfo": "Βία, εξτρεμισμός ή επιβλαβείς ψευδείς πληροφορίες", + "report_flow.label.violent_threat": "Λένε ότι θα βλάψουν κάποιον", + "report_flow.label.worried_profile": "Ανησυχώ για την ασφάλειά τους", + "report_flow.label.worried_self_harm": "Φοβάμαι ότι μπορεί να αυτοτραυματιστούν", + "report_flow.label.worried_suicide": "Φοβάμαι ότι μπορεί να επιχειρήσουν να αυτοκτονήσουν", + "report_flow.notice.need_more_info.body": "Για να το εξετάσουμε, χρειαζόμαστε ένα μήνυμα όπου αναφέρουν την ηλικία τους ή διευκρινίζουν ότι είναι κάτω από την ελάχιστη ηλικία του {product_name}. Αντί γι' αυτό, αναφέρετε εκείνο το μήνυμα.", + "report_flow.notice.need_more_info.title": "Δεν μπορούμε να ενεργήσουμε ακόμα", + "report_flow.notice.need_more_info_profile.body": "Για να το εξετάσουμε, πρέπει να δούμε πού αναφέρουν την ηλικία τους ή διευκρινίζουν ότι είναι κάτω από την ελάχιστη ηλικία του {product_name}. Αντί γι' αυτό, αναφέρετε εκείνο το μήνυμα ή προφίλ.", + "report_flow.screen.abuse.title": "Τι αφορά;", + "report_flow.screen.abuse_guild.title": "Τι κάνουν οι άνθρωποι σε αυτήν την κοινότητα;", + "report_flow.screen.age_stated_message.title": "Αυτό το μήνυμα αναφέρει την ηλικία τους;", + "report_flow.screen.age_stated_profile.title": "Αναφέρει το προφίλ τους την ηλικία τους;", + "report_flow.screen.community_parts.subtitle": "Επιλέξτε όσα χρειάζεστε.", + "report_flow.screen.community_parts.title": "Ποια μέρη της κοινότητας εμπλέκονται;", + "report_flow.screen.crisis_support.subtitle": "Οι γραμμές βοήθειας για καταστάσεις κρίσης προσφέρουν δωρεάν, εμπιστευτική υποστήριξη.", + "report_flow.screen.crisis_support.title": "Κάποιος μπορεί να βοηθήσει αυτή τη στιγμή", + "report_flow.screen.false_info.subtitle": "Οι απόψεις, η σάτιρα και η καλόπιστη συζήτηση επιτρέπονται. Η παράνομη δυσφήμιση μπορεί να αναφερθεί βάσει της πράξης για τις ψηφιακές υπηρεσίες (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Οι απόψεις, η σάτιρα και η καλόπιστη συζήτηση επιτρέπονται.", + "report_flow.screen.false_info.title": "Τι είναι παραπλανητικό σε αυτό;", + "report_flow.screen.harassment.title": "Πώς στοχοποιείται κάποιος;", + "report_flow.screen.hate.title": "Πώς επιτίθεται σε ανθρώπους για το ποιοι είναι;", + "report_flow.screen.impersonation.subtitle": "Η σαφώς επισημασμένη παρωδία ή το παιχνίδι ρόλων επιτρέπονται.", + "report_flow.screen.impersonation.title": "Για ποιον γίνεται πλαστοπροσωπία ή πρόκειται για απάτη;", + "report_flow.screen.minor_risk.title": "Πώς θέτει αυτό το άτομο σε κίνδυνο έναν ανήλικο;", + "report_flow.screen.minor_risk_guild.title": "Πώς θέτει αυτή η κοινότητα σε κίνδυνο ανηλίκους;", + "report_flow.screen.minor_sexual.subtitle": "Το περιεχόμενο που είναι σχεδιασμένο, γραμμένο ή δημιουργημένο με τεχνητή νοημοσύνη καλύπτεται όταν ένας χαρακτήρας περιγράφεται ως ανήλικος ή είναι σαφώς προεφηβικός, συμπεριλαμβανομένων των lolicon, shotacon και cub.", + "report_flow.screen.minor_sexual.title": "Τι είδατε που αφορά ανήλικο;", + "report_flow.screen.minor_sexual_guild.title": "Τι είδατε που αφορά ανηλίκους;", + "report_flow.screen.private_info.subtitle": "Επιλέξτε όσα χρειάζεστε. Αν μια οικεία φωτογραφία δείχνει κάποιον κάτω των 18 ετών, επιστρέψτε και αναφέρετέ την στην επιλογή «Σεξουαλικοποίηση ανηλίκου».", + "report_flow.screen.private_info.title": "Ποια προσωπικά στοιχεία εμπλέκονται;", + "report_flow.screen.profile_abuse.title": "Τι είναι επιβλαβές στο προφίλ τους;", + "report_flow.screen.profile_hate_violence.title": "Τι δείχνει ή προωθεί το προφίλ τους;", + "report_flow.screen.profile_intro.options_heading": "Μάθετε περισσότερα", + "report_flow.screen.profile_intro.subtitle": "Πείτε μας τι δεν πάει καλά με αυτό το προφίλ. Δεν θα μάθουν ποιος τους ανέφερε.", + "report_flow.screen.profile_intro.title": "Αναφορά προφίλ", + "report_flow.screen.profile_minor_sexual.title": "Τι στο προφίλ τους αφορά ανήλικο;", + "report_flow.screen.profile_parts.subtitle": "Επιλέξτε όσα χρειάζεστε.", + "report_flow.screen.profile_parts.title": "Ποια μέρη του προφίλ τους είναι πρόβλημα;", + "report_flow.screen.profile_private_info.title": "Ποια προσωπικά στοιχεία υπάρχουν στο προφίλ τους;", + "report_flow.screen.profile_sexual.title": "Πείτε μας για το σεξουαλικό περιεχόμενο στο προφίλ τους", + "report_flow.screen.profile_threat.title": "Πώς το προφίλ τους σχετίζεται με βία;", + "report_flow.screen.root_guild.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία για αυτό που συμβαίνει σε αυτήν την κοινότητα.", + "report_flow.screen.root_guild.title": "Τι δεν πάει καλά με αυτήν την κοινότητα;", + "report_flow.screen.root_message.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία. Μπορείτε να τα ελέγξετε όλα πριν σταλεί η αναφορά.", + "report_flow.screen.root_message.title": "Αναφορά μηνύματος", + "report_flow.screen.root_user.subtitle": "Επιλέξτε την πιο κοντινή αντιστοιχία για αυτό που υπάρχει στο προφίλ τους.", + "report_flow.screen.root_user.title": "Τι δεν πάει καλά με το προφίλ τους;", + "report_flow.screen.self_harm.subtitle": "Κανείς δεν τιμωρείται επειδή λέει ότι δυσκολεύεται. Το να μας πείτε ότι ανησυχείτε μας βοηθά να προσφέρουμε υποστήριξη.", + "report_flow.screen.self_harm.title": "Τι είπαν ή μοιράστηκαν;", + "report_flow.screen.self_harm_guild.title": "Τι ενθαρρύνουν τα μέλη;", + "report_flow.screen.self_harm_profile.title": "Τι λέει ή δείχνει το προφίλ τους;", + "report_flow.screen.sexual.subtitle": "Αν οποιοδήποτε άτομο που εμφανίζεται ή εμπλέκεται είναι κάτω των 18 ετών, επιλέξτε «Σεξουαλικοποίηση ανηλίκου».", + "report_flow.screen.sexual.title": "Πείτε μας για το σεξουαλικό περιεχόμενο", + "report_flow.screen.sexual_guild.subtitle": "Αν οποιοδήποτε άτομο που εμφανίζεται ή εμπλέκεται είναι κάτω των 18 ετών, επιλέξτε «Σεξουαλικοποίηση ανηλίκων».", + "report_flow.screen.sexual_guild.title": "Πείτε μας για το σεξουαλικό περιεχόμενο σε αυτήν την κοινότητα", + "report_flow.screen.something_else_guild.title": "Τι άλλο συμβαίνει σε αυτήν την κοινότητα;", + "report_flow.screen.something_else_message.title": "Τι άλλο συμβαίνει;", + "report_flow.screen.something_else_user.title": "Τι άλλο δεν πάει καλά με αυτό το προφίλ;", + "report_flow.screen.spam_kind_guild.title": "Πώς καταχράται αυτή η κοινότητα την πλατφόρμα;", + "report_flow.screen.spam_profile.title": "Πώς γίνεται κατάχρηση του λογαριασμού;", + "report_flow.screen.threat.title": "Πώς σχετίζεται με βία;", + "report_flow.screen.violence_misinfo.title": "Ποιο από αυτά ταιριάζει;", + "report_flow.screen.violence_misinfo_guild.title": "Τι από τα παρακάτω συμβαίνει σε αυτήν την κοινότητα;" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/en-GB.json b/fluxer_api/src/api/content_i18n/weblate/locales/en-GB.json index 332fccf79..03e295e40 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/en-GB.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/en-GB.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Text channels", "guild.default_category_voice": "Voice channels", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Username, display name or community nickname", + "report_flow.description.photo": "What they use as avatar and banner", + "report_flow.description.profile_text": "Bio, custom status or pronouns", + "report_flow.label.abuse": "Abusive or harmful content", + "report_flow.label.account_trading": "Selling accounts, or stolen logins or card details", + "report_flow.label.account_trading_communities": "Buying or selling accounts or communities", + "report_flow.label.address": "Home address or workplace", + "report_flow.label.adult_content_no_gate": "Adult content without an 18+ age restriction", + "report_flow.label.adult_content_profile": "Explicit adult content in their profile", + "report_flow.label.adult_content_unmarked": "Adult content in a community channel that isn't marked 18+", + "report_flow.label.age_no_message": "No, it doesn't mention it", + "report_flow.label.age_no_profile": "No, it doesn't mention it", + "report_flow.label.age_yes_message": "Yes, it mentions their age", + "report_flow.label.age_yes_profile": "Yes, their profile mentions their age", + "report_flow.label.atrocity_denial": "Denying or celebrating the Holocaust or other genocides", + "report_flow.label.ban_evasion": "Getting around a ban with another account", + "report_flow.label.channel_names": "Channel names", + "report_flow.label.community_banner": "Community banner", + "report_flow.label.community_icon": "Community icon", + "report_flow.label.community_name": "Community name", + "report_flow.label.conversion_therapy": "Promoting conversion therapy", + "report_flow.label.copyright": "Copyright or trademark complaint", + "report_flow.label.crisis_lines": "Crisis lines in your country", + "report_flow.label.csam": "Real or AI-generated images or videos of child sexual abuse", + "report_flow.label.discovery_listing": "Discovery listing", + "report_flow.label.dislike": "It's just not for me", + "report_flow.label.dsa": "Content that's illegal in the EU (Digital Services Act)", + "report_flow.label.eating_disorder_promotion": "Encouraging disordered eating", + "report_flow.label.eating_disorder_promotion_profile": "Their profile promotes eating disorders", + "report_flow.label.email": "Email address", + "report_flow.label.emoji_stickers": "Custom emoji or stickers", + "report_flow.label.face_photo": "Photo of their face", + "report_flow.label.fake_account": "Fake account, bot or automated abuse", + "report_flow.label.fake_account_profile": "A fake or deceptive account", + "report_flow.label.false_claims": "Spreading lies to hurt a specific person's reputation", + "report_flow.label.false_info": "Spreading harmful false information", + "report_flow.label.financial": "Card, bank or other financial details", + "report_flow.label.fraud": "They are trying to con people out of money or accounts", + "report_flow.label.fraud_guild": "Conning people out of money or accounts", + "report_flow.label.government_id": "ID document or ID number", + "report_flow.label.graphic_violence": "Real violence shown to shock, like gore or animal cruelty", + "report_flow.label.harassment": "Bullying, harassment or stalking", + "report_flow.label.harassment_direct": "Repeatedly targeting someone with insults or abuse", + "report_flow.label.harassment_guild": "Harassing, bullying or stalking people", + "report_flow.label.harassment_profile": "Their profile harasses or targets me or someone else", + "report_flow.label.harmful_false_claims": "False claims that could cause serious real-world harm", + "report_flow.label.hate": "Hate or discrimination against people for who they are", + "report_flow.label.hate_dehumanizing": "Comparing people to animals, disease or filth, or calling them less than human", + "report_flow.label.hate_incitement": "Calls for violence or exclusion against a group", + "report_flow.label.hate_other": "Other attacks on people for who they are", + "report_flow.label.hate_slurs": "Slurs, hateful symbols or demeaning stereotypes", + "report_flow.label.hate_violence": "Hate, violence or extremism", + "report_flow.label.identity": "Sexual orientation, gender identity or intersex status", + "report_flow.label.illegal_activity": "Other illegal activity", + "report_flow.label.illegal_goods": "Drug, weapon or other illegal sales", + "report_flow.label.impersonation": "Pretending to be someone, or scamming people", + "report_flow.label.impersonation_guild": "Pretending to be {product_name} or another organisation", + "report_flow.label.impersonation_organization": "A company, brand or group", + "report_flow.label.impersonation_person": "Me or someone close to me", + "report_flow.label.impersonation_public_figure": "A well-known person, like a creator or politician", + "report_flow.label.impersonation_staff": "{product_name} staff or support", + "report_flow.label.intimate_image_abuse": "Intimate images shared without consent, including deepfakes, or a threat to share them", + "report_flow.label.intimate_image_abuse_guild": "Sharing intimate images without consent, including deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intimate images of someone shared without consent, including deepfakes", + "report_flow.label.intimate_photo": "Intimate or nude photo", + "report_flow.label.invite_splash": "Invite splash", + "report_flow.label.ip_address": "IP address", + "report_flow.label.learn_more": "Read the {product_name} Community Guidelines", + "report_flow.label.legal_name": "Real or legal name", + "report_flow.label.lgbtq_targeting": "Deliberately misgendering, deadnaming or outing someone, or denying their identity", + "report_flow.label.malware_guild": "Distributing malware or phishing links", + "report_flow.label.malware_phishing": "Phishing, malware or hacking attempts", + "report_flow.label.member_activity": "What members post or do there", + "report_flow.label.metric_manipulation": "Faking member or reaction counts", + "report_flow.label.minor_contact": "Asking a minor to meet up, or for photos or personal details, in a way that seems predatory", + "report_flow.label.minor_dating_community": "It is a community for dating between minors", + "report_flow.label.minor_fictional": "Drawn, written or AI-generated sexual content of a fictional child", + "report_flow.label.minor_grooming": "Grooming or building inappropriate trust with a minor", + "report_flow.label.minor_grooming_guild": "Members groom or build inappropriate trust with minors", + "report_flow.label.minor_in_adult_space": "A minor is in an 18+ channel or community", + "report_flow.label.minor_in_adult_space_guild": "Minors are allowed in 18+ channels", + "report_flow.label.minor_risk": "Putting a minor at risk", + "report_flow.label.minor_risk_guild": "Putting minors at risk", + "report_flow.label.minor_sexual": "Sexualising a minor", + "report_flow.label.minor_sexual_contact": "Flirting with a minor or messaging them sexually", + "report_flow.label.minor_sexual_contact_guild": "Members flirt with minors or message them sexually", + "report_flow.label.minor_sexual_content": "A minor is sharing sexual content themselves", + "report_flow.label.minor_sexual_content_guild": "Minors post or send sexual content", + "report_flow.label.minor_sexual_content_profile": "A minor's profile with sexual content", + "report_flow.label.minor_sexual_guild": "Sexualising minors", + "report_flow.label.minor_sexualization": "Sexual comments about minors", + "report_flow.label.minor_sexualization_guild": "Members make sexual comments about minors", + "report_flow.label.minor_sexualization_profile": "Sexual comments about minors in their profile", + "report_flow.label.name": "Names", + "report_flow.label.other": "Something not listed here", + "report_flow.label.other_identifying": "Other information that could identify or locate someone", + "report_flow.label.permits_violations": "It allows serious rule-breaking", + "report_flow.label.phone": "Phone number", + "report_flow.label.photo": "Pictures", + "report_flow.label.platform_abuse": "Scraping, automation or other platform abuse", + "report_flow.label.private_conversation": "Private messages, screenshots or call recordings", + "report_flow.label.private_info": "Sharing someone's private details", + "report_flow.label.private_info_profile": "Their profile shares someone's private details", + "report_flow.label.profile_text": "Profile text", + "report_flow.label.raid": "Organising or joining a raid or pile-on", + "report_flow.label.raid_guild": "Organising raids or pile-ons against people or communities", + "report_flow.label.rude_language": "Swearing or rude remarks", + "report_flow.label.self_harm": "Someone might hurt themselves, or is encouraging self-harm", + "report_flow.label.self_harm_graphic": "Graphic images of self-harm", + "report_flow.label.self_harm_guild": "Members push others to hurt themselves", + "report_flow.label.self_harm_pressure": "Pressuring or challenging someone to hurt themselves", + "report_flow.label.self_harm_pressure_guild": "Pressuring or challenging people to hurt themselves", + "report_flow.label.self_harm_profile": "Their profile suggests self-harm or encourages it", + "report_flow.label.self_harm_promotion": "Encouraging self-harm or sharing methods", + "report_flow.label.self_harm_promotion_profile": "Their profile encourages self-harm", + "report_flow.label.sexual": "Sexual content", + "report_flow.label.sexual_exploitation": "Sexual exploitation, coercion or trafficking", + "report_flow.label.sexual_unwanted": "Sexual images or messages I didn't want", + "report_flow.label.something_else": "Something else", + "report_flow.label.spam": "Spam or unwanted ads", + "report_flow.label.spam_bulk": "Sending spam or advertising in bulk", + "report_flow.label.spam_or_manipulation": "Spam or platform manipulation", + "report_flow.label.spam_profile": "Their profile is used for spam or advertising", + "report_flow.label.suicide_promotion": "Encouraging suicide or sharing methods", + "report_flow.label.suicide_promotion_profile": "Their profile encourages suicide", + "report_flow.label.synthetic_media": "Fake or AI-made media presented as real", + "report_flow.label.terrorism": "Terrorism or violent extremism", + "report_flow.label.terrorism_guild": "Recruiting for or promoting terrorism or violent extremism", + "report_flow.label.threat": "Threats or calls for violence", + "report_flow.label.threat_to_share": "They are threatening to share it", + "report_flow.label.too_young": "They're under the minimum age to use {product_name}", + "report_flow.label.unwanted_contact": "Stalking or repeatedly contacting me or someone else after being asked to stop, blocked or removed", + "report_flow.label.violence_glorification": "Glorifying real-world violence", + "report_flow.label.violence_incitement": "Encouraging violence or explaining how to hurt people", + "report_flow.label.violence_misinfo": "Violence, extremism or harmful false information", + "report_flow.label.violent_threat": "Saying they will hurt someone", + "report_flow.label.worried_profile": "I'm worried about their safety", + "report_flow.label.worried_self_harm": "I'm afraid they might hurt themselves", + "report_flow.label.worried_suicide": "I'm afraid they might attempt suicide", + "report_flow.notice.need_more_info.body": "To review this, we need a message where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message instead.", + "report_flow.notice.need_more_info.title": "We can't act on this yet", + "report_flow.notice.need_more_info_profile.body": "To review this, we need to see where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message or profile instead.", + "report_flow.screen.abuse.title": "What does it involve?", + "report_flow.screen.abuse_guild.title": "What are people in this community doing?", + "report_flow.screen.age_stated_message.title": "Does this message say how old they are?", + "report_flow.screen.age_stated_profile.title": "Does their profile say how old they are?", + "report_flow.screen.community_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.community_parts.title": "Which parts of the community are involved?", + "report_flow.screen.crisis_support.subtitle": "Crisis lines offer free, confidential support.", + "report_flow.screen.crisis_support.title": "Someone can help right now", + "report_flow.screen.false_info.subtitle": "Opinions, satire and good-faith debate are allowed. Unlawful defamation can be reported under the Digital Services Act.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinions, satire and good-faith debate are allowed.", + "report_flow.screen.false_info.title": "What's misleading about it?", + "report_flow.screen.harassment.title": "How is someone being targeted?", + "report_flow.screen.hate.title": "How does it attack people for who they are?", + "report_flow.screen.impersonation.subtitle": "Clearly labelled parody or roleplay is allowed.", + "report_flow.screen.impersonation.title": "Who's being impersonated, or is it a scam?", + "report_flow.screen.minor_risk.title": "How is this person putting a minor at risk?", + "report_flow.screen.minor_risk_guild.title": "How does this community put minors at risk?", + "report_flow.screen.minor_sexual.subtitle": "Drawn, written or AI content counts when a character is described as a minor or is clearly prepubescent, including lolicon, shotacon and cub.", + "report_flow.screen.minor_sexual.title": "What did you see involving a minor?", + "report_flow.screen.minor_sexual_guild.title": "What did you see involving minors?", + "report_flow.screen.private_info.subtitle": "Pick as many as you need. If an intimate photo shows someone under 18, go back and report it under Sexualising a minor.", + "report_flow.screen.private_info.title": "Which private details are involved?", + "report_flow.screen.profile_abuse.title": "What's harmful about their profile?", + "report_flow.screen.profile_hate_violence.title": "What does their profile show or promote?", + "report_flow.screen.profile_intro.options_heading": "Learn more", + "report_flow.screen.profile_intro.subtitle": "Tell us what's wrong with this profile. They won't be told who reported them.", + "report_flow.screen.profile_intro.title": "Report profile", + "report_flow.screen.profile_minor_sexual.title": "What in their profile involves a minor?", + "report_flow.screen.profile_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.profile_parts.title": "Which parts of their profile are a problem?", + "report_flow.screen.profile_private_info.title": "Which private details are in their profile?", + "report_flow.screen.profile_sexual.title": "Tell us about the sexual content in their profile", + "report_flow.screen.profile_threat.title": "How does their profile involve violence?", + "report_flow.screen.root_guild.subtitle": "Pick the closest match for what is going on in this community.", + "report_flow.screen.root_guild.title": "What's wrong with this community?", + "report_flow.screen.root_message.subtitle": "Pick the closest match. You can check everything before it is sent.", + "report_flow.screen.root_message.title": "Report message", + "report_flow.screen.root_user.subtitle": "Pick the closest match for what is in their profile.", + "report_flow.screen.root_user.title": "What's wrong with their profile?", + "report_flow.screen.self_harm.subtitle": "Nobody is punished for saying they are struggling. Telling us you are worried helps us offer support.", + "report_flow.screen.self_harm.title": "What did they say or share?", + "report_flow.screen.self_harm_guild.title": "What are members encouraging?", + "report_flow.screen.self_harm_profile.title": "What does their profile say or show?", + "report_flow.screen.sexual.subtitle": "If anyone shown or involved is under 18, choose Sexualising a minor.", + "report_flow.screen.sexual.title": "Tell us about the sexual content", + "report_flow.screen.sexual_guild.subtitle": "If anyone shown or involved is under 18, choose Sexualising minors.", + "report_flow.screen.sexual_guild.title": "Tell us about the sexual content in this community", + "report_flow.screen.something_else_guild.title": "What else is going on in this community?", + "report_flow.screen.something_else_message.title": "What else is going on?", + "report_flow.screen.something_else_user.title": "What else is wrong with this profile?", + "report_flow.screen.spam_kind_guild.title": "How is this community abusing the platform?", + "report_flow.screen.spam_profile.title": "How is the account being misused?", + "report_flow.screen.threat.title": "How does it involve violence?", + "report_flow.screen.violence_misinfo.title": "Which of these matches it?", + "report_flow.screen.violence_misinfo_guild.title": "Which of these happens in this community?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/es-419.json b/fluxer_api/src/api/content_i18n/weblate/locales/es-419.json index 80f67501e..ba544024b 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/es-419.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/es-419.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Canales de texto", "guild.default_category_voice": "Canales de voz", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nombre de usuario, nombre visible o apodo de la comunidad", + "report_flow.description.photo": "Lo que usan como avatar y banner", + "report_flow.description.profile_text": "Biografía, estado personalizado o pronombres", + "report_flow.label.abuse": "Contenido abusivo o dañino", + "report_flow.label.account_trading": "Venta de cuentas, o de inicios de sesión o datos de tarjeta robados", + "report_flow.label.account_trading_communities": "Compra o venta de cuentas o comunidades", + "report_flow.label.address": "Dirección particular o del trabajo", + "report_flow.label.adult_content_no_gate": "Contenido para adultos sin restricción de edad de 18+", + "report_flow.label.adult_content_profile": "Contenido explícito para adultos en su perfil", + "report_flow.label.adult_content_unmarked": "Contenido para adultos en un canal de la comunidad que no tiene restricciones de edad (18+)", + "report_flow.label.age_no_message": "No, no la menciona", + "report_flow.label.age_no_profile": "No, no la menciona", + "report_flow.label.age_yes_message": "Sí, menciona su edad", + "report_flow.label.age_yes_profile": "Sí, su perfil menciona su edad", + "report_flow.label.atrocity_denial": "Negación o celebración del Holocausto u otros genocidios", + "report_flow.label.ban_evasion": "Eludir un baneo con otra cuenta", + "report_flow.label.channel_names": "Nombres de canales", + "report_flow.label.community_banner": "Banner de la comunidad", + "report_flow.label.community_icon": "Ícono de la comunidad", + "report_flow.label.community_name": "Nombre de la comunidad", + "report_flow.label.conversion_therapy": "Promoción de terapia de conversión", + "report_flow.label.copyright": "Reclamo por derechos de autor o marcas comerciales", + "report_flow.label.crisis_lines": "Líneas de ayuda en crisis en tu país", + "report_flow.label.csam": "Imágenes o videos reales o generados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Listado en Descubrir", + "report_flow.label.dislike": "Simplemente no es para mí", + "report_flow.label.dsa": "Contenido ilegal en la UE (Reglamento de Servicios Digitales)", + "report_flow.label.eating_disorder_promotion": "Fomentar trastornos alimenticios", + "report_flow.label.eating_disorder_promotion_profile": "Su perfil promueve trastornos alimenticios", + "report_flow.label.email": "Dirección de correo electrónico", + "report_flow.label.emoji_stickers": "Emojis o stickers personalizados", + "report_flow.label.face_photo": "Foto de su cara", + "report_flow.label.fake_account": "Cuenta falsa, bot o abuso automatizado", + "report_flow.label.fake_account_profile": "Una cuenta falsa o engañosa", + "report_flow.label.false_claims": "Difundir mentiras para dañar la reputación de una persona específica", + "report_flow.label.false_info": "Difundir información falsa dañina", + "report_flow.label.financial": "Tarjeta, banco u otros datos financieros", + "report_flow.label.fraud": "Intentan estafar a la gente para quitarle dinero o cuentas", + "report_flow.label.fraud_guild": "Estafar a la gente para quitarle dinero o cuentas", + "report_flow.label.government_id": "Documento de identidad o número de identificación", + "report_flow.label.graphic_violence": "Violencia real mostrada para impactar, como gore o crueldad animal", + "report_flow.label.harassment": "Intimidación, acoso o acecho", + "report_flow.label.harassment_direct": "Atacar repetidamente a alguien con insultos o abusos", + "report_flow.label.harassment_guild": "Acoso, intimidación o acecho de personas", + "report_flow.label.harassment_profile": "Su perfil me acosa o ataca a mí o a otra persona", + "report_flow.label.harmful_false_claims": "Afirmaciones falsas que podrían causar daños graves en el mundo real", + "report_flow.label.hate": "Odio o discriminación contra las personas por quienes son", + "report_flow.label.hate_dehumanizing": "Comparar a las personas con animales, enfermedades o suciedad, o llamarlas menos que humanas", + "report_flow.label.hate_incitement": "Llamados a la violencia o la exclusión contra un grupo", + "report_flow.label.hate_other": "Otros ataques a personas por quienes son", + "report_flow.label.hate_slurs": "Insultos discriminatorios, símbolos de odio o estereotipos denigrantes", + "report_flow.label.hate_violence": "Odio, violencia o extremismo", + "report_flow.label.identity": "Orientación sexual, identidad de género o estado intersexual", + "report_flow.label.illegal_activity": "Otra actividad ilegal", + "report_flow.label.illegal_goods": "Venta de drogas, armas u otros artículos ilegales", + "report_flow.label.impersonation": "Hacerse pasar por alguien, o estafar a la gente", + "report_flow.label.impersonation_guild": "Fingir ser {product_name} u otra organización", + "report_flow.label.impersonation_organization": "Una empresa, marca o grupo", + "report_flow.label.impersonation_person": "Yo o alguien cercano a mí", + "report_flow.label.impersonation_public_figure": "Una persona conocida, como un creador de contenido o un político", + "report_flow.label.impersonation_staff": "Equipo o soporte de {product_name}", + "report_flow.label.intimate_image_abuse": "Imágenes íntimas compartidas sin consentimiento, incluyendo deepfakes, o una amenaza de compartirlas", + "report_flow.label.intimate_image_abuse_guild": "Compartir imágenes íntimas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imágenes íntimas de alguien compartidas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima o de desnudo", + "report_flow.label.invite_splash": "Fondo de invitación", + "report_flow.label.ip_address": "Dirección IP", + "report_flow.label.learn_more": "Lee las Normas de la Comunidad de {product_name}", + "report_flow.label.legal_name": "Nombre real o legal", + "report_flow.label.lgbtq_targeting": "Referirse deliberadamente a alguien con un género incorrecto, usar su nombre anterior o revelar su orientación o identidad sin su consentimiento, o negar su identidad", + "report_flow.label.malware_guild": "Distribuir malware o enlaces de phishing", + "report_flow.label.malware_phishing": "Intentos de phishing, malware o hacking", + "report_flow.label.member_activity": "Lo que los miembros publican o hacen allí", + "report_flow.label.metric_manipulation": "Falsificar el número de miembros o reacciones", + "report_flow.label.minor_contact": "Pedirle a un menor un encuentro en persona, o fotos o datos personales, de una manera que parezca depredadora", + "report_flow.label.minor_dating_community": "Es una comunidad para citas entre menores", + "report_flow.label.minor_fictional": "Contenido sexual dibujado, escrito o generado por IA de un niño ficticio", + "report_flow.label.minor_grooming": "Grooming o generar confianza inapropiada con un menor", + "report_flow.label.minor_grooming_guild": "Los miembros hacen grooming o generan confianza inapropiada con menores", + "report_flow.label.minor_in_adult_space": "Un menor está en un canal o comunidad para mayores de 18 años", + "report_flow.label.minor_in_adult_space_guild": "Se permiten menores en canales para mayores de 18 años", + "report_flow.label.minor_risk": "Poner en riesgo a un menor", + "report_flow.label.minor_risk_guild": "Poner en riesgo a menores", + "report_flow.label.minor_sexual": "Sexualización de un menor", + "report_flow.label.minor_sexual_contact": "Coquetear con un menor o enviarle mensajes sexuales", + "report_flow.label.minor_sexual_contact_guild": "Los miembros coquetean con menores o les envían mensajes sexuales", + "report_flow.label.minor_sexual_content": "Un menor comparte contenido sexual por sí mismo", + "report_flow.label.minor_sexual_content_guild": "Menores publican o envían contenido sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de un menor con contenido sexual", + "report_flow.label.minor_sexual_guild": "Sexualización de menores", + "report_flow.label.minor_sexualization": "Comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_guild": "Los miembros hacen comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentarios sexuales sobre menores en su perfil", + "report_flow.label.name": "Nombres", + "report_flow.label.other": "Algo no mencionado aquí", + "report_flow.label.other_identifying": "Otra información que podría identificar o localizar a alguien", + "report_flow.label.permits_violations": "Permite infracciones graves de las reglas", + "report_flow.label.phone": "Número de teléfono", + "report_flow.label.photo": "Fotos", + "report_flow.label.platform_abuse": "Extracción de datos, automatización u otro abuso de la plataforma", + "report_flow.label.private_conversation": "Mensajes privados, capturas de pantalla o grabaciones de llamadas", + "report_flow.label.private_info": "Compartir detalles privados de alguien", + "report_flow.label.private_info_profile": "Su perfil comparte detalles privados de alguien", + "report_flow.label.profile_text": "Texto del perfil", + "report_flow.label.raid": "Organizar o unirse a un ataque o acoso masivo", + "report_flow.label.raid_guild": "Organizar ataques o acosos masivos contra personas o comunidades", + "report_flow.label.rude_language": "Malas palabras o comentarios groseros", + "report_flow.label.self_harm": "Alguien podría autolesionarse, o está fomentando las autolesiones", + "report_flow.label.self_harm_graphic": "Imágenes gráficas de autolesiones", + "report_flow.label.self_harm_guild": "Los miembros incitan a otras personas a autolesionarse", + "report_flow.label.self_harm_pressure": "Presionar o desafiar a alguien para que se autolesione", + "report_flow.label.self_harm_pressure_guild": "Presionar o desafiar a las personas para que se autolesionen", + "report_flow.label.self_harm_profile": "Su perfil sugiere autolesiones o las fomenta", + "report_flow.label.self_harm_promotion": "Fomentar las autolesiones o compartir métodos", + "report_flow.label.self_harm_promotion_profile": "Su perfil fomenta las autolesiones", + "report_flow.label.sexual": "Contenido sexual", + "report_flow.label.sexual_exploitation": "Explotación sexual, coacción o trata de personas", + "report_flow.label.sexual_unwanted": "Imágenes o mensajes sexuales que no quería", + "report_flow.label.something_else": "Algo más", + "report_flow.label.spam": "Spam o anuncios no deseados", + "report_flow.label.spam_bulk": "Envío de spam o publicidad masiva", + "report_flow.label.spam_or_manipulation": "Spam o manipulación de la plataforma", + "report_flow.label.spam_profile": "Su perfil se utiliza para spam o publicidad", + "report_flow.label.suicide_promotion": "Fomentar el suicidio o compartir métodos", + "report_flow.label.suicide_promotion_profile": "Su perfil fomenta el suicidio", + "report_flow.label.synthetic_media": "Medios falsos o creados con IA presentados como reales", + "report_flow.label.terrorism": "Terrorismo o extremismo violento", + "report_flow.label.terrorism_guild": "Reclutamiento o promoción del terrorismo o extremismo violento", + "report_flow.label.threat": "Amenazas o llamados a la violencia", + "report_flow.label.threat_to_share": "Amenaza con compartirlo", + "report_flow.label.too_young": "Está por debajo de la edad mínima para usar {product_name}", + "report_flow.label.unwanted_contact": "Acecho o contacto repetido conmigo o con otra persona después de que se le pidió que parara, se le bloqueó o se le eliminó", + "report_flow.label.violence_glorification": "Glorificar la violencia del mundo real", + "report_flow.label.violence_incitement": "Fomentar la violencia o explicar cómo dañar a las personas", + "report_flow.label.violence_misinfo": "Violencia, extremismo o información falsa dañina", + "report_flow.label.violent_threat": "Decir que va a lastimar a alguien", + "report_flow.label.worried_profile": "Me preocupa su seguridad", + "report_flow.label.worried_self_harm": "Tengo miedo de que pueda autolesionarse", + "report_flow.label.worried_suicide": "Tengo miedo de que intente suicidarse", + "report_flow.notice.need_more_info.body": "Para revisarlo, necesitamos un mensaje donde diga su edad o deje claro que está por debajo de la edad mínima de {product_name}. Reporta ese mensaje en su lugar.", + "report_flow.notice.need_more_info.title": "Aún no podemos actuar", + "report_flow.notice.need_more_info_profile.body": "Para revisarlo, necesitamos ver dónde dice su edad o deja claro que está por debajo de la edad mínima de {product_name}. Reporta ese mensaje o perfil en su lugar.", + "report_flow.screen.abuse.title": "¿Qué involucra?", + "report_flow.screen.abuse_guild.title": "¿Qué están haciendo las personas en esta comunidad?", + "report_flow.screen.age_stated_message.title": "¿Este mensaje dice su edad?", + "report_flow.screen.age_stated_profile.title": "¿Su perfil indica su edad?", + "report_flow.screen.community_parts.subtitle": "Elige las que necesites.", + "report_flow.screen.community_parts.title": "¿Qué partes de la comunidad están involucradas?", + "report_flow.screen.crisis_support.subtitle": "Las líneas de ayuda en crisis ofrecen apoyo gratuito y confidencial.", + "report_flow.screen.crisis_support.title": "Alguien puede ayudar ahora mismo", + "report_flow.screen.false_info.subtitle": "Se permiten las opiniones, la sátira y el debate de buena fe. La difamación ilegal puede reportarse según el Reglamento de Servicios Digitales.", + "report_flow.screen.false_info.subtitle_self_hosted": "Se permiten las opiniones, la sátira y el debate de buena fe.", + "report_flow.screen.false_info.title": "¿Qué tiene de engañoso?", + "report_flow.screen.harassment.title": "¿Cómo están atacando a alguien?", + "report_flow.screen.hate.title": "¿Cómo ataca a las personas por quienes son?", + "report_flow.screen.impersonation.subtitle": "Se permite la parodia o el juego de rol claramente etiquetados.", + "report_flow.screen.impersonation.title": "¿Quién está siendo suplantado, o se trata de una estafa?", + "report_flow.screen.minor_risk.title": "¿Cómo está esta persona poniendo en riesgo a un menor?", + "report_flow.screen.minor_risk_guild.title": "¿Cómo pone esta comunidad en riesgo a los menores?", + "report_flow.screen.minor_sexual.subtitle": "El contenido dibujado, escrito o de IA cuenta cuando un personaje es descrito como menor o es claramente prepúber, incluyendo lolicon, shotacon y cub.", + "report_flow.screen.minor_sexual.title": "¿Qué viste relacionado con un menor?", + "report_flow.screen.minor_sexual_guild.title": "¿Qué viste relacionado con menores?", + "report_flow.screen.private_info.subtitle": "Selecciona todas las que necesites. Si una foto íntima muestra a alguien menor de 18 años, regresa y repórtala como «Sexualización de un menor».", + "report_flow.screen.private_info.title": "¿Qué detalles privados están involucrados?", + "report_flow.screen.profile_abuse.title": "¿Qué es dañino en su perfil?", + "report_flow.screen.profile_hate_violence.title": "¿Qué muestra o promueve su perfil?", + "report_flow.screen.profile_intro.options_heading": "Más información", + "report_flow.screen.profile_intro.subtitle": "Dinos qué está mal con este perfil. No le diremos a la persona quién la reportó.", + "report_flow.screen.profile_intro.title": "Reportar perfil", + "report_flow.screen.profile_minor_sexual.title": "¿Qué hay en su perfil que involucre a un menor?", + "report_flow.screen.profile_parts.subtitle": "Elige las que necesites.", + "report_flow.screen.profile_parts.title": "¿Qué partes de su perfil son un problema?", + "report_flow.screen.profile_private_info.title": "¿Qué detalles privados hay en su perfil?", + "report_flow.screen.profile_sexual.title": "Describe el contenido sexual en su perfil", + "report_flow.screen.profile_threat.title": "¿Cómo se relaciona su perfil con la violencia?", + "report_flow.screen.root_guild.subtitle": "Elige la opción más cercana a lo que ocurre en esta comunidad.", + "report_flow.screen.root_guild.title": "¿Qué le pasa a esta comunidad?", + "report_flow.screen.root_message.subtitle": "Elige la opción más cercana. Puedes revisar todo antes de que se envíe.", + "report_flow.screen.root_message.title": "Reportar mensaje", + "report_flow.screen.root_user.subtitle": "Elige la opción más cercana a lo que hay en su perfil.", + "report_flow.screen.root_user.title": "¿Qué le pasa a su perfil?", + "report_flow.screen.self_harm.subtitle": "Nadie es castigado por decir que está pasando por un mal momento. Decirnos que te preocupa esta situación nos ayuda a ofrecer apoyo.", + "report_flow.screen.self_harm.title": "¿Qué dijo o compartió?", + "report_flow.screen.self_harm_guild.title": "¿Qué fomentan los miembros?", + "report_flow.screen.self_harm_profile.title": "¿Qué dice o muestra su perfil?", + "report_flow.screen.sexual.subtitle": "Si alguien que aparece o está involucrado es menor de 18 años, elige «Sexualización de un menor».", + "report_flow.screen.sexual.title": "Describe el contenido sexual", + "report_flow.screen.sexual_guild.subtitle": "Si alguien que aparece o está involucrado es menor de 18 años, elige «Sexualización de menores».", + "report_flow.screen.sexual_guild.title": "Describe el contenido sexual en esta comunidad", + "report_flow.screen.something_else_guild.title": "¿Qué más está sucediendo en esta comunidad?", + "report_flow.screen.something_else_message.title": "¿Qué más está sucediendo?", + "report_flow.screen.something_else_user.title": "¿Qué más está mal en este perfil?", + "report_flow.screen.spam_kind_guild.title": "¿Cómo está abusando esta comunidad de la plataforma?", + "report_flow.screen.spam_profile.title": "¿Cómo se está haciendo mal uso de la cuenta?", + "report_flow.screen.threat.title": "¿Cómo se relaciona con la violencia?", + "report_flow.screen.violence_misinfo.title": "¿Cuál de estas opciones lo describe mejor?", + "report_flow.screen.violence_misinfo_guild.title": "¿Cuál de estas situaciones ocurre en esta comunidad?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/es-ES.json b/fluxer_api/src/api/content_i18n/weblate/locales/es-ES.json index c9bf98301..ada5665f3 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/es-ES.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/es-ES.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Canales de texto", "guild.default_category_voice": "Canales de voz", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nombre de usuario, nombre visible o apodo de la comunidad", + "report_flow.description.photo": "Lo que usan como avatar e imagen de banner", + "report_flow.description.profile_text": "Biografía, estado personalizado o pronombres", + "report_flow.label.abuse": "Contenido abusivo o dañino", + "report_flow.label.account_trading": "Venta de cuentas, o de credenciales de acceso o datos de tarjetas robados", + "report_flow.label.account_trading_communities": "Compra o venta de cuentas o comunidades", + "report_flow.label.address": "Dirección particular o lugar de trabajo", + "report_flow.label.adult_content_no_gate": "Contenido para adultos sin restricción de edad 18+", + "report_flow.label.adult_content_profile": "Contenido explícito para adultos en su perfil", + "report_flow.label.adult_content_unmarked": "Contenido para adultos en un canal de la comunidad que no tiene restricciones de edad (18+)", + "report_flow.label.age_no_message": "No, no lo menciona", + "report_flow.label.age_no_profile": "No, no lo menciona", + "report_flow.label.age_yes_message": "Sí, menciona su edad", + "report_flow.label.age_yes_profile": "Sí, su perfil menciona su edad", + "report_flow.label.atrocity_denial": "Negación o celebración del Holocausto u otros genocidios", + "report_flow.label.ban_evasion": "Eludir un veto con otra cuenta", + "report_flow.label.channel_names": "Nombres de canales", + "report_flow.label.community_banner": "Imagen de banner de la comunidad", + "report_flow.label.community_icon": "Icono de la comunidad", + "report_flow.label.community_name": "Nombre de la comunidad", + "report_flow.label.conversion_therapy": "Promoción de la terapia de conversión", + "report_flow.label.copyright": "Queja por derechos de autor o marca comercial", + "report_flow.label.crisis_lines": "Líneas de ayuda en crisis de tu país", + "report_flow.label.csam": "Imágenes o vídeos reales o generados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Ficha en Descubrir", + "report_flow.label.dislike": "Simplemente no es para mí", + "report_flow.label.dsa": "Contenido ilegal en la UE (Reglamento de Servicios Digitales)", + "report_flow.label.eating_disorder_promotion": "Fomentar trastornos de la conducta alimentaria", + "report_flow.label.eating_disorder_promotion_profile": "Su perfil promueve trastornos de la conducta alimentaria", + "report_flow.label.email": "Dirección de correo electrónico", + "report_flow.label.emoji_stickers": "Emojis o pegatinas personalizados", + "report_flow.label.face_photo": "Foto de su cara", + "report_flow.label.fake_account": "Cuenta falsa, bot o abuso automatizado", + "report_flow.label.fake_account_profile": "Una cuenta falsa o engañosa", + "report_flow.label.false_claims": "Difundir mentiras para dañar la reputación de una persona específica", + "report_flow.label.false_info": "Difundir información falsa dañina", + "report_flow.label.financial": "Tarjeta, banco u otros datos financieros", + "report_flow.label.fraud": "Intentan estafar a la gente para quitarles dinero o cuentas", + "report_flow.label.fraud_guild": "Estafar a la gente para quitarles dinero o cuentas", + "report_flow.label.government_id": "Documento de identidad o número de identificación", + "report_flow.label.graphic_violence": "Violencia real mostrada para impactar, como gore o crueldad animal", + "report_flow.label.harassment": "Intimidación, acoso o acecho", + "report_flow.label.harassment_direct": "Atacar repetidamente a alguien con insultos o abusos", + "report_flow.label.harassment_guild": "Acoso, intimidación o acecho a personas", + "report_flow.label.harassment_profile": "Su perfil me acosa o ataca a mí o a otra persona", + "report_flow.label.harmful_false_claims": "Afirmaciones falsas que podrían causar graves daños en el mundo real", + "report_flow.label.hate": "Odio o discriminación contra las personas por quienes son", + "report_flow.label.hate_dehumanizing": "Comparar a las personas con animales, enfermedades o suciedad, o llamarlas menos que humanas", + "report_flow.label.hate_incitement": "Llamamientos a la violencia o la exclusión contra un grupo", + "report_flow.label.hate_other": "Otros ataques a personas por quienes son", + "report_flow.label.hate_slurs": "Insultos discriminatorios, símbolos de odio o estereotipos denigrantes", + "report_flow.label.hate_violence": "Odio, violencia o extremismo", + "report_flow.label.identity": "Orientación sexual, identidad de género o condición intersexual", + "report_flow.label.illegal_activity": "Otra actividad ilegal", + "report_flow.label.illegal_goods": "Venta de drogas, armas u otros artículos ilegales", + "report_flow.label.impersonation": "Hacerse pasar por alguien o estafar a la gente", + "report_flow.label.impersonation_guild": "Hacerse pasar por {product_name} u otra organización", + "report_flow.label.impersonation_organization": "Una empresa, marca o grupo", + "report_flow.label.impersonation_person": "Yo o alguien cercano a mí", + "report_flow.label.impersonation_public_figure": "Una persona conocida, como un creador o un político", + "report_flow.label.impersonation_staff": "Personal o soporte de {product_name}", + "report_flow.label.intimate_image_abuse": "Imágenes íntimas compartidas sin consentimiento, incluyendo deepfakes, o la amenaza de compartirlas", + "report_flow.label.intimate_image_abuse_guild": "Compartir imágenes íntimas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imágenes íntimas de alguien compartidas sin consentimiento, incluyendo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima o de desnudo", + "report_flow.label.invite_splash": "Imagen de fondo de la invitación", + "report_flow.label.ip_address": "Dirección IP", + "report_flow.label.learn_more": "Lee las Normas de la comunidad de {product_name}", + "report_flow.label.legal_name": "Nombre real o legal", + "report_flow.label.lgbtq_targeting": "Referirse a alguien deliberadamente con un género incorrecto, usar su nombre anterior (deadnaming), revelar su orientación o identidad sin su consentimiento, o negar su identidad", + "report_flow.label.malware_guild": "Distribuir malware o enlaces de phishing", + "report_flow.label.malware_phishing": "Phishing, malware o intentos de hackeo", + "report_flow.label.member_activity": "Lo que los miembros publican o hacen allí", + "report_flow.label.metric_manipulation": "Falsificar el número de miembros o de reacciones", + "report_flow.label.minor_contact": "Proponer a un menor quedar en persona, o pedirle fotos o datos personales, de una forma que parece propia de un depredador", + "report_flow.label.minor_dating_community": "Es una comunidad para citas entre menores", + "report_flow.label.minor_fictional": "Contenido sexual dibujado, escrito o generado por IA de un niño ficticio", + "report_flow.label.minor_grooming": "Grooming o creación de una confianza inapropiada con un menor", + "report_flow.label.minor_grooming_guild": "Los miembros hacen grooming a menores o se ganan de forma inapropiada su confianza", + "report_flow.label.minor_in_adult_space": "Un menor está en un canal o comunidad para mayores de 18 años", + "report_flow.label.minor_in_adult_space_guild": "Se permiten menores en canales para mayores de 18 años", + "report_flow.label.minor_risk": "Poner en riesgo a un menor", + "report_flow.label.minor_risk_guild": "Poner en riesgo a menores", + "report_flow.label.minor_sexual": "Sexualización de un menor", + "report_flow.label.minor_sexual_contact": "Coquetear con un menor o enviarle mensajes de índole sexual", + "report_flow.label.minor_sexual_contact_guild": "Los miembros coquetean con menores o les envían mensajes de índole sexual", + "report_flow.label.minor_sexual_content": "Un menor comparte contenido sexual por sí mismo", + "report_flow.label.minor_sexual_content_guild": "Los menores publican o envían contenido sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de un menor con contenido sexual", + "report_flow.label.minor_sexual_guild": "Sexualización de menores", + "report_flow.label.minor_sexualization": "Comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_guild": "Los miembros hacen comentarios sexuales sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentarios sexuales sobre menores en su perfil", + "report_flow.label.name": "Nombres", + "report_flow.label.other": "Algo no incluido aquí", + "report_flow.label.other_identifying": "Otra información que podría identificar o localizar a alguien", + "report_flow.label.permits_violations": "Permite infracciones graves de las normas", + "report_flow.label.phone": "Número de teléfono", + "report_flow.label.photo": "Fotos", + "report_flow.label.platform_abuse": "Extracción de datos, automatización u otro abuso de la plataforma", + "report_flow.label.private_conversation": "Mensajes privados, capturas de pantalla o grabaciones de llamadas", + "report_flow.label.private_info": "Compartir detalles privados de alguien", + "report_flow.label.private_info_profile": "Su perfil comparte detalles privados de alguien", + "report_flow.label.profile_text": "Texto del perfil", + "report_flow.label.raid": "Organizar o unirse a un ataque o acoso masivo", + "report_flow.label.raid_guild": "Organizar ataques o acosos masivos contra personas o comunidades", + "report_flow.label.rude_language": "Lenguaje soez o comentarios groseros", + "report_flow.label.self_harm": "Alguien podría hacerse daño o está fomentando las autolesiones", + "report_flow.label.self_harm_graphic": "Imágenes gráficas de autolesiones", + "report_flow.label.self_harm_guild": "Los miembros incitan a otros a hacerse daño", + "report_flow.label.self_harm_pressure": "Presionar o desafiar a alguien para que se autolesione", + "report_flow.label.self_harm_pressure_guild": "Presionar o desafiar a la gente para que se autolesione", + "report_flow.label.self_harm_profile": "Su perfil sugiere autolesiones o las fomenta", + "report_flow.label.self_harm_promotion": "Fomentar las autolesiones o compartir métodos", + "report_flow.label.self_harm_promotion_profile": "Su perfil fomenta las autolesiones", + "report_flow.label.sexual": "Contenido sexual", + "report_flow.label.sexual_exploitation": "Explotación sexual, coacción o trata de personas", + "report_flow.label.sexual_unwanted": "Imágenes o mensajes sexuales que no quería", + "report_flow.label.something_else": "Algo más", + "report_flow.label.spam": "Spam o anuncios no deseados", + "report_flow.label.spam_bulk": "Envío de spam o publicidad masiva", + "report_flow.label.spam_or_manipulation": "Spam o manipulación de la plataforma", + "report_flow.label.spam_profile": "Su perfil se utiliza para spam o publicidad", + "report_flow.label.suicide_promotion": "Fomentar el suicidio o compartir métodos", + "report_flow.label.suicide_promotion_profile": "Su perfil fomenta el suicidio", + "report_flow.label.synthetic_media": "Contenido multimedia falso o creado con IA presentado como real", + "report_flow.label.terrorism": "Terrorismo o extremismo violento", + "report_flow.label.terrorism_guild": "Reclutamiento o promoción del terrorismo o el extremismo violento", + "report_flow.label.threat": "Amenazas o llamamientos a la violencia", + "report_flow.label.threat_to_share": "Amenaza con compartirlo", + "report_flow.label.too_young": "Está por debajo de la edad mínima para usar {product_name}", + "report_flow.label.unwanted_contact": "Acecho o contacto repetido conmigo o con otra persona después de que se le haya pedido que pare, se le haya bloqueado o se le haya expulsado", + "report_flow.label.violence_glorification": "Glorificar la violencia del mundo real", + "report_flow.label.violence_incitement": "Fomentar la violencia o explicar cómo dañar a las personas", + "report_flow.label.violence_misinfo": "Violencia, extremismo o información falsa dañina", + "report_flow.label.violent_threat": "Decir que va a hacer daño a alguien", + "report_flow.label.worried_profile": "Me preocupa su seguridad", + "report_flow.label.worried_self_harm": "Tengo miedo de que pueda hacerse daño", + "report_flow.label.worried_suicide": "Tengo miedo de que intente suicidarse", + "report_flow.notice.need_more_info.body": "Para revisarlo, necesitamos un mensaje en el que diga cuántos años tiene o deje claro que no alcanza la edad mínima de {product_name}. Denuncia ese mensaje en su lugar.", + "report_flow.notice.need_more_info.title": "Aún no podemos actuar", + "report_flow.notice.need_more_info_profile.body": "Para revisarlo, necesitamos ver dónde dice cuántos años tiene o deja claro que no alcanza la edad mínima de {product_name}. Denuncia ese mensaje o perfil en su lugar.", + "report_flow.screen.abuse.title": "¿En qué consiste?", + "report_flow.screen.abuse_guild.title": "¿Qué están haciendo las personas de esta comunidad?", + "report_flow.screen.age_stated_message.title": "¿Este mensaje dice cuántos años tiene?", + "report_flow.screen.age_stated_profile.title": "¿Dice su perfil cuántos años tiene?", + "report_flow.screen.community_parts.subtitle": "Selecciona tantas como necesites.", + "report_flow.screen.community_parts.title": "¿Qué partes de la comunidad están involucradas?", + "report_flow.screen.crisis_support.subtitle": "Las líneas de ayuda en crisis ofrecen apoyo gratuito y confidencial.", + "report_flow.screen.crisis_support.title": "Alguien puede ayudar ahora mismo", + "report_flow.screen.false_info.subtitle": "Se permiten las opiniones, la sátira y el debate de buena fe. La difamación ilegal puede denunciarse en virtud del Reglamento de Servicios Digitales (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Se permiten las opiniones, la sátira y el debate de buena fe.", + "report_flow.screen.false_info.title": "¿Qué tiene de engañoso?", + "report_flow.screen.harassment.title": "¿Cómo se está atacando a alguien?", + "report_flow.screen.hate.title": "¿Cómo ataca a las personas por quienes son?", + "report_flow.screen.impersonation.subtitle": "Se permite la parodia o el juego de rol claramente etiquetados.", + "report_flow.screen.impersonation.title": "¿A quién se suplanta o es una estafa?", + "report_flow.screen.minor_risk.title": "¿Cómo está poniendo esta persona en riesgo a un menor?", + "report_flow.screen.minor_risk_guild.title": "¿Cómo pone esta comunidad en riesgo a los menores?", + "report_flow.screen.minor_sexual.subtitle": "El contenido dibujado, escrito o generado por IA cuenta cuando un personaje es descrito como menor o es claramente prepúber, incluyendo lolicon, shotacon y cub.", + "report_flow.screen.minor_sexual.title": "¿Qué has visto relacionado con un menor?", + "report_flow.screen.minor_sexual_guild.title": "¿Qué has visto relacionado con menores?", + "report_flow.screen.private_info.subtitle": "Selecciona tantas como necesites. Si una foto íntima muestra a alguien menor de 18 años, vuelve atrás y denúnciala en «Sexualización de un menor».", + "report_flow.screen.private_info.title": "¿Qué detalles privados están involucrados?", + "report_flow.screen.profile_abuse.title": "¿Qué tiene de perjudicial su perfil?", + "report_flow.screen.profile_hate_violence.title": "¿Qué muestra o promueve su perfil?", + "report_flow.screen.profile_intro.options_heading": "Más información", + "report_flow.screen.profile_intro.subtitle": "Cuéntanos qué va mal en este perfil. No se le dirá a la persona quién la ha denunciado.", + "report_flow.screen.profile_intro.title": "Denunciar perfil", + "report_flow.screen.profile_minor_sexual.title": "¿Qué hay en su perfil relacionado con un menor?", + "report_flow.screen.profile_parts.subtitle": "Selecciona tantas como necesites.", + "report_flow.screen.profile_parts.title": "¿Qué partes de su perfil son un problema?", + "report_flow.screen.profile_private_info.title": "¿Qué detalles privados hay en su perfil?", + "report_flow.screen.profile_sexual.title": "Cuéntanos sobre el contenido sexual de su perfil", + "report_flow.screen.profile_threat.title": "¿Cómo se relaciona su perfil con la violencia?", + "report_flow.screen.root_guild.subtitle": "Selecciona la opción que mejor describa lo que ocurre en esta comunidad.", + "report_flow.screen.root_guild.title": "¿Qué problema hay en esta comunidad?", + "report_flow.screen.root_message.subtitle": "Selecciona la opción que mejor se ajuste. Puedes revisar todo antes de enviarlo.", + "report_flow.screen.root_message.title": "Denunciar mensaje", + "report_flow.screen.root_user.subtitle": "Selecciona la opción que mejor describa el contenido de su perfil.", + "report_flow.screen.root_user.title": "¿Qué problema hay en su perfil?", + "report_flow.screen.self_harm.subtitle": "Nadie es castigado por decir que está pasando por un mal momento. Decirnos que te preocupa nos ayuda a ofrecerte apoyo.", + "report_flow.screen.self_harm.title": "¿Qué dijo o compartió?", + "report_flow.screen.self_harm_guild.title": "¿Qué fomentan los miembros?", + "report_flow.screen.self_harm_profile.title": "¿Qué dice o muestra su perfil?", + "report_flow.screen.sexual.subtitle": "Si alguna persona que aparece o está involucrada es menor de 18 años, elige «Sexualización de un menor».", + "report_flow.screen.sexual.title": "Cuéntanos sobre el contenido sexual", + "report_flow.screen.sexual_guild.subtitle": "Si alguna persona que aparece o está involucrada es menor de 18 años, elige «Sexualización de menores».", + "report_flow.screen.sexual_guild.title": "Cuéntanos sobre el contenido sexual de esta comunidad", + "report_flow.screen.something_else_guild.title": "¿Qué más ocurre en esta comunidad?", + "report_flow.screen.something_else_message.title": "¿Qué más ocurre?", + "report_flow.screen.something_else_user.title": "¿Qué otro problema hay en este perfil?", + "report_flow.screen.spam_kind_guild.title": "¿Cómo abusa esta comunidad de la plataforma?", + "report_flow.screen.spam_profile.title": "¿Cómo se está usando mal la cuenta?", + "report_flow.screen.threat.title": "¿Cómo se relaciona con la violencia?", + "report_flow.screen.violence_misinfo.title": "¿Cuál de estas opciones lo describe?", + "report_flow.screen.violence_misinfo_guild.title": "¿Cuál de estas situaciones ocurre en esta comunidad?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/fi.json b/fluxer_api/src/api/content_i18n/weblate/locales/fi.json index 238cc9b97..68ae4507c 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/fi.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/fi.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Tekstikanavat", "guild.default_category_voice": "Äänikanavat", "guild.default_channel_text": "yleinen", - "guild.default_channel_voice": "Yleinen" + "guild.default_channel_voice": "Yleinen", + "report_flow.description.name": "Käyttäjänimi, näyttönimi tai yhteisön lempinimi", + "report_flow.description.photo": "Heidän profiilikuvansa ja bannerinsa", + "report_flow.description.profile_text": "Kuvaus, mukautettu tila tai pronominit", + "report_flow.label.abuse": "Haitallinen tai loukkaava sisältö", + "report_flow.label.account_trading": "Tilien myynti tai varastetut kirjautumistiedot tai korttitiedot", + "report_flow.label.account_trading_communities": "Tilien tai yhteisöjen ostaminen tai myyminen", + "report_flow.label.address": "Kotiosoite tai työpaikka", + "report_flow.label.adult_content_no_gate": "Aikuisille tarkoitettu sisältö ilman 18+ ikärajoitusta", + "report_flow.label.adult_content_profile": "Seksuaalisesti avointa aikuisille tarkoitettua sisältöä profiilissa", + "report_flow.label.adult_content_unmarked": "Aikuisille tarkoitettua sisältöä yhteisön kanavalla, jota ei ole merkitty ikärajoitetuksi (18+)", + "report_flow.label.age_no_message": "Ei, siinä ei mainita ikää", + "report_flow.label.age_no_profile": "Ei, profiilissa ei mainita ikää", + "report_flow.label.age_yes_message": "Kyllä, siinä mainitaan heidän ikänsä", + "report_flow.label.age_yes_profile": "Kyllä, heidän profiilissaan mainitaan ikä", + "report_flow.label.atrocity_denial": "Holokaustin tai muiden kansanmurhien kieltäminen tai juhlistaminen", + "report_flow.label.ban_evasion": "Käyttökiellon kiertäminen toisella tilillä", + "report_flow.label.channel_names": "Kanavien nimet", + "report_flow.label.community_banner": "Yhteisön banneri", + "report_flow.label.community_icon": "Yhteisön kuvake", + "report_flow.label.community_name": "Yhteisön nimi", + "report_flow.label.conversion_therapy": "Konversioterapian edistäminen", + "report_flow.label.copyright": "Tekijänoikeus- tai tavaramerkkivalitus", + "report_flow.label.crisis_lines": "Kriisipuhelimet maassasi", + "report_flow.label.csam": "Aitoja tai tekoälyn luomia kuvia tai videoita lapsiin kohdistuvasta seksuaalisesta hyväksikäytöstä", + "report_flow.label.discovery_listing": "Löydä-listaus", + "report_flow.label.dislike": "Se ei vain ole minun juttuni", + "report_flow.label.dsa": "Laiton sisältö EU:ssa (digipalvelusäädös, DSA)", + "report_flow.label.eating_disorder_promotion": "Syömishäiriöihin kannustaminen", + "report_flow.label.eating_disorder_promotion_profile": "Hänen profiilinsa edistää syömishäiriöitä", + "report_flow.label.email": "Sähköpostiosoite", + "report_flow.label.emoji_stickers": "Mukautetut emojit tai tarrat", + "report_flow.label.face_photo": "Kuva heidän kasvoistaan", + "report_flow.label.fake_account": "Väärennetty tili, botti tai automaattinen väärinkäyttö", + "report_flow.label.fake_account_profile": "Väärennetty tai harhaanjohtava tili", + "report_flow.label.false_claims": "Valheiden levittäminen tietyn henkilön maineen vahingoittamiseksi", + "report_flow.label.false_info": "Haitallisen väärän tiedon levittäminen", + "report_flow.label.financial": "Kortti-, pankki- tai muut taloudelliset tiedot", + "report_flow.label.fraud": "He yrittävät huijata ihmisiltä rahaa tai tilejä", + "report_flow.label.fraud_guild": "Rahan tai tilien huijaaminen ihmisiltä", + "report_flow.label.government_id": "Henkilöllisyystodistus tai sen numero", + "report_flow.label.graphic_violence": "Todellista väkivaltaa, joka on tarkoitettu järkyttämään, kuten raakoja verikuvia tai eläinrääkkäystä", + "report_flow.label.harassment": "Kiusaaminen, häirintä tai vainoaminen", + "report_flow.label.harassment_direct": "Jonkun toistuva solvaaminen tai loukkaava kohtelu", + "report_flow.label.harassment_guild": "Ihmisten häirintä, kiusaaminen tai vainoaminen", + "report_flow.label.harassment_profile": "Hänen profiilinsa häiritsee tai ottaa kohteekseen minut tai jonkun muun", + "report_flow.label.harmful_false_claims": "Väärät väitteet, jotka voivat aiheuttaa vakavaa todellista haittaa", + "report_flow.label.hate": "Viha tai syrjintä ihmisiä kohtaan heidän identiteettinsä vuoksi", + "report_flow.label.hate_dehumanizing": "Ihmisten vertaaminen eläimiin, sairauksiin tai saastaan tai väittäminen heidän olevan vähemmän kuin ihmisiä", + "report_flow.label.hate_incitement": "Kehotukset väkivaltaan tai ulossulkemiseen jotakin ryhmää kohtaan", + "report_flow.label.hate_other": "Muut hyökkäykset ihmisiä kohtaan heidän identiteettinsä vuoksi", + "report_flow.label.hate_slurs": "Halventavat nimitykset, vihaa lietsovat symbolit tai alentavat stereotypiat", + "report_flow.label.hate_violence": "Viha, väkivalta tai ekstremismi", + "report_flow.label.identity": "Seksuaalinen suuntautuminen, sukupuoli-identiteetti tai intersukupuolisuus", + "report_flow.label.illegal_activity": "Muu laiton toiminta", + "report_flow.label.illegal_goods": "Huumeiden, aseiden tai muiden laittomien tuotteiden myynti", + "report_flow.label.impersonation": "Toisena esiintyminen tai ihmisten huijaaminen", + "report_flow.label.impersonation_guild": "Esiintyminen palveluna {product_name} tai muuna organisaationa", + "report_flow.label.impersonation_organization": "Yritys, brändi tai ryhmä", + "report_flow.label.impersonation_person": "Minä tai joku läheinen", + "report_flow.label.impersonation_public_figure": "Tunnettu henkilö, kuten sisällöntuottaja tai poliitikko", + "report_flow.label.impersonation_staff": "Palvelun {product_name} henkilökunta tai tuki", + "report_flow.label.intimate_image_abuse": "Ilman suostumusta jaettuja intiimejä kuvia, mukaan lukien deepfake-kuvat, tai uhkaus jakaa niitä", + "report_flow.label.intimate_image_abuse_guild": "Intiimien kuvien jakaminen ilman suostumusta, mukaan lukien deepfake-kuvat", + "report_flow.label.intimate_image_abuse_profile": "Jonkun intiimejä kuvia, joita on jaettu ilman suostumusta, mukaan lukien deepfake-kuvat", + "report_flow.label.intimate_photo": "Intiimi tai alaston kuva", + "report_flow.label.invite_splash": "Kutsun taustakuva", + "report_flow.label.ip_address": "IP-osoite", + "report_flow.label.learn_more": "Lue palvelun {product_name} yhteisöohjeet", + "report_flow.label.legal_name": "Oikea tai virallinen nimi", + "report_flow.label.lgbtq_targeting": "Jonkun tahallinen väärällä sukupuolella puhuttelu, entisen nimen käyttö tai kaapista ulos pakottaminen taikka hänen identiteettinsä kieltäminen", + "report_flow.label.malware_guild": "Haittaohjelmien tai tietojenkalastelulinkkien jakaminen", + "report_flow.label.malware_phishing": "Tietojenkalastelu-, haittaohjelma- tai hakkerointiyritykset", + "report_flow.label.member_activity": "Mitä jäsenet julkaisevat tai tekevät siellä", + "report_flow.label.metric_manipulation": "Jäsen- tai reaktiomäärien väärentäminen", + "report_flow.label.minor_contact": "Alaikäisen pyytäminen tapaamiseen tai valokuvien tai henkilötietojen pyytäminen tavalla, joka viittaa hyväksikäyttöaikeisiin", + "report_flow.label.minor_dating_community": "Se on yhteisö alaikäisten väliselle deittailulle", + "report_flow.label.minor_fictional": "Piirretty, kirjoitettu tai tekoälyn luoma seksuaalinen sisältö kuvitteellisesta lapsesta", + "report_flow.label.minor_grooming": "Alaikäisen groomaus tai epäasiallisen luottamuksen rakentaminen alaikäiseen", + "report_flow.label.minor_grooming_guild": "Jäsenet groomaavat alaikäisiä tai rakentavat epäasiallista luottamusta alaikäisiin", + "report_flow.label.minor_in_adult_space": "Alaikäinen on ikärajoitetulla (18+) kanavalla tai yhteisössä", + "report_flow.label.minor_in_adult_space_guild": "Alaikäisten sallitaan olla ikärajoitetuilla (18+) kanavilla", + "report_flow.label.minor_risk": "Alaikäisen vaarantaminen", + "report_flow.label.minor_risk_guild": "Alaikäisten vaarantaminen", + "report_flow.label.minor_sexual": "Alaikäisen seksualisointi", + "report_flow.label.minor_sexual_contact": "Alaikäisen kanssa flirttailu tai seksuaalinen viestittely", + "report_flow.label.minor_sexual_contact_guild": "Jäsenet flirttailevat alaikäisten kanssa tai viestittelevät heille seksuaalisesti", + "report_flow.label.minor_sexual_content": "Alaikäinen jakaa itse seksuaalista sisältöä", + "report_flow.label.minor_sexual_content_guild": "Alaikäiset julkaisevat tai lähettävät seksuaalista sisältöä", + "report_flow.label.minor_sexual_content_profile": "Alaikäisen profiili, jossa on seksuaalista sisältöä", + "report_flow.label.minor_sexual_guild": "Alaikäisten seksualisointi", + "report_flow.label.minor_sexualization": "Seksuaaliset kommentit alaikäisistä", + "report_flow.label.minor_sexualization_guild": "Jäsenet tekevät seksuaalisia kommentteja alaikäisistä", + "report_flow.label.minor_sexualization_profile": "Seksuaaliset kommentit alaikäisistä heidän profiilissaan", + "report_flow.label.name": "Nimet", + "report_flow.label.other": "Jotain, mitä ei ole lueteltu tässä", + "report_flow.label.other_identifying": "Muut tiedot, jotka voisivat tunnistaa tai paikantaa jonkun", + "report_flow.label.permits_violations": "Se sallii vakavat sääntörikkomukset", + "report_flow.label.phone": "Puhelinnumero", + "report_flow.label.photo": "Kuvat", + "report_flow.label.platform_abuse": "Tietojen kerääminen, automaatio tai muu alustan väärinkäyttö", + "report_flow.label.private_conversation": "Yksityisviestit, kuvakaappaukset tai puhelutallenteet", + "report_flow.label.private_info": "Jonkun yksityisten tietojen jakaminen", + "report_flow.label.private_info_profile": "Heidän profiilissaan jaetaan jonkun yksityisiä tietoja", + "report_flow.label.profile_text": "Profiiliteksti", + "report_flow.label.raid": "Raidin tai joukkohyökkäyksen järjestäminen tai siihen liittyminen", + "report_flow.label.raid_guild": "Raidien tai joukkohyökkäysten järjestäminen ihmisiä tai yhteisöjä vastaan", + "report_flow.label.rude_language": "Kiroilu tai epäkohteliaat huomautukset", + "report_flow.label.self_harm": "Joku saattaa vahingoittaa itseään, tai joku kannustaa itsensä vahingoittamiseen", + "report_flow.label.self_harm_graphic": "Graafisia kuvia itsensä vahingoittamisesta", + "report_flow.label.self_harm_guild": "Jäsenet yllyttävät muita vahingoittamaan itseään", + "report_flow.label.self_harm_pressure": "Jonkun painostaminen tai haastaminen vahingoittamaan itseään", + "report_flow.label.self_harm_pressure_guild": "Ihmisten painostaminen tai haastaminen vahingoittamaan itseään", + "report_flow.label.self_harm_profile": "Heidän profiilinsa vihjaa itsensä vahingoittamiseen tai kannustaa siihen", + "report_flow.label.self_harm_promotion": "Itsensä vahingoittamiseen yllyttäminen tai keinojen jakaminen", + "report_flow.label.self_harm_promotion_profile": "Heidän profiilinsa kannustaa itsensä vahingoittamiseen", + "report_flow.label.sexual": "Seksuaalinen sisältö", + "report_flow.label.sexual_exploitation": "Seksuaalinen hyväksikäyttö, pakottaminen tai ihmiskauppa", + "report_flow.label.sexual_unwanted": "Seksuaalisia kuvia tai viestejä, joita en halunnut", + "report_flow.label.something_else": "Jotain muuta", + "report_flow.label.spam": "Roskaposti tai ei-toivotut mainokset", + "report_flow.label.spam_bulk": "Roskapostin tai mainosten lähettäminen massana", + "report_flow.label.spam_or_manipulation": "Roskaposti tai alustan manipulointi", + "report_flow.label.spam_profile": "Heidän profiiliaan käytetään roskapostiin tai mainostamiseen", + "report_flow.label.suicide_promotion": "Itsemurhaan yllyttäminen tai menetelmien jakaminen", + "report_flow.label.suicide_promotion_profile": "Hänen profiilinsa kannustaa itsemurhaan", + "report_flow.label.synthetic_media": "Väärennetty tai tekoälyn luoma media esitettynä todellisena", + "report_flow.label.terrorism": "Terrorismi tai väkivaltainen ekstremismi", + "report_flow.label.terrorism_guild": "Rekrytointi terrorismiin tai väkivaltaiseen ekstremismiin tai niiden edistäminen", + "report_flow.label.threat": "Uhkaukset tai kehotukset väkivaltaan", + "report_flow.label.threat_to_share": "He uhkaavat jakaa sen", + "report_flow.label.too_young": "He ovat alle palvelun {product_name} vähimmäisiän", + "report_flow.label.unwanted_contact": "Vainoaminen tai toistuva yhteydenotto minuun tai johonkuhun muuhun sen jälkeen, kun on pyydetty lopettamaan, estetty tai poistettu", + "report_flow.label.violence_glorification": "Todellisen väkivallan ihannointi", + "report_flow.label.violence_incitement": "Väkivaltaan kannustaminen tai selittäminen, miten ihmisiä vahingoitetaan", + "report_flow.label.violence_misinfo": "Väkivalta, ekstremismi tai haitallinen väärä tieto", + "report_flow.label.violent_threat": "Sen sanominen, että aikoo vahingoittaa jotakuta", + "report_flow.label.worried_profile": "Olen huolissani heidän turvallisuudestaan", + "report_flow.label.worried_self_harm": "Pelkään, että he saattavat vahingoittaa itseään", + "report_flow.label.worried_suicide": "Pelkään, että he saattavat yrittää itsemurhaa", + "report_flow.notice.need_more_info.body": "Tarkistaaksemme tämän tarvitsemme viestin, jossa he kertovat ikänsä tai tekevät selväksi, että ovat alle palvelun {product_name} vähimmäisiän. Ilmoita sen sijaan kyseinen viesti.", + "report_flow.notice.need_more_info.title": "Emme voi vielä toimia tämän perusteella", + "report_flow.notice.need_more_info_profile.body": "Tämän tarkistamiseksi meidän on nähtävä, missä he kertovat ikänsä tai tekevät selväksi, että he ovat alle palvelun {product_name} vähimmäisiän. Ilmoita sen sijaan kyseinen viesti tai profiili.", + "report_flow.screen.abuse.title": "Mistä on kyse?", + "report_flow.screen.abuse_guild.title": "Mitä yhteisön jäsenet tekevät?", + "report_flow.screen.age_stated_message.title": "Mainitaanko tässä viestissä heidän ikänsä?", + "report_flow.screen.age_stated_profile.title": "Mainitaanko heidän profiilissaan heidän ikänsä?", + "report_flow.screen.community_parts.subtitle": "Valitse niin monta kuin tarvitset.", + "report_flow.screen.community_parts.title": "Mitkä yhteisön osat liittyvät asiaan?", + "report_flow.screen.crisis_support.subtitle": "Kriisipuhelimet tarjoavat ilmaista, luottamuksellista tukea.", + "report_flow.screen.crisis_support.title": "Joku voi auttaa juuri nyt", + "report_flow.screen.false_info.subtitle": "Mielipiteet, satiiri ja hyvässä tarkoituksessa käyty keskustelu ovat sallittuja. Laittomasta kunnianloukkauksesta voi ilmoittaa digipalvelusäädöksen (DSA) nojalla.", + "report_flow.screen.false_info.subtitle_self_hosted": "Mielipiteet, satiiri ja hyvässä tarkoituksessa käyty keskustelu ovat sallittuja.", + "report_flow.screen.false_info.title": "Mikä siinä on harhaanjohtavaa?", + "report_flow.screen.harassment.title": "Miten joku joutuu häirinnän kohteeksi?", + "report_flow.screen.hate.title": "Miten se hyökkää ihmisiä vastaan heidän identiteettinsä vuoksi?", + "report_flow.screen.impersonation.subtitle": "Selkeästi merkitty parodia tai roolipeli on sallittua.", + "report_flow.screen.impersonation.title": "Kenenä joku esiintyy, vai onko kyseessä huijaus?", + "report_flow.screen.minor_risk.title": "Miten tämä henkilö vaarantaa alaikäisen?", + "report_flow.screen.minor_risk_guild.title": "Miten tämä yhteisö vaarantaa alaikäisiä?", + "report_flow.screen.minor_sexual.subtitle": "Piirretty, kirjoitettu tai tekoälysisältö lasketaan mukaan, kun hahmoa kuvataan alaikäiseksi tai se on selvästi esipuberteetti-ikäinen, mukaan lukien lolicon, shotacon ja cub.", + "report_flow.screen.minor_sexual.title": "Mitä näit alaikäiseen liittyen?", + "report_flow.screen.minor_sexual_guild.title": "Mitä näit alaikäisiin liittyen?", + "report_flow.screen.private_info.subtitle": "Valitse niin monta kuin tarvitset. Jos intiimi kuva esittää alle 18-vuotiasta, palaa takaisin ja ilmoita se kohdassa ”Alaikäisen seksualisointi”.", + "report_flow.screen.private_info.title": "Mitä yksityisiä tietoja liittyy asiaan?", + "report_flow.screen.profile_abuse.title": "Mikä heidän profiilissaan on haitallista?", + "report_flow.screen.profile_hate_violence.title": "Mitä heidän profiilissaan näkyy tai mitä se edistää?", + "report_flow.screen.profile_intro.options_heading": "Lue lisää", + "report_flow.screen.profile_intro.subtitle": "Kerro meille, mikä tässä profiilissa on vialla. Heille ei kerrota, kuka ilmoitti.", + "report_flow.screen.profile_intro.title": "Ilmoita profiilista", + "report_flow.screen.profile_minor_sexual.title": "Mitä heidän profiilissaan liittyy alaikäiseen?", + "report_flow.screen.profile_parts.subtitle": "Valitse niin monta kuin tarvitset.", + "report_flow.screen.profile_parts.title": "Mitkä heidän profiilinsa osat ovat ongelmallisia?", + "report_flow.screen.profile_private_info.title": "Mitä yksityisiä tietoja heidän profiilissaan on?", + "report_flow.screen.profile_sexual.title": "Kerro seksuaalisesta sisällöstä heidän profiilissaan", + "report_flow.screen.profile_threat.title": "Miten heidän profiilinsa liittyy väkivaltaan?", + "report_flow.screen.root_guild.subtitle": "Valitse sopivin vaihtoehto sille, mitä tässä yhteisössä tapahtuu.", + "report_flow.screen.root_guild.title": "Mikä tässä yhteisössä on vialla?", + "report_flow.screen.root_message.subtitle": "Valitse sopivin vaihtoehto. Voit tarkistaa kaiken ennen lähettämistä.", + "report_flow.screen.root_message.title": "Ilmoita viestistä", + "report_flow.screen.root_user.subtitle": "Valitse sopivin vaihtoehto sille, mitä heidän profiilissaan on.", + "report_flow.screen.root_user.title": "Mikä heidän profiilissaan on vialla?", + "report_flow.screen.self_harm.subtitle": "Ketään ei rangaista siitä, että kertoo voivansa huonosti. Kun kerrot meille olevasi huolissasi, voimme tarjota tukea.", + "report_flow.screen.self_harm.title": "Mitä he sanoivat tai jakoivat?", + "report_flow.screen.self_harm_guild.title": "Mihin jäsenet kannustavat?", + "report_flow.screen.self_harm_profile.title": "Mitä heidän profiilissaan sanotaan tai näytetään?", + "report_flow.screen.sexual.subtitle": "Jos joku esiintyvistä tai osallisista on alle 18-vuotias, valitse ”Alaikäisen seksualisointi”.", + "report_flow.screen.sexual.title": "Kerro seksuaalisesta sisällöstä", + "report_flow.screen.sexual_guild.subtitle": "Jos joku esiintyvistä tai osallisista on alle 18-vuotias, valitse ”Alaikäisten seksualisointi”.", + "report_flow.screen.sexual_guild.title": "Kerro yhteisön seksuaalisesta sisällöstä", + "report_flow.screen.something_else_guild.title": "Mitä muuta tässä yhteisössä tapahtuu?", + "report_flow.screen.something_else_message.title": "Mitä muuta on meneillään?", + "report_flow.screen.something_else_user.title": "Mitä muuta heidän profiilissaan on vialla?", + "report_flow.screen.spam_kind_guild.title": "Miten tämä yhteisö väärinkäyttää alustaa?", + "report_flow.screen.spam_profile.title": "Miten tiliä väärinkäytetään?", + "report_flow.screen.threat.title": "Miten se liittyy väkivaltaan?", + "report_flow.screen.violence_misinfo.title": "Mikä näistä vastaa sitä?", + "report_flow.screen.violence_misinfo_guild.title": "Mikä näistä tapahtuu tässä yhteisössä?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/fr.json b/fluxer_api/src/api/content_i18n/weblate/locales/fr.json index b7fca47d3..31dca8f95 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/fr.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/fr.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Salons textuels", "guild.default_category_voice": "Salons vocaux", "guild.default_channel_text": "général", - "guild.default_channel_voice": "Général" + "guild.default_channel_voice": "Général", + "report_flow.description.name": "Nom d'utilisateur, nom affiché ou surnom dans la communauté", + "report_flow.description.photo": "Ce que cette personne utilise comme avatar et bannière", + "report_flow.description.profile_text": "Bio, statut personnalisé ou pronoms", + "report_flow.label.abuse": "Contenu abusif ou nuisible", + "report_flow.label.account_trading": "Vente de comptes, ou identifiants ou coordonnées bancaires volés", + "report_flow.label.account_trading_communities": "Achat ou vente de comptes ou de communautés", + "report_flow.label.address": "Adresse du domicile ou du lieu de travail", + "report_flow.label.adult_content_no_gate": "Contenu pour adultes sans restriction d'âge (18+)", + "report_flow.label.adult_content_profile": "Contenu adulte explicite dans son profil", + "report_flow.label.adult_content_unmarked": "Contenu pour adultes dans un salon de communauté qui n'est pas marqué comme réservé aux adultes (18+)", + "report_flow.label.age_no_message": "Non, il n'est pas mentionné", + "report_flow.label.age_no_profile": "Non, son profil ne le mentionne pas", + "report_flow.label.age_yes_message": "Oui, son âge est mentionné", + "report_flow.label.age_yes_profile": "Oui, son profil mentionne son âge", + "report_flow.label.atrocity_denial": "Nier ou célébrer l'Holocauste ou d'autres génocides", + "report_flow.label.ban_evasion": "Contourner un bannissement avec un autre compte", + "report_flow.label.channel_names": "Noms des salons", + "report_flow.label.community_banner": "Bannière de la communauté", + "report_flow.label.community_icon": "Icône de la communauté", + "report_flow.label.community_name": "Nom de la communauté", + "report_flow.label.conversion_therapy": "Promotion de la thérapie de conversion", + "report_flow.label.copyright": "Plainte pour atteinte aux droits d’auteur ou de marque déposée", + "report_flow.label.crisis_lines": "Lignes d'écoute en cas de crise dans votre pays", + "report_flow.label.csam": "Images ou vidéos réelles ou générées par IA représentant des abus sexuels sur des enfants", + "report_flow.label.discovery_listing": "Fiche dans Découverte", + "report_flow.label.dislike": "Ce n'est pas pour moi", + "report_flow.label.dsa": "Contenu illégal dans l'UE (règlement sur les services numériques, DSA)", + "report_flow.label.eating_disorder_promotion": "Encourager les troubles du comportement alimentaire", + "report_flow.label.eating_disorder_promotion_profile": "Son profil fait la promotion des troubles du comportement alimentaire", + "report_flow.label.email": "Adresse e-mail", + "report_flow.label.emoji_stickers": "Emoji ou stickers personnalisés", + "report_flow.label.face_photo": "Photo de son visage", + "report_flow.label.fake_account": "Faux compte, bot ou abus automatisé", + "report_flow.label.fake_account_profile": "Un compte faux ou trompeur", + "report_flow.label.false_claims": "Diffuser des mensonges pour nuire à la réputation d'une personne spécifique", + "report_flow.label.false_info": "Diffusion de fausses informations nuisibles", + "report_flow.label.financial": "Carte, banque ou autres informations financières", + "report_flow.label.fraud": "Cette personne essaie d'escroquer des gens pour leur soutirer de l'argent ou des comptes", + "report_flow.label.fraud_guild": "Escroquer des personnes pour obtenir leur argent ou leurs comptes", + "report_flow.label.government_id": "Document d’identité ou numéro d’identification", + "report_flow.label.graphic_violence": "Violence réelle montrée pour choquer, comme du gore ou de la cruauté envers les animaux", + "report_flow.label.harassment": "Intimidation, harcèlement ou traque", + "report_flow.label.harassment_direct": "Cibler une personne de manière répétée avec des insultes ou des abus", + "report_flow.label.harassment_guild": "Harcèlement, intimidation ou traque de personnes", + "report_flow.label.harassment_profile": "Son profil me harcèle ou me cible, ou harcèle ou cible quelqu'un d'autre", + "report_flow.label.harmful_false_claims": "Fausses allégations pouvant causer de graves préjudices dans le monde réel", + "report_flow.label.hate": "Haine ou discrimination envers des personnes en raison de ce qu'elles sont", + "report_flow.label.hate_dehumanizing": "Comparer des personnes à des animaux, des maladies ou des saletés, ou les qualifier de sous-humains", + "report_flow.label.hate_incitement": "Appels à la violence ou à l'exclusion contre un groupe", + "report_flow.label.hate_other": "Autres attaques contre des personnes en raison de ce qu'elles sont", + "report_flow.label.hate_slurs": "Insultes, symboles haineux ou stéréotypes dégradants", + "report_flow.label.hate_violence": "Haine, violence ou extrémisme", + "report_flow.label.identity": "Orientation sexuelle, identité de genre ou statut intersexe", + "report_flow.label.illegal_activity": "Autre activité illégale", + "report_flow.label.illegal_goods": "Vente de drogues, d'armes ou d'autres articles illégaux", + "report_flow.label.impersonation": "Se faire passer pour quelqu'un d'autre ou escroquer des gens", + "report_flow.label.impersonation_guild": "Se faire passer pour {product_name} ou une autre organisation", + "report_flow.label.impersonation_organization": "Une entreprise, une marque ou un groupe", + "report_flow.label.impersonation_person": "Moi ou un de mes proches", + "report_flow.label.impersonation_public_figure": "Une personne connue, comme un créateur de contenu ou une personnalité politique", + "report_flow.label.impersonation_staff": "Le personnel ou l'assistance de {product_name}", + "report_flow.label.intimate_image_abuse": "Images intimes partagées sans consentement, y compris les deepfakes, ou menace de les partager", + "report_flow.label.intimate_image_abuse_guild": "Partage d'images intimes sans consentement, y compris les deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Images intimes de quelqu'un partagées sans consentement, y compris les deepfakes", + "report_flow.label.intimate_photo": "Photo intime ou de nu", + "report_flow.label.invite_splash": "Image d'invitation", + "report_flow.label.ip_address": "Adresse IP", + "report_flow.label.learn_more": "Lire les règles communautaires de {product_name}", + "report_flow.label.legal_name": "Nom réel ou légal", + "report_flow.label.lgbtq_targeting": "Mégenrer, deadnamer ou révéler l'orientation sexuelle ou l'identité de genre de quelqu'un délibérément, ou nier son identité", + "report_flow.label.malware_guild": "Distribution de logiciels malveillants ou de liens de phishing", + "report_flow.label.malware_phishing": "Phishing, logiciels malveillants ou tentatives de piratage", + "report_flow.label.member_activity": "Ce que les membres publient ou font là-bas", + "report_flow.label.metric_manipulation": "Falsification du nombre de membres ou de réactions", + "report_flow.label.minor_contact": "Proposer une rencontre à un mineur, ou lui demander des photos ou des informations personnelles, d'une manière qui semble prédatrice", + "report_flow.label.minor_dating_community": "C'est une communauté de rencontres entre mineurs", + "report_flow.label.minor_fictional": "Contenu sexuel dessiné, écrit ou généré par IA représentant un enfant fictif", + "report_flow.label.minor_grooming": "Pédopiégeage (grooming) ou instauration d'une confiance inappropriée avec un mineur", + "report_flow.label.minor_grooming_guild": "Des membres pratiquent le pédopiégeage (grooming) sur des mineurs ou instaurent une confiance inappropriée avec eux", + "report_flow.label.minor_in_adult_space": "Un mineur se trouve dans un salon ou une communauté réservé aux plus de 18 ans", + "report_flow.label.minor_in_adult_space_guild": "Les mineurs sont autorisés dans les salons 18+", + "report_flow.label.minor_risk": "Mettre un mineur en danger", + "report_flow.label.minor_risk_guild": "Mettre des mineurs en danger", + "report_flow.label.minor_sexual": "Sexualisation d'un mineur", + "report_flow.label.minor_sexual_contact": "Flirter avec un mineur ou lui envoyer des messages à caractère sexuel", + "report_flow.label.minor_sexual_contact_guild": "Des membres flirtent avec des mineurs ou leur envoient des messages à caractère sexuel", + "report_flow.label.minor_sexual_content": "Un mineur partage lui-même du contenu à caractère sexuel", + "report_flow.label.minor_sexual_content_guild": "Des mineurs publient ou envoient du contenu à caractère sexuel", + "report_flow.label.minor_sexual_content_profile": "Le profil d'un mineur qui contient du contenu à caractère sexuel", + "report_flow.label.minor_sexual_guild": "Sexualisation des mineurs", + "report_flow.label.minor_sexualization": "Commentaires sexuels sur des mineurs", + "report_flow.label.minor_sexualization_guild": "Des membres font des commentaires sexuels sur des mineurs", + "report_flow.label.minor_sexualization_profile": "Commentaires sexuels sur des mineurs dans son profil", + "report_flow.label.name": "Noms", + "report_flow.label.other": "Quelque chose qui n'est pas listé ici", + "report_flow.label.other_identifying": "Autres informations qui pourraient identifier ou localiser quelqu'un", + "report_flow.label.permits_violations": "Elle autorise de graves infractions aux règles", + "report_flow.label.phone": "Numéro de téléphone", + "report_flow.label.photo": "Images", + "report_flow.label.platform_abuse": "Scraping, automatisation ou autre abus de la plateforme", + "report_flow.label.private_conversation": "Messages privés, captures d'écran ou enregistrements d'appels", + "report_flow.label.private_info": "Partage d'informations privées sur quelqu'un", + "report_flow.label.private_info_profile": "Son profil partage des informations privées sur quelqu'un", + "report_flow.label.profile_text": "Texte du profil", + "report_flow.label.raid": "Organisation ou participation à un raid ou à un lynchage", + "report_flow.label.raid_guild": "Organisation de raids ou de lynchages contre des personnes ou des communautés", + "report_flow.label.rude_language": "Jurons ou remarques grossières", + "report_flow.label.self_harm": "Quelqu'un pourrait se faire du mal, ou encourage l'automutilation", + "report_flow.label.self_harm_graphic": "Images explicites d'automutilation", + "report_flow.label.self_harm_guild": "Des membres poussent d'autres personnes à se faire du mal", + "report_flow.label.self_harm_pressure": "Faire pression sur quelqu'un ou le mettre au défi de se faire du mal", + "report_flow.label.self_harm_pressure_guild": "Faire pression sur des personnes ou les mettre au défi de se faire du mal", + "report_flow.label.self_harm_profile": "Son profil suggère l'automutilation ou l'encourage", + "report_flow.label.self_harm_promotion": "Encourager l'automutilation ou partager des méthodes", + "report_flow.label.self_harm_promotion_profile": "Son profil encourage l'automutilation", + "report_flow.label.sexual": "Contenu à caractère sexuel", + "report_flow.label.sexual_exploitation": "Exploitation sexuelle, coercition ou traite d'êtres humains", + "report_flow.label.sexual_unwanted": "Images ou messages à caractère sexuel que je ne voulais pas recevoir", + "report_flow.label.something_else": "Autre chose", + "report_flow.label.spam": "Spam ou publicités non sollicitées", + "report_flow.label.spam_bulk": "Envoi de spam ou de publicité en masse", + "report_flow.label.spam_or_manipulation": "Spam ou manipulation de plateforme", + "report_flow.label.spam_profile": "Son profil est utilisé pour le spam ou la publicité", + "report_flow.label.suicide_promotion": "Encourager le suicide ou partager des méthodes", + "report_flow.label.suicide_promotion_profile": "Son profil encourage le suicide", + "report_flow.label.synthetic_media": "Médias falsifiés ou créés par IA présentés comme réels", + "report_flow.label.terrorism": "Terrorisme ou extrémisme violent", + "report_flow.label.terrorism_guild": "Recrutement ou promotion du terrorisme ou de l'extrémisme violent", + "report_flow.label.threat": "Menaces ou appels à la violence", + "report_flow.label.threat_to_share": "Cette personne menace de le partager", + "report_flow.label.too_young": "Cette personne n'a pas l'âge minimum requis pour utiliser {product_name}", + "report_flow.label.unwanted_contact": "Traque ou contacts répétés envers moi ou quelqu'un d'autre malgré une demande d'arrêt, un blocage ou une suppression", + "report_flow.label.violence_glorification": "Glorification de la violence dans le monde réel", + "report_flow.label.violence_incitement": "Encouragement à la violence ou explication sur la façon de blesser des personnes", + "report_flow.label.violence_misinfo": "Violence, extrémisme ou fausses informations nuisibles", + "report_flow.label.violent_threat": "Annoncer son intention de faire du mal à quelqu'un", + "report_flow.label.worried_profile": "Je m'inquiète pour sa sécurité", + "report_flow.label.worried_self_harm": "J'ai peur que cette personne se fasse du mal", + "report_flow.label.worried_suicide": "J'ai peur que cette personne tente de se suicider", + "report_flow.notice.need_more_info.body": "Pour examiner cela, nous avons besoin d'un message où la personne indique son âge ou précise clairement qu'elle n'a pas l'âge minimum requis pour utiliser {product_name}. Signalez plutôt ce message.", + "report_flow.notice.need_more_info.title": "Nous ne pouvons pas encore donner suite", + "report_flow.notice.need_more_info_profile.body": "Pour examiner cela, nous devons voir où la personne indique son âge ou précise clairement qu'elle n'a pas l'âge minimum requis pour utiliser {product_name}. Signalez plutôt ce message ou ce profil.", + "report_flow.screen.abuse.title": "En quoi cela consiste-t-il ?", + "report_flow.screen.abuse_guild.title": "Que font les membres de cette communauté ?", + "report_flow.screen.age_stated_message.title": "Ce message indique-t-il son âge ?", + "report_flow.screen.age_stated_profile.title": "Son profil indique-t-il son âge ?", + "report_flow.screen.community_parts.subtitle": "Sélectionnez autant d'options que nécessaire.", + "report_flow.screen.community_parts.title": "Quelles parties de la communauté sont concernées ?", + "report_flow.screen.crisis_support.subtitle": "Les lignes d'écoute offrent un soutien gratuit et confidentiel.", + "report_flow.screen.crisis_support.title": "Quelqu'un peut vous aider maintenant", + "report_flow.screen.false_info.subtitle": "Les opinions, la satire et les débats de bonne foi sont autorisés. La diffamation illégale peut être signalée en vertu du règlement sur les services numériques (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Les opinions, la satire et les débats de bonne foi sont autorisés.", + "report_flow.screen.false_info.title": "Qu'y a-t-il de trompeur ?", + "report_flow.screen.harassment.title": "Comment une personne est-elle ciblée ?", + "report_flow.screen.hate.title": "Comment cela s'attaque-t-il aux gens pour ce qu'ils sont ?", + "report_flow.screen.impersonation.subtitle": "La parodie ou le jeu de rôle clairement étiquetés sont autorisés.", + "report_flow.screen.impersonation.title": "Qui est usurpé, ou s'agit-il d'une arnaque ?", + "report_flow.screen.minor_risk.title": "Comment cette personne met-elle un mineur en danger ?", + "report_flow.screen.minor_risk_guild.title": "Comment cette communauté met-elle les mineurs en danger ?", + "report_flow.screen.minor_sexual.subtitle": "Le contenu dessiné, écrit ou généré par IA entre dans cette catégorie lorsqu'un personnage est décrit comme mineur ou est clairement prépubère, y compris lolicon, shotacon et cub.", + "report_flow.screen.minor_sexual.title": "Qu'avez-vous vu impliquant un mineur ?", + "report_flow.screen.minor_sexual_guild.title": "Qu'avez-vous vu impliquant des mineurs ?", + "report_flow.screen.private_info.subtitle": "Sélectionnez autant d'options que nécessaire. Si une photo intime montre une personne de moins de 18 ans, revenez en arrière et signalez-la sous la catégorie « Sexualisation d'un mineur ».", + "report_flow.screen.private_info.title": "Quelles informations privées sont concernées ?", + "report_flow.screen.profile_abuse.title": "Qu'y a-t-il de nuisible dans son profil ?", + "report_flow.screen.profile_hate_violence.title": "Qu'est-ce que son profil montre ou promeut ?", + "report_flow.screen.profile_intro.options_heading": "En savoir plus", + "report_flow.screen.profile_intro.subtitle": "Dites-nous ce qui ne va pas avec ce profil. La personne ne saura pas qui l'a signalée.", + "report_flow.screen.profile_intro.title": "Signaler le profil", + "report_flow.screen.profile_minor_sexual.title": "Qu'y a-t-il dans son profil qui implique un mineur ?", + "report_flow.screen.profile_parts.subtitle": "Sélectionnez autant d'options que nécessaire.", + "report_flow.screen.profile_parts.title": "Quelles parties de son profil posent problème ?", + "report_flow.screen.profile_private_info.title": "Quelles informations privées figurent dans son profil ?", + "report_flow.screen.profile_sexual.title": "Parlez-nous du contenu sexuel dans son profil", + "report_flow.screen.profile_threat.title": "Comment son profil implique-t-il la violence ?", + "report_flow.screen.root_guild.subtitle": "Choisissez la correspondance la plus proche pour ce qui se passe dans cette communauté.", + "report_flow.screen.root_guild.title": "Qu'est-ce qui ne va pas avec cette communauté ?", + "report_flow.screen.root_message.subtitle": "Choisissez la correspondance la plus proche. Vous pouvez tout vérifier avant l'envoi.", + "report_flow.screen.root_message.title": "Signaler le message", + "report_flow.screen.root_user.subtitle": "Choisissez la correspondance la plus proche pour ce qui se trouve sur son profil.", + "report_flow.screen.root_user.title": "Qu'est-ce qui ne va pas avec son profil ?", + "report_flow.screen.self_harm.subtitle": "Personne n'est puni pour avoir dit être en difficulté. Nous dire que vous vous inquiétez nous aide à proposer un soutien.", + "report_flow.screen.self_harm.title": "Qu'a dit ou partagé cette personne ?", + "report_flow.screen.self_harm_guild.title": "Qu'est-ce que les membres encouragent ?", + "report_flow.screen.self_harm_profile.title": "Qu'est-ce que son profil dit ou montre ?", + "report_flow.screen.sexual.subtitle": "Si une personne montrée ou impliquée a moins de 18 ans, choisissez « Sexualisation d'un mineur ».", + "report_flow.screen.sexual.title": "Parlez-nous du contenu sexuel", + "report_flow.screen.sexual_guild.subtitle": "Si une personne montrée ou impliquée a moins de 18 ans, choisissez « Sexualisation des mineurs ».", + "report_flow.screen.sexual_guild.title": "Parlez-nous du contenu sexuel dans cette communauté", + "report_flow.screen.something_else_guild.title": "Que se passe-t-il d'autre dans cette communauté ?", + "report_flow.screen.something_else_message.title": "Que se passe-t-il d'autre ?", + "report_flow.screen.something_else_user.title": "Quel autre problème y a-t-il avec ce profil ?", + "report_flow.screen.spam_kind_guild.title": "Comment cette communauté abuse-t-elle de la plateforme ?", + "report_flow.screen.spam_profile.title": "Comment le compte est-il mal utilisé ?", + "report_flow.screen.threat.title": "Comment cela implique-t-il la violence ?", + "report_flow.screen.violence_misinfo.title": "Laquelle de ces options correspond ?", + "report_flow.screen.violence_misinfo_guild.title": "Laquelle de ces options se produit dans cette communauté ?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/he.json b/fluxer_api/src/api/content_i18n/weblate/locales/he.json index d20733f99..01c939675 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/he.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/he.json @@ -14,5 +14,202 @@ "guild.default_category_text": "ערוצי טקסט", "guild.default_category_voice": "ערוצים קוליים", "guild.default_channel_text": "כללי", - "guild.default_channel_voice": "כללי" + "guild.default_channel_voice": "כללי", + "report_flow.description.name": "שם משתמש, שם לתצוגה או כינוי בקהילה", + "report_flow.description.photo": "מה שהם משתמשים בו כתמונת פרופיל וכבאנר", + "report_flow.description.profile_text": "אודות, סטטוס מותאם אישית או כינויי גוף", + "report_flow.label.abuse": "תוכן פוגעני או מזיק", + "report_flow.label.account_trading": "מכירת חשבונות, או פרטי התחברות או כרטיס גנובים", + "report_flow.label.account_trading_communities": "קנייה או מכירה של חשבונות או קהילות", + "report_flow.label.address": "כתובת מגורים או מקום עבודה", + "report_flow.label.adult_content_no_gate": "תוכן למבוגרים ללא הגבלת גיל 18+", + "report_flow.label.adult_content_profile": "תוכן למבוגרים מפורש בפרופיל שלהם", + "report_flow.label.adult_content_unmarked": "תוכן למבוגרים בערוץ קהילה שלא סומן כערוץ עם הגבלת גיל (18+)", + "report_flow.label.age_no_message": "לא, זה לא מוזכר", + "report_flow.label.age_no_profile": "לא, זה לא מוזכר", + "report_flow.label.age_yes_message": "כן, זה מזכיר את גילם", + "report_flow.label.age_yes_profile": "כן, הפרופיל שלהם מזכיר את גילם", + "report_flow.label.atrocity_denial": "הכחשה או האדרה של השואה או של רצחי עם אחרים", + "report_flow.label.ban_evasion": "עקיפת הרחקה באמצעות חשבון אחר", + "report_flow.label.channel_names": "שמות הערוצים", + "report_flow.label.community_banner": "באנר קהילה", + "report_flow.label.community_icon": "אייקון קהילה", + "report_flow.label.community_name": "שם קהילה", + "report_flow.label.conversion_therapy": "קידום טיפולי המרה", + "report_flow.label.copyright": "תלונת זכויות יוצרים או סימן מסחרי", + "report_flow.label.crisis_lines": "קווי סיוע למצבי משבר במדינה שלך", + "report_flow.label.csam": "תמונות או סרטונים של פגיעה מינית בילדים, אמיתיים או שנוצרו באמצעות AI", + "report_flow.label.discovery_listing": "רישום בגילוי", + "report_flow.label.dislike": "זה פשוט לא בשבילי", + "report_flow.label.dsa": "תוכן בלתי חוקי באיחוד האירופי (חוק השירותים הדיגיטליים, DSA)", + "report_flow.label.eating_disorder_promotion": "עידוד הפרעות אכילה", + "report_flow.label.eating_disorder_promotion_profile": "הפרופיל שלהם מקדם הפרעות אכילה", + "report_flow.label.email": "כתובת אימייל", + "report_flow.label.emoji_stickers": "אימוג'י או מדבקות מותאמים אישית", + "report_flow.label.face_photo": "תמונה של הפנים שלהם", + "report_flow.label.fake_account": "חשבון מזויף, בוט או שימוש לרעה אוטומטי", + "report_flow.label.fake_account_profile": "חשבון מזויף או מטעה", + "report_flow.label.false_claims": "הפצת שקרים כדי לפגוע במוניטין של אדם ספציפי", + "report_flow.label.false_info": "הפצת מידע כוזב מזיק", + "report_flow.label.financial": "כרטיס, בנק או פרטים פיננסיים אחרים", + "report_flow.label.fraud": "הם מנסים להונות אנשים כדי לקבל מהם כסף או חשבונות", + "report_flow.label.fraud_guild": "הונאת אנשים כדי לקבל מהם כסף או חשבונות", + "report_flow.label.government_id": "מסמך זיהוי או מספר זיהוי", + "report_flow.label.graphic_violence": "אלימות אמיתית שמוצגת כדי להזעזע, כמו תיעוד דמים או אכזריות כלפי בעלי חיים", + "report_flow.label.harassment": "בריונות, הטרדה או מעקב", + "report_flow.label.harassment_direct": "פגיעה חוזרת במישהו באמצעות עלבונות או התעללות", + "report_flow.label.harassment_guild": "הטרדה, בריונות או מעקב אחרי אנשים", + "report_flow.label.harassment_profile": "הפרופיל שלהם מטריד או מכוון אליי או אל מישהו אחר", + "report_flow.label.harmful_false_claims": "טענות שקריות שעלולות לגרום נזק חמור בעולם האמיתי", + "report_flow.label.hate": "שנאה או אפליה נגד אנשים בגלל מי שהם", + "report_flow.label.hate_dehumanizing": "השוואת אנשים לחיות, למחלות או ללכלוך, או הגדרתם כפחות מבני אדם", + "report_flow.label.hate_incitement": "קריאות לאלימות או הדרה נגד קבוצה", + "report_flow.label.hate_other": "התקפות אחרות על אנשים בגלל מי שהם", + "report_flow.label.hate_slurs": "כינויי גנאי, סמלי שנאה או סטריאוטיפים משפילים", + "report_flow.label.hate_violence": "שנאה, אלימות או קיצוניות", + "report_flow.label.identity": "נטייה מינית, זהות מגדרית או סטטוס אינטרסקס", + "report_flow.label.illegal_activity": "פעילות בלתי חוקית אחרת", + "report_flow.label.illegal_goods": "מכירת סמים, נשק או מוצרים בלתי חוקיים אחרים", + "report_flow.label.impersonation": "התחזות למישהו, או הונאת אנשים", + "report_flow.label.impersonation_guild": "התחזות ל-{product_name} או לארגון אחר", + "report_flow.label.impersonation_organization": "חברה, מותג או קבוצה", + "report_flow.label.impersonation_person": "אני או מישהו קרוב אליי", + "report_flow.label.impersonation_public_figure": "אדם מפורסם, כמו יוצר או פוליטיקאי", + "report_flow.label.impersonation_staff": "צוות {product_name} או תמיכה", + "report_flow.label.intimate_image_abuse": "שיתוף תמונות אינטימיות ללא הסכמה, כולל דיפ-פייק, או איום לשתף אותן", + "report_flow.label.intimate_image_abuse_guild": "שיתוף תמונות אינטימיות ללא הסכמה, כולל דיפ-פייק", + "report_flow.label.intimate_image_abuse_profile": "תמונות אינטימיות של מישהו ששותפו ללא הסכמה, כולל דיפ-פייק", + "report_flow.label.intimate_photo": "תמונה אינטימית או תמונת עירום", + "report_flow.label.invite_splash": "תמונת הזמנה", + "report_flow.label.ip_address": "כתובת IP", + "report_flow.label.learn_more": "קרא את הנחיות הקהילה של {product_name}", + "report_flow.label.legal_name": "שם אמיתי או חוקי", + "report_flow.label.lgbtq_targeting": "שימוש מכוון בכינויי גוף שגויים, דדניימינג או חשיפת נטייתו או זהותו של אדם בניגוד לרצונו, או הכחשת זהותו", + "report_flow.label.malware_guild": "הפצת תוכנות זדוניות או קישורי פישינג", + "report_flow.label.malware_phishing": "ניסיונות פישינג, תוכנות זדוניות או פריצה", + "report_flow.label.member_activity": "מה שחברים מפרסמים או עושים שם", + "report_flow.label.metric_manipulation": "זיוף ספירת חברים או תגובות", + "report_flow.label.minor_contact": "פנייה לקטין/ה בבקשה להיפגש, או לשלוח תמונות או פרטים אישיים, באופן שנראה טורפני", + "report_flow.label.minor_dating_community": "זו קהילה לדייטים בין קטינים", + "report_flow.label.minor_fictional": "תוכן מיני מצויר, כתוב או שנוצר על ידי בינה מלאכותית שמציג ילד בדיוני", + "report_flow.label.minor_grooming": "גרומינג או בניית אמון בלתי הולם עם קטין/ה", + "report_flow.label.minor_grooming_guild": "חברים מבצעים גרומינג או בונים אמון בלתי הולם עם קטינים", + "report_flow.label.minor_in_adult_space": "קטין/ה נמצא/ת בערוץ או בקהילה של 18+", + "report_flow.label.minor_in_adult_space_guild": "קטינים מורשים בערוצים של 18+", + "report_flow.label.minor_risk": "העמדת קטין בסיכון", + "report_flow.label.minor_risk_guild": "העמדת קטינים בסיכון", + "report_flow.label.minor_sexual": "הפיכת קטין לאובייקט מיני", + "report_flow.label.minor_sexual_contact": "פלירטוט עם קטין או שליחת הודעות מיניות אליו", + "report_flow.label.minor_sexual_contact_guild": "חברים מפלרטטים עם קטינים או שולחים להם הודעות מיניות", + "report_flow.label.minor_sexual_content": "קטין משתף תוכן מיני בעצמו", + "report_flow.label.minor_sexual_content_guild": "קטינים מפרסמים או שולחים תוכן מיני", + "report_flow.label.minor_sexual_content_profile": "פרופיל של קטין עם תוכן מיני", + "report_flow.label.minor_sexual_guild": "הפיכת קטינים לאובייקטים מיניים", + "report_flow.label.minor_sexualization": "הערות מיניות על קטינים", + "report_flow.label.minor_sexualization_guild": "חברים מעירים הערות מיניות על קטינים", + "report_flow.label.minor_sexualization_profile": "הערות מיניות על קטינים בפרופיל שלהם", + "report_flow.label.name": "שמות", + "report_flow.label.other": "משהו שלא מופיע כאן", + "report_flow.label.other_identifying": "מידע אחר שיכול לזהות או לאתר מישהו", + "report_flow.label.permits_violations": "הוא מאפשר הפרות חמורות של הכללים", + "report_flow.label.phone": "מספר טלפון", + "report_flow.label.photo": "תמונות", + "report_flow.label.platform_abuse": "סקרייפינג, אוטומציה או שימוש לרעה אחר בפלטפורמה", + "report_flow.label.private_conversation": "הודעות פרטיות, צילומי מסך או הקלטות שיחות", + "report_flow.label.private_info": "שיתוף פרטים אישיים של מישהו", + "report_flow.label.private_info_profile": "הפרופיל שלהם משתף פרטים אישיים של מישהו", + "report_flow.label.profile_text": "טקסט פרופיל", + "report_flow.label.raid": "ארגון או הצטרפות לפשיטה או התנפלות", + "report_flow.label.raid_guild": "ארגון פשיטות או התנפלויות נגד אנשים או קהילות", + "report_flow.label.rude_language": "שפה בוטה או הערות גסות", + "report_flow.label.self_harm": "מישהו עלול לפגוע בעצמו, או מעודד פגיעה עצמית", + "report_flow.label.self_harm_graphic": "תמונות גרפיות של פגיעה עצמית", + "report_flow.label.self_harm_guild": "חברי קהילה דוחפים אחרים לפגוע בעצמם", + "report_flow.label.self_harm_pressure": "הפעלת לחץ על מישהו או אתגור שלו לפגוע בעצמו", + "report_flow.label.self_harm_pressure_guild": "הפעלת לחץ על אנשים או אתגור שלהם לפגוע בעצמם", + "report_flow.label.self_harm_profile": "הפרופיל שלהם מרמז על פגיעה עצמית או מעודד אותה", + "report_flow.label.self_harm_promotion": "עידוד פגיעה עצמית או שיתוף שיטות", + "report_flow.label.self_harm_promotion_profile": "הפרופיל שלהם מעודד פגיעה עצמית", + "report_flow.label.sexual": "תוכן מיני", + "report_flow.label.sexual_exploitation": "ניצול מיני, כפייה או סחר בבני אדם", + "report_flow.label.sexual_unwanted": "תמונות או הודעות מיניות שלא רציתי", + "report_flow.label.something_else": "משהו אחר", + "report_flow.label.spam": "ספאם או פרסומות לא רצויות", + "report_flow.label.spam_bulk": "שליחת ספאם או פרסומות בכמות גדולה", + "report_flow.label.spam_or_manipulation": "ספאם או מניפולציה של הפלטפורמה", + "report_flow.label.spam_profile": "הפרופיל שלהם משמש לספאם או לפרסום", + "report_flow.label.suicide_promotion": "עידוד התאבדות או שיתוף שיטות", + "report_flow.label.suicide_promotion_profile": "הפרופיל שלהם מעודד התאבדות", + "report_flow.label.synthetic_media": "מדיה מזויפת או שנוצרה על ידי בינה מלאכותית ומוצגת כאמיתית", + "report_flow.label.terrorism": "טרור או קיצוניות אלימה", + "report_flow.label.terrorism_guild": "גיוס או קידום טרור או קיצוניות אלימה", + "report_flow.label.threat": "איומים או קריאות לאלימות", + "report_flow.label.threat_to_share": "הם מאיימים לשתף את זה", + "report_flow.label.too_young": "הם מתחת לגיל המינימלי לשימוש ב-{product_name}", + "report_flow.label.unwanted_contact": "מעקב או יצירת קשר חוזרת איתי או עם מישהו אחר לאחר שהתבקשו להפסיק, נחסמו או הוסרו", + "report_flow.label.violence_glorification": "האדרת אלימות בעולם האמיתי", + "report_flow.label.violence_incitement": "עידוד אלימות או הסבר כיצד לפגוע באנשים", + "report_flow.label.violence_misinfo": "אלימות, קיצוניות או מידע כוזב מזיק", + "report_flow.label.violent_threat": "אומרים שהם יפגעו במישהו", + "report_flow.label.worried_profile": "אני מודאג/ת לגבי בטיחותם", + "report_flow.label.worried_self_harm": "אני מודאג/ת שהם עלולים לפגוע בעצמם", + "report_flow.label.worried_suicide": "אני מודאג/ת שהם עלולים לנסות להתאבד", + "report_flow.notice.need_more_info.body": "כדי לבדוק זאת, אנחנו צריכים הודעה שבה הם מציינים את גילם או מבהירים שהם מתחת לגיל המינימלי של {product_name}. דווח על ההודעה הזו במקום.", + "report_flow.notice.need_more_info.title": "אנחנו עדיין לא יכולים לפעול בנושא הזה", + "report_flow.notice.need_more_info_profile.body": "כדי לבדוק זאת, אנחנו צריכים לראות היכן הם מציינים את גילם או מבהירים שהם מתחת לגיל המינימלי של {product_name}. דווח על ההודעה או על הפרופיל הזה במקום.", + "report_flow.screen.abuse.title": "במה מדובר?", + "report_flow.screen.abuse_guild.title": "מה עושים אנשים בקהילה הזו?", + "report_flow.screen.age_stated_message.title": "האם ההודעה הזו מציינת את גילם?", + "report_flow.screen.age_stated_profile.title": "האם הפרופיל שלהם מציין את גילם?", + "report_flow.screen.community_parts.subtitle": "בחר כמה שצריך.", + "report_flow.screen.community_parts.title": "אילו חלקים מהקהילה מעורבים?", + "report_flow.screen.crisis_support.subtitle": "קווי סיוע למצבי משבר מציעים תמיכה חינם וסודית.", + "report_flow.screen.crisis_support.title": "מישהו יכול לעזור כרגע", + "report_flow.screen.false_info.subtitle": "דעות, סאטירה ודיון בתום לב מותרים. לשון הרע בלתי חוקית ניתנת לדיווח במסגרת חוק השירותים הדיגיטליים (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "דעות, סאטירה ודיון בתום לב מותרים.", + "report_flow.screen.false_info.title": "מה מטעה בזה?", + "report_flow.screen.harassment.title": "כיצד מישהו הופך למטרה?", + "report_flow.screen.hate.title": "כיצד זה תוקף אנשים בגלל מי שהם?", + "report_flow.screen.impersonation.subtitle": "פרודיה או משחק תפקידים המסומנים בבירור מותרים.", + "report_flow.screen.impersonation.title": "למי מתחזים, או שמדובר בהונאה?", + "report_flow.screen.minor_risk.title": "כיצד אדם זה מסכן קטין?", + "report_flow.screen.minor_risk_guild.title": "כיצד קהילה זו מסכנת קטינים?", + "report_flow.screen.minor_sexual.subtitle": "גם תוכן מצויר, כתוב או שנוצר באמצעות AI נחשב, כאשר דמות מתוארת כקטינה או נראית בבירור טרום-התבגרותית, כולל lolicon, shotacon ו-cub.", + "report_flow.screen.minor_sexual.title": "מה ראית בנוגע לקטין?", + "report_flow.screen.minor_sexual_guild.title": "מה ראית בנוגע לקטינים?", + "report_flow.screen.private_info.subtitle": "בחר כמה שצריך. אם תמונה אינטימית מציגה מישהו מתחת לגיל 18, חזור ודווח עליה תחת “הפיכת קטין לאובייקט מיני”.", + "report_flow.screen.private_info.title": "אילו פרטים אישיים מעורבים?", + "report_flow.screen.profile_abuse.title": "מה פוגעני בפרופיל שלהם?", + "report_flow.screen.profile_hate_violence.title": "מה הפרופיל שלהם מציג או מקדם?", + "report_flow.screen.profile_intro.options_heading": "מידע נוסף", + "report_flow.screen.profile_intro.subtitle": "ספר לנו מה לא בסדר בפרופיל הזה. לא יימסר להם מי דיווח עליהם.", + "report_flow.screen.profile_intro.title": "דיווח על פרופיל", + "report_flow.screen.profile_minor_sexual.title": "מה בפרופיל שלהם קשור לקטין?", + "report_flow.screen.profile_parts.subtitle": "בחר כמה שצריך.", + "report_flow.screen.profile_parts.title": "אילו חלקים בפרופיל שלהם מהווים בעיה?", + "report_flow.screen.profile_private_info.title": "אילו פרטים אישיים נמצאים בפרופיל שלהם?", + "report_flow.screen.profile_sexual.title": "ספר לנו על התוכן המיני בפרופיל שלהם", + "report_flow.screen.profile_threat.title": "כיצד הפרופיל שלהם קשור לאלימות?", + "report_flow.screen.root_guild.subtitle": "בחר את ההתאמה הקרובה ביותר למה שקורה בקהילה הזו.", + "report_flow.screen.root_guild.title": "מה לא בסדר בקהילה הזו?", + "report_flow.screen.root_message.subtitle": "בחר את ההתאמה הקרובה ביותר. אפשר לבדוק הכול לפני השליחה.", + "report_flow.screen.root_message.title": "דיווח על הודעה", + "report_flow.screen.root_user.subtitle": "בחר את ההתאמה הקרובה ביותר למה שמופיע בפרופיל שלהם.", + "report_flow.screen.root_user.title": "מה לא בסדר בפרופיל שלהם?", + "report_flow.screen.self_harm.subtitle": "אף אחד לא נענש על כך שהוא מספר שקשה לו. אם תספר לנו שאתה מודאג, זה עוזר לנו להציע תמיכה.", + "report_flow.screen.self_harm.title": "מה הם אמרו או שיתפו?", + "report_flow.screen.self_harm_guild.title": "מה החברים מעודדים?", + "report_flow.screen.self_harm_profile.title": "מה הפרופיל שלהם אומר או מראה?", + "report_flow.screen.sexual.subtitle": "אם מישהו מהמופיעים או מהמעורבים הוא מתחת לגיל 18, בחר “הפיכת קטין לאובייקט מיני”.", + "report_flow.screen.sexual.title": "ספר לנו על התוכן המיני", + "report_flow.screen.sexual_guild.subtitle": "אם מישהו מהמופיעים או מהמעורבים הוא מתחת לגיל 18, בחר “הפיכת קטינים לאובייקטים מיניים”.", + "report_flow.screen.sexual_guild.title": "ספר לנו על התוכן המיני בקהילה הזו", + "report_flow.screen.something_else_guild.title": "מה עוד קורה בקהילה הזו?", + "report_flow.screen.something_else_message.title": "מה עוד קורה?", + "report_flow.screen.something_else_user.title": "מה עוד לא בסדר בפרופיל הזה?", + "report_flow.screen.spam_kind_guild.title": "כיצד הקהילה הזו משתמשת לרעה בפלטפורמה?", + "report_flow.screen.spam_profile.title": "כיצד החשבון מנוצל לרעה?", + "report_flow.screen.threat.title": "כיצד זה קשור לאלימות?", + "report_flow.screen.violence_misinfo.title": "איזה מהבאים מתאים לזה?", + "report_flow.screen.violence_misinfo_guild.title": "איזה מהבאים קורה בקהילה הזו?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/hi.json b/fluxer_api/src/api/content_i18n/weblate/locales/hi.json index 253e8f9a8..0f58d5937 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/hi.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/hi.json @@ -14,5 +14,202 @@ "guild.default_category_text": "टेक्स्ट चैनल", "guild.default_category_voice": "वॉइस चैनल", "guild.default_channel_text": "जनरल", - "guild.default_channel_voice": "जनरल" + "guild.default_channel_voice": "जनरल", + "report_flow.description.name": "यूज़रनेम, डिस्प्ले नाम या कम्युनिटी उपनाम", + "report_flow.description.photo": "अवतार और बैनर के रूप में वे जो इस्तेमाल करते हैं", + "report_flow.description.profile_text": "बायो, कस्टम स्टेटस या सर्वनाम", + "report_flow.label.abuse": "अपमानजनक या हानिकारक सामग्री", + "report_flow.label.account_trading": "अकाउंट बेचना, या चोरी किए गए लॉगिन या कार्ड विवरण", + "report_flow.label.account_trading_communities": "अकाउंट या कम्युनिटी खरीदना या बेचना", + "report_flow.label.address": "घर का पता या कार्यस्थल", + "report_flow.label.adult_content_no_gate": "18+ आयु प्रतिबंध के बिना वयस्क सामग्री", + "report_flow.label.adult_content_profile": "उनकी प्रोफ़ाइल में स्पष्ट वयस्क सामग्री", + "report_flow.label.adult_content_unmarked": "कम्युनिटी के ऐसे चैनल में वयस्क सामग्री, जो आयु-प्रतिबंधित (18+) के रूप में चिह्नित नहीं है", + "report_flow.label.age_no_message": "नहीं, इसमें इसका उल्लेख नहीं है", + "report_flow.label.age_no_profile": "नहीं, इसमें इसका उल्लेख नहीं है", + "report_flow.label.age_yes_message": "हाँ, इसमें उनकी उम्र का उल्लेख है", + "report_flow.label.age_yes_profile": "हाँ, उनकी प्रोफ़ाइल में उनकी उम्र का उल्लेख है", + "report_flow.label.atrocity_denial": "होलोकॉस्ट या अन्य नरसंहारों को नकारना या उनका जश्न मनाना", + "report_flow.label.ban_evasion": "दूसरे अकाउंट से प्रतिबंध को दरकिनार करना", + "report_flow.label.channel_names": "चैनल के नाम", + "report_flow.label.community_banner": "कम्युनिटी बैनर", + "report_flow.label.community_icon": "कम्युनिटी आइकॉन", + "report_flow.label.community_name": "कम्युनिटी का नाम", + "report_flow.label.conversion_therapy": "कन्वर्ज़न थेरेपी को बढ़ावा देना", + "report_flow.label.copyright": "कॉपीराइट या ट्रेडमार्क की शिकायत", + "report_flow.label.crisis_lines": "आपके देश में संकटकालीन हेल्पलाइन", + "report_flow.label.csam": "बाल यौन शोषण की असली या AI से बनाई गई तस्वीरें या वीडियो", + "report_flow.label.discovery_listing": "डिस्कवरी लिस्टिंग", + "report_flow.label.dislike": "यह बस मेरे लिए नहीं है", + "report_flow.label.dsa": "यूरोपीय संघ में गैर-कानूनी सामग्री (डिजिटल सेवा अधिनियम)", + "report_flow.label.eating_disorder_promotion": "खाने संबंधी विकार वाली आदतों को बढ़ावा देना", + "report_flow.label.eating_disorder_promotion_profile": "उनकी प्रोफ़ाइल खाने संबंधी विकारों को बढ़ावा देती है", + "report_flow.label.email": "ईमेल पता", + "report_flow.label.emoji_stickers": "कस्टम इमोजी या स्टिकर", + "report_flow.label.face_photo": "उनके चेहरे की फ़ोटो", + "report_flow.label.fake_account": "फ़र्ज़ी अकाउंट, बॉट या ऑटोमेटेड दुरुपयोग", + "report_flow.label.fake_account_profile": "एक फ़र्ज़ी या भ्रामक अकाउंट", + "report_flow.label.false_claims": "किसी खास व्यक्ति की प्रतिष्ठा को नुकसान पहुँचाने के लिए झूठ फैलाना", + "report_flow.label.false_info": "हानिकारक झूठी जानकारी फैलाना", + "report_flow.label.financial": "कार्ड, बैंक या अन्य वित्तीय विवरण", + "report_flow.label.fraud": "वे लोगों से पैसे या अकाउंट ठगने की कोशिश कर रहे हैं", + "report_flow.label.fraud_guild": "लोगों से पैसे या अकाउंट ठगना", + "report_flow.label.government_id": "पहचान दस्तावेज़ या पहचान संख्या", + "report_flow.label.graphic_violence": "असली हिंसा को चौंकाने के लिए दिखाना, जैसे कि खून-खराबा या जानवरों पर क्रूरता", + "report_flow.label.harassment": "धमकाना, परेशान करना या पीछा करना", + "report_flow.label.harassment_direct": "किसी को बार-बार अपमान या दुर्व्यवहार का निशाना बनाना", + "report_flow.label.harassment_guild": "लोगों को परेशान करना, धमकाना या पीछा करना", + "report_flow.label.harassment_profile": "उनकी प्रोफ़ाइल मुझे या किसी और को परेशान करती है या निशाना बनाती है", + "report_flow.label.harmful_false_claims": "झूठे दावे जिनसे वास्तविक दुनिया में गंभीर नुकसान हो सकता है", + "report_flow.label.hate": "लोगों की पहचान के कारण उनसे नफ़रत या भेदभाव", + "report_flow.label.hate_dehumanizing": "लोगों की जानवरों, बीमारी या गंदगी से तुलना करना, या उन्हें इंसान से कम समझना", + "report_flow.label.hate_incitement": "किसी समूह के खिलाफ हिंसा या बहिष्कार का आह्वान", + "report_flow.label.hate_other": "लोगों की पहचान के कारण उन पर अन्य हमले", + "report_flow.label.hate_slurs": "अपमानजनक शब्द, नफ़रत भरे प्रतीक या नीचा दिखाने वाली रूढ़ धारणाएँ", + "report_flow.label.hate_violence": "नफ़रत, हिंसा या उग्रवाद", + "report_flow.label.identity": "यौन रुझान, लिंग पहचान या इंटरसेक्स स्थिति", + "report_flow.label.illegal_activity": "अन्य अवैध गतिविधि", + "report_flow.label.illegal_goods": "ड्रग, हथियार या अन्य अवैध बिक्री", + "report_flow.label.impersonation": "खुद को किसी और के रूप में दिखाना, या लोगों को ठगना", + "report_flow.label.impersonation_guild": "खुद को {product_name} या किसी अन्य संगठन के रूप में दिखाना", + "report_flow.label.impersonation_organization": "कोई कंपनी, ब्रांड या समूह", + "report_flow.label.impersonation_person": "मैं या मेरा कोई करीबी", + "report_flow.label.impersonation_public_figure": "कोई प्रसिद्ध व्यक्ति, जैसे कोई क्रिएटर या राजनेता", + "report_flow.label.impersonation_staff": "{product_name} के कर्मचारी या सहायता टीम", + "report_flow.label.intimate_image_abuse": "बिना सहमति के शेयर की गई अंतरंग तस्वीरें, जिनमें डीपफेक भी शामिल हैं, या उन्हें शेयर करने की धमकी", + "report_flow.label.intimate_image_abuse_guild": "बिना सहमति के अंतरंग तस्वीरें शेयर करना, जिनमें डीपफेक भी शामिल हैं", + "report_flow.label.intimate_image_abuse_profile": "बिना सहमति के शेयर की गई किसी की अंतरंग तस्वीरें, जिनमें डीपफेक भी शामिल हैं", + "report_flow.label.intimate_photo": "अंतरंग या नग्न तस्वीर", + "report_flow.label.invite_splash": "इनवाइट स्प्लैश", + "report_flow.label.ip_address": "IP पता", + "report_flow.label.learn_more": "{product_name} कम्युनिटी दिशानिर्देश पढ़ें", + "report_flow.label.legal_name": "वास्तविक या कानूनी नाम", + "report_flow.label.lgbtq_targeting": "जानबूझकर किसी को गलत जेंडर से संबोधित करना, उसके पुराने नाम (डेडनेम) से पुकारना, उसकी यौन या लिंग पहचान को बिना उसकी मर्ज़ी के उजागर करना, या उसकी पहचान से इनकार करना", + "report_flow.label.malware_guild": "मालवेयर या फ़िशिंग लिंक वितरित करना", + "report_flow.label.malware_phishing": "फ़िशिंग, मालवेयर या हैकिंग के प्रयास", + "report_flow.label.member_activity": "सदस्य वहाँ क्या पोस्ट करते हैं या क्या करते हैं", + "report_flow.label.metric_manipulation": "सदस्यों या रिएक्शन की संख्या को नकली दिखाना", + "report_flow.label.minor_contact": "किसी नाबालिग को मिलने के लिए कहना, या उससे फ़ोटो या व्यक्तिगत जानकारी माँगना, ऐसे तरीके से जो शिकारी प्रवृत्ति जैसा लगे", + "report_flow.label.minor_dating_community": "यह नाबालिगों के बीच डेटिंग के लिए एक कम्युनिटी है", + "report_flow.label.minor_fictional": "किसी काल्पनिक बच्चे की चित्रित, लिखित या AI से बनाई गई यौन सामग्री", + "report_flow.label.minor_grooming": "किसी नाबालिग की ग्रूमिंग करना या उसके साथ अनुचित भरोसा बनाना", + "report_flow.label.minor_grooming_guild": "सदस्य नाबालिगों की ग्रूमिंग करते हैं या उनके साथ अनुचित भरोसा बनाते हैं", + "report_flow.label.minor_in_adult_space": "कोई नाबालिग 18+ चैनल या कम्युनिटी में है", + "report_flow.label.minor_in_adult_space_guild": "नाबालिगों को 18+ चैनलों में जाने की अनुमति है", + "report_flow.label.minor_risk": "नाबालिग को जोखिम में डालना", + "report_flow.label.minor_risk_guild": "नाबालिगों को जोखिम में डालना", + "report_flow.label.minor_sexual": "किसी नाबालिग को यौन रूप से निशाना बनाना", + "report_flow.label.minor_sexual_contact": "किसी नाबालिग के साथ फ़्लर्ट करना या उन्हें यौन रूप से मैसेज करना", + "report_flow.label.minor_sexual_contact_guild": "सदस्य नाबालिगों के साथ फ़्लर्ट करते हैं या उन्हें यौन रूप से मैसेज करते हैं", + "report_flow.label.minor_sexual_content": "कोई नाबालिग खुद यौन सामग्री शेयर कर रहा है", + "report_flow.label.minor_sexual_content_guild": "नाबालिग यौन सामग्री पोस्ट करते हैं या भेजते हैं", + "report_flow.label.minor_sexual_content_profile": "यौन सामग्री वाली किसी नाबालिग की प्रोफ़ाइल", + "report_flow.label.minor_sexual_guild": "नाबालिगों को यौन रूप से निशाना बनाना", + "report_flow.label.minor_sexualization": "नाबालिगों के बारे में यौन टिप्पणियाँ", + "report_flow.label.minor_sexualization_guild": "सदस्य नाबालिगों के बारे में यौन टिप्पणियाँ करते हैं", + "report_flow.label.minor_sexualization_profile": "उनकी प्रोफ़ाइल में नाबालिगों के बारे में यौन टिप्पणियाँ", + "report_flow.label.name": "नाम", + "report_flow.label.other": "कुछ ऐसा जो यहाँ सूचीबद्ध नहीं है", + "report_flow.label.other_identifying": "अन्य जानकारी जिससे किसी की पहचान या स्थान का पता चल सके", + "report_flow.label.permits_violations": "यह गंभीर नियम-उल्लंघन की अनुमति देता है", + "report_flow.label.phone": "फ़ोन नंबर", + "report_flow.label.photo": "तस्वीरें", + "report_flow.label.platform_abuse": "स्क्रैपिंग, ऑटोमेशन या अन्य प्लेटफ़ॉर्म का दुरुपयोग", + "report_flow.label.private_conversation": "निजी मैसेज, स्क्रीनशॉट या कॉल रिकॉर्डिंग", + "report_flow.label.private_info": "किसी की निजी जानकारी शेयर करना", + "report_flow.label.private_info_profile": "उनकी प्रोफ़ाइल में किसी की निजी जानकारी शेयर की गई है", + "report_flow.label.profile_text": "प्रोफ़ाइल टेक्स्ट", + "report_flow.label.raid": "रेड या पाइल-ऑन का आयोजन करना या उसमें शामिल होना", + "report_flow.label.raid_guild": "लोगों या कम्युनिटी के ख़िलाफ़ रेड या पाइल-ऑन का आयोजन करना", + "report_flow.label.rude_language": "गाली-गलौज या अभद्र टिप्पणी", + "report_flow.label.self_harm": "कोई खुद को नुकसान पहुँचा सकता है, या खुद को नुकसान पहुँचाने के लिए प्रोत्साहित कर रहा है", + "report_flow.label.self_harm_graphic": "खुद को नुकसान पहुँचाने की ग्राफ़िक तस्वीरें", + "report_flow.label.self_harm_guild": "सदस्य दूसरों को खुद को नुकसान पहुँचाने के लिए उकसाते हैं", + "report_flow.label.self_harm_pressure": "किसी को खुद को चोट पहुँचाने के लिए दबाव डालना या चुनौती देना", + "report_flow.label.self_harm_pressure_guild": "लोगों को खुद को चोट पहुँचाने के लिए दबाव डालना या चुनौती देना", + "report_flow.label.self_harm_profile": "उनकी प्रोफ़ाइल से लगता है कि वे खुद को नुकसान पहुँचा रहे हैं, या वह इसे बढ़ावा देती है", + "report_flow.label.self_harm_promotion": "खुद को नुकसान पहुँचाने को प्रोत्साहित करना या तरीके शेयर करना", + "report_flow.label.self_harm_promotion_profile": "उनकी प्रोफ़ाइल खुद को नुकसान पहुँचाने को बढ़ावा देती है", + "report_flow.label.sexual": "यौन सामग्री", + "report_flow.label.sexual_exploitation": "यौन शोषण, ज़बरदस्ती या तस्करी", + "report_flow.label.sexual_unwanted": "अनचाही यौन तस्वीरें या मैसेज", + "report_flow.label.something_else": "कुछ और", + "report_flow.label.spam": "स्पैम या अवांछित विज्ञापन", + "report_flow.label.spam_bulk": "बल्क में स्पैम या विज्ञापन भेजना", + "report_flow.label.spam_or_manipulation": "स्पैम या प्लेटफ़ॉर्म में हेरफेर", + "report_flow.label.spam_profile": "उनकी प्रोफ़ाइल का उपयोग स्पैम या विज्ञापन के लिए किया जाता है", + "report_flow.label.suicide_promotion": "आत्महत्या को प्रोत्साहित करना या तरीके शेयर करना", + "report_flow.label.suicide_promotion_profile": "उनकी प्रोफ़ाइल आत्महत्या को बढ़ावा देती है", + "report_flow.label.synthetic_media": "नकली या AI-निर्मित मीडिया को वास्तविक के रूप में प्रस्तुत किया गया", + "report_flow.label.terrorism": "आतंकवाद या हिंसक उग्रवाद", + "report_flow.label.terrorism_guild": "आतंकवाद या हिंसक उग्रवाद के लिए भर्ती करना या उसे बढ़ावा देना", + "report_flow.label.threat": "धमकी या हिंसा का आह्वान", + "report_flow.label.threat_to_share": "वे इसे शेयर करने की धमकी दे रहे हैं", + "report_flow.label.too_young": "वे {product_name} का उपयोग करने की न्यूनतम आयु से कम हैं", + "report_flow.label.unwanted_contact": "रोकने के लिए कहे जाने, ब्लॉक किए जाने या हटाए जाने के बाद भी मेरा या किसी और का पीछा करना या बार-बार संपर्क करना", + "report_flow.label.violence_glorification": "वास्तविक दुनिया की हिंसा का महिमामंडन करना", + "report_flow.label.violence_incitement": "हिंसा को बढ़ावा देना या लोगों को चोट पहुँचाने का तरीका समझाना", + "report_flow.label.violence_misinfo": "हिंसा, उग्रवाद या हानिकारक गलत जानकारी", + "report_flow.label.violent_threat": "यह कहना कि वे किसी को चोट पहुँचाएँगे", + "report_flow.label.worried_profile": "मुझे उनकी सुरक्षा की चिंता है", + "report_flow.label.worried_self_harm": "मुझे डर है कि वे खुद को नुकसान पहुँचा सकते हैं", + "report_flow.label.worried_suicide": "मुझे डर है कि वे आत्महत्या का प्रयास कर सकते हैं", + "report_flow.notice.need_more_info.body": "इसकी समीक्षा करने के लिए, हमें ऐसा मैसेज चाहिए जिसमें वे अपनी उम्र बताते हों या स्पष्ट करते हों कि वे {product_name} की न्यूनतम आयु से कम हैं। इसके बजाय उस मैसेज की रिपोर्ट करें।", + "report_flow.notice.need_more_info.title": "हम अभी इस पर कार्रवाई नहीं कर सकते", + "report_flow.notice.need_more_info_profile.body": "इसकी समीक्षा करने के लिए, हमें वह जगह देखनी होगी जहाँ वे अपनी उम्र बताते हैं या स्पष्ट करते हैं कि वे {product_name} की न्यूनतम आयु से कम हैं। इसके बजाय उस मैसेज या प्रोफ़ाइल की रिपोर्ट करें।", + "report_flow.screen.abuse.title": "इसमें क्या शामिल है?", + "report_flow.screen.abuse_guild.title": "इस कम्युनिटी के लोग क्या कर रहे हैं?", + "report_flow.screen.age_stated_message.title": "क्या इस मैसेज में उनकी उम्र बताई गई है?", + "report_flow.screen.age_stated_profile.title": "क्या उनकी प्रोफ़ाइल में उनकी उम्र बताई गई है?", + "report_flow.screen.community_parts.subtitle": "जितनी ज़रूरत हो उतने चुनें।", + "report_flow.screen.community_parts.title": "कम्युनिटी के कौन से हिस्से शामिल हैं?", + "report_flow.screen.crisis_support.subtitle": "संकट हेल्पलाइन मुफ़्त, गोपनीय सहायता प्रदान करती हैं।", + "report_flow.screen.crisis_support.title": "कोई अभी मदद कर सकता है", + "report_flow.screen.false_info.subtitle": "राय, व्यंग्य और नेकनीयती से की गई बहस की अनुमति है। गैर-कानूनी मानहानि की रिपोर्ट डिजिटल सेवा अधिनियम (DSA) के तहत की जा सकती है।", + "report_flow.screen.false_info.subtitle_self_hosted": "राय, व्यंग्य और नेकनीयती से की गई बहस की अनुमति है।", + "report_flow.screen.false_info.title": "इसमें क्या भ्रामक है?", + "report_flow.screen.harassment.title": "किसी को कैसे निशाना बनाया जा रहा है?", + "report_flow.screen.hate.title": "यह लोगों पर उनकी पहचान के कारण कैसे हमला करता है?", + "report_flow.screen.impersonation.subtitle": "स्पष्ट रूप से लेबल की गई पैरोडी या रोलप्ले की अनुमति है।", + "report_flow.screen.impersonation.title": "किसकी फ़र्ज़ी पहचान बनाई जा रही है, या यह स्कैम है?", + "report_flow.screen.minor_risk.title": "यह व्यक्ति किसी नाबालिग को कैसे खतरे में डाल रहा है?", + "report_flow.screen.minor_risk_guild.title": "यह कम्युनिटी नाबालिगों को कैसे खतरे में डालती है?", + "report_flow.screen.minor_sexual.subtitle": "चित्रित, लिखित या AI से बनी सामग्री भी इसमें गिनी जाती है, अगर किसी पात्र को नाबालिग बताया गया हो या वह साफ़ तौर पर यौवन-पूर्व उम्र का हो, जिसमें lolicon, shotacon और cub शामिल हैं।", + "report_flow.screen.minor_sexual.title": "आपने किसी नाबालिग से जुड़ा क्या देखा?", + "report_flow.screen.minor_sexual_guild.title": "आपने नाबालिगों से जुड़ा क्या देखा?", + "report_flow.screen.private_info.subtitle": "जितनी ज़रूरत हो उतने चुनें। अगर किसी अंतरंग तस्वीर में 18 वर्ष से कम उम्र का कोई व्यक्ति दिख रहा है, तो वापस जाएँ और उसे “किसी नाबालिग को यौन रूप से निशाना बनाना” के तहत रिपोर्ट करें।", + "report_flow.screen.private_info.title": "कौन से निजी विवरण शामिल हैं?", + "report_flow.screen.profile_abuse.title": "उनकी प्रोफ़ाइल में क्या हानिकारक है?", + "report_flow.screen.profile_hate_violence.title": "उनकी प्रोफ़ाइल क्या दिखाती है या बढ़ावा देती है?", + "report_flow.screen.profile_intro.options_heading": "और जानें", + "report_flow.screen.profile_intro.subtitle": "हमें बताएँ कि इस प्रोफ़ाइल में क्या गलत है। उन्हें यह नहीं बताया जाएगा कि किसने रिपोर्ट किया।", + "report_flow.screen.profile_intro.title": "प्रोफ़ाइल की रिपोर्ट करें", + "report_flow.screen.profile_minor_sexual.title": "उनकी प्रोफ़ाइल में नाबालिग से जुड़ा क्या है?", + "report_flow.screen.profile_parts.subtitle": "जितनी ज़रूरत हो उतने चुनें।", + "report_flow.screen.profile_parts.title": "उनकी प्रोफ़ाइल के कौन से हिस्से समस्याग्रस्त हैं?", + "report_flow.screen.profile_private_info.title": "उनकी प्रोफ़ाइल में कौन से निजी विवरण हैं?", + "report_flow.screen.profile_sexual.title": "उनकी प्रोफ़ाइल में यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.profile_threat.title": "उनकी प्रोफ़ाइल में हिंसा कैसे शामिल है?", + "report_flow.screen.root_guild.subtitle": "इस कम्युनिटी में जो हो रहा है, उससे सबसे ज़्यादा मेल खाने वाला विकल्प चुनें।", + "report_flow.screen.root_guild.title": "इस कम्युनिटी में क्या गलत है?", + "report_flow.screen.root_message.subtitle": "सबसे ज़्यादा मेल खाने वाला विकल्प चुनें। भेजने से पहले आप सब कुछ जाँच सकते हैं।", + "report_flow.screen.root_message.title": "मैसेज की रिपोर्ट करें", + "report_flow.screen.root_user.subtitle": "उनकी प्रोफ़ाइल में जो है, उससे सबसे ज़्यादा मेल खाने वाला विकल्प चुनें।", + "report_flow.screen.root_user.title": "उनकी प्रोफ़ाइल में क्या गलत है?", + "report_flow.screen.self_harm.subtitle": "यह कहने पर किसी को दंडित नहीं किया जाता कि वह मुश्किल दौर से गुज़र रहा है। हमें अपनी चिंता बताने से हम सहायता उपलब्ध करा पाते हैं।", + "report_flow.screen.self_harm.title": "उन्होंने क्या कहा या शेयर किया?", + "report_flow.screen.self_harm_guild.title": "सदस्य क्या प्रोत्साहित कर रहे हैं?", + "report_flow.screen.self_harm_profile.title": "उनकी प्रोफ़ाइल में क्या कहा गया है या दिखाया गया है?", + "report_flow.screen.sexual.subtitle": "यदि दिखाया गया या शामिल कोई भी व्यक्ति 18 वर्ष से कम उम्र का है, तो “किसी नाबालिग को यौन रूप से निशाना बनाना” चुनें।", + "report_flow.screen.sexual.title": "यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.sexual_guild.subtitle": "यदि दिखाया गया या शामिल कोई भी व्यक्ति 18 वर्ष से कम उम्र का है, तो “नाबालिगों को यौन रूप से निशाना बनाना” चुनें।", + "report_flow.screen.sexual_guild.title": "इस कम्युनिटी में यौन सामग्री के बारे में हमें बताएँ", + "report_flow.screen.something_else_guild.title": "इस कम्युनिटी में और क्या हो रहा है?", + "report_flow.screen.something_else_message.title": "और क्या हो रहा है?", + "report_flow.screen.something_else_user.title": "इस प्रोफ़ाइल में और क्या गलत है?", + "report_flow.screen.spam_kind_guild.title": "यह कम्युनिटी प्लेटफ़ॉर्म का दुरुपयोग कैसे कर रही है?", + "report_flow.screen.spam_profile.title": "अकाउंट का दुरुपयोग कैसे किया जा रहा है?", + "report_flow.screen.threat.title": "इसमें हिंसा किस तरह शामिल है?", + "report_flow.screen.violence_misinfo.title": "इनमें से कौन सा इससे मेल खाता है?", + "report_flow.screen.violence_misinfo_guild.title": "इनमें से कौन सी बात इस कम्युनिटी में होती है?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/hr.json b/fluxer_api/src/api/content_i18n/weblate/locales/hr.json index 7bc141e34..a974f0bc4 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/hr.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/hr.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Tekstualni kanali", "guild.default_category_voice": "Glasovni kanali", "guild.default_channel_text": "općenito", - "guild.default_channel_voice": "Općenito" + "guild.default_channel_voice": "Općenito", + "report_flow.description.name": "Korisničko ime, ime za prikaz ili nadimak u zajednici", + "report_flow.description.photo": "Što koriste kao avatar i naslovnu sliku", + "report_flow.description.profile_text": "Biografija, prilagođeni status ili zamjenice", + "report_flow.label.abuse": "Zlostavljajući ili štetan sadržaj", + "report_flow.label.account_trading": "Prodaja računa ili ukradenih podataka za prijavu ili podataka o kartici", + "report_flow.label.account_trading_communities": "Kupnja ili prodaja računa ili zajednica", + "report_flow.label.address": "Kućna adresa ili radno mjesto", + "report_flow.label.adult_content_no_gate": "Sadržaj za odrasle bez ograničenja pristupa zbog dobi 18+", + "report_flow.label.adult_content_profile": "Eksplicitan sadržaj za odrasle na profilu", + "report_flow.label.adult_content_unmarked": "Sadržaj za odrasle u kanalu zajednice koji nije označen kao 18+", + "report_flow.label.age_no_message": "Ne, ne spominje se", + "report_flow.label.age_no_profile": "Ne, ne spominje se", + "report_flow.label.age_yes_message": "Da, spominje se njihova dob", + "report_flow.label.age_yes_profile": "Da, njihov profil spominje njihovu dob", + "report_flow.label.atrocity_denial": "Poricanje ili slavljenje holokausta ili drugih genocida", + "report_flow.label.ban_evasion": "Zaobilaženje zabrane pomoću drugog računa", + "report_flow.label.channel_names": "Nazivi kanala", + "report_flow.label.community_banner": "Naslovna slika zajednice", + "report_flow.label.community_icon": "Ikona zajednice", + "report_flow.label.community_name": "Naziv zajednice", + "report_flow.label.conversion_therapy": "Promicanje konverzijske terapije", + "report_flow.label.copyright": "Žalba zbog autorskih prava ili zaštitnog znaka", + "report_flow.label.crisis_lines": "Krizne linije u vašoj zemlji", + "report_flow.label.csam": "Stvarne ili AI-generirane slike ili videozapisi seksualnog zlostavljanja djece", + "report_flow.label.discovery_listing": "Unos u Otkrivanju", + "report_flow.label.dislike": "Jednostavno mi ne odgovara", + "report_flow.label.dsa": "Sadržaj koji je nezakonit u EU-u (Akt o digitalnim uslugama)", + "report_flow.label.eating_disorder_promotion": "Poticanje poremećaja hranjenja", + "report_flow.label.eating_disorder_promotion_profile": "Njihov profil promiče poremećaje hranjenja", + "report_flow.label.email": "Adresa e-pošte", + "report_flow.label.emoji_stickers": "Prilagođeni emoji ili naljepnice", + "report_flow.label.face_photo": "Fotografija njihovog lica", + "report_flow.label.fake_account": "Lažni račun, bot ili automatizirana zlouporaba", + "report_flow.label.fake_account_profile": "Lažan ili obmanjujući račun", + "report_flow.label.false_claims": "Širenje laži kako bi se naštetilo ugledu određene osobe", + "report_flow.label.false_info": "Širenje štetnih lažnih informacija", + "report_flow.label.financial": "Kartica, bankovni ili drugi financijski podaci", + "report_flow.label.fraud": "Pokušavaju prijevarom od ljudi izvući novac ili račune", + "report_flow.label.fraud_guild": "Prijevarom izvlače novac ili račune od ljudi", + "report_flow.label.government_id": "Osobni dokument ili identifikacijski broj", + "report_flow.label.graphic_violence": "Stvarno nasilje prikazano radi šokiranja, poput krvavih prizora ili okrutnosti prema životinjama", + "report_flow.label.harassment": "Zlostavljanje, uznemiravanje ili uhođenje", + "report_flow.label.harassment_direct": "Opetovano ciljanje nekoga uvredama ili zlostavljanjem", + "report_flow.label.harassment_guild": "Uznemiravanje, zlostavljanje ili uhođenje ljudi", + "report_flow.label.harassment_profile": "Njihov profil uznemirava ili cilja mene ili nekog drugog", + "report_flow.label.harmful_false_claims": "Lažne tvrdnje koje bi mogle uzrokovati ozbiljnu štetu u stvarnom svijetu", + "report_flow.label.hate": "Mržnja ili diskriminacija prema ljudima zbog onoga što jesu", + "report_flow.label.hate_dehumanizing": "Uspoređivanje ljudi sa životinjama, bolešću ili prljavštinom ili njihovo proglašavanje manje vrijednima od ljudi", + "report_flow.label.hate_incitement": "Pozivi na nasilje nad skupinom ili na njezino isključivanje", + "report_flow.label.hate_other": "Drugi napadi na ljude zbog onoga što jesu", + "report_flow.label.hate_slurs": "Pogrdni nazivi, simboli mržnje ili ponižavajući stereotipi", + "report_flow.label.hate_violence": "Mržnja, nasilje ili ekstremizam", + "report_flow.label.identity": "Seksualna orijentacija, rodni identitet ili interseksualni status", + "report_flow.label.illegal_activity": "Ostale nezakonite aktivnosti", + "report_flow.label.illegal_goods": "Prodaja droge, oružja ili druge nezakonite robe", + "report_flow.label.impersonation": "Lažno predstavljanje ili varanje ljudi", + "report_flow.label.impersonation_guild": "Pretvaranje da su {product_name} ili druga organizacija", + "report_flow.label.impersonation_organization": "Tvrtka, brend ili grupa", + "report_flow.label.impersonation_person": "Mene ili nekoga meni bliskog", + "report_flow.label.impersonation_public_figure": "Poznata osoba, poput kreatora ili političara", + "report_flow.label.impersonation_staff": "Osoblje ili podrška aplikacije {product_name}", + "report_flow.label.intimate_image_abuse": "Intimne slike podijeljene bez pristanka, uključujući deepfakeove, ili prijetnja njihovim dijeljenjem", + "report_flow.label.intimate_image_abuse_guild": "Dijeljenje intimnih slika bez pristanka, uključujući deepfakeove", + "report_flow.label.intimate_image_abuse_profile": "Intimne slike nekoga podijeljene bez pristanka, uključujući deepfakeove", + "report_flow.label.intimate_photo": "Intimna ili gola fotografija", + "report_flow.label.invite_splash": "Pozadinska slika pozivnice", + "report_flow.label.ip_address": "IP adresa", + "report_flow.label.learn_more": "Pročitajte smjernice zajednice aplikacije {product_name}", + "report_flow.label.legal_name": "Pravo ili zakonsko ime", + "report_flow.label.lgbtq_targeting": "Namjerno pogrešno oslovljavanje po rodu, korištenje nečijeg starog imena (deadnaming), javno razotkrivanje nečije seksualne orijentacije ili rodnog identiteta ili poricanje nečijeg identiteta", + "report_flow.label.malware_guild": "Distribucija zlonamjernog softvera ili phishing poveznica", + "report_flow.label.malware_phishing": "Phishing, zlonamjerni softver ili pokušaji hakiranja", + "report_flow.label.member_activity": "Što članovi tamo objavljuju ili rade", + "report_flow.label.metric_manipulation": "Lažiranje broja članova ili reakcija", + "report_flow.label.minor_contact": "Traženje od maloljetnika susreta, fotografija ili osobnih podataka na način koji djeluje predatorski", + "report_flow.label.minor_dating_community": "To je zajednica za spojeve među maloljetnicima", + "report_flow.label.minor_fictional": "Nacrtani, pisani ili AI-generirani seksualni sadržaj o izmišljenom djetetu", + "report_flow.label.minor_grooming": "Mamljenje (grooming) ili uspostavljanje neprikladnog povjerenja s maloljetnikom", + "report_flow.label.minor_grooming_guild": "Članovi mame maloljetnike (grooming) ili uspostavljaju neprikladno povjerenje s njima", + "report_flow.label.minor_in_adult_space": "Maloljetnik je u kanalu ili zajednici 18+", + "report_flow.label.minor_in_adult_space_guild": "Maloljetnicima je dopušten pristup kanalima 18+", + "report_flow.label.minor_risk": "Izlaganje maloljetnika riziku", + "report_flow.label.minor_risk_guild": "Izlaganje maloljetnika riziku", + "report_flow.label.minor_sexual": "Seksualiziranje maloljetne osobe", + "report_flow.label.minor_sexual_contact": "Koketiranje s maloljetnikom ili slanje seksualnih poruka maloljetniku", + "report_flow.label.minor_sexual_contact_guild": "Članovi koketiraju s maloljetnicima ili im šalju seksualne poruke", + "report_flow.label.minor_sexual_content": "Maloljetnik sam dijeli seksualni sadržaj", + "report_flow.label.minor_sexual_content_guild": "Maloljetnici objavljuju ili šalju seksualni sadržaj", + "report_flow.label.minor_sexual_content_profile": "Profil maloljetnika sa seksualnim sadržajem", + "report_flow.label.minor_sexual_guild": "Seksualiziranje maloljetnika", + "report_flow.label.minor_sexualization": "Seksualni komentari o maloljetnicima", + "report_flow.label.minor_sexualization_guild": "Članovi iznose seksualne komentare o maloljetnicima", + "report_flow.label.minor_sexualization_profile": "Seksualni komentari o maloljetnicima na njihovom profilu", + "report_flow.label.name": "Imena", + "report_flow.label.other": "Nešto što ovdje nije navedeno", + "report_flow.label.other_identifying": "Ostale informacije koje bi mogle identificirati ili locirati nekoga", + "report_flow.label.permits_violations": "Dopušta ozbiljno kršenje pravila", + "report_flow.label.phone": "Telefonski broj", + "report_flow.label.photo": "Slike", + "report_flow.label.platform_abuse": "Scraping, automatizacija ili druga zlouporaba platforme", + "report_flow.label.private_conversation": "Privatne poruke, snimke zaslona ili snimke poziva", + "report_flow.label.private_info": "Dijeljenje nečijih privatnih podataka", + "report_flow.label.private_info_profile": "Njihov profil dijeli nečije privatne podatke", + "report_flow.label.profile_text": "Tekst profila", + "report_flow.label.raid": "Organiziranje ili sudjelovanje u koordiniranom napadu ili hajci", + "report_flow.label.raid_guild": "Organiziranje koordiniranih napada ili hajki na ljude ili zajednice", + "report_flow.label.rude_language": "Psovanje ili nepristojne primjedbe", + "report_flow.label.self_harm": "Netko bi se mogao ozlijediti ili potiče samoozljeđivanje", + "report_flow.label.self_harm_graphic": "Eksplicitne slike samoozljeđivanja", + "report_flow.label.self_harm_guild": "Članovi potiču druge na samoozljeđivanje", + "report_flow.label.self_harm_pressure": "Pritiskanje ili izazivanje nekoga da se ozlijedi", + "report_flow.label.self_harm_pressure_guild": "Pritiskanje ili izazivanje ljudi da se ozlijede", + "report_flow.label.self_harm_profile": "Njihov profil upućuje na samoozljeđivanje ili ga potiče", + "report_flow.label.self_harm_promotion": "Poticanje samoozljeđivanja ili dijeljenje metoda", + "report_flow.label.self_harm_promotion_profile": "Njihov profil potiče samoozljeđivanje", + "report_flow.label.sexual": "Seksualni sadržaj", + "report_flow.label.sexual_exploitation": "Seksualno iskorištavanje, prisila ili trgovina ljudima", + "report_flow.label.sexual_unwanted": "Neželjene seksualne slike ili poruke", + "report_flow.label.something_else": "Nešto drugo", + "report_flow.label.spam": "Neželjena pošta ili neželjeno oglašavanje", + "report_flow.label.spam_bulk": "Masovno slanje neželjene pošte ili oglasa", + "report_flow.label.spam_or_manipulation": "Neželjena pošta ili manipulacija platformom", + "report_flow.label.spam_profile": "Njihov profil koristi se za neželjenu poštu ili oglašavanje", + "report_flow.label.suicide_promotion": "Poticanje na samoubojstvo ili dijeljenje metoda", + "report_flow.label.suicide_promotion_profile": "Njihov profil potiče na samoubojstvo", + "report_flow.label.synthetic_media": "Lažni mediji ili mediji izrađeni pomoću AI-ja predstavljeni kao stvarni", + "report_flow.label.terrorism": "Terorizam ili nasilni ekstremizam", + "report_flow.label.terrorism_guild": "Novačenje za terorizam ili nasilni ekstremizam ili njihovo promicanje", + "report_flow.label.threat": "Prijetnje ili pozivi na nasilje", + "report_flow.label.threat_to_share": "Prijeti da će to podijeliti", + "report_flow.label.too_young": "Ta je osoba mlađa od minimalne dobi za korištenje aplikacije {product_name}", + "report_flow.label.unwanted_contact": "Uhođenje ili opetovano kontaktiranje mene ili nekog drugog nakon zahtjeva da prestane, nakon blokiranja ili uklanjanja", + "report_flow.label.violence_glorification": "Veličanje nasilja u stvarnom svijetu", + "report_flow.label.violence_incitement": "Poticanje na nasilje ili objašnjavanje kako ozlijediti ljude", + "report_flow.label.violence_misinfo": "Nasilje, ekstremizam ili štetne lažne informacije", + "report_flow.label.violent_threat": "Govore da će nekoga ozlijediti", + "report_flow.label.worried_profile": "Brine me sigurnost te osobe", + "report_flow.label.worried_self_harm": "Bojim se da bi se ta osoba mogla ozlijediti", + "report_flow.label.worried_suicide": "Bojim se da bi ta osoba mogla pokušati počiniti samoubojstvo", + "report_flow.notice.need_more_info.body": "Da bismo ovo pregledali, potrebna nam je poruka u kojoj navode koliko imaju godina ili jasno daju do znanja da su mlađi od minimalne dobi za korištenje aplikacije {product_name}. Umjesto toga prijavite tu poruku.", + "report_flow.notice.need_more_info.title": "Još ne možemo postupiti po ovome", + "report_flow.notice.need_more_info_profile.body": "Da bismo ovo pregledali, trebamo vidjeti gdje navode koliko imaju godina ili jasno daju do znanja da su mlađi od minimalne dobi za korištenje aplikacije {product_name}. Umjesto toga prijavite tu poruku ili profil.", + "report_flow.screen.abuse.title": "O čemu je riječ?", + "report_flow.screen.abuse_guild.title": "Što rade ljudi u ovoj zajednici?", + "report_flow.screen.age_stated_message.title": "Kaže li ova poruka koliko imaju godina?", + "report_flow.screen.age_stated_profile.title": "Navodi li njihov profil koliko imaju godina?", + "report_flow.screen.community_parts.subtitle": "Odaberite onoliko stavki koliko vam je potrebno.", + "report_flow.screen.community_parts.title": "Koji su dijelovi zajednice uključeni?", + "report_flow.screen.crisis_support.subtitle": "Krizne linije nude besplatnu, povjerljivu podršku.", + "report_flow.screen.crisis_support.title": "Netko vam može pomoći odmah", + "report_flow.screen.false_info.subtitle": "Mišljenja, satira i dobronamjerna rasprava dopušteni su. Nezakonita kleveta može se prijaviti prema Aktu o digitalnim uslugama.", + "report_flow.screen.false_info.subtitle_self_hosted": "Mišljenja, satira i dobronamjerna rasprava dopušteni su.", + "report_flow.screen.false_info.title": "Što je u tome obmanjujuće?", + "report_flow.screen.harassment.title": "Kako je netko na meti?", + "report_flow.screen.hate.title": "Kako napada ljude zbog onoga što jesu?", + "report_flow.screen.impersonation.subtitle": "Jasno označena parodija ili igranje uloga dopušteni su.", + "report_flow.screen.impersonation.title": "Za koga se netko lažno predstavlja ili je riječ o prijevari?", + "report_flow.screen.minor_risk.title": "Kako ta osoba dovodi maloljetnika u opasnost?", + "report_flow.screen.minor_risk_guild.title": "Kako ova zajednica dovodi maloljetnike u opasnost?", + "report_flow.screen.minor_sexual.subtitle": "Nacrtani, pisani ili AI sadržaj računa se kada je lik opisan kao maloljetnik ili je jasno prepubertetski, uključujući lolicon, shotacon i cub.", + "report_flow.screen.minor_sexual.title": "Što ste vidjeli u vezi s maloljetnom osobom?", + "report_flow.screen.minor_sexual_guild.title": "Što ste vidjeli u vezi s maloljetnicima?", + "report_flow.screen.private_info.subtitle": "Odaberite onoliko stavki koliko vam je potrebno. Ako intimna fotografija prikazuje osobu mlađu od 18 godina, vratite se i prijavite je pod „Seksualiziranje maloljetne osobe“.", + "report_flow.screen.private_info.title": "Koji su privatni podaci uključeni?", + "report_flow.screen.profile_abuse.title": "Što je štetno na njihovom profilu?", + "report_flow.screen.profile_hate_violence.title": "Što njihov profil prikazuje ili promiče?", + "report_flow.screen.profile_intro.options_heading": "Saznajte više", + "report_flow.screen.profile_intro.subtitle": "Recite nam što nije u redu s ovim profilom. Neće im biti rečeno tko ih je prijavio.", + "report_flow.screen.profile_intro.title": "Prijavi profil", + "report_flow.screen.profile_minor_sexual.title": "Što u njihovom profilu uključuje maloljetnika?", + "report_flow.screen.profile_parts.subtitle": "Odaberite onoliko stavki koliko vam je potrebno.", + "report_flow.screen.profile_parts.title": "Koji dijelovi njihovog profila predstavljaju problem?", + "report_flow.screen.profile_private_info.title": "Koji se privatni podaci nalaze na njihovom profilu?", + "report_flow.screen.profile_sexual.title": "Recite nam o seksualnom sadržaju na njihovom profilu", + "report_flow.screen.profile_threat.title": "Kako njihov profil uključuje nasilje?", + "report_flow.screen.root_guild.subtitle": "Odaberite ono što najbolje odgovara onome što se događa u ovoj zajednici.", + "report_flow.screen.root_guild.title": "Što nije u redu s ovom zajednicom?", + "report_flow.screen.root_message.subtitle": "Odaberite ono što najbolje odgovara. Sve možete provjeriti prije slanja.", + "report_flow.screen.root_message.title": "Prijavi poruku", + "report_flow.screen.root_user.subtitle": "Odaberite ono što najbolje odgovara sadržaju njihova profila.", + "report_flow.screen.root_user.title": "Što nije u redu s njihovim profilom?", + "report_flow.screen.self_harm.subtitle": "Nitko se ne kažnjava zato što kaže da mu je teško. Ako nam kažete da ste zabrinuti, to nam pomaže da ponudimo podršku.", + "report_flow.screen.self_harm.title": "Što su rekli ili podijelili?", + "report_flow.screen.self_harm_guild.title": "Što članovi potiču?", + "report_flow.screen.self_harm_profile.title": "Što njihov profil govori ili prikazuje?", + "report_flow.screen.sexual.subtitle": "Ako je bilo koja prikazana ili uključena osoba mlađa od 18 godina, odaberite „Seksualiziranje maloljetne osobe“.", + "report_flow.screen.sexual.title": "Recite nam o seksualnom sadržaju", + "report_flow.screen.sexual_guild.subtitle": "Ako je bilo koja prikazana ili uključena osoba mlađa od 18 godina, odaberite „Seksualiziranje maloljetnika“.", + "report_flow.screen.sexual_guild.title": "Recite nam o seksualnom sadržaju u ovoj zajednici", + "report_flow.screen.something_else_guild.title": "Što se još događa u ovoj zajednici?", + "report_flow.screen.something_else_message.title": "Što se još događa?", + "report_flow.screen.something_else_user.title": "Što još nije u redu s ovim profilom?", + "report_flow.screen.spam_kind_guild.title": "Kako ova zajednica zloupotrebljava platformu?", + "report_flow.screen.spam_profile.title": "Kako se račun zloupotrebljava?", + "report_flow.screen.threat.title": "Kako to uključuje nasilje?", + "report_flow.screen.violence_misinfo.title": "Što od ovoga odgovara?", + "report_flow.screen.violence_misinfo_guild.title": "Što se od ovoga događa u ovoj zajednici?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/hu.json b/fluxer_api/src/api/content_i18n/weblate/locales/hu.json index 41f234023..7ace7a60b 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/hu.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/hu.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Szöveges csatornák", "guild.default_category_voice": "Hangcsatornák", "guild.default_channel_text": "általános", - "guild.default_channel_voice": "Általános" + "guild.default_channel_voice": "Általános", + "report_flow.description.name": "Felhasználónév, megjelenítendő név vagy közösségi becenév", + "report_flow.description.photo": "Amit profilképként és borítóképként használnak", + "report_flow.description.profile_text": "Bemutatkozás, egyéni állapot vagy névmások", + "report_flow.label.abuse": "Bántalmazó vagy káros tartalom", + "report_flow.label.account_trading": "Fiókok, lopott bejelentkezési adatok vagy kártyaadatok eladása", + "report_flow.label.account_trading_communities": "Fiókok vagy közösségek vásárlása vagy eladása", + "report_flow.label.address": "Otthoni cím vagy munkahely", + "report_flow.label.adult_content_no_gate": "Felnőtt tartalom 18+ korhatár nélkül", + "report_flow.label.adult_content_profile": "Kifejezetten felnőtt tartalom a profiljukban", + "report_flow.label.adult_content_unmarked": "Felnőtt tartalom egy közösségi csatornán, amely nincs 18+ jelöléssel ellátva", + "report_flow.label.age_no_message": "Nem, nem említi", + "report_flow.label.age_no_profile": "Nem, nem említi", + "report_flow.label.age_yes_message": "Igen, megemlíti a korát", + "report_flow.label.age_yes_profile": "Igen, a profiljuk említi a korukat", + "report_flow.label.atrocity_denial": "A holokauszt vagy más népirtások tagadása vagy dicsőítése", + "report_flow.label.ban_evasion": "Kitiltás megkerülése másik fiókkal", + "report_flow.label.channel_names": "Csatornanevek", + "report_flow.label.community_banner": "Közösség borítóképe", + "report_flow.label.community_icon": "Közösség ikonja", + "report_flow.label.community_name": "Közösség neve", + "report_flow.label.conversion_therapy": "Konverziós terápia népszerűsítése", + "report_flow.label.copyright": "Szerzői jogi vagy védjegyekkel kapcsolatos panasz", + "report_flow.label.crisis_lines": "Krízisvonalak az országodban", + "report_flow.label.csam": "Gyermekek szexuális bántalmazását ábrázoló valódi vagy mesterséges intelligencia által generált képek vagy videók", + "report_flow.label.discovery_listing": "Listázás a Felfedezésben", + "report_flow.label.dislike": "Egyszerűen nem nekem való", + "report_flow.label.dsa": "Az EU-ban illegális tartalom (digitális szolgáltatásokról szóló rendelet, DSA)", + "report_flow.label.eating_disorder_promotion": "Kóros étkezési szokásokra buzdítás", + "report_flow.label.eating_disorder_promotion_profile": "A profilja evészavarokat népszerűsít", + "report_flow.label.email": "E-mail-cím", + "report_flow.label.emoji_stickers": "Egyéni emoji vagy matricák", + "report_flow.label.face_photo": "Arcfotó", + "report_flow.label.fake_account": "Hamis fiók, bot vagy automatizált visszaélés", + "report_flow.label.fake_account_profile": "Hamis vagy megtévesztő fiók", + "report_flow.label.false_claims": "Hazugságok terjesztése egy adott személy hírnevének rontása céljából", + "report_flow.label.false_info": "Káros hamis információk terjesztése", + "report_flow.label.financial": "Kártya, banki vagy egyéb pénzügyi adatok", + "report_flow.label.fraud": "Pénzt vagy fiókokat próbálnak kicsalni emberekből", + "report_flow.label.fraud_guild": "Pénz vagy fiókok kicsalása emberekből", + "report_flow.label.government_id": "Személyazonosító okmány vagy azonosító szám", + "report_flow.label.graphic_violence": "Sokkolási céllal bemutatott valódi erőszak, például brutális vérontás vagy állatkínzás", + "report_flow.label.harassment": "Megfélemlítés, zaklatás vagy üldözés", + "report_flow.label.harassment_direct": "Valaki ismételt támadása sértésekkel vagy bántalmazással", + "report_flow.label.harassment_guild": "Emberek zaklatása, megfélemlítése vagy üldözése", + "report_flow.label.harassment_profile": "A profilja engem vagy valaki mást zaklat vagy céloz meg", + "report_flow.label.harmful_false_claims": "Hamis állítások, amelyek súlyos, valós károkat okozhatnak", + "report_flow.label.hate": "Gyűlölet vagy diszkrimináció emberekkel szemben az identitásuk miatt", + "report_flow.label.hate_dehumanizing": "Emberek összehasonlítása állatokkal, betegségekkel vagy szennyel, vagy ember alatti lényeknek nevezése", + "report_flow.label.hate_incitement": "Erőszakra vagy kirekesztésre való felhívás egy csoport ellen", + "report_flow.label.hate_other": "Egyéb támadások emberek ellen az identitásuk miatt", + "report_flow.label.hate_slurs": "Becsmérlő kifejezések, gyűlöletkeltő szimbólumok vagy megalázó sztereotípiák", + "report_flow.label.hate_violence": "Gyűlölet, erőszak vagy szélsőségesség", + "report_flow.label.identity": "Szexuális irányultság, nemi identitás vagy interszexuális státusz", + "report_flow.label.illegal_activity": "Egyéb illegális tevékenység", + "report_flow.label.illegal_goods": "Kábítószer, fegyver vagy más illegális termékek árusítása", + "report_flow.label.impersonation": "Valaki megszemélyesítése vagy emberek átverése", + "report_flow.label.impersonation_guild": "A(z) {product_name} vagy más szervezet megszemélyesítése", + "report_flow.label.impersonation_organization": "Egy cég, márka vagy csoport", + "report_flow.label.impersonation_person": "Én vagy egy hozzám közel álló személy", + "report_flow.label.impersonation_public_figure": "Egy ismert személy, például alkotó vagy politikus", + "report_flow.label.impersonation_staff": "A(z) {product_name} munkatársa vagy ügyfélszolgálata", + "report_flow.label.intimate_image_abuse": "Hozzájárulás nélkül megosztott intim képek, beleértve a deepfake-eket, vagy a megosztásukkal való fenyegetés", + "report_flow.label.intimate_image_abuse_guild": "Intim képek megosztása hozzájárulás nélkül, beleértve a deepfake-eket", + "report_flow.label.intimate_image_abuse_profile": "Valakiről hozzájárulás nélkül megosztott intim képek, beleértve a deepfake-eket", + "report_flow.label.intimate_photo": "Intim vagy meztelen fotó", + "report_flow.label.invite_splash": "Meghívó háttérképe", + "report_flow.label.ip_address": "IP-cím", + "report_flow.label.learn_more": "Olvasd el a(z) {product_name} közösségi irányelveit", + "report_flow.label.legal_name": "Valódi vagy hivatalos név", + "report_flow.label.lgbtq_targeting": "Valaki nemi identitásának szándékos figyelmen kívül hagyása (misgendering), korábbi nevének használata (deadnaming), beleegyezése nélküli felfedése (outing), vagy identitásának tagadása", + "report_flow.label.malware_guild": "Rosszindulatú szoftverek vagy adathalász linkek terjesztése", + "report_flow.label.malware_phishing": "Adathalászat, rosszindulatú szoftverek vagy feltörési kísérletek", + "report_flow.label.member_activity": "Amit a tagok posztolnak vagy csinálnak ott", + "report_flow.label.metric_manipulation": "Tagok vagy reakciók számának hamisítása", + "report_flow.label.minor_contact": "Kiskorú felkérése találkozóra, fotók vagy személyes adatok küldésére úgy, hogy az ragadozó viselkedésnek tűnik", + "report_flow.label.minor_dating_community": "Ez egy kiskorúak közötti randevúzásra szolgáló közösség", + "report_flow.label.minor_fictional": "Rajzolt, írott vagy mesterséges intelligencia által generált szexuális tartalom egy kitalált gyermekről", + "report_flow.label.minor_grooming": "Kiskorú behálózása (grooming) vagy nem helyénvaló bizalmi kapcsolat kiépítése vele", + "report_flow.label.minor_grooming_guild": "A tagok kiskorúakat hálóznak be (grooming) vagy nem helyénvaló bizalmi kapcsolatot építenek ki velük", + "report_flow.label.minor_in_adult_space": "Kiskorú tartózkodik egy 18+ csatornán vagy közösségben", + "report_flow.label.minor_in_adult_space_guild": "Kiskorúak számára engedélyezett a belépés a 18+ csatornákra", + "report_flow.label.minor_risk": "Kiskorú veszélyeztetése", + "report_flow.label.minor_risk_guild": "Kiskorúak veszélyeztetése", + "report_flow.label.minor_sexual": "Kiskorú szexualizálása", + "report_flow.label.minor_sexual_contact": "Kiskorúval való flörtölés vagy szexuális üzenetek küldése neki", + "report_flow.label.minor_sexual_contact_guild": "A tagok kiskorúakkal flörtölnek vagy szexuális üzeneteket küldenek nekik", + "report_flow.label.minor_sexual_content": "Egy kiskorú maga oszt meg szexuális tartalmat", + "report_flow.label.minor_sexual_content_guild": "Kiskorúak szexuális tartalmat posztolnak vagy küldenek", + "report_flow.label.minor_sexual_content_profile": "Egy kiskorú profilja szexuális tartalommal", + "report_flow.label.minor_sexual_guild": "Kiskorúak szexualizálása", + "report_flow.label.minor_sexualization": "Kiskorúakkal kapcsolatos szexuális megjegyzések", + "report_flow.label.minor_sexualization_guild": "A tagok kiskorúakkal kapcsolatos szexuális megjegyzéseket tesznek", + "report_flow.label.minor_sexualization_profile": "Kiskorúakkal kapcsolatos szexuális megjegyzések a profiljukban", + "report_flow.label.name": "Nevek", + "report_flow.label.other": "Valami, ami nincs itt felsorolva", + "report_flow.label.other_identifying": "Egyéb információ, amely azonosíthat vagy lokalizálhat valakit", + "report_flow.label.permits_violations": "Súlyos szabálysértéseket engedélyez", + "report_flow.label.phone": "Telefonszám", + "report_flow.label.photo": "Képek", + "report_flow.label.platform_abuse": "Adatok tömeges kinyerése (scraping), automatizálás vagy egyéb visszaélés a platformmal", + "report_flow.label.private_conversation": "Privát üzenetek, képernyőképek vagy hívásfelvételek", + "report_flow.label.private_info": "Valaki magánjellegű adatainak megosztása", + "report_flow.label.private_info_profile": "A profiljukban valaki magánjellegű adatait osztják meg", + "report_flow.label.profile_text": "Profilszöveg", + "report_flow.label.raid": "Rajtaütés vagy tömeges támadás szervezése vagy ahhoz való csatlakozás", + "report_flow.label.raid_guild": "Rajtaütések vagy tömeges támadások szervezése személyek vagy közösségek ellen", + "report_flow.label.rude_language": "Káromkodás vagy durva megjegyzések", + "report_flow.label.self_harm": "Valaki bánthatja magát, vagy önsértésre buzdít", + "report_flow.label.self_harm_graphic": "Önsértést ábrázoló, drasztikus képek", + "report_flow.label.self_harm_guild": "A tagok önsértésre unszolnak másokat", + "report_flow.label.self_harm_pressure": "Valaki önsértésre való unszolása vagy kihívása", + "report_flow.label.self_harm_pressure_guild": "Emberek önsértésre való unszolása vagy kihívása", + "report_flow.label.self_harm_profile": "A profiljuk önsértésre utal, vagy arra buzdít", + "report_flow.label.self_harm_promotion": "Önsértésre buzdítás vagy módszerek megosztása", + "report_flow.label.self_harm_promotion_profile": "A profilja önsértésre buzdít", + "report_flow.label.sexual": "Szexuális tartalom", + "report_flow.label.sexual_exploitation": "Szexuális kizsákmányolás, kényszerítés vagy emberkereskedelem", + "report_flow.label.sexual_unwanted": "Nem kívánt szexuális képek vagy üzenetek", + "report_flow.label.something_else": "Valami más", + "report_flow.label.spam": "Spam vagy nem kívánt hirdetések", + "report_flow.label.spam_bulk": "Spam vagy reklám küldése tömegesen", + "report_flow.label.spam_or_manipulation": "Spam vagy platformmanipuláció", + "report_flow.label.spam_profile": "Profiljukat spam vagy reklám céljára használják", + "report_flow.label.suicide_promotion": "Öngyilkosságra buzdítás vagy módszerek megosztása", + "report_flow.label.suicide_promotion_profile": "A profiljuk öngyilkosságra buzdít", + "report_flow.label.synthetic_media": "Hamis vagy mesterséges intelligencia által készített média, amelyet valódiként mutatnak be", + "report_flow.label.terrorism": "Terrorizmus vagy erőszakos szélsőségesség", + "report_flow.label.terrorism_guild": "Toborzás terrorizmusra vagy erőszakos szélsőségességre, illetve ezek népszerűsítése", + "report_flow.label.threat": "Fenyegetések vagy erőszakra való felhívások", + "report_flow.label.threat_to_share": "A megosztással fenyegetőzik", + "report_flow.label.too_young": "A(z) {product_name} használatához szükséges minimális életkor alatt vannak", + "report_flow.label.unwanted_contact": "Velem vagy valaki mással szembeni üldözés vagy ismételt kapcsolatfelvétel azután is, hogy felszólították az abbahagyásra, letiltották vagy eltávolították", + "report_flow.label.violence_glorification": "Valós erőszak dicsőítése", + "report_flow.label.violence_incitement": "Erőszakra buzdítás vagy annak elmagyarázása, hogyan lehet embereket bántani", + "report_flow.label.violence_misinfo": "Erőszak, szélsőségesség vagy káros hamis információk", + "report_flow.label.violent_threat": "Valaki bántalmazásával fenyeget", + "report_flow.label.worried_profile": "Aggódom a biztonságuk miatt", + "report_flow.label.worried_self_harm": "Attól tartok, bánthatja magát", + "report_flow.label.worried_suicide": "Attól tartok, öngyilkosságot kísérelhet meg", + "report_flow.notice.need_more_info.body": "Ehhez szükségünk van egy üzenetre, amelyben megmondják, hány évesek, vagy egyértelművé teszik, hogy a(z) {product_name} minimális életkora alatt vannak. Jelentsd inkább azt az üzenetet.", + "report_flow.notice.need_more_info.title": "Még nem tudunk intézkedni", + "report_flow.notice.need_more_info_profile.body": "Ehhez látnunk kell, hol adják meg a korukat, vagy egyértelművé teszik, hogy a(z) {product_name} minimális életkora alatt vannak. Jelentsd inkább azt az üzenetet vagy profilt.", + "report_flow.screen.abuse.title": "Miről van szó?", + "report_flow.screen.abuse_guild.title": "Mit csinálnak az emberek ebben a közösségben?", + "report_flow.screen.age_stated_message.title": "Szerepel ebben az üzenetben, hogy hány évesek?", + "report_flow.screen.age_stated_profile.title": "A profiljukon szerepel, hány évesek?", + "report_flow.screen.community_parts.subtitle": "Jelölj ki annyit, amennyi szükséges.", + "report_flow.screen.community_parts.title": "A közösség mely részei érintettek?", + "report_flow.screen.crisis_support.subtitle": "A krízisvonalak ingyenes, bizalmas támogatást nyújtanak.", + "report_flow.screen.crisis_support.title": "Valaki segíthet most", + "report_flow.screen.false_info.subtitle": "A vélemények, a szatíra és a jóhiszemű vita megengedett. A jogellenes rágalmazás a digitális szolgáltatásokról szóló rendelet (DSA) alapján jelenthető be.", + "report_flow.screen.false_info.subtitle_self_hosted": "A vélemények, a szatíra és a jóhiszemű vita megengedett.", + "report_flow.screen.false_info.title": "Mi a félrevezető benne?", + "report_flow.screen.harassment.title": "Hogyan veszik célba valakit?", + "report_flow.screen.hate.title": "Hogyan támadja az embereket az identitásuk miatt?", + "report_flow.screen.impersonation.subtitle": "A világosan megjelölt paródia vagy szerepjáték megengedett.", + "report_flow.screen.impersonation.title": "Kit személyesítenek meg, vagy ez egy átverés?", + "report_flow.screen.minor_risk.title": "Hogyan veszélyezteti ez a személy egy kiskorút?", + "report_flow.screen.minor_risk_guild.title": "Hogyan veszélyezteti ez a közösség a kiskorúakat?", + "report_flow.screen.minor_sexual.subtitle": "A rajzolt, írott vagy mesterséges intelligencia által generált tartalom akkor számít, ha egy karaktert kiskorúként írnak le, vagy egyértelműen prepubertás korú, beleértve a lolicon, shotacon és cub kategóriákat.", + "report_flow.screen.minor_sexual.title": "Mit láttál, ami kiskorút érintett?", + "report_flow.screen.minor_sexual_guild.title": "Mit láttál, ami kiskorúakat érintett?", + "report_flow.screen.private_info.subtitle": "Jelölj ki annyit, amennyi szükséges. Ha egy intim fotón 18 év alatti személy szerepel, lépj vissza, és jelentsd be a „Kiskorú szexualizálása” lehetőség alatt.", + "report_flow.screen.private_info.title": "Milyen magánjellegű adatok érintettek?", + "report_flow.screen.profile_abuse.title": "Mi a káros a profiljukban?", + "report_flow.screen.profile_hate_violence.title": "Mit mutat vagy népszerűsít a profiljuk?", + "report_flow.screen.profile_intro.options_heading": "További információ", + "report_flow.screen.profile_intro.subtitle": "Mondd el, mi a baj ezzel a profillal. Nem fogják megtudni, ki jelentette őket.", + "report_flow.screen.profile_intro.title": "Profil bejelentése", + "report_flow.screen.profile_minor_sexual.title": "Mi van a profiljukban, ami kiskorúakat érint?", + "report_flow.screen.profile_parts.subtitle": "Jelölj ki annyit, amennyi szükséges.", + "report_flow.screen.profile_parts.title": "A profiljuk mely részei okoznak problémát?", + "report_flow.screen.profile_private_info.title": "Milyen magánjellegű adatok szerepelnek a profiljukban?", + "report_flow.screen.profile_sexual.title": "Mondd el, milyen szexuális tartalom van a profiljukban", + "report_flow.screen.profile_threat.title": "Miben kapcsolódik az erőszakhoz a profiljuk?", + "report_flow.screen.root_guild.subtitle": "Válaszd ki a közösségben történtekhez leginkább illő lehetőséget.", + "report_flow.screen.root_guild.title": "Mi a baj ezzel a közösséggel?", + "report_flow.screen.root_message.subtitle": "Válaszd ki a leginkább illő lehetőséget. Elküldés előtt mindent ellenőrizhetsz.", + "report_flow.screen.root_message.title": "Üzenet bejelentése", + "report_flow.screen.root_user.subtitle": "Válaszd ki a profiljukban látottakhoz leginkább illő lehetőséget.", + "report_flow.screen.root_user.title": "Mi a probléma a profiljukkal?", + "report_flow.screen.self_harm.subtitle": "Senkit sem büntetnek azért, mert elmondja, hogy nehézségei vannak. Ha jelzed, hogy aggódsz, azzal segítesz abban, hogy támogatást tudjunk nyújtani.", + "report_flow.screen.self_harm.title": "Mit mondtak vagy osztottak meg?", + "report_flow.screen.self_harm_guild.title": "Mire buzdítanak a tagok?", + "report_flow.screen.self_harm_profile.title": "Mit ír vagy mutat a profiljuk?", + "report_flow.screen.sexual.subtitle": "Ha bármelyik látható vagy érintett személy 18 év alatti, válaszd a „Kiskorú szexualizálása” lehetőséget.", + "report_flow.screen.sexual.title": "Mondd el, milyen szexuális tartalomról van szó", + "report_flow.screen.sexual_guild.subtitle": "Ha bármelyik látható vagy érintett személy 18 év alatti, válaszd a „Kiskorúak szexualizálása” lehetőséget.", + "report_flow.screen.sexual_guild.title": "Mondd el, milyen szexuális tartalom van ebben a közösségben", + "report_flow.screen.something_else_guild.title": "Mi más történik ebben a közösségben?", + "report_flow.screen.something_else_message.title": "Mi más történik?", + "report_flow.screen.something_else_user.title": "Mi más a probléma ezzel a profillal?", + "report_flow.screen.spam_kind_guild.title": "Hogyan él vissza ez a közösség a platformmal?", + "report_flow.screen.spam_profile.title": "Hogyan élnek vissza a fiókkal?", + "report_flow.screen.threat.title": "Milyen módon kapcsolódik erőszakhoz?", + "report_flow.screen.violence_misinfo.title": "Ezek közül melyik illik rá?", + "report_flow.screen.violence_misinfo_guild.title": "Ezek közül mi történik ebben a közösségben?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/id.json b/fluxer_api/src/api/content_i18n/weblate/locales/id.json index 05b3f36ce..e53c3865e 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/id.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/id.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Saluran teks", "guild.default_category_voice": "Saluran suara", "guild.default_channel_text": "umum", - "guild.default_channel_voice": "Umum" + "guild.default_channel_voice": "Umum", + "report_flow.description.name": "Nama pengguna, nama tampilan, atau nama panggilan komunitas", + "report_flow.description.photo": "Apa yang mereka gunakan sebagai avatar dan banner", + "report_flow.description.profile_text": "Bio, status kustom, atau kata ganti", + "report_flow.label.abuse": "Konten yang kasar atau berbahaya", + "report_flow.label.account_trading": "Menjual akun, atau login atau detail kartu yang dicuri", + "report_flow.label.account_trading_communities": "Membeli atau menjual akun atau komunitas", + "report_flow.label.address": "Alamat rumah atau tempat kerja", + "report_flow.label.adult_content_no_gate": "Konten dewasa tanpa batasan usia 18+", + "report_flow.label.adult_content_profile": "Konten dewasa eksplisit di profil mereka", + "report_flow.label.adult_content_unmarked": "Konten dewasa di saluran komunitas yang tidak ditandai 18+", + "report_flow.label.age_no_message": "Tidak, tidak disebutkan", + "report_flow.label.age_no_profile": "Tidak, tidak disebutkan", + "report_flow.label.age_yes_message": "Ya, disebutkan usianya", + "report_flow.label.age_yes_profile": "Ya, profilnya menyebutkan usianya", + "report_flow.label.atrocity_denial": "Menyangkal atau merayakan Holocaust atau genosida lainnya", + "report_flow.label.ban_evasion": "Mengakali larangan dengan akun lain", + "report_flow.label.channel_names": "Nama saluran", + "report_flow.label.community_banner": "Banner komunitas", + "report_flow.label.community_icon": "Ikon komunitas", + "report_flow.label.community_name": "Nama komunitas", + "report_flow.label.conversion_therapy": "Mempromosikan terapi konversi", + "report_flow.label.copyright": "Keluhan hak cipta atau merek dagang", + "report_flow.label.crisis_lines": "Saluran bantuan krisis di negaramu", + "report_flow.label.csam": "Gambar atau video kekerasan seksual terhadap anak, baik yang asli maupun buatan AI", + "report_flow.label.discovery_listing": "Listing di Discovery", + "report_flow.label.dislike": "Ini tidak cocok untuk saya", + "report_flow.label.dsa": "Konten yang ilegal di UE (Undang-Undang Layanan Digital/DSA)", + "report_flow.label.eating_disorder_promotion": "Mendorong perilaku makan yang terganggu", + "report_flow.label.eating_disorder_promotion_profile": "Profil mereka mempromosikan gangguan makan", + "report_flow.label.email": "Alamat email", + "report_flow.label.emoji_stickers": "Emoji atau stiker kustom", + "report_flow.label.face_photo": "Foto wajah mereka", + "report_flow.label.fake_account": "Akun palsu, bot, atau penyalahgunaan otomatis", + "report_flow.label.fake_account_profile": "Akun palsu atau menipu", + "report_flow.label.false_claims": "Menyebarkan kebohongan untuk merusak reputasi orang tertentu", + "report_flow.label.false_info": "Menyebarkan informasi palsu yang berbahaya", + "report_flow.label.financial": "Kartu, bank, atau detail keuangan lainnya", + "report_flow.label.fraud": "Mereka mencoba menipu orang agar kehilangan uang atau akun", + "report_flow.label.fraud_guild": "Menipu orang agar kehilangan uang atau akun", + "report_flow.label.government_id": "Dokumen identitas atau nomor identitas", + "report_flow.label.graphic_violence": "Kekerasan nyata yang ditampilkan untuk mengejutkan, seperti kekerasan berdarah atau kekejaman terhadap hewan", + "report_flow.label.harassment": "Perundungan, pelecehan, atau penguntitan", + "report_flow.label.harassment_direct": "Berulang kali menargetkan seseorang dengan hinaan atau perlakuan kasar", + "report_flow.label.harassment_guild": "Melecehkan, merundung, atau menguntit orang", + "report_flow.label.harassment_profile": "Profil mereka melecehkan atau menargetkan saya atau orang lain", + "report_flow.label.harmful_false_claims": "Klaim palsu yang dapat menyebabkan kerugian serius di dunia nyata", + "report_flow.label.hate": "Kebencian atau diskriminasi terhadap orang karena identitas mereka", + "report_flow.label.hate_dehumanizing": "Membandingkan orang dengan hewan, penyakit, atau kotoran, atau menyebut mereka lebih rendah dari manusia", + "report_flow.label.hate_incitement": "Seruan untuk kekerasan atau pengucilan terhadap suatu kelompok", + "report_flow.label.hate_other": "Serangan lain terhadap orang karena identitas mereka", + "report_flow.label.hate_slurs": "Hinaan diskriminatif, simbol kebencian, atau stereotip yang merendahkan", + "report_flow.label.hate_violence": "Kebencian, kekerasan, atau ekstremisme", + "report_flow.label.identity": "Orientasi seksual, identitas gender, atau status interseks", + "report_flow.label.illegal_activity": "Aktivitas ilegal lainnya", + "report_flow.label.illegal_goods": "Penjualan narkoba, senjata, atau barang ilegal lainnya", + "report_flow.label.impersonation": "Berpura-pura menjadi seseorang, atau menipu orang", + "report_flow.label.impersonation_guild": "Berpura-pura menjadi {product_name} atau organisasi lain", + "report_flow.label.impersonation_organization": "Perusahaan, merek, atau grup", + "report_flow.label.impersonation_person": "Saya atau seseorang yang dekat dengan saya", + "report_flow.label.impersonation_public_figure": "Orang terkenal, seperti kreator atau politisi", + "report_flow.label.impersonation_staff": "Staf atau tim dukungan {product_name}", + "report_flow.label.intimate_image_abuse": "Gambar intim dibagikan tanpa persetujuan, termasuk deepfake, atau ancaman untuk membagikannya", + "report_flow.label.intimate_image_abuse_guild": "Membagikan gambar intim tanpa persetujuan, termasuk deepfake", + "report_flow.label.intimate_image_abuse_profile": "Gambar intim seseorang dibagikan tanpa persetujuan, termasuk deepfake", + "report_flow.label.intimate_photo": "Foto intim atau telanjang", + "report_flow.label.invite_splash": "Splash undangan", + "report_flow.label.ip_address": "Alamat IP", + "report_flow.label.learn_more": "Baca Pedoman Komunitas {product_name}", + "report_flow.label.legal_name": "Nama asli atau nama resmi", + "report_flow.label.lgbtq_targeting": "Sengaja salah menyebut gender, menyebut nama lama (deadnaming), membongkar identitas seseorang (outing), atau menyangkal identitas mereka", + "report_flow.label.malware_guild": "Mendistribusikan malware atau tautan phishing", + "report_flow.label.malware_phishing": "Upaya phishing, malware, atau peretasan", + "report_flow.label.member_activity": "Apa yang diposting atau dilakukan anggota di sana", + "report_flow.label.metric_manipulation": "Memalsukan jumlah anggota atau reaksi", + "report_flow.label.minor_contact": "Meminta anak di bawah umur untuk bertemu, atau meminta foto atau detail pribadi, dengan cara yang terlihat seperti predator", + "report_flow.label.minor_dating_community": "Ini adalah komunitas untuk kencan antara anak di bawah umur", + "report_flow.label.minor_fictional": "Konten seksual anak fiktif yang digambar, ditulis, atau dibuat dengan AI", + "report_flow.label.minor_grooming": "Grooming atau membangun kepercayaan yang tidak pantas dengan anak di bawah umur", + "report_flow.label.minor_grooming_guild": "Anggota melakukan grooming atau membangun kepercayaan yang tidak pantas pada anak di bawah umur", + "report_flow.label.minor_in_adult_space": "Anak di bawah umur berada di saluran atau komunitas 18+", + "report_flow.label.minor_in_adult_space_guild": "Anak di bawah umur diizinkan di saluran 18+", + "report_flow.label.minor_risk": "Membahayakan anak di bawah umur", + "report_flow.label.minor_risk_guild": "Membahayakan anak di bawah umur", + "report_flow.label.minor_sexual": "Seksualisasi anak di bawah umur", + "report_flow.label.minor_sexual_contact": "Menggoda anak di bawah umur atau mengirim pesan seksual kepada mereka", + "report_flow.label.minor_sexual_contact_guild": "Anggota menggoda anak di bawah umur atau mengirim pesan seksual kepada mereka", + "report_flow.label.minor_sexual_content": "Anak di bawah umur sendiri membagikan konten seksual", + "report_flow.label.minor_sexual_content_guild": "Anak di bawah umur memposting atau mengirim konten seksual", + "report_flow.label.minor_sexual_content_profile": "Profil anak di bawah umur dengan konten seksual", + "report_flow.label.minor_sexual_guild": "Seksualisasi anak di bawah umur", + "report_flow.label.minor_sexualization": "Komentar seksual tentang anak di bawah umur", + "report_flow.label.minor_sexualization_guild": "Anggota membuat komentar seksual tentang anak di bawah umur", + "report_flow.label.minor_sexualization_profile": "Komentar seksual tentang anak di bawah umur di profil mereka", + "report_flow.label.name": "Nama", + "report_flow.label.other": "Sesuatu yang tidak tercantum di sini", + "report_flow.label.other_identifying": "Informasi lain yang dapat mengidentifikasi atau menemukan seseorang", + "report_flow.label.permits_violations": "Ini memungkinkan pelanggaran aturan yang serius", + "report_flow.label.phone": "Nomor telepon", + "report_flow.label.photo": "Gambar", + "report_flow.label.platform_abuse": "Scraping, otomatisasi, atau penyalahgunaan platform lainnya", + "report_flow.label.private_conversation": "Pesan pribadi, tangkapan layar, atau rekaman panggilan", + "report_flow.label.private_info": "Membagikan detail pribadi seseorang", + "report_flow.label.private_info_profile": "Profil mereka membagikan detail pribadi seseorang", + "report_flow.label.profile_text": "Teks profil", + "report_flow.label.raid": "Mengorganisir atau bergabung dalam penyerbuan atau pengeroyokan", + "report_flow.label.raid_guild": "Mengorganisir penyerbuan atau pengeroyokan terhadap orang atau komunitas", + "report_flow.label.rude_language": "Kata-kata kasar atau ucapan tidak sopan", + "report_flow.label.self_harm": "Seseorang mungkin melukai diri sendiri, atau mendorong tindakan melukai diri sendiri", + "report_flow.label.self_harm_graphic": "Gambar eksplisit tentang tindakan melukai diri sendiri", + "report_flow.label.self_harm_guild": "Anggota mendorong orang lain untuk melukai diri sendiri", + "report_flow.label.self_harm_pressure": "Menekan atau menantang seseorang untuk melukai diri sendiri", + "report_flow.label.self_harm_pressure_guild": "Menekan atau menantang orang untuk melukai diri sendiri", + "report_flow.label.self_harm_profile": "Profil mereka mengisyaratkan tindakan melukai diri sendiri atau mendorongnya", + "report_flow.label.self_harm_promotion": "Mendorong tindakan melukai diri sendiri atau membagikan metodenya", + "report_flow.label.self_harm_promotion_profile": "Profil mereka mendorong tindakan melukai diri sendiri", + "report_flow.label.sexual": "Konten seksual", + "report_flow.label.sexual_exploitation": "Eksploitasi seksual, pemaksaan, atau perdagangan orang", + "report_flow.label.sexual_unwanted": "Gambar atau pesan seksual yang tidak saya inginkan", + "report_flow.label.something_else": "Lainnya", + "report_flow.label.spam": "Spam atau iklan yang tidak diinginkan", + "report_flow.label.spam_bulk": "Mengirim spam atau iklan secara massal", + "report_flow.label.spam_or_manipulation": "Spam atau manipulasi platform", + "report_flow.label.spam_profile": "Profil mereka digunakan untuk spam atau iklan", + "report_flow.label.suicide_promotion": "Mendorong bunuh diri atau membagikan metodenya", + "report_flow.label.suicide_promotion_profile": "Profil mereka mendorong bunuh diri", + "report_flow.label.synthetic_media": "Media palsu atau buatan AI yang disajikan sebagai asli", + "report_flow.label.terrorism": "Terorisme atau ekstremisme kekerasan", + "report_flow.label.terrorism_guild": "Merekrut atau mempromosikan terorisme atau ekstremisme kekerasan", + "report_flow.label.threat": "Ancaman atau seruan untuk kekerasan", + "report_flow.label.threat_to_share": "Mereka mengancam akan membagikannya", + "report_flow.label.too_young": "Mereka di bawah usia minimum untuk menggunakan {product_name}", + "report_flow.label.unwanted_contact": "Menguntit atau berulang kali menghubungi saya atau orang lain setelah diminta berhenti, diblokir, atau dihapus", + "report_flow.label.violence_glorification": "Mengagungkan kekerasan di dunia nyata", + "report_flow.label.violence_incitement": "Mendorong kekerasan atau menjelaskan cara menyakiti orang", + "report_flow.label.violence_misinfo": "Kekerasan, ekstremisme, atau informasi palsu yang berbahaya", + "report_flow.label.violent_threat": "Mengatakan mereka akan menyakiti seseorang", + "report_flow.label.worried_profile": "Saya khawatir tentang keselamatan mereka", + "report_flow.label.worried_self_harm": "Saya khawatir mereka mungkin melukai diri sendiri", + "report_flow.label.worried_suicide": "Saya khawatir mereka mungkin mencoba bunuh diri", + "report_flow.notice.need_more_info.body": "Untuk meninjau ini, kami memerlukan pesan yang menyebutkan usia mereka atau menegaskan bahwa mereka berada di bawah usia minimum {product_name}. Laporkan pesan itu sebagai gantinya.", + "report_flow.notice.need_more_info.title": "Kami belum bisa bertindak", + "report_flow.notice.need_more_info_profile.body": "Untuk meninjau ini, kami perlu melihat bagian yang menyebutkan usia mereka atau menegaskan bahwa mereka berada di bawah usia minimum {product_name}. Laporkan pesan atau profil itu sebagai gantinya.", + "report_flow.screen.abuse.title": "Ini menyangkut apa?", + "report_flow.screen.abuse_guild.title": "Apa yang dilakukan orang-orang di komunitas ini?", + "report_flow.screen.age_stated_message.title": "Apakah pesan ini menyatakan usia mereka?", + "report_flow.screen.age_stated_profile.title": "Apakah profilnya mencantumkan usia mereka?", + "report_flow.screen.community_parts.subtitle": "Pilih sebanyak yang kamu butuhkan.", + "report_flow.screen.community_parts.title": "Bagian mana dari komunitas yang terlibat?", + "report_flow.screen.crisis_support.subtitle": "Saluran bantuan krisis menawarkan dukungan gratis dan rahasia.", + "report_flow.screen.crisis_support.title": "Seseorang dapat membantu saat ini", + "report_flow.screen.false_info.subtitle": "Opini, satir, dan debat dengan itikad baik diperbolehkan. Pencemaran nama baik yang melanggar hukum dapat dilaporkan berdasarkan Undang-Undang Layanan Digital (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opini, satir, dan debat dengan itikad baik diperbolehkan.", + "report_flow.screen.false_info.title": "Apa yang menyesatkan dari hal ini?", + "report_flow.screen.harassment.title": "Bagaimana seseorang ditargetkan?", + "report_flow.screen.hate.title": "Bagaimana ini menyerang orang karena identitas mereka?", + "report_flow.screen.impersonation.subtitle": "Parodi atau permainan peran yang diberi label dengan jelas diperbolehkan.", + "report_flow.screen.impersonation.title": "Siapa yang ditiru, atau apakah ini penipuan?", + "report_flow.screen.minor_risk.title": "Bagaimana orang ini membahayakan anak di bawah umur?", + "report_flow.screen.minor_risk_guild.title": "Bagaimana komunitas ini membahayakan anak di bawah umur?", + "report_flow.screen.minor_sexual.subtitle": "Konten yang digambar, ditulis, atau dibuat dengan AI termasuk di sini jika karakter digambarkan sebagai anak di bawah umur atau jelas belum puber, termasuk lolicon, shotacon, dan cub.", + "report_flow.screen.minor_sexual.title": "Apa yang kamu lihat yang melibatkan anak di bawah umur?", + "report_flow.screen.minor_sexual_guild.title": "Apa yang kamu lihat yang melibatkan anak di bawah umur?", + "report_flow.screen.private_info.subtitle": "Pilih sebanyak yang kamu butuhkan. Jika foto intim menampilkan seseorang di bawah 18 tahun, kembali dan laporkan di bawah “Seksualisasi anak di bawah umur”.", + "report_flow.screen.private_info.title": "Detail pribadi apa yang terlibat?", + "report_flow.screen.profile_abuse.title": "Apa yang berbahaya dari profil mereka?", + "report_flow.screen.profile_hate_violence.title": "Apa yang ditampilkan atau dipromosikan oleh profil mereka?", + "report_flow.screen.profile_intro.options_heading": "Pelajari selengkapnya", + "report_flow.screen.profile_intro.subtitle": "Beri tahu kami apa yang salah dengan profil ini. Mereka tidak akan diberi tahu siapa yang melaporkannya.", + "report_flow.screen.profile_intro.title": "Laporkan profil", + "report_flow.screen.profile_minor_sexual.title": "Apa yang ada di profil mereka yang melibatkan anak di bawah umur?", + "report_flow.screen.profile_parts.subtitle": "Pilih sebanyak yang kamu butuhkan.", + "report_flow.screen.profile_parts.title": "Bagian mana dari profil mereka yang bermasalah?", + "report_flow.screen.profile_private_info.title": "Detail pribadi apa yang ada di profil mereka?", + "report_flow.screen.profile_sexual.title": "Beri tahu kami tentang konten seksual di profilnya", + "report_flow.screen.profile_threat.title": "Bagaimana profilnya melibatkan kekerasan?", + "report_flow.screen.root_guild.subtitle": "Pilih yang paling sesuai dengan apa yang terjadi di komunitas ini.", + "report_flow.screen.root_guild.title": "Ada apa dengan komunitas ini?", + "report_flow.screen.root_message.subtitle": "Pilih yang paling sesuai. Kamu dapat memeriksa semuanya sebelum dikirim.", + "report_flow.screen.root_message.title": "Laporkan pesan", + "report_flow.screen.root_user.subtitle": "Pilih yang paling sesuai dengan isi profilnya.", + "report_flow.screen.root_user.title": "Ada apa dengan profilnya?", + "report_flow.screen.self_harm.subtitle": "Tidak ada yang dihukum karena mengatakan bahwa mereka sedang kesulitan. Memberi tahu kami bahwa kamu khawatir membantu kami menawarkan dukungan.", + "report_flow.screen.self_harm.title": "Apa yang mereka katakan atau bagikan?", + "report_flow.screen.self_harm_guild.title": "Apa yang didorong oleh anggota?", + "report_flow.screen.self_harm_profile.title": "Apa yang dikatakan atau ditampilkan profilnya?", + "report_flow.screen.sexual.subtitle": "Jika ada orang yang ditampilkan atau terlibat berusia di bawah 18 tahun, pilih “Seksualisasi anak di bawah umur”.", + "report_flow.screen.sexual.title": "Beri tahu kami tentang konten seksual", + "report_flow.screen.sexual_guild.subtitle": "Jika ada orang yang ditampilkan atau terlibat berusia di bawah 18 tahun, pilih “Seksualisasi anak di bawah umur”.", + "report_flow.screen.sexual_guild.title": "Beri tahu kami tentang konten seksual di komunitas ini", + "report_flow.screen.something_else_guild.title": "Apa lagi yang terjadi di komunitas ini?", + "report_flow.screen.something_else_message.title": "Apa lagi yang terjadi?", + "report_flow.screen.something_else_user.title": "Apa lagi yang salah dengan profil ini?", + "report_flow.screen.spam_kind_guild.title": "Bagaimana komunitas ini menyalahgunakan platform?", + "report_flow.screen.spam_profile.title": "Bagaimana akun disalahgunakan?", + "report_flow.screen.threat.title": "Bagaimana ini melibatkan kekerasan?", + "report_flow.screen.violence_misinfo.title": "Mana yang paling sesuai?", + "report_flow.screen.violence_misinfo_guild.title": "Mana yang terjadi di komunitas ini?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/it.json b/fluxer_api/src/api/content_i18n/weblate/locales/it.json index be4613dab..7fb16f62c 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/it.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/it.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Canali testuali", "guild.default_category_voice": "Canali vocali", "guild.default_channel_text": "generale", - "guild.default_channel_voice": "Generale" + "guild.default_channel_voice": "Generale", + "report_flow.description.name": "Nome utente, nome visualizzato o soprannome nella community", + "report_flow.description.photo": "Quello che usano come avatar e banner", + "report_flow.description.profile_text": "Biografia, stato personalizzato o pronomi", + "report_flow.label.abuse": "Contenuti offensivi o dannosi", + "report_flow.label.account_trading": "Vendita di account, credenziali di accesso rubate o dati di carte rubati", + "report_flow.label.account_trading_communities": "Acquisto o vendita di account o community", + "report_flow.label.address": "Indirizzo di casa o luogo di lavoro", + "report_flow.label.adult_content_no_gate": "Contenuti per adulti senza restrizioni di età 18+", + "report_flow.label.adult_content_profile": "Contenuti espliciti per adulti nel suo profilo", + "report_flow.label.adult_content_unmarked": "Contenuti per adulti in un canale della community non contrassegnato come 18+", + "report_flow.label.age_no_message": "No, non menziona la sua età", + "report_flow.label.age_no_profile": "No, il suo profilo non menziona la sua età", + "report_flow.label.age_yes_message": "Sì, menziona la sua età", + "report_flow.label.age_yes_profile": "Sì, il suo profilo menziona la sua età", + "report_flow.label.atrocity_denial": "Negazione o celebrazione dell'Olocausto o di altri genocidi", + "report_flow.label.ban_evasion": "Eludere un ban con un altro account", + "report_flow.label.channel_names": "Nomi dei canali", + "report_flow.label.community_banner": "Banner della community", + "report_flow.label.community_icon": "Icona della community", + "report_flow.label.community_name": "Nome della community", + "report_flow.label.conversion_therapy": "Promozione della terapia di conversione", + "report_flow.label.copyright": "Reclamo relativo a copyright o marchio", + "report_flow.label.crisis_lines": "Linee di ascolto per le crisi nel tuo paese", + "report_flow.label.csam": "Immagini o video reali o generati da IA di abusi sessuali su minori", + "report_flow.label.discovery_listing": "Elenco in Scopri", + "report_flow.label.dislike": "Non fa per me", + "report_flow.label.dsa": "Contenuti illegali nell'UE (Regolamento sui servizi digitali, DSA)", + "report_flow.label.eating_disorder_promotion": "Incoraggiare disturbi alimentari", + "report_flow.label.eating_disorder_promotion_profile": "Il suo profilo promuove disturbi alimentari", + "report_flow.label.email": "Indirizzo e-mail", + "report_flow.label.emoji_stickers": "Emoji o sticker personalizzati", + "report_flow.label.face_photo": "Foto del suo volto", + "report_flow.label.fake_account": "Account falso, bot o abuso automatizzato", + "report_flow.label.fake_account_profile": "Un account falso o ingannevole", + "report_flow.label.false_claims": "Diffondere bugie per danneggiare la reputazione di una persona specifica", + "report_flow.label.false_info": "Diffusione di informazioni false dannose", + "report_flow.label.financial": "Dati di carte, conti bancari o altri dati finanziari", + "report_flow.label.fraud": "Stanno cercando di truffare le persone per ottenere denaro o account", + "report_flow.label.fraud_guild": "Truffare le persone per ottenere denaro o account", + "report_flow.label.government_id": "Documento d'identità o numero del documento", + "report_flow.label.graphic_violence": "Violenza reale mostrata per scioccare, come gore o crudeltà verso gli animali", + "report_flow.label.harassment": "Bullismo, molestie o stalking", + "report_flow.label.harassment_direct": "Prendere di mira ripetutamente qualcuno con insulti o abusi", + "report_flow.label.harassment_guild": "Molestie, bullismo o stalking nei confronti di persone", + "report_flow.label.harassment_profile": "Il suo profilo molesta o prende di mira me o qualcun altro", + "report_flow.label.harmful_false_claims": "Affermazioni false che potrebbero causare gravi danni nel mondo reale", + "report_flow.label.hate": "Odio o discriminazione contro le persone per la loro identità", + "report_flow.label.hate_dehumanizing": "Paragonare le persone ad animali, malattie o sporcizia, o definirle meno che umane", + "report_flow.label.hate_incitement": "Appelli alla violenza o all'esclusione contro un gruppo", + "report_flow.label.hate_other": "Altri attacchi contro le persone per la loro identità", + "report_flow.label.hate_slurs": "Epiteti offensivi, simboli d'odio o stereotipi denigratori", + "report_flow.label.hate_violence": "Odio, violenza o estremismo", + "report_flow.label.identity": "Orientamento sessuale, identità di genere o stato intersessuale", + "report_flow.label.illegal_activity": "Altre attività illecite", + "report_flow.label.illegal_goods": "Vendita di droghe, armi o altri beni illegali", + "report_flow.label.impersonation": "Fingersi qualcun altro o truffare persone", + "report_flow.label.impersonation_guild": "Fingersi {product_name} o un'altra organizzazione", + "report_flow.label.impersonation_organization": "Un'azienda, un marchio o un gruppo", + "report_flow.label.impersonation_person": "Me o qualcuno a me vicino", + "report_flow.label.impersonation_public_figure": "Una persona famosa, come un creator o un politico", + "report_flow.label.impersonation_staff": "Staff o supporto di {product_name}", + "report_flow.label.intimate_image_abuse": "Immagini intime condivise senza consenso, inclusi deepfake, o minacce di condividerle", + "report_flow.label.intimate_image_abuse_guild": "Condivisione di immagini intime senza consenso, inclusi deepfake", + "report_flow.label.intimate_image_abuse_profile": "Immagini intime di qualcuno condivise senza consenso, inclusi deepfake", + "report_flow.label.intimate_photo": "Foto intima o di nudo", + "report_flow.label.invite_splash": "Sfondo dell’invito", + "report_flow.label.ip_address": "Indirizzo IP", + "report_flow.label.learn_more": "Leggi le Linee guida della community di {product_name}", + "report_flow.label.legal_name": "Nome reale o legale", + "report_flow.label.lgbtq_targeting": "Misgendering, deadnaming o outing deliberato di qualcuno, o negazione della sua identità", + "report_flow.label.malware_guild": "Distribuzione di malware o link di phishing", + "report_flow.label.malware_phishing": "Tentativi di phishing, malware o hacking", + "report_flow.label.member_activity": "Cosa pubblicano o fanno i membri nella community", + "report_flow.label.metric_manipulation": "Falsificazione del numero di membri o reazioni", + "report_flow.label.minor_contact": "Chiedere a un minore di incontrarsi di persona, o di inviare foto o dati personali, in un modo che sembra predatorio", + "report_flow.label.minor_dating_community": "È una community di dating tra minori", + "report_flow.label.minor_fictional": "Contenuti sessuali disegnati, scritti o generati da IA di un bambino immaginario", + "report_flow.label.minor_grooming": "Adescamento o costruzione di fiducia inappropriata con un minore", + "report_flow.label.minor_grooming_guild": "I membri adescano o costruiscono fiducia inappropriata con i minori", + "report_flow.label.minor_in_adult_space": "Un minore si trova in un canale o in una community 18+", + "report_flow.label.minor_in_adult_space_guild": "Minori ammessi in canali 18+", + "report_flow.label.minor_risk": "Mettere a rischio un minore", + "report_flow.label.minor_risk_guild": "Mettere a rischio i minori", + "report_flow.label.minor_sexual": "Sessualizzazione di un minore", + "report_flow.label.minor_sexual_contact": "Flirtare con un minore o inviargli messaggi sessuali", + "report_flow.label.minor_sexual_contact_guild": "I membri flirtano con i minori o inviano loro messaggi sessuali", + "report_flow.label.minor_sexual_content": "Un minore condivide in prima persona contenuti sessuali", + "report_flow.label.minor_sexual_content_guild": "I minori pubblicano o inviano contenuti sessuali", + "report_flow.label.minor_sexual_content_profile": "Profilo di un minore con contenuti sessuali", + "report_flow.label.minor_sexual_guild": "Sessualizzazione di minori", + "report_flow.label.minor_sexualization": "Commenti sessuali su minori", + "report_flow.label.minor_sexualization_guild": "I membri fanno commenti sessuali su minori", + "report_flow.label.minor_sexualization_profile": "Commenti sessuali su minori nel suo profilo", + "report_flow.label.name": "Nomi", + "report_flow.label.other": "Qualcosa che non è nell'elenco", + "report_flow.label.other_identifying": "Altre informazioni che potrebbero identificare o localizzare qualcuno", + "report_flow.label.permits_violations": "Consente gravi violazioni delle regole", + "report_flow.label.phone": "Numero di telefono", + "report_flow.label.photo": "Immagini", + "report_flow.label.platform_abuse": "Scraping, automazione o altri abusi della piattaforma", + "report_flow.label.private_conversation": "Messaggi privati, screenshot o registrazioni di chiamate", + "report_flow.label.private_info": "Condivisione di dettagli privati di qualcuno", + "report_flow.label.private_info_profile": "Il suo profilo condivide dettagli privati di qualcuno", + "report_flow.label.profile_text": "Testo del profilo", + "report_flow.label.raid": "Organizzare o partecipare a un raid o a un attacco di gruppo", + "report_flow.label.raid_guild": "Organizzare raid o attacchi di gruppo contro persone o community", + "report_flow.label.rude_language": "Parolacce o commenti scortesi", + "report_flow.label.self_harm": "Qualcuno potrebbe farsi del male o incoraggia l'autolesionismo", + "report_flow.label.self_harm_graphic": "Immagini esplicite di autolesionismo", + "report_flow.label.self_harm_guild": "I membri spingono altre persone a farsi del male", + "report_flow.label.self_harm_pressure": "Fare pressione o sfidare qualcuno a farsi del male", + "report_flow.label.self_harm_pressure_guild": "Fare pressione o sfidare le persone a farsi del male", + "report_flow.label.self_harm_profile": "Il suo profilo lascia intendere autolesionismo o lo incoraggia", + "report_flow.label.self_harm_promotion": "Incoraggiare l'autolesionismo o condividerne i metodi", + "report_flow.label.self_harm_promotion_profile": "Il suo profilo incoraggia l'autolesionismo", + "report_flow.label.sexual": "Contenuti sessuali", + "report_flow.label.sexual_exploitation": "Sfruttamento sessuale, coercizione o tratta di persone", + "report_flow.label.sexual_unwanted": "Immagini o messaggi sessuali indesiderati", + "report_flow.label.something_else": "Altro", + "report_flow.label.spam": "Spam o pubblicità indesiderata", + "report_flow.label.spam_bulk": "Invio di spam o pubblicità in massa", + "report_flow.label.spam_or_manipulation": "Spam o manipolazione della piattaforma", + "report_flow.label.spam_profile": "Il suo profilo è usato per spam o pubblicità", + "report_flow.label.suicide_promotion": "Incoraggiare il suicidio o condividerne i metodi", + "report_flow.label.suicide_promotion_profile": "Il suo profilo incoraggia il suicidio", + "report_flow.label.synthetic_media": "Contenuti multimediali falsi o generati da IA presentati come reali", + "report_flow.label.terrorism": "Terrorismo o estremismo violento", + "report_flow.label.terrorism_guild": "Reclutamento o promozione del terrorismo o dell'estremismo violento", + "report_flow.label.threat": "Minacce o incitamenti alla violenza", + "report_flow.label.threat_to_share": "Minaccia di condividerlo", + "report_flow.label.too_young": "È al di sotto dell'età minima per usare {product_name}", + "report_flow.label.unwanted_contact": "Stalking o contatti ripetuti con me o con qualcun altro dopo che è stato chiesto di smettere o dopo essere stati bloccati o rimossi", + "report_flow.label.violence_glorification": "Glorificare la violenza nel mondo reale", + "report_flow.label.violence_incitement": "Incitamento alla violenza o spiegazione su come ferire le persone", + "report_flow.label.violence_misinfo": "Violenza, estremismo o informazioni false dannose", + "report_flow.label.violent_threat": "Dire che farà del male a qualcuno", + "report_flow.label.worried_profile": "Mi preoccupa la sua sicurezza", + "report_flow.label.worried_self_harm": "Temo che possa farsi del male", + "report_flow.label.worried_suicide": "Temo che possa tentare il suicidio", + "report_flow.notice.need_more_info.body": "Per esaminare la segnalazione, ci serve un messaggio in cui la persona dice quanti anni ha o chiarisce di essere sotto l'età minima di {product_name}. Segnala invece quel messaggio.", + "report_flow.notice.need_more_info.title": "Per ora non possiamo intervenire", + "report_flow.notice.need_more_info_profile.body": "Per esaminare la segnalazione, ci serve vedere dove la persona dice quanti anni ha o chiarisce di essere sotto l'età minima di {product_name}. Segnala invece quel messaggio o profilo.", + "report_flow.screen.abuse.title": "Di cosa si tratta?", + "report_flow.screen.abuse_guild.title": "Cosa stanno facendo le persone in questa community?", + "report_flow.screen.age_stated_message.title": "Questo messaggio indica la sua età?", + "report_flow.screen.age_stated_profile.title": "Il suo profilo indica quanti anni ha?", + "report_flow.screen.community_parts.subtitle": "Scegline quante ti servono.", + "report_flow.screen.community_parts.title": "Quali parti della community sono coinvolte?", + "report_flow.screen.crisis_support.subtitle": "Le linee di ascolto per le crisi offrono supporto gratuito e riservato.", + "report_flow.screen.crisis_support.title": "Qualcuno può aiutarti subito", + "report_flow.screen.false_info.subtitle": "Opinioni, satira e dibattiti in buona fede sono consentiti. La diffamazione illecita può essere segnalata ai sensi del Regolamento sui servizi digitali (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinioni, satira e dibattiti in buona fede sono consentiti.", + "report_flow.screen.false_info.title": "Cosa c'è di fuorviante?", + "report_flow.screen.harassment.title": "Come viene presa di mira una persona?", + "report_flow.screen.hate.title": "In che modo attacca le persone per la loro identità?", + "report_flow.screen.impersonation.subtitle": "La parodia o il gioco di ruolo chiaramente etichettati sono consentiti.", + "report_flow.screen.impersonation.title": "Chi viene impersonato o si tratta di una truffa?", + "report_flow.screen.minor_risk.title": "In che modo questa persona sta mettendo a rischio un minore?", + "report_flow.screen.minor_risk_guild.title": "In che modo questa community mette a rischio i minori?", + "report_flow.screen.minor_sexual.subtitle": "I contenuti disegnati, scritti o generati da IA contano quando un personaggio è descritto come minorenne o è chiaramente in età prepuberale, inclusi lolicon, shotacon e cub.", + "report_flow.screen.minor_sexual.title": "Cosa hai visto che coinvolge un minore?", + "report_flow.screen.minor_sexual_guild.title": "Cosa hai visto che coinvolge minori?", + "report_flow.screen.private_info.subtitle": "Scegline quante ti servono. Se una foto intima mostra qualcuno con meno di 18 anni, torna indietro e segnalala come «Sessualizzazione di un minore».", + "report_flow.screen.private_info.title": "Quali dettagli privati sono coinvolti?", + "report_flow.screen.profile_abuse.title": "Cosa c'è di dannoso nel suo profilo?", + "report_flow.screen.profile_hate_violence.title": "Cosa mostra o promuove il suo profilo?", + "report_flow.screen.profile_intro.options_heading": "Scopri di più", + "report_flow.screen.profile_intro.subtitle": "Dicci cosa non va in questo profilo. La persona non saprà chi l'ha segnalata.", + "report_flow.screen.profile_intro.title": "Segnala profilo", + "report_flow.screen.profile_minor_sexual.title": "Cosa c'è nel suo profilo che coinvolge un minore?", + "report_flow.screen.profile_parts.subtitle": "Scegline quante ti servono.", + "report_flow.screen.profile_parts.title": "Quali parti del suo profilo sono problematiche?", + "report_flow.screen.profile_private_info.title": "Quali dettagli privati sono presenti nel suo profilo?", + "report_flow.screen.profile_sexual.title": "Parlaci del contenuto sessuale nel suo profilo", + "report_flow.screen.profile_threat.title": "In che modo il suo profilo riguarda la violenza?", + "report_flow.screen.root_guild.subtitle": "Scegli l'opzione più vicina a ciò che sta succedendo in questa community.", + "report_flow.screen.root_guild.title": "Cosa non va in questa community?", + "report_flow.screen.root_message.subtitle": "Scegli l'opzione più vicina. Potrai controllare tutto prima dell'invio.", + "report_flow.screen.root_message.title": "Segnala messaggio", + "report_flow.screen.root_user.subtitle": "Scegli l'opzione più vicina a ciò che è presente nel suo profilo.", + "report_flow.screen.root_user.title": "Cosa non va nel suo profilo?", + "report_flow.screen.self_harm.subtitle": "Nessuno viene punito per aver detto di essere in difficoltà. Dirci che sei in pensiero ci aiuta a offrire supporto.", + "report_flow.screen.self_harm.title": "Cosa ha detto o condiviso?", + "report_flow.screen.self_harm_guild.title": "Cosa stanno incoraggiando i membri?", + "report_flow.screen.self_harm_profile.title": "Cosa dice o mostra il suo profilo?", + "report_flow.screen.sexual.subtitle": "Se una delle persone mostrate o coinvolte ha meno di 18 anni, scegli «Sessualizzazione di un minore».", + "report_flow.screen.sexual.title": "Parlaci del contenuto sessuale", + "report_flow.screen.sexual_guild.subtitle": "Se una delle persone mostrate o coinvolte ha meno di 18 anni, scegli «Sessualizzazione di minori».", + "report_flow.screen.sexual_guild.title": "Parlaci del contenuto sessuale in questa community", + "report_flow.screen.something_else_guild.title": "Cos'altro sta succedendo in questa community?", + "report_flow.screen.something_else_message.title": "Cos'altro sta succedendo?", + "report_flow.screen.something_else_user.title": "Cos'altro non va in questo profilo?", + "report_flow.screen.spam_kind_guild.title": "In che modo questa community abusa della piattaforma?", + "report_flow.screen.spam_profile.title": "In che modo l'account viene utilizzato in modo improprio?", + "report_flow.screen.threat.title": "In che modo riguarda la violenza?", + "report_flow.screen.violence_misinfo.title": "Quale di queste corrisponde?", + "report_flow.screen.violence_misinfo_guild.title": "Quale di queste accade in questa community?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/ja.json b/fluxer_api/src/api/content_i18n/weblate/locales/ja.json index 8880b8820..300977279 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/ja.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/ja.json @@ -14,5 +14,202 @@ "guild.default_category_text": "テキストチャンネル", "guild.default_category_voice": "ボイスチャンネル", "guild.default_channel_text": "一般", - "guild.default_channel_voice": "一般" + "guild.default_channel_voice": "一般", + "report_flow.description.name": "ユーザー名、表示名、またはコミュニティニックネーム", + "report_flow.description.photo": "アバターとバナーに使っているもの", + "report_flow.description.profile_text": "自己紹介、カスタムステータス、または代名詞", + "report_flow.label.abuse": "攻撃的または有害なコンテンツ", + "report_flow.label.account_trading": "アカウント、または盗まれたログイン情報やカード情報の販売", + "report_flow.label.account_trading_communities": "アカウントまたはコミュニティの売買", + "report_flow.label.address": "自宅の住所または職場", + "report_flow.label.adult_content_no_gate": "18歳以上の年齢制限がないアダルトコンテンツ", + "report_flow.label.adult_content_profile": "プロフィール内の露骨なアダルトコンテンツ", + "report_flow.label.adult_content_unmarked": "年齢制限付き(18+)に設定されていないコミュニティチャンネルにあるアダルトコンテンツ", + "report_flow.label.age_no_message": "いいえ、年齢には言及していません", + "report_flow.label.age_no_profile": "いいえ、プロフィールに年齢は記載されていません", + "report_flow.label.age_yes_message": "はい、年齢について言及しています", + "report_flow.label.age_yes_profile": "はい、プロフィールに年齢が記載されています", + "report_flow.label.atrocity_denial": "ホロコーストまたはその他のジェノサイドの否定または賛美", + "report_flow.label.ban_evasion": "別のアカウントでBANを回避する行為", + "report_flow.label.channel_names": "チャンネル名", + "report_flow.label.community_banner": "コミュニティバナー", + "report_flow.label.community_icon": "コミュニティアイコン", + "report_flow.label.community_name": "コミュニティ名", + "report_flow.label.conversion_therapy": "転向療法を助長する行為", + "report_flow.label.copyright": "著作権または商標に関する申し立て", + "report_flow.label.crisis_lines": "お住まいの国の危機相談窓口", + "report_flow.label.csam": "児童性的虐待の画像・動画(実在のもの、またはAI生成のもの)", + "report_flow.label.discovery_listing": "「見つける」の掲載内容", + "report_flow.label.dislike": "自分には合わない", + "report_flow.label.dsa": "EUで違法なコンテンツ(デジタルサービス法、DSA)", + "report_flow.label.eating_disorder_promotion": "摂食障害的な食行動を促している", + "report_flow.label.eating_disorder_promotion_profile": "プロフィールが摂食障害を助長している", + "report_flow.label.email": "メールアドレス", + "report_flow.label.emoji_stickers": "カスタム絵文字またはスタンプ", + "report_flow.label.face_photo": "顔写真", + "report_flow.label.fake_account": "偽アカウント、ボット、または自動化による不正利用", + "report_flow.label.fake_account_profile": "偽のアカウントまたは詐欺的なアカウント", + "report_flow.label.false_claims": "特定の個人の評判を傷つけるための嘘を広める行為", + "report_flow.label.false_info": "有害な虚偽情報を広める行為", + "report_flow.label.financial": "カード、銀行、その他の金融情報", + "report_flow.label.fraud": "人々からお金やアカウントを騙し取ろうとしている", + "report_flow.label.fraud_guild": "詐欺行為(金銭やアカウントを騙し取る行為)", + "report_flow.label.government_id": "身分証明書または身分証明書番号", + "report_flow.label.graphic_violence": "ショックを与える目的で見せられる、流血や動物虐待などの実際の暴力", + "report_flow.label.harassment": "いじめ、ハラスメント、ストーキング", + "report_flow.label.harassment_direct": "侮辱や暴言で誰かを繰り返し標的にする行為", + "report_flow.label.harassment_guild": "人々に対する嫌がらせ、いじめ、またはストーカー行為", + "report_flow.label.harassment_profile": "プロフィールが私または他の人に嫌がらせをしている、または標的にしている", + "report_flow.label.harmful_false_claims": "深刻な現実世界の被害を引き起こす可能性のある虚偽の主張", + "report_flow.label.hate": "属性を理由に人々に向けられる憎悪または差別", + "report_flow.label.hate_dehumanizing": "人々を動物、病気、汚物と比較したり、人間以下と呼んだりする行為", + "report_flow.label.hate_incitement": "特定のグループに対する暴力や排除を扇動する行為", + "report_flow.label.hate_other": "属性を理由に人々に向けられるその他の攻撃", + "report_flow.label.hate_slurs": "差別的な蔑称、憎悪を煽るシンボル、または品位を傷つけるステレオタイプ", + "report_flow.label.hate_violence": "ヘイト、暴力、過激主義", + "report_flow.label.identity": "性的指向、性自認、またはインターセックスの状況", + "report_flow.label.illegal_activity": "その他の違法行為", + "report_flow.label.illegal_goods": "薬物、武器、その他の違法品の販売", + "report_flow.label.impersonation": "なりすまし、または詐欺行為", + "report_flow.label.impersonation_guild": "{product_name}または他の組織になりすます行為", + "report_flow.label.impersonation_organization": "企業、ブランド、またはグループ", + "report_flow.label.impersonation_person": "自分または身近な人", + "report_flow.label.impersonation_public_figure": "著名人(クリエイターや政治家など)", + "report_flow.label.impersonation_staff": "{product_name}のスタッフまたはサポート", + "report_flow.label.intimate_image_abuse": "ディープフェイクを含む、同意なく共有されたプライベートな性的画像、またはそれらを共有するという脅迫", + "report_flow.label.intimate_image_abuse_guild": "ディープフェイクを含む、同意なくプライベートな性的画像を共有している", + "report_flow.label.intimate_image_abuse_profile": "ディープフェイクを含む、同意なく共有された誰かのプライベートな性的画像", + "report_flow.label.intimate_photo": "プライベートな性的写真またはヌード写真", + "report_flow.label.invite_splash": "招待スプラッシュ", + "report_flow.label.ip_address": "IPアドレス", + "report_flow.label.learn_more": "{product_name}のコミュニティガイドラインを読む", + "report_flow.label.legal_name": "本名または正式な氏名", + "report_flow.label.lgbtq_targeting": "意図的に誤った性別で呼ぶ、デッドネームで呼ぶ、アウティングする、またはその人のアイデンティティを否定する行為", + "report_flow.label.malware_guild": "マルウェアまたはフィッシングリンクを配布している", + "report_flow.label.malware_phishing": "フィッシング、マルウェア、ハッキングの試み", + "report_flow.label.member_activity": "メンバーがそこで投稿したり行ったりしていること", + "report_flow.label.metric_manipulation": "メンバー数またはリアクション数を偽装している", + "report_flow.label.minor_contact": "未成年者を食い物にしようとしているように見える形で、会うことや写真、個人情報を求めている", + "report_flow.label.minor_dating_community": "未成年者同士の交際を目的としたコミュニティである", + "report_flow.label.minor_fictional": "架空の子供を描いた、書いた、またはAIで生成した性的コンテンツ", + "report_flow.label.minor_grooming": "未成年者をグルーミングしたり、不適切な信頼関係を築いたりしている", + "report_flow.label.minor_grooming_guild": "メンバーが未成年者をグルーミングしたり、不適切な信頼関係を築いたりしている", + "report_flow.label.minor_in_adult_space": "未成年者が18歳以上のチャンネルまたはコミュニティにいる", + "report_flow.label.minor_in_adult_space_guild": "未成年者が18+のチャンネルへの参加を許可されている", + "report_flow.label.minor_risk": "未成年者を危険にさらしている", + "report_flow.label.minor_risk_guild": "未成年者を危険にさらしている", + "report_flow.label.minor_sexual": "未成年者の性的対象化", + "report_flow.label.minor_sexual_contact": "未成年者に言い寄ったり、性的なメッセージを送ったりしている", + "report_flow.label.minor_sexual_contact_guild": "メンバーが未成年者に言い寄ったり、性的なメッセージを送ったりしている", + "report_flow.label.minor_sexual_content": "未成年者自身が性的なコンテンツを共有している", + "report_flow.label.minor_sexual_content_guild": "未成年者が性的なコンテンツを投稿または送信している", + "report_flow.label.minor_sexual_content_profile": "性的なコンテンツを含む未成年者のプロフィール", + "report_flow.label.minor_sexual_guild": "未成年者の性的対象化", + "report_flow.label.minor_sexualization": "未成年者についての性的なコメント", + "report_flow.label.minor_sexualization_guild": "メンバーが未成年者についての性的なコメントをしている", + "report_flow.label.minor_sexualization_profile": "プロフィールに未成年者についての性的なコメントがある", + "report_flow.label.name": "名前", + "report_flow.label.other": "ここに記載されていないもの", + "report_flow.label.other_identifying": "個人を特定したり居場所を突き止めたりできるその他の情報", + "report_flow.label.permits_violations": "重大なルール違反を許可している", + "report_flow.label.phone": "電話番号", + "report_flow.label.photo": "画像", + "report_flow.label.platform_abuse": "スクレイピング、自動化、またはその他のプラットフォームの悪用", + "report_flow.label.private_conversation": "プライベートなメッセージ、スクリーンショット、通話の録音", + "report_flow.label.private_info": "誰かの個人情報の共有", + "report_flow.label.private_info_profile": "プロフィールで誰かの個人情報を共有している", + "report_flow.label.profile_text": "プロフィールテキスト", + "report_flow.label.raid": "レイドや集団攻撃の組織または参加", + "report_flow.label.raid_guild": "個人またはコミュニティに対するレイドや集団攻撃を組織する行為", + "report_flow.label.rude_language": "暴言や失礼な発言", + "report_flow.label.self_harm": "誰かが自分を傷つけるおそれがある、または自傷行為を促している", + "report_flow.label.self_harm_graphic": "自傷行為の生々しい画像", + "report_flow.label.self_harm_guild": "メンバーが他の人に自傷行為を促している", + "report_flow.label.self_harm_pressure": "誰かに自傷行為をするよう圧力をかけたり、挑発したりしている", + "report_flow.label.self_harm_pressure_guild": "人々に自傷行為をするよう圧力をかけたり、挑発したりしている", + "report_flow.label.self_harm_profile": "プロフィールが自傷行為を示唆または推奨している", + "report_flow.label.self_harm_promotion": "自傷行為を推奨したり、その方法を共有したりしている", + "report_flow.label.self_harm_promotion_profile": "プロフィールで自傷行為を助長している", + "report_flow.label.sexual": "性的なコンテンツ", + "report_flow.label.sexual_exploitation": "性的搾取、強要、人身取引", + "report_flow.label.sexual_unwanted": "望まない性的な画像やメッセージ", + "report_flow.label.something_else": "その他", + "report_flow.label.spam": "スパムまたは不要な広告", + "report_flow.label.spam_bulk": "スパムまたは広告の一括送信", + "report_flow.label.spam_or_manipulation": "スパムまたはプラットフォーム操作", + "report_flow.label.spam_profile": "プロフィールがスパムまたは広告に使用されている", + "report_flow.label.suicide_promotion": "自殺を推奨したり、その方法を共有したりしている", + "report_flow.label.suicide_promotion_profile": "プロフィールが自殺を助長している", + "report_flow.label.synthetic_media": "偽物またはAIで作成されたメディアを本物として見せかけている", + "report_flow.label.terrorism": "テロリズムまたは暴力的過激主義", + "report_flow.label.terrorism_guild": "テロリズムまたは暴力的過激主義の勧誘または助長", + "report_flow.label.threat": "脅迫または暴力の呼びかけ", + "report_flow.label.threat_to_share": "共有すると脅迫している", + "report_flow.label.too_young": "{product_name}を利用できる最低年齢に達していません", + "report_flow.label.unwanted_contact": "やめるように言われたり、ブロックまたは削除された後も、私または他の人につきまとったり、繰り返し連絡を取ったりする", + "report_flow.label.violence_glorification": "現実世界の暴力を美化している", + "report_flow.label.violence_incitement": "暴力を助長したり、人を傷つける方法を説明したりする", + "report_flow.label.violence_misinfo": "暴力、過激主義、または有害な虚偽情報", + "report_flow.label.violent_threat": "誰かを傷つけると言っている", + "report_flow.label.worried_profile": "その人の安全が心配", + "report_flow.label.worried_self_harm": "その人が自分を傷つけてしまうのではないかと心配している", + "report_flow.label.worried_suicide": "その人が自殺を図るのではないかと心配している", + "report_flow.notice.need_more_info.body": "これを審査するには、年齢を述べたメッセージ、または{product_name}の最低年齢未満であることを明確にしたメッセージが必要です。代わりにそのメッセージを報告してください。", + "report_flow.notice.need_more_info.title": "まだ対応できません", + "report_flow.notice.need_more_info_profile.body": "これを審査するには、本人が年齢を述べている、または{product_name}の最低年齢未満であることを明確にしている箇所を確認する必要があります。代わりにそのメッセージまたはプロフィールを報告してください。", + "report_flow.screen.abuse.title": "どのような内容ですか?", + "report_flow.screen.abuse_guild.title": "このコミュニティのメンバーは何をしていますか?", + "report_flow.screen.age_stated_message.title": "このメッセージに年齢が記載されていますか?", + "report_flow.screen.age_stated_profile.title": "プロフィールに年齢は記載されていますか?", + "report_flow.screen.community_parts.subtitle": "いくつでも選択してください。", + "report_flow.screen.community_parts.title": "コミュニティのどの部分が関わっていますか?", + "report_flow.screen.crisis_support.subtitle": "危機相談窓口は、無料で秘密厳守のサポートを提供しています。", + "report_flow.screen.crisis_support.title": "今すぐ力になってくれる人がいます", + "report_flow.screen.false_info.subtitle": "意見、風刺、誠実な議論は許可されています。不法な名誉毀損は、デジタルサービス法に基づいて報告できます。", + "report_flow.screen.false_info.subtitle_self_hosted": "意見、風刺、誠実な議論は許可されています。", + "report_flow.screen.false_info.title": "どのような点が誤解を招きますか?", + "report_flow.screen.harassment.title": "どのような形で標的にされていますか?", + "report_flow.screen.hate.title": "属性を理由に、どのように人々を攻撃していますか?", + "report_flow.screen.impersonation.subtitle": "明確にパロディまたはロールプレイと表示されているものは許可されています。", + "report_flow.screen.impersonation.title": "誰かへのなりすましですか、それとも詐欺ですか?", + "report_flow.screen.minor_risk.title": "この人はどのように未成年者を危険にさらしていますか?", + "report_flow.screen.minor_risk_guild.title": "このコミュニティはどのように未成年者を危険にさらしていますか?", + "report_flow.screen.minor_sexual.subtitle": "キャラクターが未成年者として描写されている場合、または明らかに思春期前である場合は、絵、文章、AIによるコンテンツも対象です(lolicon、shotacon、cubを含む)。", + "report_flow.screen.minor_sexual.title": "未成年者に関するどのようなものを見ましたか?", + "report_flow.screen.minor_sexual_guild.title": "未成年者に関するどのようなものを見ましたか?", + "report_flow.screen.private_info.subtitle": "いくつでも選択してください。プライベートな性的写真に18歳未満の人が写っている場合は、前の画面に戻って「未成年者の性的対象化」から報告してください。", + "report_flow.screen.private_info.title": "どの個人情報が関係していますか?", + "report_flow.screen.profile_abuse.title": "プロフィールのどのような点が有害ですか?", + "report_flow.screen.profile_hate_violence.title": "プロフィールには何が表示されていますか、または何を助長していますか?", + "report_flow.screen.profile_intro.options_heading": "詳細はこちら", + "report_flow.screen.profile_intro.subtitle": "このプロフィールのどこに問題があるか教えてください。報告者が誰であるかは本人に伝えられません。", + "report_flow.screen.profile_intro.title": "プロフィールを報告", + "report_flow.screen.profile_minor_sexual.title": "プロフィールに未成年者がどのように関わっていますか?", + "report_flow.screen.profile_parts.subtitle": "いくつでも選択してください。", + "report_flow.screen.profile_parts.title": "プロフィールのどの部分に問題がありますか?", + "report_flow.screen.profile_private_info.title": "プロフィールにどの個人情報が含まれていますか?", + "report_flow.screen.profile_sexual.title": "プロフィールにある性的コンテンツについて教えてください", + "report_flow.screen.profile_threat.title": "プロフィールにはどのように暴力が関係していますか?", + "report_flow.screen.root_guild.subtitle": "このコミュニティで起きていることに最も近いものを選んでください。", + "report_flow.screen.root_guild.title": "このコミュニティで何が問題になっていますか?", + "report_flow.screen.root_message.subtitle": "最も近いものを選んでください。送信前にすべて確認できます。", + "report_flow.screen.root_message.title": "メッセージを報告", + "report_flow.screen.root_user.subtitle": "プロフィールにあるものに最も近いものを選んでください。", + "report_flow.screen.root_user.title": "プロフィールで何が問題になっていますか?", + "report_flow.screen.self_harm.subtitle": "つらい状況にあると話しても、誰も罰せられることはありません。心配していることをお知らせいただければ、サポートを提供しやすくなります。", + "report_flow.screen.self_harm.title": "何を言ったり共有したりしましたか?", + "report_flow.screen.self_harm_guild.title": "メンバーは何を促していますか?", + "report_flow.screen.self_harm_profile.title": "プロフィールに何が書かれていますか、または何が示されていますか?", + "report_flow.screen.sexual.subtitle": "写っている、または関与している人が18歳未満の場合は、「未成年者の性的対象化」を選択してください。", + "report_flow.screen.sexual.title": "性的なコンテンツについて教えてください", + "report_flow.screen.sexual_guild.subtitle": "写っている、または関与している人が18歳未満の場合は、「未成年者の性的対象化」を選択してください。", + "report_flow.screen.sexual_guild.title": "このコミュニティの性的なコンテンツについて教えてください", + "report_flow.screen.something_else_guild.title": "このコミュニティで他に何が起きていますか?", + "report_flow.screen.something_else_message.title": "他に何が起きていますか?", + "report_flow.screen.something_else_user.title": "このプロフィールで他に何が問題になっていますか?", + "report_flow.screen.spam_kind_guild.title": "このコミュニティはプラットフォームをどのように悪用していますか?", + "report_flow.screen.spam_profile.title": "アカウントはどのように悪用されていますか?", + "report_flow.screen.threat.title": "どのように暴力に関係していますか?", + "report_flow.screen.violence_misinfo.title": "どれに当てはまりますか?", + "report_flow.screen.violence_misinfo_guild.title": "このコミュニティでは、どれが発生していますか?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/ko.json b/fluxer_api/src/api/content_i18n/weblate/locales/ko.json index 85722ead7..b206700f3 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/ko.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/ko.json @@ -14,5 +14,202 @@ "guild.default_category_text": "텍스트 채널", "guild.default_category_voice": "음성 채널", "guild.default_channel_text": "일반", - "guild.default_channel_voice": "일반" + "guild.default_channel_voice": "일반", + "report_flow.description.name": "사용자 이름, 표시 이름 또는 커뮤니티 닉네임", + "report_flow.description.photo": "아바타와 배너로 사용하는 것", + "report_flow.description.profile_text": "소개, 상태 메시지 또는 대명사", + "report_flow.label.abuse": "악의적이거나 유해한 콘텐츠", + "report_flow.label.account_trading": "계정, 도난당한 로그인 정보 또는 카드 정보 판매", + "report_flow.label.account_trading_communities": "계정 또는 커뮤니티 구매 또는 판매", + "report_flow.label.address": "집 주소 또는 직장", + "report_flow.label.adult_content_no_gate": "18세 이상 연령 제한이 없는 성인 콘텐츠", + "report_flow.label.adult_content_profile": "프로필의 노골적인 성인 콘텐츠", + "report_flow.label.adult_content_unmarked": "18세 이상으로 표시되지 않은 커뮤니티 채널의 성인 콘텐츠", + "report_flow.label.age_no_message": "아니요, 나이가 언급되어 있지 않습니다", + "report_flow.label.age_no_profile": "아니요, 프로필에 나이가 언급되어 있지 않습니다", + "report_flow.label.age_yes_message": "예, 나이가 언급되어 있습니다", + "report_flow.label.age_yes_profile": "예, 프로필에 나이가 언급되어 있습니다", + "report_flow.label.atrocity_denial": "홀로코스트 또는 기타 집단 학살(제노사이드)을 부인하거나 찬양하는 행위", + "report_flow.label.ban_evasion": "다른 계정으로 밴 우회", + "report_flow.label.channel_names": "채널 이름", + "report_flow.label.community_banner": "커뮤니티 배너", + "report_flow.label.community_icon": "커뮤니티 아이콘", + "report_flow.label.community_name": "커뮤니티 이름", + "report_flow.label.conversion_therapy": "전환 치료 홍보", + "report_flow.label.copyright": "저작권 또는 상표권 침해 신고", + "report_flow.label.crisis_lines": "거주 국가의 위기 상담 전화", + "report_flow.label.csam": "아동 성착취물(실제 또는 AI로 생성된 이미지 또는 동영상)", + "report_flow.label.discovery_listing": "디스커버리 목록", + "report_flow.label.dislike": "그냥 내 취향이 아닙니다", + "report_flow.label.dsa": "EU에서 불법인 콘텐츠(디지털 서비스법, DSA)", + "report_flow.label.eating_disorder_promotion": "섭식 장애 행동 조장", + "report_flow.label.eating_disorder_promotion_profile": "프로필에서 섭식 장애를 조장합니다", + "report_flow.label.email": "이메일 주소", + "report_flow.label.emoji_stickers": "맞춤 이모티콘 또는 스티커", + "report_flow.label.face_photo": "얼굴 사진", + "report_flow.label.fake_account": "가짜 계정, 봇 또는 자동화된 악용", + "report_flow.label.fake_account_profile": "가짜 또는 기만적인 계정", + "report_flow.label.false_claims": "특정 인물의 평판을 해치기 위한 거짓말 유포", + "report_flow.label.false_info": "유해한 허위 정보 유포", + "report_flow.label.financial": "카드, 은행 또는 기타 금융 정보", + "report_flow.label.fraud": "사람들을 속여 돈이나 계정을 빼앗으려 합니다", + "report_flow.label.fraud_guild": "사람들을 속여 돈이나 계정을 빼앗는 행위", + "report_flow.label.government_id": "신분증 또는 신분증 번호", + "report_flow.label.graphic_violence": "충격을 주기 위해 보여주는 실제 폭력, 예: 잔인한 장면이나 동물 학대", + "report_flow.label.harassment": "괴롭힘, 따돌림 또는 스토킹", + "report_flow.label.harassment_direct": "모욕이나 폭언으로 누군가를 반복적으로 표적으로 삼는 행위", + "report_flow.label.harassment_guild": "사람들을 괴롭히거나, 따돌리거나, 스토킹하는 행위", + "report_flow.label.harassment_profile": "프로필에서 나 또는 다른 사람을 괴롭히거나 표적으로 삼음", + "report_flow.label.harmful_false_claims": "심각한 현실적 피해를 야기할 수 있는 허위 주장", + "report_flow.label.hate": "사람들의 정체성에 대한 증오 또는 차별", + "report_flow.label.hate_dehumanizing": "사람들을 동물, 질병 또는 오물에 비유하거나 인간 이하로 취급하는 행위", + "report_flow.label.hate_incitement": "특정 집단에 대한 폭력 또는 배제를 선동하는 행위", + "report_flow.label.hate_other": "사람들의 정체성에 대한 기타 공격", + "report_flow.label.hate_slurs": "비하 표현, 혐오 상징 또는 모욕적인 고정관념", + "report_flow.label.hate_violence": "증오, 폭력 또는 극단주의", + "report_flow.label.identity": "성적 지향, 성 정체성 또는 간성 상태", + "report_flow.label.illegal_activity": "기타 불법 활동", + "report_flow.label.illegal_goods": "마약, 무기 또는 기타 불법 상품 판매", + "report_flow.label.impersonation": "다른 사람을 사칭하거나 사람들에게 사기를 치는 행위", + "report_flow.label.impersonation_guild": "{product_name} 또는 다른 조직을 사칭하는 행위", + "report_flow.label.impersonation_organization": "회사, 브랜드 또는 그룹", + "report_flow.label.impersonation_person": "나 또는 나와 가까운 사람", + "report_flow.label.impersonation_public_figure": "크리에이터나 정치인 같은 유명한 사람", + "report_flow.label.impersonation_staff": "{product_name} 직원 또는 지원팀", + "report_flow.label.intimate_image_abuse": "딥페이크를 포함해 동의 없이 공유된 은밀한 이미지 또는 이를 공유하겠다는 위협", + "report_flow.label.intimate_image_abuse_guild": "딥페이크를 포함해 동의 없이 은밀한 이미지를 공유하는 행위", + "report_flow.label.intimate_image_abuse_profile": "딥페이크를 포함해 동의 없이 공유된 타인의 은밀한 이미지", + "report_flow.label.intimate_photo": "은밀한 사진 또는 누드 사진", + "report_flow.label.invite_splash": "초대 스플래시", + "report_flow.label.ip_address": "IP 주소", + "report_flow.label.learn_more": "{product_name} 커뮤니티 가이드라인 읽기", + "report_flow.label.legal_name": "실명 또는 법적 이름", + "report_flow.label.lgbtq_targeting": "누군가를 의도적으로 잘못된 성별로 지칭하거나, 과거 이름(데드네이밍)으로 부르거나, 본인 동의 없이 정체성을 공개(아우팅)하거나, 그 정체성을 부정하는 행위", + "report_flow.label.malware_guild": "멀웨어 또는 피싱 링크 배포", + "report_flow.label.malware_phishing": "피싱, 멀웨어 또는 해킹 시도", + "report_flow.label.member_activity": "회원이 그곳에 게시하거나 하는 활동", + "report_flow.label.metric_manipulation": "회원 또는 반응 수 조작", + "report_flow.label.minor_contact": "착취 목적으로 접근하는 것처럼 보이는 방식으로 미성년자에게 만남, 사진 또는 개인 정보를 요구하는 행위", + "report_flow.label.minor_dating_community": "미성년자 간 데이트를 위한 커뮤니티입니다", + "report_flow.label.minor_fictional": "가상의 아동을 그리거나 글로 쓰거나 AI로 생성한 성적 콘텐츠", + "report_flow.label.minor_grooming": "미성년자를 그루밍하거나 미성년자와 부적절한 신뢰 관계를 쌓는 행위", + "report_flow.label.minor_grooming_guild": "회원이 미성년자를 그루밍하거나 미성년자와 부적절한 신뢰 관계를 쌓는 행위", + "report_flow.label.minor_in_adult_space": "미성년자가 18세 이상 채널 또는 커뮤니티에 있는 경우", + "report_flow.label.minor_in_adult_space_guild": "18세 이상 채널에 미성년자의 입장을 허용합니다", + "report_flow.label.minor_risk": "미성년자를 위험에 빠뜨림", + "report_flow.label.minor_risk_guild": "미성년자를 위험에 빠뜨림", + "report_flow.label.minor_sexual": "미성년자 성적 대상화", + "report_flow.label.minor_sexual_contact": "미성년자에게 추파를 던지거나 성적인 메시지를 보내는 행위", + "report_flow.label.minor_sexual_contact_guild": "회원이 미성년자에게 추파를 던지거나 성적인 메시지를 보내는 행위", + "report_flow.label.minor_sexual_content": "미성년자가 직접 성적인 콘텐츠를 공유합니다", + "report_flow.label.minor_sexual_content_guild": "미성년자가 성적인 콘텐츠를 게시하거나 보냅니다", + "report_flow.label.minor_sexual_content_profile": "성적인 콘텐츠가 있는 미성년자의 프로필", + "report_flow.label.minor_sexual_guild": "미성년자 성적 대상화", + "report_flow.label.minor_sexualization": "미성년자에 대한 성적인 발언", + "report_flow.label.minor_sexualization_guild": "회원이 미성년자에 대해 성적인 발언을 하는 행위", + "report_flow.label.minor_sexualization_profile": "프로필에서 미성년자에 대한 성적인 발언", + "report_flow.label.name": "이름", + "report_flow.label.other": "여기에 없는 내용", + "report_flow.label.other_identifying": "다른 사람을 식별하거나 찾을 수 있는 기타 정보", + "report_flow.label.permits_violations": "심각한 규칙 위반을 허용합니다", + "report_flow.label.phone": "전화번호", + "report_flow.label.photo": "사진", + "report_flow.label.platform_abuse": "스크래핑, 자동화 또는 기타 플랫폼 남용", + "report_flow.label.private_conversation": "비공개 메시지, 스크린샷 또는 통화 녹음", + "report_flow.label.private_info": "다른 사람의 개인 정보 공유", + "report_flow.label.private_info_profile": "프로필에서 다른 사람의 개인 정보 공유", + "report_flow.label.profile_text": "프로필 문구", + "report_flow.label.raid": "레이드나 집단 공격을 조직하거나 참여하는 행위", + "report_flow.label.raid_guild": "사람이나 커뮤니티를 대상으로 한 레이드 또는 집단 공격을 조직하는 행위", + "report_flow.label.rude_language": "욕설 또는 무례한 발언", + "report_flow.label.self_harm": "누군가 자신을 해칠 수 있거나 자해를 조장함", + "report_flow.label.self_harm_graphic": "자해를 적나라하게 보여주는 이미지", + "report_flow.label.self_harm_guild": "회원들이 다른 사람에게 자해를 부추깁니다", + "report_flow.label.self_harm_pressure": "누군가에게 자해하도록 압박하거나 자해를 해 보라고 도발함", + "report_flow.label.self_harm_pressure_guild": "사람들에게 자해하도록 압박하거나 자해를 해 보라고 도발함", + "report_flow.label.self_harm_profile": "프로필이 자해를 암시하거나 조장함", + "report_flow.label.self_harm_promotion": "자해를 조장하거나 방법을 공유함", + "report_flow.label.self_harm_promotion_profile": "프로필에서 자해 조장", + "report_flow.label.sexual": "성적인 콘텐츠", + "report_flow.label.sexual_exploitation": "성적 착취, 강압 또는 인신매매", + "report_flow.label.sexual_unwanted": "원치 않는 성적인 이미지 또는 메시지", + "report_flow.label.something_else": "기타", + "report_flow.label.spam": "스팸 또는 원치 않는 광고", + "report_flow.label.spam_bulk": "대량 스팸 또는 광고 전송", + "report_flow.label.spam_or_manipulation": "스팸 또는 플랫폼 조작", + "report_flow.label.spam_profile": "프로필이 스팸 또는 광고에 사용됨", + "report_flow.label.suicide_promotion": "자살을 조장하거나 방법을 공유함", + "report_flow.label.suicide_promotion_profile": "프로필이 자살을 조장함", + "report_flow.label.synthetic_media": "가짜 또는 AI 생성 미디어를 실제처럼 제시", + "report_flow.label.terrorism": "테러 또는 폭력적 극단주의", + "report_flow.label.terrorism_guild": "테러 또는 폭력적 극단주의 모집 또는 조장", + "report_flow.label.threat": "협박 또는 폭력 선동", + "report_flow.label.threat_to_share": "공유하겠다고 위협함", + "report_flow.label.too_young": "{product_name} 이용 최소 연령 미만입니다", + "report_flow.label.unwanted_contact": "그만하라는 요청을 받거나 차단 또는 삭제된 후에도 나 또는 다른 사람을 스토킹하거나 반복적으로 연락하는 행위", + "report_flow.label.violence_glorification": "실제 폭력을 미화함", + "report_flow.label.violence_incitement": "폭력 조장 또는 사람을 해치는 방법 설명", + "report_flow.label.violence_misinfo": "폭력, 극단주의 또는 유해한 허위 정보", + "report_flow.label.violent_threat": "누군가를 해치겠다고 말함", + "report_flow.label.worried_profile": "그 사람의 안전이 걱정됩니다", + "report_flow.label.worried_self_harm": "그 사람이 자해할까 봐 걱정됩니다", + "report_flow.label.worried_suicide": "그 사람이 자살을 시도할까 봐 걱정됩니다", + "report_flow.notice.need_more_info.body": "이 내용을 검토하려면 상대방이 자신의 나이를 밝히거나 {product_name} 최소 이용 연령 미만임을 분명히 한 메시지가 필요합니다. 대신 해당 메시지를 신고해 주세요.", + "report_flow.notice.need_more_info.title": "아직 처리할 수 없습니다", + "report_flow.notice.need_more_info_profile.body": "이 내용을 검토하려면 상대방이 자신의 나이를 밝히거나 {product_name} 최소 이용 연령 미만임을 분명히 한 곳을 확인해야 합니다. 대신 해당 메시지 또는 프로필을 신고해 주세요.", + "report_flow.screen.abuse.title": "어떤 내용인가요?", + "report_flow.screen.abuse_guild.title": "이 커뮤니티의 사람들은 무엇을 하고 있나요?", + "report_flow.screen.age_stated_message.title": "이 메시지에 상대방의 나이가 언급되어 있나요?", + "report_flow.screen.age_stated_profile.title": "프로필에 상대방의 나이가 언급되어 있나요?", + "report_flow.screen.community_parts.subtitle": "필요한 만큼 선택하세요.", + "report_flow.screen.community_parts.title": "커뮤니티의 어떤 부분이 관련되어 있나요?", + "report_flow.screen.crisis_support.subtitle": "위기 상담 전화는 비밀이 보장되는 상담을 무료로 제공합니다.", + "report_flow.screen.crisis_support.title": "지금 바로 도움을 줄 수 있는 사람이 있습니다", + "report_flow.screen.false_info.subtitle": "의견, 풍자, 선의의 토론은 허용됩니다. 불법적인 명예 훼손은 디지털 서비스법(DSA)에 따라 신고할 수 있습니다.", + "report_flow.screen.false_info.subtitle_self_hosted": "의견, 풍자, 선의의 토론은 허용됩니다.", + "report_flow.screen.false_info.title": "어떤 점이 오해의 소지가 있나요?", + "report_flow.screen.harassment.title": "어떤 방식으로 누군가가 표적이 되고 있나요?", + "report_flow.screen.hate.title": "정체성을 이유로 사람들을 어떻게 공격하나요?", + "report_flow.screen.impersonation.subtitle": "명확하게 표시된 패러디 또는 역할극은 허용됩니다.", + "report_flow.screen.impersonation.title": "누가 사칭당하고 있나요, 아니면 사기인가요?", + "report_flow.screen.minor_risk.title": "이 사람이 미성년자를 어떻게 위험에 빠뜨리고 있나요?", + "report_flow.screen.minor_risk_guild.title": "이 커뮤니티는 어떻게 미성년자를 위험에 빠뜨리나요?", + "report_flow.screen.minor_sexual.subtitle": "그림, 글 또는 AI 콘텐츠도 캐릭터가 미성년자로 묘사되거나 명백히 사춘기 이전으로 보이는 경우 해당되며, lolicon, shotacon, cub도 포함됩니다.", + "report_flow.screen.minor_sexual.title": "미성년자와 관련해 무엇을 보셨나요?", + "report_flow.screen.minor_sexual_guild.title": "미성년자와 관련해 무엇을 보셨나요?", + "report_flow.screen.private_info.subtitle": "필요한 만큼 선택하세요. 은밀한 사진에 18세 미만인 사람이 나온다면 뒤로 돌아가 “미성년자 성적 대상화” 항목으로 신고해 주세요.", + "report_flow.screen.private_info.title": "어떤 개인 정보가 관련되어 있나요?", + "report_flow.screen.profile_abuse.title": "프로필의 어떤 점이 해로운가요?", + "report_flow.screen.profile_hate_violence.title": "프로필에 무엇이 표시되거나 홍보되나요?", + "report_flow.screen.profile_intro.options_heading": "자세히 알아보기", + "report_flow.screen.profile_intro.subtitle": "이 프로필에 어떤 문제가 있는지 알려주세요. 상대방에게는 누가 신고했는지 알리지 않습니다.", + "report_flow.screen.profile_intro.title": "프로필 신고", + "report_flow.screen.profile_minor_sexual.title": "프로필의 어떤 내용이 미성년자와 관련되어 있나요?", + "report_flow.screen.profile_parts.subtitle": "필요한 만큼 선택하세요.", + "report_flow.screen.profile_parts.title": "프로필의 어떤 부분이 문제인가요?", + "report_flow.screen.profile_private_info.title": "프로필에 어떤 개인 정보가 포함되어 있나요?", + "report_flow.screen.profile_sexual.title": "프로필의 성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.profile_threat.title": "프로필에 폭력적인 내용이 어떻게 포함되어 있나요?", + "report_flow.screen.root_guild.subtitle": "커뮤니티에서 발생하고 있는 일과 가장 가까운 것을 선택하세요.", + "report_flow.screen.root_guild.title": "이 커뮤니티에 무슨 문제가 있나요?", + "report_flow.screen.root_message.subtitle": "가장 가까운 항목을 선택하세요. 신고를 보내기 전에 모든 내용을 확인할 수 있습니다.", + "report_flow.screen.root_message.title": "메시지 신고", + "report_flow.screen.root_user.subtitle": "프로필에 있는 내용과 가장 가까운 것을 선택하세요.", + "report_flow.screen.root_user.title": "프로필에 무슨 문제가 있나요?", + "report_flow.screen.self_harm.subtitle": "힘들다고 말한다고 해서 처벌받는 사람은 없습니다. 걱정된다고 알려주시면 저희가 도움을 드릴 수 있습니다.", + "report_flow.screen.self_harm.title": "무엇을 말하거나 공유했나요?", + "report_flow.screen.self_harm_guild.title": "회원들이 무엇을 부추기고 있나요?", + "report_flow.screen.self_harm_profile.title": "프로필에 어떤 내용이 쓰여 있거나 표시되어 있나요?", + "report_flow.screen.sexual.subtitle": "등장하거나 관련된 사람 중 한 명이라도 18세 미만이면 “미성년자 성적 대상화”를 선택하세요.", + "report_flow.screen.sexual.title": "성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.sexual_guild.subtitle": "등장하거나 관련된 사람 중 한 명이라도 18세 미만이면 “미성년자 성적 대상화”를 선택하세요.", + "report_flow.screen.sexual_guild.title": "이 커뮤니티의 성적인 콘텐츠에 대해 알려주세요", + "report_flow.screen.something_else_guild.title": "이 커뮤니티에서 다른 문제는 무엇인가요?", + "report_flow.screen.something_else_message.title": "다른 문제는 무엇인가요?", + "report_flow.screen.something_else_user.title": "이 프로필의 다른 문제는 무엇인가요?", + "report_flow.screen.spam_kind_guild.title": "이 커뮤니티는 플랫폼을 어떻게 악용하고 있나요?", + "report_flow.screen.spam_profile.title": "계정이 어떻게 오용되고 있나요?", + "report_flow.screen.threat.title": "어떻게 폭력과 관련이 있나요?", + "report_flow.screen.violence_misinfo.title": "이 중 어떤 것에 해당하나요?", + "report_flow.screen.violence_misinfo_guild.title": "이 커뮤니티에서 어떤 일이 발생하나요?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/lt.json b/fluxer_api/src/api/content_i18n/weblate/locales/lt.json index e0c74e0c7..a3c890442 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/lt.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/lt.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Teksto kanalai", "guild.default_category_voice": "Balso kanalai", "guild.default_channel_text": "bendras", - "guild.default_channel_voice": "Bendras" + "guild.default_channel_voice": "Bendras", + "report_flow.description.name": "Naudotojo vardas, rodomasis vardas arba bendruomenės slapyvardis", + "report_flow.description.photo": "Tai, ką jie naudoja kaip avatarą ir reklamjuostę", + "report_flow.description.profile_text": "Biografija, pasirinktinė būsena arba įvardžiai", + "report_flow.label.abuse": "Įžeidžiantis ar žalingas turinys", + "report_flow.label.account_trading": "Paskyrų, pavogtų prisijungimo duomenų ar kortelės duomenų pardavimas", + "report_flow.label.account_trading_communities": "Paskyrų ar bendruomenių pirkimas arba pardavimas", + "report_flow.label.address": "Namų adresas arba darbovietė", + "report_flow.label.adult_content_no_gate": "Suaugusiesiems skirtas turinys be 18+ amžiaus apribojimo", + "report_flow.label.adult_content_profile": "Aiškus suaugusiesiems skirtas turinys profilyje", + "report_flow.label.adult_content_unmarked": "Suaugusiesiems skirtas turinys bendruomenės kanale, kuris nepažymėtas 18+", + "report_flow.label.age_no_message": "Ne, amžius neminimas", + "report_flow.label.age_no_profile": "Ne, amžius neminimas", + "report_flow.label.age_yes_message": "Taip, minimas jų amžius", + "report_flow.label.age_yes_profile": "Taip, jų profilyje minimas jų amžius", + "report_flow.label.atrocity_denial": "Holokausto ar kitų genocidų neigimas arba šlovinimas", + "report_flow.label.ban_evasion": "Draudimo apėjimas naudojant kitą paskyrą", + "report_flow.label.channel_names": "Kanalų pavadinimai", + "report_flow.label.community_banner": "Bendruomenės reklamjuostė", + "report_flow.label.community_icon": "Bendruomenės piktograma", + "report_flow.label.community_name": "Bendruomenės pavadinimas", + "report_flow.label.conversion_therapy": "Konversinės terapijos propagavimas", + "report_flow.label.copyright": "Skundas dėl autorių teisių ar prekės ženklo", + "report_flow.label.crisis_lines": "Krizinės pagalbos linijos jūsų šalyje", + "report_flow.label.csam": "Tikri ar dirbtinio intelekto sukurti vaikų seksualinės prievartos vaizdai ar vaizdo įrašai", + "report_flow.label.discovery_listing": "Atradimo sąrašas", + "report_flow.label.dislike": "Tai tiesiog ne man", + "report_flow.label.dsa": "Turinys, kuris neteisėtas ES (Skaitmeninių paslaugų aktas)", + "report_flow.label.eating_disorder_promotion": "Sutrikusių mitybos įpročių skatinimas", + "report_flow.label.eating_disorder_promotion_profile": "Jų profilis propaguoja valgymo sutrikimus", + "report_flow.label.email": "El. pašto adresas", + "report_flow.label.emoji_stickers": "Pasirinktiniai jaustukai ar lipdukai", + "report_flow.label.face_photo": "Jų veido nuotrauka", + "report_flow.label.fake_account": "Netikra paskyra, robotas ar automatizuotas piktnaudžiavimas", + "report_flow.label.fake_account_profile": "Netikra ar apgaulinga paskyra", + "report_flow.label.false_claims": "Melagysčių skleidimas siekiant pakenkti konkretaus asmens reputacijai", + "report_flow.label.false_info": "Žalingos melagingos informacijos skleidimas", + "report_flow.label.financial": "Kortelės, banko ar kita finansinė informacija", + "report_flow.label.fraud": "Jie bando apgauti žmones, kad gautų pinigų ar paskyrų", + "report_flow.label.fraud_guild": "Žmonių apgaudinėjimas siekiant išvilioti pinigus ar paskyras", + "report_flow.label.government_id": "Asmens tapatybės dokumentas arba asmens tapatybės numeris", + "report_flow.label.graphic_violence": "Tikras smurtas, rodomas siekiant šokiruoti, pavyzdžiui, kruvini vaizdai ar žiaurus elgesys su gyvūnais", + "report_flow.label.harassment": "Patyčios, priekabiavimas ar persekiojimas", + "report_flow.label.harassment_direct": "Pakartotinis kieno nors puolimas įžeidimais ar žeminimu", + "report_flow.label.harassment_guild": "Priekabiavimas prie žmonių, patyčios ar persekiojimas", + "report_flow.label.harassment_profile": "Jų profilis priekabiauja prie manęs ar kito asmens arba yra nukreiptas prieš mane ar kitą asmenį", + "report_flow.label.harmful_false_claims": "Melagingi teiginiai, galintys sukelti rimtą žalą realiame pasaulyje", + "report_flow.label.hate": "Neapykanta ar diskriminacija žmonėms dėl to, kas jie yra", + "report_flow.label.hate_dehumanizing": "Žmonių lyginimas su gyvūnais, liga ar nešvarumais arba jų vadinimas mažiau nei žmonėmis", + "report_flow.label.hate_incitement": "Raginimai smurtauti prieš grupę ar ją išstumti", + "report_flow.label.hate_other": "Kiti išpuoliai prieš žmones dėl to, kas jie yra", + "report_flow.label.hate_slurs": "Įžeidžiantys terminai, neapykantos simboliai ar žeminantys stereotipai", + "report_flow.label.hate_violence": "Neapykanta, smurtas ar ekstremizmas", + "report_flow.label.identity": "Seksualinė orientacija, lytinė tapatybė ar interseksualumas", + "report_flow.label.illegal_activity": "Kita neteisėta veikla", + "report_flow.label.illegal_goods": "Narkotikų, ginklų ar kitų neteisėtų prekių pardavimas", + "report_flow.label.impersonation": "Apsimetinėjimas kuo nors arba žmonių apgaudinėjimas", + "report_flow.label.impersonation_guild": "Apsimetinėjimas, kad tai {product_name} arba kita organizacija", + "report_flow.label.impersonation_organization": "Įmonė, prekės ženklas ar grupė", + "report_flow.label.impersonation_person": "Aš arba kažkas artimas man", + "report_flow.label.impersonation_public_figure": "Žinomas asmuo, pvz., kūrėjas ar politikas", + "report_flow.label.impersonation_staff": "{product_name} darbuotojas ar pagalbos tarnyba", + "report_flow.label.intimate_image_abuse": "Intymūs vaizdai, bendrinami be sutikimo, įskaitant giliąsias klastotes (deepfake), arba grasinimas juos bendrinti", + "report_flow.label.intimate_image_abuse_guild": "Intymių vaizdų bendrinimas be sutikimo, įskaitant giliąsias klastotes (deepfake)", + "report_flow.label.intimate_image_abuse_profile": "Kieno nors intymūs vaizdai, bendrinami be sutikimo, įskaitant giliąsias klastotes (deepfake)", + "report_flow.label.intimate_photo": "Intymi ar nuoga nuotrauka", + "report_flow.label.invite_splash": "Kvietimo fonas", + "report_flow.label.ip_address": "IP adresas", + "report_flow.label.learn_more": "Perskaitykite {product_name} bendruomenės gaires", + "report_flow.label.legal_name": "Tikrasis arba teisinis vardas", + "report_flow.label.lgbtq_targeting": "Tyčinis netinkamas kreipimasis į asmenį pagal lytį, ankstesnio vardo naudojimas, seksualinės orientacijos ar lytinės tapatybės atskleidimas be asmens sutikimo arba jo tapatybės neigimas", + "report_flow.label.malware_guild": "Kenkėjiškų programų ar sukčiavimo nuorodų platinimas", + "report_flow.label.malware_phishing": "Sukčiavimo (phishing), kenkėjiškų programų ar įsilaužimo bandymai", + "report_flow.label.member_activity": "Ką nariai ten skelbia ar daro", + "report_flow.label.metric_manipulation": "Narių ar reakcijų skaičiaus klastojimas", + "report_flow.label.minor_contact": "Nepilnamečio prašymas susitikti, atsiųsti nuotraukų ar asmeninių duomenų taip, kad atrodo, jog siekiama jį išnaudoti", + "report_flow.label.minor_dating_community": "Tai bendruomenė, skirta nepilnamečių tarpusavio pasimatymams", + "report_flow.label.minor_fictional": "Nupieštas, parašytas ar dirbtinio intelekto sukurtas išgalvoto vaiko seksualinis turinys", + "report_flow.label.minor_grooming": "Nepilnamečio viliojimas ar netinkamo pasitikėjimo kūrimas", + "report_flow.label.minor_grooming_guild": "Nariai vilioja nepilnamečius ar kuria netinkamą pasitikėjimą", + "report_flow.label.minor_in_adult_space": "Nepilnametis yra 18+ kanale ar bendruomenėje", + "report_flow.label.minor_in_adult_space_guild": "Nepilnamečiams leidžiama būti kanaluose, skirtuose 18+", + "report_flow.label.minor_risk": "Pavojaus nepilnamečiui kėlimas", + "report_flow.label.minor_risk_guild": "Pavojaus nepilnamečiams kėlimas", + "report_flow.label.minor_sexual": "Nepilnamečio seksualizavimas", + "report_flow.label.minor_sexual_contact": "Flirtavimas su nepilnamečiu arba seksualinių žinučių siuntimas jam", + "report_flow.label.minor_sexual_contact_guild": "Nariai flirtuoja su nepilnamečiais arba siunčia jiems seksualines žinutes", + "report_flow.label.minor_sexual_content": "Nepilnametis pats dalijasi seksualinio pobūdžio turiniu", + "report_flow.label.minor_sexual_content_guild": "Nepilnamečiai skelbia ar siunčia seksualinį turinį", + "report_flow.label.minor_sexual_content_profile": "Nepilnamečio profilis su seksualinio pobūdžio turiniu", + "report_flow.label.minor_sexual_guild": "Nepilnamečių seksualizavimas", + "report_flow.label.minor_sexualization": "Seksualiniai komentarai apie nepilnamečius", + "report_flow.label.minor_sexualization_guild": "Nariai pateikia seksualinius komentarus apie nepilnamečius", + "report_flow.label.minor_sexualization_profile": "Seksualiniai komentarai apie nepilnamečius jų profilyje", + "report_flow.label.name": "Vardai", + "report_flow.label.other": "Kažkas, kas čia nenurodyta", + "report_flow.label.other_identifying": "Kita informacija, kuri galėtų identifikuoti ar nustatyti asmens buvimo vietą", + "report_flow.label.permits_violations": "Tai leidžia rimtai pažeisti taisykles", + "report_flow.label.phone": "Telefono numeris", + "report_flow.label.photo": "Nuotraukos", + "report_flow.label.platform_abuse": "Duomenų rinkimas, automatizavimas ar kitoks piktnaudžiavimas platforma", + "report_flow.label.private_conversation": "Privačios žinutės, ekrano kopijos ar skambučių įrašai", + "report_flow.label.private_info": "Kieno nors privačių duomenų bendrinimas", + "report_flow.label.private_info_profile": "Jų profilyje bendrinami kieno nors privatūs duomenys", + "report_flow.label.profile_text": "Profilio tekstas", + "report_flow.label.raid": "Reido ar puolimo organizavimas arba prisijungimas prie jo", + "report_flow.label.raid_guild": "Reidų ar puolimų prieš žmones ar bendruomenes organizavimas", + "report_flow.label.rude_language": "Keiksmai ar nemandagios pastabos", + "report_flow.label.self_harm": "Kažkas gali susižaloti arba skatina savižalą", + "report_flow.label.self_harm_graphic": "Detalūs savižalos vaizdai", + "report_flow.label.self_harm_guild": "Nariai spaudžia kitus susižaloti", + "report_flow.label.self_harm_pressure": "Spaudimas ar iššūkis kam nors susižaloti", + "report_flow.label.self_harm_pressure_guild": "Spaudimas ar iššūkis žmonėms susižaloti", + "report_flow.label.self_harm_profile": "Jų profilis užsimena apie savižalą arba ją skatina", + "report_flow.label.self_harm_promotion": "Savižalos skatinimas arba metodų bendrinimas", + "report_flow.label.self_harm_promotion_profile": "Jų profilyje skatinama savižala", + "report_flow.label.sexual": "Seksualinis turinys", + "report_flow.label.sexual_exploitation": "Seksualinis išnaudojimas, prievarta ar prekyba žmonėmis", + "report_flow.label.sexual_unwanted": "Seksualiniai vaizdai ar žinutės, kurių nenorėjau", + "report_flow.label.something_else": "Kažkas kita", + "report_flow.label.spam": "Šlamštas arba nepageidaujama reklama", + "report_flow.label.spam_bulk": "Masinis šlamšto ar reklamos siuntimas", + "report_flow.label.spam_or_manipulation": "Šlamštas arba platformos manipuliavimas", + "report_flow.label.spam_profile": "Jų profilis naudojamas šlamštui ar reklamai", + "report_flow.label.suicide_promotion": "Savižudybės skatinimas arba metodų bendrinimas", + "report_flow.label.suicide_promotion_profile": "Jų profilis skatina savižudybę", + "report_flow.label.synthetic_media": "Netikra arba dirbtinio intelekto sukurta medija, pateikiama kaip tikra", + "report_flow.label.terrorism": "Terorizmas arba smurtinis ekstremizmas", + "report_flow.label.terrorism_guild": "Verbavimas terorizmui ar smurtiniam ekstremizmui arba jų skatinimas", + "report_flow.label.threat": "Grasinimai ar raginimai smurtauti", + "report_flow.label.threat_to_share": "Jie grasina tuo pasidalyti", + "report_flow.label.too_young": "Jie jaunesni už minimalų amžių platformoje {product_name}", + "report_flow.label.unwanted_contact": "Persekiojimas arba pakartotinis susisiekimas su manimi ar kuo nors kitu, kai buvo paprašyta sustoti, užblokuota arba pašalinta", + "report_flow.label.violence_glorification": "Realaus smurto šlovinimas", + "report_flow.label.violence_incitement": "Smurto skatinimas arba paaiškinimas, kaip pakenkti žmonėms", + "report_flow.label.violence_misinfo": "Smurtas, ekstremizmas ar žalinga klaidinga informacija", + "report_flow.label.violent_threat": "Grasinimas kam nors pakenkti", + "report_flow.label.worried_profile": "Nerimauju dėl šio asmens saugumo", + "report_flow.label.worried_self_harm": "Bijau, kad šis asmuo gali susižaloti", + "report_flow.label.worried_suicide": "Bijau, kad šis asmuo gali bandyti nusižudyti", + "report_flow.notice.need_more_info.body": "Kad galėtume tai peržiūrėti, mums reikia žinutės, kurioje jie nurodo savo amžių arba aiškiai parodo, kad yra jaunesni už minimalų amžių platformoje {product_name}. Vietoj to praneškite apie tą žinutę.", + "report_flow.notice.need_more_info.title": "Dar negalime imtis veiksmų", + "report_flow.notice.need_more_info_profile.body": "Kad galėtume tai peržiūrėti, turime pamatyti, kur jie nurodo savo amžių arba aiškiai parodo, kad yra jaunesni už minimalų amžių platformoje {product_name}. Vietoj to praneškite apie tą žinutę arba profilį.", + "report_flow.screen.abuse.title": "Su kuo tai susiję?", + "report_flow.screen.abuse_guild.title": "Ką daro žmonės šioje bendruomenėje?", + "report_flow.screen.age_stated_message.title": "Ar šioje žinutėje nurodomas jų amžius?", + "report_flow.screen.age_stated_profile.title": "Ar jų profilyje nurodytas amžius?", + "report_flow.screen.community_parts.subtitle": "Pasirinkite tiek, kiek reikia.", + "report_flow.screen.community_parts.title": "Kurios bendruomenės dalys yra susijusios?", + "report_flow.screen.crisis_support.subtitle": "Krizinės pagalbos linijos teikia nemokamą ir konfidencialią pagalbą.", + "report_flow.screen.crisis_support.title": "Jums gali padėti jau dabar", + "report_flow.screen.false_info.subtitle": "Nuomonės, satyra ir sąžiningos diskusijos leidžiamos. Apie neteisėtą šmeižtą galima pranešti pagal Skaitmeninių paslaugų aktą.", + "report_flow.screen.false_info.subtitle_self_hosted": "Nuomonės, satyra ir sąžiningos diskusijos leidžiamos.", + "report_flow.screen.false_info.title": "Kuo tai klaidina?", + "report_flow.screen.harassment.title": "Kaip yra puolamas asmuo?", + "report_flow.screen.hate.title": "Kaip tai puola žmones dėl to, kas jie yra?", + "report_flow.screen.impersonation.subtitle": "Aiškiai pažymėta parodija ar vaidmenų žaidimas yra leidžiamas.", + "report_flow.screen.impersonation.title": "Kuo apsimetama, ar tai sukčiavimas?", + "report_flow.screen.minor_risk.title": "Kaip šis asmuo kelia pavojų nepilnamečiui?", + "report_flow.screen.minor_risk_guild.title": "Kaip ši bendruomenė kelia pavojų nepilnamečiams?", + "report_flow.screen.minor_sexual.subtitle": "Čia taip pat priskiriamas nupieštas, parašytas ar dirbtinio intelekto sukurtas turinys, kai personažas apibūdinamas kaip nepilnametis arba yra akivaizdžiai priešpubertatinio amžiaus, įskaitant lolicon, shotacon ir cub.", + "report_flow.screen.minor_sexual.title": "Ką matėte, kas susiję su nepilnamečiu?", + "report_flow.screen.minor_sexual_guild.title": "Ką matėte, kas susiję su nepilnamečiais?", + "report_flow.screen.private_info.subtitle": "Pasirinkite tiek, kiek reikia. Jei intymioje nuotraukoje matomas jaunesnis nei 18 metų asmuo, grįžkite atgal ir praneškite apie ją pasirinkę „Nepilnamečio seksualizavimas“.", + "report_flow.screen.private_info.title": "Kokie privatūs duomenys yra susiję?", + "report_flow.screen.profile_abuse.title": "Kas kenksminga jų profilyje?", + "report_flow.screen.profile_hate_violence.title": "Ką jų profilis rodo ar skatina?", + "report_flow.screen.profile_intro.options_heading": "Sužinoti daugiau", + "report_flow.screen.profile_intro.subtitle": "Papasakokite, kas negerai su šiuo profiliu. Jiems nebus pasakyta, kas pranešė.", + "report_flow.screen.profile_intro.title": "Pranešti apie profilį", + "report_flow.screen.profile_minor_sexual.title": "Kas jų profilyje susiję su nepilnamečiu?", + "report_flow.screen.profile_parts.subtitle": "Pasirinkite tiek, kiek reikia.", + "report_flow.screen.profile_parts.title": "Kurios jų profilio dalys kelia problemų?", + "report_flow.screen.profile_private_info.title": "Kokie privatūs duomenys yra jų profilyje?", + "report_flow.screen.profile_sexual.title": "Papasakokite apie seksualinį turinį jų profilyje", + "report_flow.screen.profile_threat.title": "Kaip jų profilis susijęs su smurtu?", + "report_flow.screen.root_guild.subtitle": "Pasirinkite artimiausią atitikmenį tam, kas vyksta šioje bendruomenėje.", + "report_flow.screen.root_guild.title": "Kas negerai su šia bendruomene?", + "report_flow.screen.root_message.subtitle": "Pasirinkite artimiausią atitikmenį. Viską galėsite patikrinti prieš pranešimo išsiuntimą.", + "report_flow.screen.root_message.title": "Pranešti apie žinutę", + "report_flow.screen.root_user.subtitle": "Pasirinkite artimiausią atitikmenį tam, kas yra jų profilyje.", + "report_flow.screen.root_user.title": "Kas negerai su jų profiliu?", + "report_flow.screen.self_harm.subtitle": "Niekas nėra baudžiamas už tai, kad pasakė, jog jam sunku. Pasakydami mums, kad nerimaujate, padedate mums pasiūlyti pagalbą.", + "report_flow.screen.self_harm.title": "Ką jie pasakė ar kuo pasidalijo?", + "report_flow.screen.self_harm_guild.title": "Ką skatina nariai?", + "report_flow.screen.self_harm_profile.title": "Ką sako ar rodo jų profilis?", + "report_flow.screen.sexual.subtitle": "Jei bet kuris pavaizduotas ar susijęs asmuo yra jaunesnis nei 18 metų, pasirinkite „Nepilnamečio seksualizavimas“.", + "report_flow.screen.sexual.title": "Papasakokite apie seksualinį turinį", + "report_flow.screen.sexual_guild.subtitle": "Jei bet kuris pavaizduotas ar susijęs asmuo yra jaunesnis nei 18 metų, pasirinkite „Nepilnamečių seksualizavimas“.", + "report_flow.screen.sexual_guild.title": "Papasakokite apie seksualinį turinį šioje bendruomenėje", + "report_flow.screen.something_else_guild.title": "Kas dar vyksta šioje bendruomenėje?", + "report_flow.screen.something_else_message.title": "Kas dar vyksta?", + "report_flow.screen.something_else_user.title": "Kas dar negerai su šiuo profiliu?", + "report_flow.screen.spam_kind_guild.title": "Kaip ši bendruomenė piktnaudžiauja platforma?", + "report_flow.screen.spam_profile.title": "Kaip paskyra naudojama netinkamai?", + "report_flow.screen.threat.title": "Kaip tai susiję su smurtu?", + "report_flow.screen.violence_misinfo.title": "Kuris iš šių variantų atitinka?", + "report_flow.screen.violence_misinfo_guild.title": "Kuris iš šių variantų vyksta šioje bendruomenėje?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/nl.json b/fluxer_api/src/api/content_i18n/weblate/locales/nl.json index 35a867481..2f05ffc39 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/nl.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/nl.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Tekstkanalen", "guild.default_category_voice": "Spraakkanalen", "guild.default_channel_text": "algemeen", - "guild.default_channel_voice": "Algemeen" + "guild.default_channel_voice": "Algemeen", + "report_flow.description.name": "Gebruikersnaam, weergavenaam of communitybijnaam", + "report_flow.description.photo": "Wat ze gebruiken als avatar en banner", + "report_flow.description.profile_text": "Bio, aangepaste status of voornaamwoorden", + "report_flow.label.abuse": "Beledigende of schadelijke inhoud", + "report_flow.label.account_trading": "Accounts verkopen, of gestolen aanmeldgegevens of kaartgegevens", + "report_flow.label.account_trading_communities": "Accounts of communities kopen of verkopen", + "report_flow.label.address": "Huisadres of werkplek", + "report_flow.label.adult_content_no_gate": "Inhoud voor volwassenen zonder 18+-leeftijdsbeperking", + "report_flow.label.adult_content_profile": "Expliciete inhoud voor volwassenen in hun profiel", + "report_flow.label.adult_content_unmarked": "Inhoud voor volwassenen in een communitykanaal dat niet is gemarkeerd als 18+", + "report_flow.label.age_no_message": "Nee, het wordt niet vermeld", + "report_flow.label.age_no_profile": "Nee, het wordt niet vermeld", + "report_flow.label.age_yes_message": "Ja, hun leeftijd wordt vermeld", + "report_flow.label.age_yes_profile": "Ja, hun profiel vermeldt hun leeftijd", + "report_flow.label.atrocity_denial": "Het ontkennen of verheerlijken van de Holocaust of andere genocides", + "report_flow.label.ban_evasion": "Een ban omzeilen met een ander account", + "report_flow.label.channel_names": "Kanaalnamen", + "report_flow.label.community_banner": "Communitybanner", + "report_flow.label.community_icon": "Communitypictogram", + "report_flow.label.community_name": "Naam community", + "report_flow.label.conversion_therapy": "Promoten van conversietherapie", + "report_flow.label.copyright": "Klacht over auteursrecht of handelsmerk", + "report_flow.label.crisis_lines": "Hulplijnen in jouw land", + "report_flow.label.csam": "Echte of door AI gegenereerde beelden of video's van seksueel misbruik van kinderen", + "report_flow.label.discovery_listing": "Vermelding bij Ontdekken", + "report_flow.label.dislike": "Het is gewoon niets voor mij", + "report_flow.label.dsa": "Inhoud die illegaal is in de EU (digitaledienstenverordening)", + "report_flow.label.eating_disorder_promotion": "Gestoord eetgedrag aanmoedigen", + "report_flow.label.eating_disorder_promotion_profile": "Hun profiel promoot eetstoornissen", + "report_flow.label.email": "E-mailadres", + "report_flow.label.emoji_stickers": "Aangepaste emoji of stickers", + "report_flow.label.face_photo": "Foto van hun gezicht", + "report_flow.label.fake_account": "Nepaccount, bot of geautomatiseerd misbruik", + "report_flow.label.fake_account_profile": "Een nep- of bedrieglijk account", + "report_flow.label.false_claims": "Leugens verspreiden om de reputatie van een specifieke persoon te schaden", + "report_flow.label.false_info": "Verspreiden van schadelijke valse informatie", + "report_flow.label.financial": "Kaart-, bank- of andere financiële gegevens", + "report_flow.label.fraud": "Ze proberen mensen geld of accounts afhandig te maken", + "report_flow.label.fraud_guild": "Mensen geld of accounts afhandig maken", + "report_flow.label.government_id": "Identiteitsbewijs of ID-nummer", + "report_flow.label.graphic_violence": "Echt geweld dat wordt getoond om te choqueren, zoals gore of dierenmishandeling", + "report_flow.label.harassment": "Pesten, intimidatie of stalking", + "report_flow.label.harassment_direct": "Iemand herhaaldelijk aanvallen met beledigingen of scheldpartijen", + "report_flow.label.harassment_guild": "Mensen lastigvallen, pesten of stalken", + "report_flow.label.harassment_profile": "Hun profiel valt mij of iemand anders lastig of aan", + "report_flow.label.harmful_false_claims": "Onjuiste beweringen die ernstige schade in de echte wereld kunnen veroorzaken", + "report_flow.label.hate": "Haat of discriminatie tegen mensen om wie ze zijn", + "report_flow.label.hate_dehumanizing": "Mensen vergelijken met dieren, ziekten of vuil, of ze minder dan menselijk noemen", + "report_flow.label.hate_incitement": "Oproepen tot geweld tegen een groep of tot uitsluiting van een groep", + "report_flow.label.hate_other": "Andere aanvallen op mensen om wie ze zijn", + "report_flow.label.hate_slurs": "Scheldwoorden, haatdragende symbolen of denigrerende stereotypen", + "report_flow.label.hate_violence": "Haat, geweld of extremisme", + "report_flow.label.identity": "Seksuele geaardheid, genderidentiteit of intersekse status", + "report_flow.label.illegal_activity": "Andere illegale activiteiten", + "report_flow.label.illegal_goods": "Verkoop van drugs, wapens of andere illegale goederen", + "report_flow.label.impersonation": "Zich voordoen als iemand anders, of mensen oplichten", + "report_flow.label.impersonation_guild": "Zich voordoen als {product_name} of een andere organisatie", + "report_flow.label.impersonation_organization": "Een bedrijf, merk of groep", + "report_flow.label.impersonation_person": "Mij of iemand die dicht bij mij staat", + "report_flow.label.impersonation_public_figure": "Een bekende persoon, zoals een maker of politicus", + "report_flow.label.impersonation_staff": "Medewerkers of ondersteuning van {product_name}", + "report_flow.label.intimate_image_abuse": "Intieme afbeeldingen gedeeld zonder toestemming, inclusief deepfakes, of een dreiging om deze te delen", + "report_flow.label.intimate_image_abuse_guild": "Intieme afbeeldingen delen zonder toestemming, inclusief deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intieme afbeeldingen van iemand gedeeld zonder toestemming, inclusief deepfakes", + "report_flow.label.intimate_photo": "Intieme foto of naaktfoto", + "report_flow.label.invite_splash": "Uitnodigingsachtergrond", + "report_flow.label.ip_address": "IP-adres", + "report_flow.label.learn_more": "Lees de communityrichtlijnen van {product_name}", + "report_flow.label.legal_name": "Echte of wettelijke naam", + "report_flow.label.lgbtq_targeting": "Opzettelijk iemand verkeerd aanspreken, deadnamen of outen, of hun identiteit ontkennen", + "report_flow.label.malware_guild": "Malware of phishinglinks verspreiden", + "report_flow.label.malware_phishing": "Phishing, malware of pogingen om te hacken", + "report_flow.label.member_activity": "Wat leden daar plaatsen of doen", + "report_flow.label.metric_manipulation": "Leden- of reactieaantallen vervalsen", + "report_flow.label.minor_contact": "Een minderjarige vragen om af te spreken, of om foto's of persoonlijke gegevens, op een manier die op kwade bedoelingen wijst", + "report_flow.label.minor_dating_community": "Het is een community voor daten tussen minderjarigen", + "report_flow.label.minor_fictional": "Getekende, geschreven of AI-gegenereerde seksuele content van een fictief kind", + "report_flow.label.minor_grooming": "Grooming of ongepast vertrouwen opbouwen met een minderjarige", + "report_flow.label.minor_grooming_guild": "Leden groomen of bouwen ongepast vertrouwen op met minderjarigen", + "report_flow.label.minor_in_adult_space": "Een minderjarige bevindt zich in een 18+-kanaal of -community", + "report_flow.label.minor_in_adult_space_guild": "Minderjarigen worden toegelaten tot 18+-kanalen", + "report_flow.label.minor_risk": "Een minderjarige in gevaar brengen", + "report_flow.label.minor_risk_guild": "Minderjarigen in gevaar brengen", + "report_flow.label.minor_sexual": "Een minderjarige seksualiseren", + "report_flow.label.minor_sexual_contact": "Flirten met een minderjarige of seksuele berichten naar een minderjarige sturen", + "report_flow.label.minor_sexual_contact_guild": "Leden flirten met minderjarigen of sturen hen seksuele berichten", + "report_flow.label.minor_sexual_content": "Een minderjarige deelt zelf seksuele inhoud", + "report_flow.label.minor_sexual_content_guild": "Minderjarigen plaatsen of versturen seksuele inhoud", + "report_flow.label.minor_sexual_content_profile": "Profiel van een minderjarige met seksuele inhoud", + "report_flow.label.minor_sexual_guild": "Minderjarigen seksualiseren", + "report_flow.label.minor_sexualization": "Seksuele opmerkingen over minderjarigen", + "report_flow.label.minor_sexualization_guild": "Leden maken seksuele opmerkingen over minderjarigen", + "report_flow.label.minor_sexualization_profile": "Seksuele opmerkingen over minderjarigen in hun profiel", + "report_flow.label.name": "Namen", + "report_flow.label.other": "Iets wat hier niet vermeld staat", + "report_flow.label.other_identifying": "Andere informatie die iemand zou kunnen identificeren of lokaliseren", + "report_flow.label.permits_violations": "Het staat ernstige overtredingen van de regels toe", + "report_flow.label.phone": "Telefoonnummer", + "report_flow.label.photo": "Afbeeldingen", + "report_flow.label.platform_abuse": "Scraping, automatisering of ander platformmisbruik", + "report_flow.label.private_conversation": "Privéberichten, schermafbeeldingen of gespreksopnamen", + "report_flow.label.private_info": "Iemands privégegevens delen", + "report_flow.label.private_info_profile": "Hun profiel deelt iemands privégegevens", + "report_flow.label.profile_text": "Profieltekst", + "report_flow.label.raid": "Het organiseren van of deelnemen aan een raid of pile-on", + "report_flow.label.raid_guild": "Het organiseren van raids of pile-ons tegen personen of communities", + "report_flow.label.rude_language": "Schelden of onbeleefde opmerkingen", + "report_flow.label.self_harm": "Iemand zou zichzelf pijn kunnen doen, of moedigt zelfbeschadiging aan", + "report_flow.label.self_harm_graphic": "Expliciete afbeeldingen van zelfbeschadiging", + "report_flow.label.self_harm_guild": "Leden zetten anderen aan tot zelfbeschadiging", + "report_flow.label.self_harm_pressure": "Iemand onder druk zetten of uitdagen om zichzelf pijn te doen", + "report_flow.label.self_harm_pressure_guild": "Mensen onder druk zetten of uitdagen om zichzelf pijn te doen", + "report_flow.label.self_harm_profile": "Hun profiel suggereert zelfbeschadiging of moedigt het aan", + "report_flow.label.self_harm_promotion": "Zelfbeschadiging aanmoedigen of methoden delen", + "report_flow.label.self_harm_promotion_profile": "Hun profiel moedigt zelfbeschadiging aan", + "report_flow.label.sexual": "Seksuele inhoud", + "report_flow.label.sexual_exploitation": "Seksuele uitbuiting, dwang of mensenhandel", + "report_flow.label.sexual_unwanted": "Seksuele afbeeldingen of berichten die ik niet wilde", + "report_flow.label.something_else": "Iets anders", + "report_flow.label.spam": "Spam of ongewenste advertenties", + "report_flow.label.spam_bulk": "Spam of reclame in bulk verzenden", + "report_flow.label.spam_or_manipulation": "Spam of platformmanipulatie", + "report_flow.label.spam_profile": "Hun profiel wordt gebruikt voor spam of reclame", + "report_flow.label.suicide_promotion": "Zelfmoord aanmoedigen of methoden delen", + "report_flow.label.suicide_promotion_profile": "Hun profiel moedigt zelfmoord aan", + "report_flow.label.synthetic_media": "Nep- of AI-gemaakte media die als echt worden gepresenteerd", + "report_flow.label.terrorism": "Terrorisme of gewelddadig extremisme", + "report_flow.label.terrorism_guild": "Werven voor of promoten van terrorisme of gewelddadig extremisme", + "report_flow.label.threat": "Bedreigingen of oproepen tot geweld", + "report_flow.label.threat_to_share": "Ze dreigen het te delen", + "report_flow.label.too_young": "Ze zijn jonger dan de minimumleeftijd om {product_name} te gebruiken", + "report_flow.label.unwanted_contact": "Mij of iemand anders stalken of herhaaldelijk contact opnemen, ook nadat is gevraagd te stoppen of nadat de persoon is geblokkeerd of verwijderd", + "report_flow.label.violence_glorification": "Geweld in de echte wereld verheerlijken", + "report_flow.label.violence_incitement": "Geweld aanmoedigen of uitleggen hoe je mensen pijn kunt doen", + "report_flow.label.violence_misinfo": "Geweld, extremisme of schadelijke valse informatie", + "report_flow.label.violent_threat": "Zeggen dat ze iemand pijn zullen doen", + "report_flow.label.worried_profile": "Ik maak me zorgen over hun veiligheid", + "report_flow.label.worried_self_harm": "Ik ben bang dat ze zichzelf pijn zouden kunnen doen", + "report_flow.label.worried_suicide": "Ik ben bang dat ze een zelfmoordpoging zouden kunnen doen", + "report_flow.notice.need_more_info.body": "Om dit te beoordelen, hebben we een bericht nodig waarin ze zeggen hoe oud ze zijn of duidelijk maken dat ze jonger zijn dan de minimumleeftijd van {product_name}. Meld in plaats daarvan dat bericht.", + "report_flow.notice.need_more_info.title": "Hier kunnen we nu nog niets mee", + "report_flow.notice.need_more_info_profile.body": "Om dit te beoordelen, moeten we zien waar ze zeggen hoe oud ze zijn of duidelijk maken dat ze jonger zijn dan de minimumleeftijd van {product_name}. Meld in plaats daarvan dat bericht of profiel.", + "report_flow.screen.abuse.title": "Waar gaat het om?", + "report_flow.screen.abuse_guild.title": "Wat doen mensen in deze community?", + "report_flow.screen.age_stated_message.title": "Zegt dit bericht hoe oud ze zijn?", + "report_flow.screen.age_stated_profile.title": "Staat in hun profiel hoe oud ze zijn?", + "report_flow.screen.community_parts.subtitle": "Kies er zoveel als nodig is.", + "report_flow.screen.community_parts.title": "Welke onderdelen van de community zijn betrokken?", + "report_flow.screen.crisis_support.subtitle": "Hulplijnen bieden gratis, vertrouwelijke ondersteuning.", + "report_flow.screen.crisis_support.title": "Er is nu iemand die kan helpen", + "report_flow.screen.false_info.subtitle": "Meningen, satire en discussies te goeder trouw zijn toegestaan. Onrechtmatige smaad kan worden gemeld onder de digitaledienstenverordening (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meningen, satire en discussies te goeder trouw zijn toegestaan.", + "report_flow.screen.false_info.title": "Wat is er misleidend aan?", + "report_flow.screen.harassment.title": "Hoe wordt iemand op de korrel genomen?", + "report_flow.screen.hate.title": "Hoe valt het mensen aan om wie ze zijn?", + "report_flow.screen.impersonation.subtitle": "Duidelijk gelabelde parodie of rollenspel is toegestaan.", + "report_flow.screen.impersonation.title": "Wie wordt nagebootst, of is het oplichting?", + "report_flow.screen.minor_risk.title": "Hoe brengt deze persoon een minderjarige in gevaar?", + "report_flow.screen.minor_risk_guild.title": "Hoe brengt deze community minderjarigen in gevaar?", + "report_flow.screen.minor_sexual.subtitle": "Getekende, geschreven of AI-content telt mee wanneer een personage wordt beschreven als minderjarig of duidelijk prepuber is, inclusief lolicon, shotacon en cub.", + "report_flow.screen.minor_sexual.title": "Wat heb je gezien waar een minderjarige bij betrokken is?", + "report_flow.screen.minor_sexual_guild.title": "Wat heb je gezien waar minderjarigen bij betrokken zijn?", + "report_flow.screen.private_info.subtitle": "Kies er zoveel als nodig is. Als een intieme foto iemand onder de 18 laat zien, ga dan terug en meld het onder “Een minderjarige seksualiseren”.", + "report_flow.screen.private_info.title": "Welke privégegevens zijn betrokken?", + "report_flow.screen.profile_abuse.title": "Wat is er schadelijk aan hun profiel?", + "report_flow.screen.profile_hate_violence.title": "Wat laat hun profiel zien of promoot het?", + "report_flow.screen.profile_intro.options_heading": "Meer informatie", + "report_flow.screen.profile_intro.subtitle": "Vertel ons wat er mis is met dit profiel. Ze krijgen niet te horen wie de melding heeft gedaan.", + "report_flow.screen.profile_intro.title": "Profiel melden", + "report_flow.screen.profile_minor_sexual.title": "Wat in hun profiel heeft met een minderjarige te maken?", + "report_flow.screen.profile_parts.subtitle": "Kies er zoveel als nodig is.", + "report_flow.screen.profile_parts.title": "Welke onderdelen van hun profiel zijn een probleem?", + "report_flow.screen.profile_private_info.title": "Welke privégegevens staan in hun profiel?", + "report_flow.screen.profile_sexual.title": "Vertel ons over de seksuele inhoud in hun profiel", + "report_flow.screen.profile_threat.title": "Hoe speelt geweld een rol in hun profiel?", + "report_flow.screen.root_guild.subtitle": "Kies de beste omschrijving voor wat er in deze community gebeurt.", + "report_flow.screen.root_guild.title": "Wat is er mis met deze community?", + "report_flow.screen.root_message.subtitle": "Kies de beste omschrijving. Je kunt alles controleren voordat het wordt verzonden.", + "report_flow.screen.root_message.title": "Bericht melden", + "report_flow.screen.root_user.subtitle": "Kies de beste omschrijving voor wat er in hun profiel staat.", + "report_flow.screen.root_user.title": "Wat is er mis met hun profiel?", + "report_flow.screen.self_harm.subtitle": "Niemand wordt gestraft als ze zeggen dat ze het moeilijk hebben. Als je ons vertelt dat je je zorgen maakt, kunnen we ondersteuning bieden.", + "report_flow.screen.self_harm.title": "Wat hebben ze gezegd of gedeeld?", + "report_flow.screen.self_harm_guild.title": "Wat moedigen leden aan?", + "report_flow.screen.self_harm_profile.title": "Wat zegt of toont hun profiel?", + "report_flow.screen.sexual.subtitle": "Als iemand die te zien is of erbij betrokken is, jonger is dan 18, kies dan “Een minderjarige seksualiseren”.", + "report_flow.screen.sexual.title": "Vertel ons over de seksuele inhoud", + "report_flow.screen.sexual_guild.subtitle": "Als iemand die te zien is of erbij betrokken is, jonger is dan 18, kies dan “Minderjarigen seksualiseren”.", + "report_flow.screen.sexual_guild.title": "Vertel ons over de seksuele inhoud in deze community", + "report_flow.screen.something_else_guild.title": "Wat is er nog meer aan de hand in deze community?", + "report_flow.screen.something_else_message.title": "Wat is er nog meer aan de hand?", + "report_flow.screen.something_else_user.title": "Wat is er nog meer mis met dit profiel?", + "report_flow.screen.spam_kind_guild.title": "Hoe misbruikt deze community het platform?", + "report_flow.screen.spam_profile.title": "Hoe wordt het account misbruikt?", + "report_flow.screen.threat.title": "Hoe speelt geweld hierbij een rol?", + "report_flow.screen.violence_misinfo.title": "Welke van deze past erbij?", + "report_flow.screen.violence_misinfo_guild.title": "Welke van deze gebeurt er in deze community?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/no.json b/fluxer_api/src/api/content_i18n/weblate/locales/no.json index 6a4d6d3db..8fc8a3a1b 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/no.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/no.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Tekstkanaler", "guild.default_category_voice": "Talekanaler", "guild.default_channel_text": "generelt", - "guild.default_channel_voice": "Generelt" + "guild.default_channel_voice": "Generelt", + "report_flow.description.name": "Brukernavn, visningsnavn eller kallenavn i fellesskapet", + "report_flow.description.photo": "Hva de bruker som avatar og banner", + "report_flow.description.profile_text": "Bio, egendefinert status eller pronomen", + "report_flow.label.abuse": "Støtende eller skadelig innhold", + "report_flow.label.account_trading": "Salg av kontoer, stjålne pålogginger eller kortdetaljer", + "report_flow.label.account_trading_communities": "Kjøp eller salg av kontoer eller fellesskap", + "report_flow.label.address": "Hjemmeadresse eller arbeidsplass", + "report_flow.label.adult_content_no_gate": "Voksent innhold uten 18+ aldersbegrensning", + "report_flow.label.adult_content_profile": "Eksplisitt voksent innhold i profilen deres", + "report_flow.label.adult_content_unmarked": "Voksent innhold i en fellesskapskanal som ikke er merket 18+", + "report_flow.label.age_no_message": "Nei, det nevnes ikke", + "report_flow.label.age_no_profile": "Nei, det nevnes ikke", + "report_flow.label.age_yes_message": "Ja, alderen deres nevnes", + "report_flow.label.age_yes_profile": "Ja, profilen deres nevner alderen deres", + "report_flow.label.atrocity_denial": "Benekter eller feirer Holocaust eller andre folkemord", + "report_flow.label.ban_evasion": "Omgår en utestengelse med en annen konto", + "report_flow.label.channel_names": "Kanalnavn", + "report_flow.label.community_banner": "Fellesskapsbanner", + "report_flow.label.community_icon": "Fellesskapsikon", + "report_flow.label.community_name": "Fellesskapsnavn", + "report_flow.label.conversion_therapy": "Fremmer konverteringsterapi", + "report_flow.label.copyright": "Klage på opphavsrett eller varemerke", + "report_flow.label.crisis_lines": "Kriselinjer i landet ditt", + "report_flow.label.csam": "Ekte eller AI-genererte bilder eller videoer av seksuelle overgrep mot barn", + "report_flow.label.discovery_listing": "Oppføring i Oppdag", + "report_flow.label.dislike": "Det er bare ikke noe for meg", + "report_flow.label.dsa": "Innhold som er ulovlig i EU (forordningen om digitale tjenester, DSA)", + "report_flow.label.eating_disorder_promotion": "Oppfordrer til spiseforstyrrelser", + "report_flow.label.eating_disorder_promotion_profile": "Profilen deres fremmer spiseforstyrrelser", + "report_flow.label.email": "E-postadresse", + "report_flow.label.emoji_stickers": "Egendefinerte emojier eller klistremerker", + "report_flow.label.face_photo": "Bilde av ansiktet deres", + "report_flow.label.fake_account": "Falsk konto, bot eller automatisert misbruk", + "report_flow.label.fake_account_profile": "En falsk eller villedende konto", + "report_flow.label.false_claims": "Sprer løgner for å skade ryktet til en bestemt person", + "report_flow.label.false_info": "Sprer skadelig falsk informasjon", + "report_flow.label.financial": "Kort-, bank- eller andre finansielle detaljer", + "report_flow.label.fraud": "De prøver å lure penger eller kontoer fra folk", + "report_flow.label.fraud_guild": "Lurer penger eller kontoer fra folk", + "report_flow.label.government_id": "ID-dokument eller ID-nummer", + "report_flow.label.graphic_violence": "Ekte vold vist for å sjokkere, som blodige voldsbilder eller dyremishandling", + "report_flow.label.harassment": "Mobbing, trakassering eller forfølgelse", + "report_flow.label.harassment_direct": "Retter gjentatte ganger fornærmelser eller krenkelser mot noen", + "report_flow.label.harassment_guild": "Trakassering, mobbing eller forfølgelse av folk", + "report_flow.label.harassment_profile": "Profilen deres trakasserer eller retter seg mot meg eller noen andre", + "report_flow.label.harmful_false_claims": "Falske påstander som kan forårsake alvorlig skade i den virkelige verden", + "report_flow.label.hate": "Hat eller diskriminering mot folk på grunn av hvem de er", + "report_flow.label.hate_dehumanizing": "Sammenligne folk med dyr, sykdom eller skitt, eller kalle dem mindre enn mennesker", + "report_flow.label.hate_incitement": "Oppfordringer til vold eller ekskludering mot en gruppe", + "report_flow.label.hate_other": "Andre angrep på folk på grunn av hvem de er", + "report_flow.label.hate_slurs": "Skjellsord, hatefulle symboler eller nedsettende stereotyper", + "report_flow.label.hate_violence": "Hat, vold eller ekstremisme", + "report_flow.label.identity": "Seksuell legning, kjønnsidentitet eller det å være interkjønn", + "report_flow.label.illegal_activity": "Annen ulovlig aktivitet", + "report_flow.label.illegal_goods": "Salg av narkotika, våpen eller andre ulovlige varer", + "report_flow.label.impersonation": "Utgir seg for å være noen, eller svindler folk", + "report_flow.label.impersonation_guild": "Utgir seg for å være {product_name} eller en annen organisasjon", + "report_flow.label.impersonation_organization": "Et selskap, en merkevare eller en gruppe", + "report_flow.label.impersonation_person": "Meg eller noen nær meg", + "report_flow.label.impersonation_public_figure": "En kjent person, for eksempel en innholdsskaper eller politiker", + "report_flow.label.impersonation_staff": "Ansatte eller support hos {product_name}", + "report_flow.label.intimate_image_abuse": "Intime bilder delt uten samtykke, inkludert deepfakes, eller trussel om å dele dem", + "report_flow.label.intimate_image_abuse_guild": "Deler intime bilder uten samtykke, inkludert deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intime bilder av noen delt uten samtykke, inkludert deepfakes", + "report_flow.label.intimate_photo": "Intimt bilde eller nakenbilde", + "report_flow.label.invite_splash": "Invitasjonsbakgrunn", + "report_flow.label.ip_address": "IP-adresse", + "report_flow.label.learn_more": "Les retningslinjene for fellesskapet på {product_name}", + "report_flow.label.legal_name": "Ekte eller juridisk navn", + "report_flow.label.lgbtq_targeting": "Bevisst feilkjønning, «deadnaming» eller «outing» av noen, eller benektelse av deres identitet", + "report_flow.label.malware_guild": "Distribuerer skadelig programvare eller phishing-lenker", + "report_flow.label.malware_phishing": "Phishing, skadelig programvare eller hackingforsøk", + "report_flow.label.member_activity": "Hva medlemmer legger ut eller gjør der", + "report_flow.label.metric_manipulation": "Juks med antall medlemmer eller reaksjoner", + "report_flow.label.minor_contact": "Ber en mindreårig om å møtes, eller om bilder eller personlige detaljer, på en måte som tyder på at de vil utnytte den mindreårige", + "report_flow.label.minor_dating_community": "Det er et fellesskap for dating mellom mindreårige", + "report_flow.label.minor_fictional": "Tegnet, skrevet eller AI-generert seksuelt innhold av et fiktivt barn", + "report_flow.label.minor_grooming": "Grooming eller oppbygging av upassende tillit hos en mindreårig", + "report_flow.label.minor_grooming_guild": "Medlemmer driver grooming av mindreårige eller bygger upassende tillit hos dem", + "report_flow.label.minor_in_adult_space": "En mindreårig er i en 18+-kanal eller et 18+-fellesskap", + "report_flow.label.minor_in_adult_space_guild": "Mindreårige er tillatt i 18+-kanaler", + "report_flow.label.minor_risk": "Setter en mindreårig i fare", + "report_flow.label.minor_risk_guild": "Setter mindreårige i fare", + "report_flow.label.minor_sexual": "Seksualisering av en mindreårig", + "report_flow.label.minor_sexual_contact": "Flørter med en mindreårig eller sender seksuelle meldinger til dem", + "report_flow.label.minor_sexual_contact_guild": "Medlemmer flørter med mindreårige eller sender dem seksuelle meldinger", + "report_flow.label.minor_sexual_content": "En mindreårig deler selv seksuelt innhold", + "report_flow.label.minor_sexual_content_guild": "Mindreårige legger ut eller sender seksuelt innhold", + "report_flow.label.minor_sexual_content_profile": "En mindreårigs profil med seksuelt innhold", + "report_flow.label.minor_sexual_guild": "Seksualisering av mindreårige", + "report_flow.label.minor_sexualization": "Seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_guild": "Medlemmer kommer med seksuelle kommentarer om mindreårige", + "report_flow.label.minor_sexualization_profile": "Seksuelle kommentarer om mindreårige i profilen deres", + "report_flow.label.name": "Navn", + "report_flow.label.other": "Noe som ikke er oppført her", + "report_flow.label.other_identifying": "Annen informasjon som kan identifisere eller lokalisere noen", + "report_flow.label.permits_violations": "Det tillater alvorlige brudd på reglene", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Skraping, automatisering eller annet plattformmisbruk", + "report_flow.label.private_conversation": "Private meldinger, skjermbilder eller samtaleopptak", + "report_flow.label.private_info": "Deler noens private detaljer", + "report_flow.label.private_info_profile": "Profilen deres deler noens private detaljer", + "report_flow.label.profile_text": "Profiltekst", + "report_flow.label.raid": "Organiserer eller deltar i et raid eller et samordnet angrep", + "report_flow.label.raid_guild": "Organiserer raid eller samordnede angrep mot personer eller fellesskap", + "report_flow.label.rude_language": "Banning eller frekke bemerkninger", + "report_flow.label.self_harm": "Noen kan skade seg selv, eller oppfordrer til selvskading", + "report_flow.label.self_harm_graphic": "Grafiske bilder av selvskading", + "report_flow.label.self_harm_guild": "Medlemmer presser andre til å skade seg selv", + "report_flow.label.self_harm_pressure": "Presser eller utfordrer noen til å skade seg selv", + "report_flow.label.self_harm_pressure_guild": "Presser eller utfordrer folk til å skade seg selv", + "report_flow.label.self_harm_profile": "Profilen deres antyder selvskading eller oppfordrer til det", + "report_flow.label.self_harm_promotion": "Oppfordrer til selvskading eller deler metoder", + "report_flow.label.self_harm_promotion_profile": "Profilen deres oppfordrer til selvskading", + "report_flow.label.sexual": "Seksuelt innhold", + "report_flow.label.sexual_exploitation": "Seksuell utnyttelse, tvang eller menneskehandel", + "report_flow.label.sexual_unwanted": "Seksuelle bilder eller meldinger jeg ikke ønsket", + "report_flow.label.something_else": "Noe annet", + "report_flow.label.spam": "Spam eller uønskede annonser", + "report_flow.label.spam_bulk": "Sender spam eller reklame i bulk", + "report_flow.label.spam_or_manipulation": "Spam eller plattformmanipulering", + "report_flow.label.spam_profile": "Profilen deres brukes til spam eller reklame", + "report_flow.label.suicide_promotion": "Oppfordrer til selvmord eller deler metoder", + "report_flow.label.suicide_promotion_profile": "Profilen deres oppfordrer til selvmord", + "report_flow.label.synthetic_media": "Falske eller AI-genererte medier som presenteres som ekte", + "report_flow.label.terrorism": "Terrorisme eller voldelig ekstremisme", + "report_flow.label.terrorism_guild": "Rekrutterer for eller fremmer terrorisme eller voldelig ekstremisme", + "report_flow.label.threat": "Trusler eller oppfordringer til vold", + "report_flow.label.threat_to_share": "De truer med å dele det", + "report_flow.label.too_young": "De er under minimumsalderen for å bruke {product_name}", + "report_flow.label.unwanted_contact": "Forfølgelse eller gjentatt kontakt med meg eller noen andre etter å ha blitt bedt om å stoppe, blokkert eller fjernet", + "report_flow.label.violence_glorification": "Forherliger vold i den virkelige verden", + "report_flow.label.violence_incitement": "Oppmuntring til vold eller forklaring av hvordan man skader folk", + "report_flow.label.violence_misinfo": "Vold, ekstremisme eller skadelig falsk informasjon", + "report_flow.label.violent_threat": "Sier at de vil skade noen", + "report_flow.label.worried_profile": "Jeg er bekymret for sikkerheten deres", + "report_flow.label.worried_self_harm": "Jeg er redd de kan skade seg selv", + "report_flow.label.worried_suicide": "Jeg er redd de kan forsøke selvmord", + "report_flow.notice.need_more_info.body": "For å kunne vurdere dette trenger vi en melding der de sier hvor gamle de er, eller gjør det klart at de er under minimumsalderen på {product_name}. Rapporter den meldingen i stedet.", + "report_flow.notice.need_more_info.title": "Vi kan ikke gjøre noe med dette ennå", + "report_flow.notice.need_more_info_profile.body": "For å kunne vurdere dette trenger vi å se hvor de sier hvor gamle de er, eller gjør det klart at de er under minimumsalderen på {product_name}. Rapporter den meldingen eller profilen i stedet.", + "report_flow.screen.abuse.title": "Hva innebærer det?", + "report_flow.screen.abuse_guild.title": "Hva gjør folk i dette fellesskapet?", + "report_flow.screen.age_stated_message.title": "Sier denne meldingen hvor gamle de er?", + "report_flow.screen.age_stated_profile.title": "Sier profilen deres hvor gamle de er?", + "report_flow.screen.community_parts.subtitle": "Velg så mange du trenger.", + "report_flow.screen.community_parts.title": "Hvilke deler av fellesskapet er involvert?", + "report_flow.screen.crisis_support.subtitle": "Kriselinjer tilbyr gratis, konfidensiell støtte.", + "report_flow.screen.crisis_support.title": "Noen kan hjelpe akkurat nå", + "report_flow.screen.false_info.subtitle": "Meninger, satire og debatt i god tro er tillatt. Ulovlig ærekrenkelse kan rapporteres i henhold til forordningen om digitale tjenester (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Meninger, satire og debatt i god tro er tillatt.", + "report_flow.screen.false_info.title": "Hva er misvisende med det?", + "report_flow.screen.harassment.title": "Hvordan blir noen rammet?", + "report_flow.screen.hate.title": "Hvordan angriper det folk på grunn av hvem de er?", + "report_flow.screen.impersonation.subtitle": "Tydelig merket parodi eller rollespill er tillatt.", + "report_flow.screen.impersonation.title": "Hvem blir etterlignet, eller er det svindel?", + "report_flow.screen.minor_risk.title": "Hvordan setter denne personen en mindreårig i fare?", + "report_flow.screen.minor_risk_guild.title": "Hvordan setter dette fellesskapet mindreårige i fare?", + "report_flow.screen.minor_sexual.subtitle": "Tegnet, skrevet eller AI-generert innhold regnes med når en karakter beskrives som mindreårig eller tydelig er i førpubertet, inkludert lolicon, shotacon og cub.", + "report_flow.screen.minor_sexual.title": "Hva så du som involverte en mindreårig?", + "report_flow.screen.minor_sexual_guild.title": "Hva så du som involverte mindreårige?", + "report_flow.screen.private_info.subtitle": "Velg så mange du trenger. Hvis et intimt bilde viser noen under 18 år, gå tilbake og rapporter det under «Seksualisering av en mindreårig».", + "report_flow.screen.private_info.title": "Hvilke private detaljer er involvert?", + "report_flow.screen.profile_abuse.title": "Hva er skadelig med profilen deres?", + "report_flow.screen.profile_hate_violence.title": "Hva viser eller fremmer profilen deres?", + "report_flow.screen.profile_intro.options_heading": "Lær mer", + "report_flow.screen.profile_intro.subtitle": "Fortell oss hva som er galt med denne profilen. De vil ikke få vite hvem som rapporterte dem.", + "report_flow.screen.profile_intro.title": "Rapporter profil", + "report_flow.screen.profile_minor_sexual.title": "Hva i profilen deres involverer en mindreårig?", + "report_flow.screen.profile_parts.subtitle": "Velg så mange du trenger.", + "report_flow.screen.profile_parts.title": "Hvilke deler av profilen deres er et problem?", + "report_flow.screen.profile_private_info.title": "Hvilke private detaljer er i profilen deres?", + "report_flow.screen.profile_sexual.title": "Fortell oss om det seksuelle innholdet i profilen deres", + "report_flow.screen.profile_threat.title": "Hvordan involverer profilen deres vold?", + "report_flow.screen.root_guild.subtitle": "Velg alternativet som passer best med det som skjer i dette fellesskapet.", + "report_flow.screen.root_guild.title": "Hva er galt med dette fellesskapet?", + "report_flow.screen.root_message.subtitle": "Velg alternativet som passer best. Du kan se over alt før det sendes.", + "report_flow.screen.root_message.title": "Rapporter melding", + "report_flow.screen.root_user.subtitle": "Velg alternativet som passer best med det som står i profilen deres.", + "report_flow.screen.root_user.title": "Hva er galt med profilen deres?", + "report_flow.screen.self_harm.subtitle": "Ingen blir straffet for å si at de sliter. Å fortelle oss at du er bekymret hjelper oss med å tilby støtte.", + "report_flow.screen.self_harm.title": "Hva sa eller delte de?", + "report_flow.screen.self_harm_guild.title": "Hva oppfordrer medlemmene til?", + "report_flow.screen.self_harm_profile.title": "Hva sier eller viser profilen deres?", + "report_flow.screen.sexual.subtitle": "Hvis noen som vises eller er involvert, er under 18 år, velg «Seksualisering av en mindreårig».", + "report_flow.screen.sexual.title": "Fortell oss om det seksuelle innholdet", + "report_flow.screen.sexual_guild.subtitle": "Hvis noen som vises eller er involvert, er under 18 år, velg «Seksualisering av mindreårige».", + "report_flow.screen.sexual_guild.title": "Fortell oss om det seksuelle innholdet i dette fellesskapet", + "report_flow.screen.something_else_guild.title": "Hva annet skjer i dette fellesskapet?", + "report_flow.screen.something_else_message.title": "Hva annet skjer?", + "report_flow.screen.something_else_user.title": "Hva annet er galt med denne profilen?", + "report_flow.screen.spam_kind_guild.title": "Hvordan misbruker dette fellesskapet plattformen?", + "report_flow.screen.spam_profile.title": "Hvordan misbrukes kontoen?", + "report_flow.screen.threat.title": "Hvordan involverer det vold?", + "report_flow.screen.violence_misinfo.title": "Hvilket av disse passer best?", + "report_flow.screen.violence_misinfo_guild.title": "Hvilket av disse skjer i dette fellesskapet?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/pl.json b/fluxer_api/src/api/content_i18n/weblate/locales/pl.json index 29113b5c1..db740864f 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/pl.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/pl.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Kanały tekstowe", "guild.default_category_voice": "Kanały głosowe", "guild.default_channel_text": "ogólny", - "guild.default_channel_voice": "Ogólny" + "guild.default_channel_voice": "Ogólny", + "report_flow.description.name": "Nazwa użytkownika, nazwa wyświetlana lub pseudonim w społeczności", + "report_flow.description.photo": "Awatar i baner, których używają", + "report_flow.description.profile_text": "Biogram, status niestandardowy lub zaimki", + "report_flow.label.abuse": "Treści obraźliwe lub szkodliwe", + "report_flow.label.account_trading": "Sprzedaż kont lub skradzionych danych logowania albo danych kart", + "report_flow.label.account_trading_communities": "Kupowanie lub sprzedawanie kont lub społeczności", + "report_flow.label.address": "Adres domowy lub miejsce pracy", + "report_flow.label.adult_content_no_gate": "Treści dla dorosłych bez ograniczenia wiekowego 18+", + "report_flow.label.adult_content_profile": "Dosłowne treści dla dorosłych w ich profilu", + "report_flow.label.adult_content_unmarked": "Treści dla dorosłych w kanale społeczności, który nie jest oznaczony jako 18+", + "report_flow.label.age_no_message": "Nie, ta wiadomość o tym nie wspomina", + "report_flow.label.age_no_profile": "Nie, ich profil o tym nie wspomina", + "report_flow.label.age_yes_message": "Tak, wiadomość wspomina o wieku tej osoby", + "report_flow.label.age_yes_profile": "Tak, ich profil wspomina o ich wieku", + "report_flow.label.atrocity_denial": "Zaprzeczanie Holokaustowi lub innym ludobójstwom albo ich gloryfikowanie", + "report_flow.label.ban_evasion": "Omijanie bana za pomocą innego konta", + "report_flow.label.channel_names": "Nazwy kanałów", + "report_flow.label.community_banner": "Baner społeczności", + "report_flow.label.community_icon": "Ikona społeczności", + "report_flow.label.community_name": "Nazwa społeczności", + "report_flow.label.conversion_therapy": "Promowanie terapii konwersyjnej", + "report_flow.label.copyright": "Skarga dotycząca praw autorskich lub znaku towarowego", + "report_flow.label.crisis_lines": "Linie kryzysowe w Twoim kraju", + "report_flow.label.csam": "Prawdziwe lub wygenerowane przez AI obrazy lub filmy przedstawiające wykorzystywanie seksualne dzieci", + "report_flow.label.discovery_listing": "Wpis w sekcji Odkrywanie", + "report_flow.label.dislike": "To po prostu nie jest dla mnie", + "report_flow.label.dsa": "Treści, które są nielegalne w UE (akt o usługach cyfrowych)", + "report_flow.label.eating_disorder_promotion": "Zachęcanie do zaburzeń odżywiania", + "report_flow.label.eating_disorder_promotion_profile": "Ich profil promuje zaburzenia odżywiania", + "report_flow.label.email": "Adres e-mail", + "report_flow.label.emoji_stickers": "Niestandardowe emoji lub naklejki", + "report_flow.label.face_photo": "Zdjęcie ich twarzy", + "report_flow.label.fake_account": "Fałszywe konto, bot lub zautomatyzowane nadużycie", + "report_flow.label.fake_account_profile": "Fałszywe lub oszukańcze konto", + "report_flow.label.false_claims": "Rozpowszechnianie kłamstw w celu zaszkodzenia reputacji konkretnej osoby", + "report_flow.label.false_info": "Rozpowszechnianie szkodliwych fałszywych informacji", + "report_flow.label.financial": "Karta, bank lub inne dane finansowe", + "report_flow.label.fraud": "Próbują wyłudzić od ludzi pieniądze lub konta", + "report_flow.label.fraud_guild": "Wyłudzanie od ludzi pieniędzy lub kont", + "report_flow.label.government_id": "Dokument tożsamości lub numer identyfikacyjny", + "report_flow.label.graphic_violence": "Prawdziwa przemoc pokazywana, by szokować, np. krwawe sceny lub okrucieństwo wobec zwierząt", + "report_flow.label.harassment": "Zastraszanie, nękanie lub prześladowanie", + "report_flow.label.harassment_direct": "Wielokrotne obrażanie lub znęcanie się nad kimś", + "report_flow.label.harassment_guild": "Nękanie, zastraszanie lub prześladowanie ludzi", + "report_flow.label.harassment_profile": "Profil tej osoby nęka lub atakuje mnie lub kogoś innego", + "report_flow.label.harmful_false_claims": "Fałszywe twierdzenia, które mogą spowodować poważne szkody w świecie rzeczywistym", + "report_flow.label.hate": "Nienawiść lub dyskryminacja wobec ludzi ze względu na to, kim są", + "report_flow.label.hate_dehumanizing": "Porównywanie ludzi do zwierząt, chorób lub brudu, lub nazywanie ich podludźmi", + "report_flow.label.hate_incitement": "Nawoływanie do przemocy lub wykluczenia wobec grupy", + "report_flow.label.hate_other": "Inne ataki na ludzi ze względu na to, kim są", + "report_flow.label.hate_slurs": "Obraźliwe określenia, symbole nienawiści lub poniżające stereotypy", + "report_flow.label.hate_violence": "Nienawiść, przemoc lub ekstremizm", + "report_flow.label.identity": "Orientacja seksualna, tożsamość płciowa lub status interpłciowy", + "report_flow.label.illegal_activity": "Inna nielegalna działalność", + "report_flow.label.illegal_goods": "Sprzedaż narkotyków, broni lub innych nielegalnych towarów", + "report_flow.label.impersonation": "Podszywanie się pod kogoś lub oszukiwanie ludzi", + "report_flow.label.impersonation_guild": "Podszywanie się pod {product_name} lub inną organizację", + "report_flow.label.impersonation_organization": "Firma, marka lub grupa", + "report_flow.label.impersonation_person": "Ja lub ktoś mi bliski", + "report_flow.label.impersonation_public_figure": "Znana osoba, np. twórca lub polityk", + "report_flow.label.impersonation_staff": "Pracownicy lub pomoc techniczna platformy {product_name}", + "report_flow.label.intimate_image_abuse": "Intymne zdjęcia udostępnione bez zgody, w tym deepfakes, lub groźba ich udostępnienia", + "report_flow.label.intimate_image_abuse_guild": "Udostępnianie intymnych zdjęć bez zgody, w tym deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intymne zdjęcia kogoś udostępnione bez zgody, w tym deepfakes", + "report_flow.label.intimate_photo": "Intymne lub nagie zdjęcie", + "report_flow.label.invite_splash": "Tło strony zaproszenia", + "report_flow.label.ip_address": "Adres IP", + "report_flow.label.learn_more": "Przeczytaj Wytyczne społeczności {product_name}", + "report_flow.label.legal_name": "Prawdziwe lub prawne imię i nazwisko", + "report_flow.label.lgbtq_targeting": "Celowe używanie niewłaściwych form płciowych (misgendering), używanie dawnego imienia (deadnaming), ujawnianie czyjejś tożsamości wbrew woli (outing) lub zaprzeczanie czyjejś tożsamości", + "report_flow.label.malware_guild": "Rozpowszechnianie złośliwego oprogramowania lub linków phishingowych", + "report_flow.label.malware_phishing": "Phishing, złośliwe oprogramowanie lub próby włamania", + "report_flow.label.member_activity": "Co członkowie tam publikują lub robią", + "report_flow.label.metric_manipulation": "Fałszowanie liczby członków lub reakcji", + "report_flow.label.minor_contact": "Proszenie nieletniego o spotkanie, zdjęcia lub dane osobowe w sposób sugerujący zamiar wykorzystania", + "report_flow.label.minor_dating_community": "To społeczność, w której nieletni umawiają się ze sobą na randki", + "report_flow.label.minor_fictional": "Rysowane, pisane lub generowane przez AI treści seksualne przedstawiające fikcyjne dziecko", + "report_flow.label.minor_grooming": "Grooming lub budowanie nieodpowiedniego zaufania u nieletniego", + "report_flow.label.minor_grooming_guild": "Członkowie stosują grooming wobec nieletnich lub budują u nich nieodpowiednie zaufanie", + "report_flow.label.minor_in_adult_space": "Nieletni znajduje się na kanale lub w społeczności 18+", + "report_flow.label.minor_in_adult_space_guild": "Nieletnim wolno przebywać na kanałach 18+", + "report_flow.label.minor_risk": "Narażanie nieletniego na ryzyko", + "report_flow.label.minor_risk_guild": "Narażanie nieletnich na ryzyko", + "report_flow.label.minor_sexual": "Seksualizowanie nieletniego", + "report_flow.label.minor_sexual_contact": "Flirtowanie z nieletnim lub wysyłanie mu wiadomości o charakterze seksualnym", + "report_flow.label.minor_sexual_contact_guild": "Członkowie flirtują z nieletnimi lub wysyłają im wiadomości o charakterze seksualnym", + "report_flow.label.minor_sexual_content": "Nieletni sam udostępnia treści o charakterze seksualnym", + "report_flow.label.minor_sexual_content_guild": "Nieletni publikują lub wysyłają treści o charakterze seksualnym", + "report_flow.label.minor_sexual_content_profile": "Profil nieletniego z treściami o charakterze seksualnym", + "report_flow.label.minor_sexual_guild": "Seksualizowanie nieletnich", + "report_flow.label.minor_sexualization": "Komentarze o charakterze seksualnym dotyczące nieletnich", + "report_flow.label.minor_sexualization_guild": "Członkowie zamieszczają komentarze o charakterze seksualnym dotyczące nieletnich", + "report_flow.label.minor_sexualization_profile": "Komentarze o charakterze seksualnym dotyczące nieletnich w ich profilu", + "report_flow.label.name": "Nazwy", + "report_flow.label.other": "Coś, czego nie ma na liście", + "report_flow.label.other_identifying": "Inne informacje, które mogłyby zidentyfikować lub zlokalizować kogoś", + "report_flow.label.permits_violations": "Umożliwia poważne łamanie zasad", + "report_flow.label.phone": "Numer telefonu", + "report_flow.label.photo": "Obrazy", + "report_flow.label.platform_abuse": "Scraping, automatyzacja lub inne nadużycia platformy", + "report_flow.label.private_conversation": "Prywatne wiadomości, zrzuty ekranu lub nagrania rozmów", + "report_flow.label.private_info": "Udostępnianie prywatnych danych kogoś innego", + "report_flow.label.private_info_profile": "Ich profil udostępnia prywatne dane kogoś innego", + "report_flow.label.profile_text": "Tekst profilu", + "report_flow.label.raid": "Organizowanie lub dołączanie do nalotu lub nagonki", + "report_flow.label.raid_guild": "Organizowanie nalotów lub nagonki na osoby lub społeczności", + "report_flow.label.rude_language": "Przekleństwa lub niegrzeczne uwagi", + "report_flow.label.self_harm": "Ktoś może się skrzywdzić lub zachęca do samookaleczenia", + "report_flow.label.self_harm_graphic": "Drastyczne obrazy samookaleczeń", + "report_flow.label.self_harm_guild": "Członkowie namawiają innych do samookaleczenia", + "report_flow.label.self_harm_pressure": "Wywieranie presji na kogoś lub rzucanie mu wyzwania, aby zrobił sobie krzywdę", + "report_flow.label.self_harm_pressure_guild": "Wywieranie presji na ludzi lub rzucanie im wyzwania, aby zrobili sobie krzywdę", + "report_flow.label.self_harm_profile": "Ich profil sugeruje samookaleczenie lub do niego zachęca", + "report_flow.label.self_harm_promotion": "Zachęcanie do samookaleczenia lub udostępnianie metod", + "report_flow.label.self_harm_promotion_profile": "Ich profil zachęca do samookaleczeń", + "report_flow.label.sexual": "Treści o charakterze seksualnym", + "report_flow.label.sexual_exploitation": "Wykorzystywanie seksualne, przymus lub handel ludźmi", + "report_flow.label.sexual_unwanted": "Niechciane obrazy lub wiadomości o charakterze seksualnym", + "report_flow.label.something_else": "Coś innego", + "report_flow.label.spam": "Spam lub niechciane reklamy", + "report_flow.label.spam_bulk": "Wysyłanie spamu lub reklam masowo", + "report_flow.label.spam_or_manipulation": "Spam lub manipulacja platformą", + "report_flow.label.spam_profile": "Ich profil jest używany do spamu lub reklam", + "report_flow.label.suicide_promotion": "Zachęcanie do samobójstwa lub udostępnianie metod", + "report_flow.label.suicide_promotion_profile": "Ich profil zachęca do samobójstwa", + "report_flow.label.synthetic_media": "Fałszywe lub stworzone przez AI media przedstawiane jako prawdziwe", + "report_flow.label.terrorism": "Terroryzm lub brutalny ekstremizm", + "report_flow.label.terrorism_guild": "Rekrutowanie lub promowanie terroryzmu lub brutalnego ekstremizmu", + "report_flow.label.threat": "Groźby lub nawoływanie do przemocy", + "report_flow.label.threat_to_share": "Grożą, że to udostępnią", + "report_flow.label.too_young": "Ta osoba jest poniżej minimalnego wieku wymaganego do korzystania z platformy {product_name}", + "report_flow.label.unwanted_contact": "Prześladowanie lub wielokrotne kontaktowanie się ze mną lub kimś innym po prośbie o zaprzestanie, po zablokowaniu lub usunięciu", + "report_flow.label.violence_glorification": "Gloryfikowanie przemocy w świecie rzeczywistym", + "report_flow.label.violence_incitement": "Zachęcanie do przemocy lub wyjaśnianie, jak krzywdzić ludzi", + "report_flow.label.violence_misinfo": "Przemoc, ekstremizm lub szkodliwe fałszywe informacje", + "report_flow.label.violent_threat": "Grożenie komuś krzywdą", + "report_flow.label.worried_profile": "Martwię się o bezpieczeństwo tej osoby", + "report_flow.label.worried_self_harm": "Obawiam się, że ta osoba może zrobić sobie krzywdę", + "report_flow.label.worried_suicide": "Obawiam się, że ta osoba może podjąć próbę samobójczą", + "report_flow.notice.need_more_info.body": "Aby to rozpatrzyć, potrzebujemy wiadomości, w której ta osoba podaje swój wiek lub jasno daje do zrozumienia, że jest poniżej minimalnego wieku wymaganego na platformie {product_name}. Zgłoś zamiast tego taką wiadomość.", + "report_flow.notice.need_more_info.title": "Na razie nie możemy podjąć działań w tej sprawie", + "report_flow.notice.need_more_info_profile.body": "Aby to rozpatrzyć, musimy zobaczyć miejsce, w którym ta osoba podaje swój wiek lub jasno daje do zrozumienia, że jest poniżej minimalnego wieku wymaganego na platformie {product_name}. Zgłoś zamiast tego taką wiadomość lub taki profil.", + "report_flow.screen.abuse.title": "Czego to dotyczy?", + "report_flow.screen.abuse_guild.title": "Co robią ludzie w tej społeczności?", + "report_flow.screen.age_stated_message.title": "Czy w tej wiadomości podano wiek tej osoby?", + "report_flow.screen.age_stated_profile.title": "Czy w ich profilu podano wiek?", + "report_flow.screen.community_parts.subtitle": "Wybierz tyle, ile potrzebujesz.", + "report_flow.screen.community_parts.title": "Których części społeczności to dotyczy?", + "report_flow.screen.crisis_support.subtitle": "Linie kryzysowe oferują bezpłatne, poufne wsparcie.", + "report_flow.screen.crisis_support.title": "Ktoś może pomóc od razu", + "report_flow.screen.false_info.subtitle": "Opinie, satyra i debata w dobrej wierze są dozwolone. Niezgodne z prawem zniesławienie można zgłosić na podstawie aktu o usługach cyfrowych (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinie, satyra i debata w dobrej wierze są dozwolone.", + "report_flow.screen.false_info.title": "Co jest w tym mylące?", + "report_flow.screen.harassment.title": "W jaki sposób ktoś jest atakowany?", + "report_flow.screen.hate.title": "Jak atakuje ludzi ze względu na to, kim są?", + "report_flow.screen.impersonation.subtitle": "Wyraźnie oznaczone parodie lub odgrywanie ról są dozwolone.", + "report_flow.screen.impersonation.title": "Kogo dotyczy podszywanie się albo czy to oszustwo?", + "report_flow.screen.minor_risk.title": "W jaki sposób ta osoba naraża nieletniego na ryzyko?", + "report_flow.screen.minor_risk_guild.title": "W jaki sposób ta społeczność naraża nieletnich na ryzyko?", + "report_flow.screen.minor_sexual.subtitle": "Treści rysowane, pisane lub generowane przez AI również się kwalifikują, gdy postać jest opisana jako nieletnia lub jest wyraźnie przed okresem dojrzewania, w tym lolicon, shotacon i cub.", + "report_flow.screen.minor_sexual.title": "Co widać z udziałem nieletniego?", + "report_flow.screen.minor_sexual_guild.title": "Co widać z udziałem nieletnich?", + "report_flow.screen.private_info.subtitle": "Wybierz tyle, ile potrzebujesz. Jeśli intymne zdjęcie przedstawia osobę poniżej 18 roku życia, wróć i zgłoś je w kategorii „Seksualizowanie nieletniego”.", + "report_flow.screen.private_info.title": "Jakich prywatnych danych to dotyczy?", + "report_flow.screen.profile_abuse.title": "Co jest szkodliwe w ich profilu?", + "report_flow.screen.profile_hate_violence.title": "Co pokazuje lub promuje ich profil?", + "report_flow.screen.profile_intro.options_heading": "Dowiedz się więcej", + "report_flow.screen.profile_intro.subtitle": "Powiedz nam, co jest nie tak z tym profilem. Ta osoba nie dowie się, kto ją zgłosił.", + "report_flow.screen.profile_intro.title": "Zgłoś profil", + "report_flow.screen.profile_minor_sexual.title": "Co w ich profilu dotyczy nieletniego?", + "report_flow.screen.profile_parts.subtitle": "Wybierz tyle, ile potrzebujesz.", + "report_flow.screen.profile_parts.title": "Które części ich profilu stanowią problem?", + "report_flow.screen.profile_private_info.title": "Jakie prywatne dane znajdują się w ich profilu?", + "report_flow.screen.profile_sexual.title": "Powiedz nam o treściach o charakterze seksualnym w ich profilu", + "report_flow.screen.profile_threat.title": "Jak ich profil wiąże się z przemocą?", + "report_flow.screen.root_guild.subtitle": "Wybierz opcję, która najlepiej pasuje do tego, co dzieje się w tej społeczności.", + "report_flow.screen.root_guild.title": "Co jest nie tak z tą społecznością?", + "report_flow.screen.root_message.subtitle": "Wybierz opcję, która najlepiej pasuje. Przed wysłaniem możesz wszystko sprawdzić.", + "report_flow.screen.root_message.title": "Zgłoś wiadomość", + "report_flow.screen.root_user.subtitle": "Wybierz opcję, która najlepiej pasuje do tego, co jest w ich profilu.", + "report_flow.screen.root_user.title": "Co jest nie tak z ich profilem?", + "report_flow.screen.self_harm.subtitle": "Nikt nie jest karany za przyznanie, że ma trudności. Poinformowanie nas o swoich obawach pomaga nam zaoferować wsparcie.", + "report_flow.screen.self_harm.title": "Co ta osoba powiedziała lub udostępniła?", + "report_flow.screen.self_harm_guild.title": "Do czego zachęcają członkowie?", + "report_flow.screen.self_harm_profile.title": "Co mówi lub pokazuje ich profil?", + "report_flow.screen.sexual.subtitle": "Jeśli ktokolwiek pokazany lub zaangażowany ma poniżej 18 lat, wybierz „Seksualizowanie nieletniego”.", + "report_flow.screen.sexual.title": "Powiedz nam o treściach o charakterze seksualnym", + "report_flow.screen.sexual_guild.subtitle": "Jeśli ktokolwiek pokazany lub zaangażowany ma poniżej 18 lat, wybierz „Seksualizowanie nieletnich”.", + "report_flow.screen.sexual_guild.title": "Powiedz nam o treściach o charakterze seksualnym w tej społeczności", + "report_flow.screen.something_else_guild.title": "Co jeszcze dzieje się w tej społeczności?", + "report_flow.screen.something_else_message.title": "Co jeszcze się dzieje?", + "report_flow.screen.something_else_user.title": "Co jeszcze jest nie tak z tym profilem?", + "report_flow.screen.spam_kind_guild.title": "Jak ta społeczność nadużywa platformy?", + "report_flow.screen.spam_profile.title": "Jak konto jest niewłaściwie używane?", + "report_flow.screen.threat.title": "Jak to wiąże się z przemocą?", + "report_flow.screen.violence_misinfo.title": "Które z nich najlepiej to opisuje?", + "report_flow.screen.violence_misinfo_guild.title": "Które z nich ma miejsce w tej społeczności?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/pt-BR.json b/fluxer_api/src/api/content_i18n/weblate/locales/pt-BR.json index 2b1ec62d5..09e22dd35 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/pt-BR.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/pt-BR.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Canais de texto", "guild.default_category_voice": "Canais de voz", "guild.default_channel_text": "geral", - "guild.default_channel_voice": "Geral" + "guild.default_channel_voice": "Geral", + "report_flow.description.name": "Nome de usuário, nome de exibição ou apelido na comunidade", + "report_flow.description.photo": "O que a pessoa usa como avatar e banner", + "report_flow.description.profile_text": "Biografia, status personalizado ou pronomes", + "report_flow.label.abuse": "Conteúdo abusivo ou prejudicial", + "report_flow.label.account_trading": "Venda de contas, logins roubados ou dados de cartão", + "report_flow.label.account_trading_communities": "Compra ou venda de contas ou comunidades", + "report_flow.label.address": "Endereço residencial ou local de trabalho", + "report_flow.label.adult_content_no_gate": "Conteúdo adulto sem restrição de idade 18+", + "report_flow.label.adult_content_profile": "Conteúdo adulto explícito no perfil", + "report_flow.label.adult_content_unmarked": "Conteúdo adulto em um canal da comunidade que não está marcado como 18+", + "report_flow.label.age_no_message": "Não, não menciona", + "report_flow.label.age_no_profile": "Não, não menciona", + "report_flow.label.age_yes_message": "Sim, menciona a idade da pessoa", + "report_flow.label.age_yes_profile": "Sim, o perfil menciona a idade", + "report_flow.label.atrocity_denial": "Negação ou celebração do Holocausto ou outros genocídios", + "report_flow.label.ban_evasion": "Contornar um banimento com outra conta", + "report_flow.label.channel_names": "Nomes de canais", + "report_flow.label.community_banner": "Banner da comunidade", + "report_flow.label.community_icon": "Ícone da comunidade", + "report_flow.label.community_name": "Nome da comunidade", + "report_flow.label.conversion_therapy": "Promoção de terapia de conversão", + "report_flow.label.copyright": "Reclamação de direitos autorais ou marca registrada", + "report_flow.label.crisis_lines": "Linhas de apoio em situações de crise no seu país", + "report_flow.label.csam": "Imagens ou vídeos reais ou gerados por IA de abuso sexual infantil", + "report_flow.label.discovery_listing": "Listagem em Descobrir", + "report_flow.label.dislike": "Não é para mim", + "report_flow.label.dsa": "Conteúdo ilegal na UE (Regulamento dos Serviços Digitais)", + "report_flow.label.eating_disorder_promotion": "Incentivando transtornos alimentares", + "report_flow.label.eating_disorder_promotion_profile": "O perfil dele(a) promove transtornos alimentares", + "report_flow.label.email": "Endereço de e-mail", + "report_flow.label.emoji_stickers": "Emojis ou figurinhas personalizados", + "report_flow.label.face_photo": "Foto do rosto dele(a)", + "report_flow.label.fake_account": "Conta falsa, bot ou abuso automatizado", + "report_flow.label.fake_account_profile": "Uma conta falsa ou enganosa", + "report_flow.label.false_claims": "Espalhar mentiras para prejudicar a reputação de uma pessoa específica", + "report_flow.label.false_info": "Espalhando informações falsas prejudiciais", + "report_flow.label.financial": "Cartão, banco ou outros detalhes financeiros", + "report_flow.label.fraud": "Estão tentando enganar pessoas para ficar com o dinheiro ou as contas delas", + "report_flow.label.fraud_guild": "Enganando pessoas para ficar com o dinheiro ou as contas delas", + "report_flow.label.government_id": "Documento de identidade ou número de identificação", + "report_flow.label.graphic_violence": "Violência real exibida para chocar, como gore ou crueldade animal", + "report_flow.label.harassment": "Bullying, assédio ou perseguição", + "report_flow.label.harassment_direct": "Atacar repetidamente alguém com insultos ou abuso", + "report_flow.label.harassment_guild": "Assédio, bullying ou perseguição a pessoas", + "report_flow.label.harassment_profile": "O perfil assedia ou ataca a mim ou a outra pessoa", + "report_flow.label.harmful_false_claims": "Alegações falsas que podem causar sérios danos no mundo real", + "report_flow.label.hate": "Ódio ou discriminação contra pessoas por quem elas são", + "report_flow.label.hate_dehumanizing": "Comparar pessoas a animais, doenças ou sujeira, ou chamá-las de menos que humanas", + "report_flow.label.hate_incitement": "Apelos à violência ou exclusão contra um grupo", + "report_flow.label.hate_other": "Outros ataques a pessoas por quem elas são", + "report_flow.label.hate_slurs": "Insultos discriminatórios, símbolos de ódio ou estereótipos depreciativos", + "report_flow.label.hate_violence": "Ódio, violência ou extremismo", + "report_flow.label.identity": "Orientação sexual, identidade de gênero ou status intersexo", + "report_flow.label.illegal_activity": "Outras atividades ilegais", + "report_flow.label.illegal_goods": "Venda de drogas, armas ou outros itens ilegais", + "report_flow.label.impersonation": "Fingir ser outra pessoa ou aplicar golpes", + "report_flow.label.impersonation_guild": "Fingir ser {product_name} ou outra organização", + "report_flow.label.impersonation_organization": "Uma empresa, marca ou grupo", + "report_flow.label.impersonation_person": "Eu ou alguém próximo a mim", + "report_flow.label.impersonation_public_figure": "Uma pessoa conhecida, como um criador de conteúdo ou político", + "report_flow.label.impersonation_staff": "Equipe ou suporte do {product_name}", + "report_flow.label.intimate_image_abuse": "Imagens íntimas compartilhadas sem consentimento, incluindo deepfakes, ou uma ameaça de compartilhá-las", + "report_flow.label.intimate_image_abuse_guild": "Compartilhamento de imagens íntimas sem consentimento, incluindo deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Imagens íntimas de alguém compartilhadas sem consentimento, incluindo deepfakes", + "report_flow.label.intimate_photo": "Foto íntima ou de nudez", + "report_flow.label.invite_splash": "Imagem de fundo do convite", + "report_flow.label.ip_address": "Endereço IP", + "report_flow.label.learn_more": "Leia as Diretrizes da Comunidade do {product_name}", + "report_flow.label.legal_name": "Nome real ou nome civil", + "report_flow.label.lgbtq_targeting": "Usar de propósito o gênero errado ou o nome morto (deadnaming) de alguém, expor sua orientação ou identidade (outing) ou negar sua identidade", + "report_flow.label.malware_guild": "Distribuição de malware ou links de phishing", + "report_flow.label.malware_phishing": "Tentativas de phishing, malware ou hacking", + "report_flow.label.member_activity": "O que os membros postam ou fazem lá", + "report_flow.label.metric_manipulation": "Falsificação de contagens de membros ou reações", + "report_flow.label.minor_contact": "Pedir a um menor um encontro, fotos ou dados pessoais, de uma forma que pareça predatória", + "report_flow.label.minor_dating_community": "É uma comunidade para namoro entre menores", + "report_flow.label.minor_fictional": "Conteúdo sexual desenhado, escrito ou gerado por IA de uma criança fictícia", + "report_flow.label.minor_grooming": "Aliciar ou construir confiança inadequada com um menor", + "report_flow.label.minor_grooming_guild": "Membros aliciam ou constroem confiança inadequada com menores", + "report_flow.label.minor_in_adult_space": "Um menor está em um canal ou comunidade 18+", + "report_flow.label.minor_in_adult_space_guild": "Menores são permitidos em canais 18+", + "report_flow.label.minor_risk": "Colocando um menor em risco", + "report_flow.label.minor_risk_guild": "Colocando menores em risco", + "report_flow.label.minor_sexual": "Sexualização de menor de idade", + "report_flow.label.minor_sexual_contact": "Flertar com um menor ou enviar mensagens sexuais para ele", + "report_flow.label.minor_sexual_contact_guild": "Membros flertam com menores ou enviam mensagens sexuais para eles", + "report_flow.label.minor_sexual_content": "O próprio menor está compartilhando conteúdo sexual", + "report_flow.label.minor_sexual_content_guild": "Menores publicam ou enviam conteúdo sexual", + "report_flow.label.minor_sexual_content_profile": "Perfil de menor com conteúdo sexual", + "report_flow.label.minor_sexual_guild": "Sexualização de menores de idade", + "report_flow.label.minor_sexualization": "Comentários sexuais sobre menores", + "report_flow.label.minor_sexualization_guild": "Membros fazem comentários sexuais sobre menores", + "report_flow.label.minor_sexualization_profile": "Comentários sexuais sobre menores no perfil", + "report_flow.label.name": "Nomes", + "report_flow.label.other": "Algo não listado aqui", + "report_flow.label.other_identifying": "Outras informações que poderiam identificar ou localizar alguém", + "report_flow.label.permits_violations": "Permite violações graves das regras", + "report_flow.label.phone": "Número de telefone", + "report_flow.label.photo": "Imagens", + "report_flow.label.platform_abuse": "Coleta de dados, automação ou outro abuso da plataforma", + "report_flow.label.private_conversation": "Mensagens privadas, capturas de tela ou gravações de chamadas", + "report_flow.label.private_info": "Compartilhamento de detalhes privados de alguém", + "report_flow.label.private_info_profile": "O perfil da pessoa compartilha detalhes privados de alguém", + "report_flow.label.profile_text": "Texto do perfil", + "report_flow.label.raid": "Organizar ou participar de um ataque ou assédio em massa", + "report_flow.label.raid_guild": "Organizar ataques ou assédios em massa contra pessoas ou comunidades", + "report_flow.label.rude_language": "Palavrões ou comentários grosseiros", + "report_flow.label.self_harm": "Alguém pode se machucar ou está incentivando automutilação", + "report_flow.label.self_harm_graphic": "Imagens gráficas de automutilação", + "report_flow.label.self_harm_guild": "Membros pressionam outras pessoas a se machucarem", + "report_flow.label.self_harm_pressure": "Pressionar ou desafiar alguém a se machucar", + "report_flow.label.self_harm_pressure_guild": "Pressionar ou desafiar pessoas a se machucarem", + "report_flow.label.self_harm_profile": "O perfil sugere automutilação ou a incentiva", + "report_flow.label.self_harm_promotion": "Incentivando automutilação ou compartilhando métodos", + "report_flow.label.self_harm_promotion_profile": "O perfil dele(a) incentiva a automutilação", + "report_flow.label.sexual": "Conteúdo sexual", + "report_flow.label.sexual_exploitation": "Exploração sexual, coerção ou tráfico de pessoas", + "report_flow.label.sexual_unwanted": "Imagens ou mensagens sexuais que eu não queria", + "report_flow.label.something_else": "Outra coisa", + "report_flow.label.spam": "Spam ou anúncios indesejados", + "report_flow.label.spam_bulk": "Envio de spam ou publicidade em massa", + "report_flow.label.spam_or_manipulation": "Spam ou manipulação da plataforma", + "report_flow.label.spam_profile": "O perfil é usado para spam ou publicidade", + "report_flow.label.suicide_promotion": "Incentivando suicídio ou compartilhando métodos", + "report_flow.label.suicide_promotion_profile": "O perfil incentiva o suicídio", + "report_flow.label.synthetic_media": "Mídia falsa ou criada por IA apresentada como real", + "report_flow.label.terrorism": "Terrorismo ou extremismo violento", + "report_flow.label.terrorism_guild": "Recrutamento ou promoção de terrorismo ou extremismo violento", + "report_flow.label.threat": "Ameaças ou apelos à violência", + "report_flow.label.threat_to_share": "A pessoa está ameaçando compartilhar isso", + "report_flow.label.too_young": "Essa pessoa não tem a idade mínima para usar o {product_name}", + "report_flow.label.unwanted_contact": "Perseguição ou contato repetido comigo ou com outra pessoa após pedido para parar, bloqueio ou remoção", + "report_flow.label.violence_glorification": "Glorificando violência do mundo real", + "report_flow.label.violence_incitement": "Incentivo à violência ou explicação de como machucar pessoas", + "report_flow.label.violence_misinfo": "Violência, extremismo ou informações falsas prejudiciais", + "report_flow.label.violent_threat": "Dizendo que vai machucar alguém", + "report_flow.label.worried_profile": "Estou preocupado(a) com a segurança dessa pessoa", + "report_flow.label.worried_self_harm": "Tenho medo de que essa pessoa se machuque", + "report_flow.label.worried_suicide": "Tenho medo de que essa pessoa tente se suicidar", + "report_flow.notice.need_more_info.body": "Para analisar isso, precisamos de uma mensagem em que a pessoa diga quantos anos tem ou deixe claro que não tem a idade mínima para usar o {product_name}. Denuncie essa mensagem em vez disso.", + "report_flow.notice.need_more_info.title": "Ainda não podemos agir", + "report_flow.notice.need_more_info_profile.body": "Para analisar isso, precisamos ver onde a pessoa diz quantos anos tem ou deixa claro que não tem a idade mínima para usar o {product_name}. Denuncie essa mensagem ou perfil em vez disso.", + "report_flow.screen.abuse.title": "O que isso envolve?", + "report_flow.screen.abuse_guild.title": "O que as pessoas nesta comunidade estão fazendo?", + "report_flow.screen.age_stated_message.title": "Esta mensagem diz a idade da pessoa?", + "report_flow.screen.age_stated_profile.title": "O perfil dessa pessoa diz quantos anos ela tem?", + "report_flow.screen.community_parts.subtitle": "Selecione quantas precisar.", + "report_flow.screen.community_parts.title": "Quais partes da comunidade estão envolvidas?", + "report_flow.screen.crisis_support.subtitle": "As linhas de apoio em situações de crise oferecem suporte gratuito e confidencial.", + "report_flow.screen.crisis_support.title": "Alguém pode ajudar agora", + "report_flow.screen.false_info.subtitle": "Opiniões, sátiras e debates de boa-fé são permitidos. Difamação ilegal pode ser denunciada nos termos do Regulamento dos Serviços Digitais.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opiniões, sátiras e debates de boa-fé são permitidos.", + "report_flow.screen.false_info.title": "O que há de enganoso nisso?", + "report_flow.screen.harassment.title": "De que forma alguém está sendo atacado(a)?", + "report_flow.screen.hate.title": "Como isso ataca pessoas por quem elas são?", + "report_flow.screen.impersonation.subtitle": "Paródias ou encenações claramente identificadas são permitidas.", + "report_flow.screen.impersonation.title": "Quem a pessoa está fingindo ser, ou é um golpe?", + "report_flow.screen.minor_risk.title": "Como esta pessoa está colocando um menor em risco?", + "report_flow.screen.minor_risk_guild.title": "Como esta comunidade coloca menores em risco?", + "report_flow.screen.minor_sexual.subtitle": "Conteúdo desenhado, escrito ou gerado por IA conta quando um personagem é descrito como menor ou é claramente pré-púbere, incluindo lolicon, shotacon e cub.", + "report_flow.screen.minor_sexual.title": "O que você viu envolvendo um menor?", + "report_flow.screen.minor_sexual_guild.title": "O que você viu envolvendo menores?", + "report_flow.screen.private_info.subtitle": "Selecione quantas precisar. Se uma foto íntima mostrar alguém com menos de 18 anos, volte e denuncie em “Sexualização de menor de idade”.", + "report_flow.screen.private_info.title": "Quais detalhes privados estão envolvidos?", + "report_flow.screen.profile_abuse.title": "O que há de prejudicial no perfil dele(a)?", + "report_flow.screen.profile_hate_violence.title": "O que o perfil dele(a) mostra ou promove?", + "report_flow.screen.profile_intro.options_heading": "Saiba mais", + "report_flow.screen.profile_intro.subtitle": "Conte-nos o que há de errado com este perfil. A pessoa não saberá quem a denunciou.", + "report_flow.screen.profile_intro.title": "Denunciar perfil", + "report_flow.screen.profile_minor_sexual.title": "O que no perfil dele(a) envolve um menor?", + "report_flow.screen.profile_parts.subtitle": "Selecione quantas precisar.", + "report_flow.screen.profile_parts.title": "Quais partes do perfil dele(a) são um problema?", + "report_flow.screen.profile_private_info.title": "Quais detalhes privados estão no perfil dele(a)?", + "report_flow.screen.profile_sexual.title": "Conte-nos sobre o conteúdo sexual no perfil dele(a)", + "report_flow.screen.profile_threat.title": "Como o perfil dele(a) envolve violência?", + "report_flow.screen.root_guild.subtitle": "Escolha a opção que melhor descreve o que está acontecendo nesta comunidade.", + "report_flow.screen.root_guild.title": "O que há de errado nesta comunidade?", + "report_flow.screen.root_message.subtitle": "Escolha a opção mais próxima. Você poderá revisar tudo antes do envio.", + "report_flow.screen.root_message.title": "Denunciar mensagem", + "report_flow.screen.root_user.subtitle": "Escolha a opção que melhor descreve o que há no perfil dele(a).", + "report_flow.screen.root_user.title": "O que há de errado no perfil dele(a)?", + "report_flow.screen.self_harm.subtitle": "Ninguém é punido por dizer que está passando por dificuldades. Contar para nós que você está preocupado(a) nos ajuda a oferecer apoio.", + "report_flow.screen.self_harm.title": "O que ele(a) disse ou compartilhou?", + "report_flow.screen.self_harm_guild.title": "O que os membros estão incentivando?", + "report_flow.screen.self_harm_profile.title": "O que o perfil dele(a) diz ou mostra?", + "report_flow.screen.sexual.subtitle": "Se alguém mostrado ou envolvido tiver menos de 18 anos, escolha “Sexualização de menor de idade”.", + "report_flow.screen.sexual.title": "Conte-nos sobre o conteúdo sexual", + "report_flow.screen.sexual_guild.subtitle": "Se alguém mostrado ou envolvido tiver menos de 18 anos, escolha “Sexualização de menores de idade”.", + "report_flow.screen.sexual_guild.title": "Conte-nos sobre o conteúdo sexual nesta comunidade", + "report_flow.screen.something_else_guild.title": "O que mais está acontecendo nesta comunidade?", + "report_flow.screen.something_else_message.title": "O que mais está acontecendo?", + "report_flow.screen.something_else_user.title": "O que mais está errado neste perfil?", + "report_flow.screen.spam_kind_guild.title": "Como esta comunidade está abusando da plataforma?", + "report_flow.screen.spam_profile.title": "Como a conta está sendo mal utilizada?", + "report_flow.screen.threat.title": "Como isso envolve violência?", + "report_flow.screen.violence_misinfo.title": "Qual destas opções corresponde?", + "report_flow.screen.violence_misinfo_guild.title": "Qual destas opções acontece nesta comunidade?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/ro.json b/fluxer_api/src/api/content_i18n/weblate/locales/ro.json index 7dd95ca09..f4e2f990f 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/ro.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/ro.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Canale text", "guild.default_category_voice": "Canale de voce", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Nume de utilizator, nume afișat sau pseudonim în comunitate", + "report_flow.description.photo": "Ce folosește ca avatar și banner", + "report_flow.description.profile_text": "Biografie, stare personalizată sau pronume", + "report_flow.label.abuse": "Conținut abuziv sau dăunător", + "report_flow.label.account_trading": "Vânzarea de conturi, de date de autentificare furate sau de date de card furate", + "report_flow.label.account_trading_communities": "Cumpărarea sau vânzarea de conturi sau comunități", + "report_flow.label.address": "Adresă de domiciliu sau loc de muncă", + "report_flow.label.adult_content_no_gate": "Conținut pentru adulți fără restricție de vârstă 18+", + "report_flow.label.adult_content_profile": "Conținut explicit pentru adulți în profilul său", + "report_flow.label.adult_content_unmarked": "Conținut pentru adulți într-un canal al comunității care nu este marcat 18+", + "report_flow.label.age_no_message": "Nu, mesajul nu menționează vârsta", + "report_flow.label.age_no_profile": "Nu, profilul nu menționează vârsta", + "report_flow.label.age_yes_message": "Da, mesajul menționează vârsta persoanei", + "report_flow.label.age_yes_profile": "Da, profilul menționează vârsta", + "report_flow.label.atrocity_denial": "Negarea sau celebrarea Holocaustului sau a altor genocide", + "report_flow.label.ban_evasion": "Ocolirea unei interdicții cu un alt cont", + "report_flow.label.channel_names": "Numele canalelor", + "report_flow.label.community_banner": "Bannerul comunității", + "report_flow.label.community_icon": "Pictograma comunității", + "report_flow.label.community_name": "Numele comunității", + "report_flow.label.conversion_therapy": "Promovarea terapiei de conversie", + "report_flow.label.copyright": "Plângere privind drepturile de autor sau marca comercială", + "report_flow.label.crisis_lines": "Linii de sprijin pentru situații de criză din țara ta", + "report_flow.label.csam": "Imagini sau videoclipuri reale sau generate de AI cu abuz sexual asupra copiilor", + "report_flow.label.discovery_listing": "Listarea în Discovery", + "report_flow.label.dislike": "Pur și simplu nu este pentru mine", + "report_flow.label.dsa": "Conținut ilegal în UE (Regulamentul privind serviciile digitale)", + "report_flow.label.eating_disorder_promotion": "Încurajarea tulburărilor de alimentație", + "report_flow.label.eating_disorder_promotion_profile": "Profilul său promovează tulburările de alimentație", + "report_flow.label.email": "Adresă de e-mail", + "report_flow.label.emoji_stickers": "Emoji sau stickere personalizate", + "report_flow.label.face_photo": "Fotografie cu fața sa", + "report_flow.label.fake_account": "Cont fals, bot sau abuz automatizat", + "report_flow.label.fake_account_profile": "Un cont fals sau înșelător", + "report_flow.label.false_claims": "Răspândirea de minciuni pentru a dăuna reputației unei anumite persoane", + "report_flow.label.false_info": "Răspândirea de informații false dăunătoare", + "report_flow.label.financial": "Card, bancă sau alte detalii financiare", + "report_flow.label.fraud": "Încearcă să obțină prin înșelăciune bani sau conturi de la oameni", + "report_flow.label.fraud_guild": "Înșelarea oamenilor pentru a obține bani sau conturi", + "report_flow.label.government_id": "Document de identitate sau număr de identificare", + "report_flow.label.graphic_violence": "Violență reală arătată pentru a șoca, de exemplu scene sângeroase (gore) sau cruzime față de animale", + "report_flow.label.harassment": "Hărțuire, intimidare sau urmărire", + "report_flow.label.harassment_direct": "Țintirea repetată a cuiva cu insulte sau abuzuri", + "report_flow.label.harassment_guild": "Hărțuirea, intimidarea sau urmărirea persoanelor", + "report_flow.label.harassment_profile": "Profilul său mă hărțuiește sau mă vizează pe mine sau pe altcineva", + "report_flow.label.harmful_false_claims": "Afirmații false care ar putea provoca daune grave în lumea reală", + "report_flow.label.hate": "Ură sau discriminare împotriva oamenilor pentru ceea ce sunt", + "report_flow.label.hate_dehumanizing": "Compararea oamenilor cu animalele, bolile sau murdăria, sau numirea lor ca fiind mai puțin decât oameni", + "report_flow.label.hate_incitement": "Apeluri la violență sau excludere împotriva unui grup", + "report_flow.label.hate_other": "Alte atacuri asupra oamenilor pentru ceea ce sunt", + "report_flow.label.hate_slurs": "Jigniri, simboluri de ură sau stereotipuri denigratoare", + "report_flow.label.hate_violence": "Ură, violență sau extremism", + "report_flow.label.identity": "Orientare sexuală, identitate de gen sau statut intersexual", + "report_flow.label.illegal_activity": "Alte activități ilegale", + "report_flow.label.illegal_goods": "Vânzări de droguri, arme sau alte bunuri ilegale", + "report_flow.label.impersonation": "Uzurparea identității cuiva sau înșelarea oamenilor", + "report_flow.label.impersonation_guild": "Pretinzând a fi {product_name} sau o altă organizație", + "report_flow.label.impersonation_organization": "O companie, marcă sau grup", + "report_flow.label.impersonation_person": "Eu sau cineva apropiat mie", + "report_flow.label.impersonation_public_figure": "O persoană cunoscută, precum un creator sau politician", + "report_flow.label.impersonation_staff": "Personal sau asistență {product_name}", + "report_flow.label.intimate_image_abuse": "Imagini intime distribuite fără consimțământ, inclusiv deepfake-uri, sau amenințarea de a le distribui", + "report_flow.label.intimate_image_abuse_guild": "Distribuirea de imagini intime fără consimțământ, inclusiv deepfake-uri", + "report_flow.label.intimate_image_abuse_profile": "Imagini intime ale cuiva distribuite fără consimțământ, inclusiv deepfake-uri", + "report_flow.label.intimate_photo": "Fotografie intimă sau nudă", + "report_flow.label.invite_splash": "Imagine de fundal a invitației", + "report_flow.label.ip_address": "Adresă IP", + "report_flow.label.learn_more": "Citește Ghidul Comunității {product_name}", + "report_flow.label.legal_name": "Nume real sau legal", + "report_flow.label.lgbtq_targeting": "Identificarea greșită deliberată a genului, deadnaming-ul sau dezvăluirea fără consimțământ a orientării sexuale sau a identității de gen a cuiva, ori negarea identității sale", + "report_flow.label.malware_guild": "Distribuirea de malware sau linkuri de phishing", + "report_flow.label.malware_phishing": "Tentative de phishing, malware sau hacking", + "report_flow.label.member_activity": "Ce postează sau fac membrii acolo", + "report_flow.label.metric_manipulation": "Falsificarea numărului de membri sau de reacții", + "report_flow.label.minor_contact": "Solicitarea unei întâlniri cu un minor sau a unor fotografii ori date personale de la acesta, într-un mod care pare prădător", + "report_flow.label.minor_dating_community": "Este o comunitate pentru întâlniri amoroase între minori", + "report_flow.label.minor_fictional": "Conținut sexual desenat, scris sau generat de AI cu un copil fictiv", + "report_flow.label.minor_grooming": "Adescare (grooming) sau câștigarea în mod nepotrivit a încrederii unui minor", + "report_flow.label.minor_grooming_guild": "Membrii adescă minori (grooming) sau câștigă în mod nepotrivit încrederea minorilor", + "report_flow.label.minor_in_adult_space": "Un minor se află într-un canal sau o comunitate 18+", + "report_flow.label.minor_in_adult_space_guild": "Minorilor li se permite accesul în canale 18+", + "report_flow.label.minor_risk": "Punerea în pericol a unui minor", + "report_flow.label.minor_risk_guild": "Punerea în pericol a minorilor", + "report_flow.label.minor_sexual": "Sexualizarea unui minor", + "report_flow.label.minor_sexual_contact": "Flirtarea cu un minor sau trimiterea de mesaje sexuale către acesta", + "report_flow.label.minor_sexual_contact_guild": "Membrii flirtează cu minori sau le trimit mesaje sexuale", + "report_flow.label.minor_sexual_content": "Un minor își distribuie singur conținut sexual", + "report_flow.label.minor_sexual_content_guild": "Minorii postează sau trimit conținut sexual", + "report_flow.label.minor_sexual_content_profile": "Profilul unui minor cu conținut sexual", + "report_flow.label.minor_sexual_guild": "Sexualizarea minorilor", + "report_flow.label.minor_sexualization": "Comentarii sexuale despre minori", + "report_flow.label.minor_sexualization_guild": "Membrii fac comentarii sexuale despre minori", + "report_flow.label.minor_sexualization_profile": "Comentarii sexuale despre minori în profilul său", + "report_flow.label.name": "Nume", + "report_flow.label.other": "Ceva ce nu este listat aici", + "report_flow.label.other_identifying": "Alte informații care ar putea identifica sau localiza pe cineva", + "report_flow.label.permits_violations": "Permite încălcări grave ale regulilor", + "report_flow.label.phone": "Număr de telefon", + "report_flow.label.photo": "Imagini", + "report_flow.label.platform_abuse": "Extragerea datelor, automatizarea sau alte abuzuri ale platformei", + "report_flow.label.private_conversation": "Mesaje private, capturi de ecran sau înregistrări de apeluri", + "report_flow.label.private_info": "Distribuirea detaliilor private ale cuiva", + "report_flow.label.private_info_profile": "Profilul său distribuie detaliile private ale cuiva", + "report_flow.label.profile_text": "Text de profil", + "report_flow.label.raid": "Organizarea sau participarea la un raid sau o agresiune în grup", + "report_flow.label.raid_guild": "Organizarea de raiduri sau agresiuni în grup împotriva persoanelor sau comunităților", + "report_flow.label.rude_language": "Înjurături sau remarci nepoliticoase", + "report_flow.label.self_harm": "Cineva s-ar putea răni sau încurajează autovătămarea", + "report_flow.label.self_harm_graphic": "Imagini explicite cu autovătămare", + "report_flow.label.self_harm_guild": "Membrii îi îndeamnă pe alții să se rănească", + "report_flow.label.self_harm_pressure": "Exercitarea de presiuni asupra cuiva sau provocarea cuiva să își facă rău", + "report_flow.label.self_harm_pressure_guild": "Exercitarea de presiuni asupra oamenilor sau provocarea lor să își facă rău", + "report_flow.label.self_harm_profile": "Profilul său sugerează autovătămarea sau o încurajează", + "report_flow.label.self_harm_promotion": "Încurajarea autovătămării sau partajarea metodelor", + "report_flow.label.self_harm_promotion_profile": "Profilul său încurajează autovătămarea", + "report_flow.label.sexual": "Conținut sexual", + "report_flow.label.sexual_exploitation": "Exploatare sexuală, constrângere sau trafic de persoane", + "report_flow.label.sexual_unwanted": "Imagini sau mesaje sexuale pe care nu le-am dorit", + "report_flow.label.something_else": "Altceva", + "report_flow.label.spam": "Spam sau reclame nedorite", + "report_flow.label.spam_bulk": "Trimiterea de spam sau publicitate în masă", + "report_flow.label.spam_or_manipulation": "Spam sau manipularea platformei", + "report_flow.label.spam_profile": "Profilul său este folosit pentru spam sau publicitate", + "report_flow.label.suicide_promotion": "Încurajarea sinuciderii sau partajarea metodelor", + "report_flow.label.suicide_promotion_profile": "Profilul său încurajează sinuciderea", + "report_flow.label.synthetic_media": "Materiale media false sau generate de AI, prezentate ca fiind reale", + "report_flow.label.terrorism": "Terorism sau extremism violent", + "report_flow.label.terrorism_guild": "Recrutarea sau promovarea terorismului sau a extremismului violent", + "report_flow.label.threat": "Amenințări sau apeluri la violență", + "report_flow.label.threat_to_share": "Amenință că o va distribui", + "report_flow.label.too_young": "Persoana este sub vârsta minimă pentru a folosi {product_name}", + "report_flow.label.unwanted_contact": "Urmărirea sau contactarea repetată a mea sau a altcuiva după ce i s-a cerut să înceteze, a fost blocat sau eliminat", + "report_flow.label.violence_glorification": "Glorificarea violenței din lumea reală", + "report_flow.label.violence_incitement": "Încurajarea violenței sau explicarea modului de a răni oamenii", + "report_flow.label.violence_misinfo": "Violență, extremism sau informații false dăunătoare", + "report_flow.label.violent_threat": "Spune că va răni pe cineva", + "report_flow.label.worried_profile": "Sunt îngrijorat(ă) de siguranța acestei persoane", + "report_flow.label.worried_self_harm": "Mi-e teamă că s-ar putea răni", + "report_flow.label.worried_suicide": "Mi-e teamă că ar putea încerca să se sinucidă", + "report_flow.notice.need_more_info.body": "Pentru a examina acest caz, avem nevoie de un mesaj în care persoana spune câți ani are sau face clar că este sub vârsta minimă pentru a folosi {product_name}. Raportează în schimb acel mesaj.", + "report_flow.notice.need_more_info.title": "Încă nu putem acționa", + "report_flow.notice.need_more_info_profile.body": "Pentru a examina acest caz, trebuie să vedem unde persoana spune câți ani are sau face clar că este sub vârsta minimă pentru a folosi {product_name}. Raportează în schimb acel mesaj sau profil.", + "report_flow.screen.abuse.title": "Ce implică?", + "report_flow.screen.abuse_guild.title": "Ce fac oamenii din această comunitate?", + "report_flow.screen.age_stated_message.title": "Acest mesaj spune câți ani are persoana?", + "report_flow.screen.age_stated_profile.title": "Profilul său menționează câți ani are persoana?", + "report_flow.screen.community_parts.subtitle": "Alege câte ai nevoie.", + "report_flow.screen.community_parts.title": "Ce părți ale comunității sunt implicate?", + "report_flow.screen.crisis_support.subtitle": "Liniile de sprijin pentru situații de criză oferă ajutor gratuit și confidențial.", + "report_flow.screen.crisis_support.title": "Cineva te poate ajuta chiar acum", + "report_flow.screen.false_info.subtitle": "Opiniile, satira și dezbaterile de bună-credință sunt permise. Defăimarea ilegală poate fi raportată în temeiul Regulamentului privind serviciile digitale.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opiniile, satira și dezbaterile de bună-credință sunt permise.", + "report_flow.screen.false_info.title": "Ce anume induce în eroare?", + "report_flow.screen.harassment.title": "Cum este vizat cineva?", + "report_flow.screen.hate.title": "Cum atacă oamenii pentru ceea ce sunt?", + "report_flow.screen.impersonation.subtitle": "Parodia sau jocul de rol etichetate clar sunt permise.", + "report_flow.screen.impersonation.title": "Cui i se uzurpă identitatea sau este vorba despre o înșelătorie?", + "report_flow.screen.minor_risk.title": "Cum pune această persoană un minor în pericol?", + "report_flow.screen.minor_risk_guild.title": "Cum pune această comunitate minorii în pericol?", + "report_flow.screen.minor_sexual.subtitle": "Conținutul desenat, scris sau generat de AI contează atunci când un personaj este descris ca minor sau este în mod clar prepubertal, inclusiv lolicon, shotacon și cub.", + "report_flow.screen.minor_sexual.title": "Ce ai văzut care implică un minor?", + "report_flow.screen.minor_sexual_guild.title": "Ce ai văzut care implică minori?", + "report_flow.screen.private_info.subtitle": "Alege câte ai nevoie. Dacă o fotografie intimă prezintă o persoană sub 18 ani, întoarce-te și raportează-o la „Sexualizarea unui minor”.", + "report_flow.screen.private_info.title": "Ce detalii private sunt implicate?", + "report_flow.screen.profile_abuse.title": "Ce este dăunător la profilul său?", + "report_flow.screen.profile_hate_violence.title": "Ce arată sau promovează profilul său?", + "report_flow.screen.profile_intro.options_heading": "Află mai multe", + "report_flow.screen.profile_intro.subtitle": "Spune-ne ce nu este în regulă cu acest profil. Persoana nu va fi informată cine a raportat-o.", + "report_flow.screen.profile_intro.title": "Raportează profilul", + "report_flow.screen.profile_minor_sexual.title": "Ce anume din profilul său implică un minor?", + "report_flow.screen.profile_parts.subtitle": "Alege câte ai nevoie.", + "report_flow.screen.profile_parts.title": "Ce părți ale profilului său sunt o problemă?", + "report_flow.screen.profile_private_info.title": "Ce detalii private se află în profilul său?", + "report_flow.screen.profile_sexual.title": "Spune-ne despre conținutul sexual din profilul său", + "report_flow.screen.profile_threat.title": "Cum implică profilul său violența?", + "report_flow.screen.root_guild.subtitle": "Alege cea mai potrivită descriere pentru ceea ce se întâmplă în această comunitate.", + "report_flow.screen.root_guild.title": "Ce nu este în regulă cu această comunitate?", + "report_flow.screen.root_message.subtitle": "Alege cea mai potrivită variantă. Poți verifica totul înainte de a fi trimis.", + "report_flow.screen.root_message.title": "Raportează mesajul", + "report_flow.screen.root_user.subtitle": "Alege cea mai potrivită opțiune pentru ceea ce se află în profilul său.", + "report_flow.screen.root_user.title": "Ce nu este în regulă cu profilul său?", + "report_flow.screen.self_harm.subtitle": "Nimeni nu este pedepsit pentru că spune că îi este greu. Faptul că ne spui că îți faci griji ne ajută să oferim sprijin.", + "report_flow.screen.self_harm.title": "Ce a spus sau a distribuit?", + "report_flow.screen.self_harm_guild.title": "Ce încurajează membrii?", + "report_flow.screen.self_harm_profile.title": "Ce spune sau arată profilul său?", + "report_flow.screen.sexual.subtitle": "Dacă oricare persoană afișată sau implicată are sub 18 ani, alege „Sexualizarea unui minor”.", + "report_flow.screen.sexual.title": "Spune-ne despre conținutul sexual", + "report_flow.screen.sexual_guild.subtitle": "Dacă oricare persoană afișată sau implicată are sub 18 ani, alege „Sexualizarea minorilor”.", + "report_flow.screen.sexual_guild.title": "Spune-ne despre conținutul sexual din această comunitate", + "report_flow.screen.something_else_guild.title": "Ce altceva se mai întâmplă în această comunitate?", + "report_flow.screen.something_else_message.title": "Ce altceva se întâmplă?", + "report_flow.screen.something_else_user.title": "Ce altceva este în neregulă cu acest profil?", + "report_flow.screen.spam_kind_guild.title": "Cum abuzează această comunitate de platformă?", + "report_flow.screen.spam_profile.title": "Cum este folosit abuziv contul?", + "report_flow.screen.threat.title": "Cum implică violența?", + "report_flow.screen.violence_misinfo.title": "Care dintre acestea se potrivește?", + "report_flow.screen.violence_misinfo_guild.title": "Care dintre acestea se întâmplă în această comunitate?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/ru.json b/fluxer_api/src/api/content_i18n/weblate/locales/ru.json index a5fc04dea..ea8120d93 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/ru.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/ru.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Текстовые каналы", "guild.default_category_voice": "Голосовые каналы", "guild.default_channel_text": "общий", - "guild.default_channel_voice": "Общий" + "guild.default_channel_voice": "Общий", + "report_flow.description.name": "Имя пользователя, отображаемое имя или никнейм в сообществе", + "report_flow.description.photo": "Что они используют в качестве аватара и баннера", + "report_flow.description.profile_text": "О себе, свой статус или местоимения", + "report_flow.label.abuse": "Оскорбительный или вредоносный контент", + "report_flow.label.account_trading": "Продажа аккаунтов, украденные логины или данные карт", + "report_flow.label.account_trading_communities": "Покупка или продажа аккаунтов или сообществ", + "report_flow.label.address": "Домашний адрес или место работы", + "report_flow.label.adult_content_no_gate": "Контент для взрослых без возрастного ограничения 18+", + "report_flow.label.adult_content_profile": "Явный контент для взрослых в профиле", + "report_flow.label.adult_content_unmarked": "Контент для взрослых в канале сообщества, который не помечен как 18+", + "report_flow.label.age_no_message": "Нет, там об этом не сказано", + "report_flow.label.age_no_profile": "Нет, в нём это не упоминается", + "report_flow.label.age_yes_message": "Да, там указан их возраст", + "report_flow.label.age_yes_profile": "Да, в их профиле указан возраст", + "report_flow.label.atrocity_denial": "Отрицание или прославление Холокоста или других геноцидов", + "report_flow.label.ban_evasion": "Обход бана с помощью другого аккаунта", + "report_flow.label.channel_names": "Названия каналов", + "report_flow.label.community_banner": "Баннер сообщества", + "report_flow.label.community_icon": "Значок сообщества", + "report_flow.label.community_name": "Название сообщества", + "report_flow.label.conversion_therapy": "Пропаганда конверсионной терапии", + "report_flow.label.copyright": "Жалоба на нарушение авторских прав или прав на товарный знак", + "report_flow.label.crisis_lines": "Телефоны доверия в вашей стране", + "report_flow.label.csam": "Реальные или созданные ИИ изображения или видео сексуального насилия над детьми", + "report_flow.label.discovery_listing": "Запись в каталоге", + "report_flow.label.dislike": "Мне это не подходит", + "report_flow.label.dsa": "Незаконный в ЕС контент (Закон о цифровых услугах, DSA)", + "report_flow.label.eating_disorder_promotion": "Поощрение расстройств пищевого поведения", + "report_flow.label.eating_disorder_promotion_profile": "Их профиль пропагандирует расстройства пищевого поведения", + "report_flow.label.email": "Адрес электронной почты", + "report_flow.label.emoji_stickers": "Пользовательские эмодзи или стикеры", + "report_flow.label.face_photo": "Фотография их лица", + "report_flow.label.fake_account": "Фейковый аккаунт, бот или автоматизированное злоупотребление", + "report_flow.label.fake_account_profile": "Фейковый или обманный аккаунт", + "report_flow.label.false_claims": "Распространение лжи для нанесения ущерба репутации конкретного человека", + "report_flow.label.false_info": "Распространение вредоносной ложной информации", + "report_flow.label.financial": "Карта, банковские или другие финансовые данные", + "report_flow.label.fraud": "Они пытаются обмануть людей, чтобы выманить деньги или аккаунты", + "report_flow.label.fraud_guild": "Обман людей с целью получения денег или доступа к аккаунтам", + "report_flow.label.government_id": "Удостоверение личности или номер удостоверения личности", + "report_flow.label.graphic_violence": "Реальное насилие, показанное ради шока, например кровавые сцены или жестокое обращение с животными", + "report_flow.label.harassment": "Травля, преследование или домогательство", + "report_flow.label.harassment_direct": "Повторяющиеся оскорбления или нападки на кого-либо", + "report_flow.label.harassment_guild": "Домогательства, издевательства или преследование людей", + "report_flow.label.harassment_profile": "Профиль пользователя содержит домогательства или нападки на меня или кого-то другого", + "report_flow.label.harmful_false_claims": "Ложные заявления, которые могут нанести серьёзный вред в реальном мире", + "report_flow.label.hate": "Ненависть или дискриминация в отношении людей из-за того, кем они являются", + "report_flow.label.hate_dehumanizing": "Сравнение людей с животными, болезнями или грязью либо называние их недочеловеками", + "report_flow.label.hate_incitement": "Призывы к насилию или исключению группы", + "report_flow.label.hate_other": "Другие нападки на людей из-за того, кем они являются", + "report_flow.label.hate_slurs": "Оскорбительные эпитеты, символы ненависти или унизительные стереотипы", + "report_flow.label.hate_violence": "Ненависть, насилие или экстремизм", + "report_flow.label.identity": "Сексуальная ориентация, гендерная идентичность или интерсекс-статус", + "report_flow.label.illegal_activity": "Другая незаконная деятельность", + "report_flow.label.illegal_goods": "Продажа наркотиков, оружия или других незаконных товаров", + "report_flow.label.impersonation": "Выдача себя за другое лицо или обман людей", + "report_flow.label.impersonation_guild": "Выдача себя за {product_name} или другую организацию", + "report_flow.label.impersonation_organization": "Компания, бренд или группа", + "report_flow.label.impersonation_person": "Я или кто-то из моих близких", + "report_flow.label.impersonation_public_figure": "Известный человек, например автор контента или политик", + "report_flow.label.impersonation_staff": "Сотрудник {product_name} или служба поддержки", + "report_flow.label.intimate_image_abuse": "Интимные изображения, распространенные без согласия, включая дипфейки, или угроза их распространения", + "report_flow.label.intimate_image_abuse_guild": "Распространение интимных изображений без согласия, включая дипфейки", + "report_flow.label.intimate_image_abuse_profile": "Интимные изображения кого-либо, распространенные без согласия, включая дипфейки", + "report_flow.label.intimate_photo": "Интимное или обнаженное фото", + "report_flow.label.invite_splash": "Заставка приглашения", + "report_flow.label.ip_address": "IP-адрес", + "report_flow.label.learn_more": "Ознакомьтесь с правилами сообщества {product_name}", + "report_flow.label.legal_name": "Настоящее или юридическое имя", + "report_flow.label.lgbtq_targeting": "Намеренное использование неверных местоимений или прежнего имени человека (мисгендеринг, дедейминг), раскрытие чьей-либо ориентации или гендерной идентичности без согласия либо отрицание его идентичности", + "report_flow.label.malware_guild": "Распространение вредоносного ПО или фишинговых ссылок", + "report_flow.label.malware_phishing": "Фишинг, вредоносное ПО или попытки взлома", + "report_flow.label.member_activity": "Что участники публикуют или делают там", + "report_flow.label.metric_manipulation": "Фальсификация количества участников или реакций", + "report_flow.label.minor_contact": "Приглашение несовершеннолетнего на встречу или просьба прислать фото или личные данные, что выглядит как хищническое поведение", + "report_flow.label.minor_dating_community": "Это сообщество для знакомств между несовершеннолетними", + "report_flow.label.minor_fictional": "Нарисованный, написанный или сгенерированный ИИ сексуальный контент с вымышленным ребенком", + "report_flow.label.minor_grooming": "Груминг или выстраивание неподобающего доверия с несовершеннолетним", + "report_flow.label.minor_grooming_guild": "Участники занимаются грумингом или выстраивают неподобающие доверительные отношения с несовершеннолетними", + "report_flow.label.minor_in_adult_space": "Несовершеннолетний находится в канале или сообществе 18+", + "report_flow.label.minor_in_adult_space_guild": "Несовершеннолетним разрешено находиться в каналах 18+", + "report_flow.label.minor_risk": "Подвергание несовершеннолетнего риску", + "report_flow.label.minor_risk_guild": "Подвергание несовершеннолетних риску", + "report_flow.label.minor_sexual": "Сексуализация несовершеннолетнего", + "report_flow.label.minor_sexual_contact": "Флирт с несовершеннолетним или отправка ему сообщений сексуального характера", + "report_flow.label.minor_sexual_contact_guild": "Участники флиртуют с несовершеннолетними или отправляют им сексуальные сообщения", + "report_flow.label.minor_sexual_content": "Несовершеннолетний сам делится сексуальным контентом", + "report_flow.label.minor_sexual_content_guild": "Несовершеннолетние публикуют или отправляют контент сексуального характера", + "report_flow.label.minor_sexual_content_profile": "Профиль несовершеннолетнего с сексуальным контентом", + "report_flow.label.minor_sexual_guild": "Сексуализация несовершеннолетних", + "report_flow.label.minor_sexualization": "Сексуальные комментарии о несовершеннолетних", + "report_flow.label.minor_sexualization_guild": "Участники делают сексуальные комментарии о несовершеннолетних", + "report_flow.label.minor_sexualization_profile": "Сексуальные комментарии о несовершеннолетних в профиле", + "report_flow.label.name": "Имена", + "report_flow.label.other": "Что-то, чего нет в списке", + "report_flow.label.other_identifying": "Другая информация, которая может идентифицировать или определить местонахождение человека", + "report_flow.label.permits_violations": "Это допускает серьёзные нарушения правил", + "report_flow.label.phone": "Номер телефона", + "report_flow.label.photo": "Изображения", + "report_flow.label.platform_abuse": "Скрапинг, автоматизация или другое злоупотребление платформой", + "report_flow.label.private_conversation": "Личные сообщения, снимки экрана или записи звонков", + "report_flow.label.private_info": "Распространение чьей-либо личной информации", + "report_flow.label.private_info_profile": "В их профиле распространяется чья-либо личная информация", + "report_flow.label.profile_text": "Текст профиля", + "report_flow.label.raid": "Организация или участие в рейдах или травле", + "report_flow.label.raid_guild": "Организация рейдов или травли против людей или сообществ", + "report_flow.label.rude_language": "Нецензурная лексика или грубые высказывания", + "report_flow.label.self_harm": "Кто-то может причинить себе вред или призывает к причинению вреда себе", + "report_flow.label.self_harm_graphic": "Натуралистичные изображения самоповреждения", + "report_flow.label.self_harm_guild": "Участники подталкивают других к причинению себе вреда", + "report_flow.label.self_harm_pressure": "Давление на кого-либо или подначивание причинить себе вред", + "report_flow.label.self_harm_pressure_guild": "Давление на людей или подначивание причинить себе вред", + "report_flow.label.self_harm_profile": "Их профиль намекает на причинение вреда себе или поощряет его", + "report_flow.label.self_harm_promotion": "Призывы к причинению вреда себе или распространение способов", + "report_flow.label.self_harm_promotion_profile": "Их профиль поощряет причинение вреда себе", + "report_flow.label.sexual": "Контент сексуального характера", + "report_flow.label.sexual_exploitation": "Сексуальная эксплуатация, принуждение или торговля людьми", + "report_flow.label.sexual_unwanted": "Нежелательные изображения или сообщения сексуального характера", + "report_flow.label.something_else": "Что-то другое", + "report_flow.label.spam": "Спам или нежелательная реклама", + "report_flow.label.spam_bulk": "Массовая рассылка спама или рекламы", + "report_flow.label.spam_or_manipulation": "Спам или манипулирование платформой", + "report_flow.label.spam_profile": "Их профиль используется для спама или рекламы", + "report_flow.label.suicide_promotion": "Призывы к суициду или распространение способов", + "report_flow.label.suicide_promotion_profile": "Их профиль поощряет суицид", + "report_flow.label.synthetic_media": "Фейковые или созданные ИИ медиа, выдаваемые за настоящие", + "report_flow.label.terrorism": "Терроризм или насильственный экстремизм", + "report_flow.label.terrorism_guild": "Вербовка или пропаганда терроризма или насильственного экстремизма", + "report_flow.label.threat": "Угрозы или призывы к насилию", + "report_flow.label.threat_to_share": "Они угрожают поделиться этим", + "report_flow.label.too_young": "Они младше минимального возраста для использования {product_name}", + "report_flow.label.unwanted_contact": "Преследование или неоднократные попытки связаться со мной или кем-либо еще после просьбы прекратить, блокировки или удаления", + "report_flow.label.violence_glorification": "Прославление реального насилия", + "report_flow.label.violence_incitement": "Поощрение насилия или объяснение, как причинить вред людям", + "report_flow.label.violence_misinfo": "Насилие, экстремизм или вредоносная ложная информация", + "report_flow.label.violent_threat": "Говорит, что причинит кому-то вред", + "report_flow.label.worried_profile": "Я беспокоюсь о безопасности этого человека", + "report_flow.label.worried_self_harm": "Я боюсь, что этот человек может причинить себе вред", + "report_flow.label.worried_suicide": "Я боюсь, что этот человек может попытаться покончить с собой", + "report_flow.notice.need_more_info.body": "Чтобы это рассмотреть, нам нужно сообщение, в котором человек указывает свой возраст или даёт понять, что он младше минимального возраста для использования {product_name}. Пожалуйтесь лучше на такое сообщение.", + "report_flow.notice.need_more_info.title": "Пока не можем принять меры", + "report_flow.notice.need_more_info_profile.body": "Чтобы это рассмотреть, нам нужно увидеть, где человек указывает свой возраст или даёт понять, что он младше минимального возраста для использования {product_name}. Пожалуйтесь лучше на такое сообщение или профиль.", + "report_flow.screen.abuse.title": "О чём идёт речь?", + "report_flow.screen.abuse_guild.title": "Что делают люди в этом сообществе?", + "report_flow.screen.age_stated_message.title": "Указан ли в этом сообщении их возраст?", + "report_flow.screen.age_stated_profile.title": "Указан ли в их профиле их возраст?", + "report_flow.screen.community_parts.subtitle": "Выберите столько, сколько вам нужно.", + "report_flow.screen.community_parts.title": "Какие части сообщества затронуты?", + "report_flow.screen.crisis_support.subtitle": "Телефоны доверия оказывают бесплатную и конфиденциальную помощь.", + "report_flow.screen.crisis_support.title": "Вам могут помочь прямо сейчас", + "report_flow.screen.false_info.subtitle": "Мнения, сатира и добросовестные дебаты разрешены. О незаконной клевете можно сообщить в соответствии с Законом о цифровых услугах (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Мнения, сатира и добросовестные дебаты разрешены.", + "report_flow.screen.false_info.title": "Что именно вводит в заблуждение?", + "report_flow.screen.harassment.title": "В чём проявляются нападки на человека?", + "report_flow.screen.hate.title": "Как это направлено против людей из-за того, кем они являются?", + "report_flow.screen.impersonation.subtitle": "Чётко обозначенные пародии или ролевые игры разрешены.", + "report_flow.screen.impersonation.title": "За кого себя выдают, или это мошенничество?", + "report_flow.screen.minor_risk.title": "Как этот человек подвергает несовершеннолетнего риску?", + "report_flow.screen.minor_risk_guild.title": "Как это сообщество подвергает несовершеннолетних риску?", + "report_flow.screen.minor_sexual.subtitle": "Нарисованный, написанный или созданный ИИ контент тоже подпадает под это, если персонаж описан как несовершеннолетний или явно не достиг полового созревания, включая lolicon, shotacon и cub.", + "report_flow.screen.minor_sexual.title": "Что вы видели с участием несовершеннолетнего?", + "report_flow.screen.minor_sexual_guild.title": "Что вы видели с участием несовершеннолетних?", + "report_flow.screen.private_info.subtitle": "Выберите столько, сколько вам нужно. Если на интимном фото изображён человек младше 18 лет, вернитесь назад и пожалуйтесь на это в разделе «Сексуализация несовершеннолетнего».", + "report_flow.screen.private_info.title": "Какие личные сведения затронуты?", + "report_flow.screen.profile_abuse.title": "Что именно вредоносного в их профиле?", + "report_flow.screen.profile_hate_violence.title": "Что показывает или продвигает их профиль?", + "report_flow.screen.profile_intro.options_heading": "Подробнее", + "report_flow.screen.profile_intro.subtitle": "Расскажите, что не так с этим профилем. Пользователю не сообщат, кто на него пожаловался.", + "report_flow.screen.profile_intro.title": "Пожаловаться на профиль", + "report_flow.screen.profile_minor_sexual.title": "Что в их профиле связано с несовершеннолетним?", + "report_flow.screen.profile_parts.subtitle": "Выберите столько, сколько вам нужно.", + "report_flow.screen.profile_parts.title": "Какие части профиля вызывают проблемы?", + "report_flow.screen.profile_private_info.title": "Какие личные сведения содержатся в их профиле?", + "report_flow.screen.profile_sexual.title": "Расскажите о сексуальном контенте в их профиле", + "report_flow.screen.profile_threat.title": "Как профиль связан с насилием?", + "report_flow.screen.root_guild.subtitle": "Выберите наиболее подходящий вариант того, что происходит в этом сообществе.", + "report_flow.screen.root_guild.title": "Что не так с этим сообществом?", + "report_flow.screen.root_message.subtitle": "Выберите наиболее подходящий вариант. Перед отправкой вы сможете всё проверить.", + "report_flow.screen.root_message.title": "Пожаловаться на сообщение", + "report_flow.screen.root_user.subtitle": "Выберите наиболее подходящий вариант того, что находится в их профиле.", + "report_flow.screen.root_user.title": "Что не так с их профилем?", + "report_flow.screen.self_harm.subtitle": "Никто не будет наказан за то, что говорит о своих трудностях. Если вы сообщите нам о своих опасениях, мы сможем предложить поддержку.", + "report_flow.screen.self_harm.title": "Что они сказали или чем поделились?", + "report_flow.screen.self_harm_guild.title": "Что участники поощряют?", + "report_flow.screen.self_harm_profile.title": "Что говорится или показывается в профиле?", + "report_flow.screen.sexual.subtitle": "Если кто-либо из показанных или вовлечённых лиц младше 18 лет, выберите «Сексуализация несовершеннолетнего».", + "report_flow.screen.sexual.title": "Расскажите о сексуальном контенте", + "report_flow.screen.sexual_guild.subtitle": "Если кто-либо из показанных или вовлеченных лиц младше 18 лет, выберите «Сексуализация несовершеннолетних».", + "report_flow.screen.sexual_guild.title": "Расскажите о сексуальном контенте в этом сообществе", + "report_flow.screen.something_else_guild.title": "Что еще происходит в этом сообществе?", + "report_flow.screen.something_else_message.title": "Что еще происходит?", + "report_flow.screen.something_else_user.title": "Что еще не так с этим профилем?", + "report_flow.screen.spam_kind_guild.title": "Как это сообщество злоупотребляет платформой?", + "report_flow.screen.spam_profile.title": "Как аккаунт используется не по назначению?", + "report_flow.screen.threat.title": "Как это связано с насилием?", + "report_flow.screen.violence_misinfo.title": "Что из этого подходит?", + "report_flow.screen.violence_misinfo_guild.title": "Что из этого происходит в этом сообществе?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/sv-SE.json b/fluxer_api/src/api/content_i18n/weblate/locales/sv-SE.json index ff5d98c8d..b345baa13 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/sv-SE.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/sv-SE.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Textkanaler", "guild.default_category_voice": "Röstkanaler", "guild.default_channel_text": "allmänt", - "guild.default_channel_voice": "Allmänt" + "guild.default_channel_voice": "Allmänt", + "report_flow.description.name": "Användarnamn, visningsnamn eller smeknamn i communityn", + "report_flow.description.photo": "Vad de använder som avatar och banner", + "report_flow.description.profile_text": "Presentation, anpassad status eller pronomen", + "report_flow.label.abuse": "Kränkande eller skadligt innehåll", + "report_flow.label.account_trading": "Säljer konton, eller stulna inloggningar eller kortuppgifter", + "report_flow.label.account_trading_communities": "Köper eller säljer konton eller communities", + "report_flow.label.address": "Hemadress eller arbetsplats", + "report_flow.label.adult_content_no_gate": "Innehåll för vuxna utan åldersbegränsning 18+", + "report_flow.label.adult_content_profile": "Explicit innehåll för vuxna i deras profil", + "report_flow.label.adult_content_unmarked": "Innehåll för vuxna i en communitykanal som inte är markerad som 18+", + "report_flow.label.age_no_message": "Nej, det nämns inte", + "report_flow.label.age_no_profile": "Nej, det nämns inte", + "report_flow.label.age_yes_message": "Ja, deras ålder nämns", + "report_flow.label.age_yes_profile": "Ja, deras profil nämner deras ålder", + "report_flow.label.atrocity_denial": "Förnekar eller hyllar Förintelsen eller andra folkmord", + "report_flow.label.ban_evasion": "Kringgår en avstängning genom att använda ett annat konto", + "report_flow.label.channel_names": "Kanalnamn", + "report_flow.label.community_banner": "Communitybanner", + "report_flow.label.community_icon": "Communityikon", + "report_flow.label.community_name": "Namn på community", + "report_flow.label.conversion_therapy": "Främjar konverteringsterapi", + "report_flow.label.copyright": "Klagomål om upphovsrätt eller varumärke", + "report_flow.label.crisis_lines": "Krislinjer i ditt land", + "report_flow.label.csam": "Verkliga eller AI-genererade bilder eller videor av sexuella övergrepp mot barn", + "report_flow.label.discovery_listing": "Listning i Upptäck", + "report_flow.label.dislike": "Det är bara inget för mig", + "report_flow.label.dsa": "Innehåll som är olagligt i EU (förordningen om digitala tjänster)", + "report_flow.label.eating_disorder_promotion": "Uppmuntrar till ätstörningar", + "report_flow.label.eating_disorder_promotion_profile": "Deras profil främjar ätstörningar", + "report_flow.label.email": "E-postadress", + "report_flow.label.emoji_stickers": "Anpassade emoji eller klistermärken", + "report_flow.label.face_photo": "Foto av deras ansikte", + "report_flow.label.fake_account": "Falskt konto, bot eller automatiserat missbruk", + "report_flow.label.fake_account_profile": "Ett falskt eller bedrägligt konto", + "report_flow.label.false_claims": "Sprider lögner för att skada en viss persons rykte", + "report_flow.label.false_info": "Sprider skadlig falsk information", + "report_flow.label.financial": "Kort-, bank- eller andra finansiella uppgifter", + "report_flow.label.fraud": "De försöker lura folk på pengar eller konton", + "report_flow.label.fraud_guild": "Lurar folk på pengar eller konton", + "report_flow.label.government_id": "ID-handling eller ID-nummer", + "report_flow.label.graphic_violence": "Verkligt våld som visas för att chockera, till exempel blodiga våldsbilder eller djurplågeri", + "report_flow.label.harassment": "Mobbning, trakasserier eller förföljelse", + "report_flow.label.harassment_direct": "Angriper någon upprepade gånger med förolämpningar eller kränkningar", + "report_flow.label.harassment_guild": "Trakasserar, mobbar eller förföljer personer", + "report_flow.label.harassment_profile": "Deras profil trakasserar eller riktar sig mot mig eller någon annan", + "report_flow.label.harmful_false_claims": "Falska påståenden som kan orsaka allvarlig skada i verkligheten", + "report_flow.label.hate": "Hat eller diskriminering mot människor på grund av vilka de är", + "report_flow.label.hate_dehumanizing": "Jämför människor med djur, sjukdomar eller smuts, eller kallar dem mindre än mänskliga", + "report_flow.label.hate_incitement": "Uppmanar till våld eller uteslutning mot en grupp", + "report_flow.label.hate_other": "Andra attacker mot människor på grund av vilka de är", + "report_flow.label.hate_slurs": "Skällsord, hatiska symboler eller förnedrande stereotyper", + "report_flow.label.hate_violence": "Hat, våld eller extremism", + "report_flow.label.identity": "Sexuell läggning, könsidentitet eller intersexstatus", + "report_flow.label.illegal_activity": "Annan olaglig aktivitet", + "report_flow.label.illegal_goods": "Försäljning av droger, vapen eller andra olagliga varor", + "report_flow.label.impersonation": "Utger sig för att vara någon annan, eller lurar folk", + "report_flow.label.impersonation_guild": "Utger sig för att vara {product_name} eller en annan organisation", + "report_flow.label.impersonation_organization": "Ett företag, ett varumärke eller en grupp", + "report_flow.label.impersonation_person": "Mig eller någon nära mig", + "report_flow.label.impersonation_public_figure": "En välkänd person, till exempel en innehållsskapare eller politiker", + "report_flow.label.impersonation_staff": "Personal eller support på {product_name}", + "report_flow.label.intimate_image_abuse": "Intima bilder som delas utan samtycke, inklusive deepfakes, eller hot om att dela dem", + "report_flow.label.intimate_image_abuse_guild": "Delar intima bilder utan samtycke, inklusive deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intima bilder av någon som delas utan samtycke, inklusive deepfakes", + "report_flow.label.intimate_photo": "Intimt foto eller nakenfoto", + "report_flow.label.invite_splash": "Inbjudningsbakgrund", + "report_flow.label.ip_address": "IP-adress", + "report_flow.label.learn_more": "Läs communityriktlinjerna för {product_name}", + "report_flow.label.legal_name": "Riktigt eller juridiskt namn", + "report_flow.label.lgbtq_targeting": "Medvetet felkönar, använder någons tidigare namn eller outar någon, eller förnekar deras identitet", + "report_flow.label.malware_guild": "Distribuerar skadlig programvara eller nätfiskelänkar", + "report_flow.label.malware_phishing": "Nätfiske, skadlig programvara eller hackningsförsök", + "report_flow.label.member_activity": "Vad medlemmar publicerar eller gör där", + "report_flow.label.metric_manipulation": "Förfalskar medlems- eller reaktionsantal", + "report_flow.label.minor_contact": "Ber en minderårig att träffas, eller om foton eller personliga uppgifter, på ett sätt som verkar syfta till att utnyttja den minderåriga", + "report_flow.label.minor_dating_community": "Det är en community för dejting mellan minderåriga", + "report_flow.label.minor_fictional": "Tecknat, skrivet eller AI-genererat sexuellt innehåll som föreställer ett fiktivt barn", + "report_flow.label.minor_grooming": "Grooming, eller att bygga upp olämpligt förtroende hos en minderårig", + "report_flow.label.minor_grooming_guild": "Medlemmar utsätter minderåriga för grooming eller bygger upp olämpligt förtroende hos dem", + "report_flow.label.minor_in_adult_space": "En minderårig befinner sig i en kanal eller community för 18+", + "report_flow.label.minor_in_adult_space_guild": "Minderåriga tillåts i kanaler för 18+", + "report_flow.label.minor_risk": "Utsätter en minderårig för risk", + "report_flow.label.minor_risk_guild": "Utsätter minderåriga för risk", + "report_flow.label.minor_sexual": "Sexualisering av en minderårig", + "report_flow.label.minor_sexual_contact": "Flörtar med en minderårig eller skickar sexuella meddelanden till den minderåriga", + "report_flow.label.minor_sexual_contact_guild": "Medlemmar flörtar med minderåriga eller skickar sexuella meddelanden till dem", + "report_flow.label.minor_sexual_content": "En minderårig delar själv sexuellt innehåll", + "report_flow.label.minor_sexual_content_guild": "Minderåriga publicerar eller skickar sexuellt innehåll", + "report_flow.label.minor_sexual_content_profile": "En minderårigs profil med sexuellt innehåll", + "report_flow.label.minor_sexual_guild": "Sexualisering av minderåriga", + "report_flow.label.minor_sexualization": "Sexuella kommentarer om minderåriga", + "report_flow.label.minor_sexualization_guild": "Medlemmar kommer med sexuella kommentarer om minderåriga", + "report_flow.label.minor_sexualization_profile": "Sexuella kommentarer om minderåriga i deras profil", + "report_flow.label.name": "Namn", + "report_flow.label.other": "Något som inte finns med här", + "report_flow.label.other_identifying": "Annan information som kan identifiera eller lokalisera någon", + "report_flow.label.permits_violations": "Det tillåter allvarliga regelbrott", + "report_flow.label.phone": "Telefonnummer", + "report_flow.label.photo": "Bilder", + "report_flow.label.platform_abuse": "Skrapning, automatisering eller annat missbruk av plattformen", + "report_flow.label.private_conversation": "Privata meddelanden, skärmbilder eller samtalsinspelningar", + "report_flow.label.private_info": "Delar någons privata uppgifter", + "report_flow.label.private_info_profile": "Deras profil delar någons privata uppgifter", + "report_flow.label.profile_text": "Profiltext", + "report_flow.label.raid": "Organiserar eller deltar i en raid eller ett massangrepp", + "report_flow.label.raid_guild": "Organiserar raider eller massangrepp mot personer eller communities", + "report_flow.label.rude_language": "Svordomar eller oförskämda kommentarer", + "report_flow.label.self_harm": "Någon kan komma att skada sig själv, eller uppmuntrar till självskadebeteende", + "report_flow.label.self_harm_graphic": "Explicita bilder av självskadebeteende", + "report_flow.label.self_harm_guild": "Medlemmar pressar andra att skada sig själva", + "report_flow.label.self_harm_pressure": "Pressar eller utmanar någon att skada sig själv", + "report_flow.label.self_harm_pressure_guild": "Pressar eller utmanar människor att skada sig själva", + "report_flow.label.self_harm_profile": "Deras profil antyder självskadebeteende eller uppmuntrar till det", + "report_flow.label.self_harm_promotion": "Uppmuntrar till självskadebeteende eller delar metoder", + "report_flow.label.self_harm_promotion_profile": "Deras profil uppmuntrar till självskadebeteende", + "report_flow.label.sexual": "Sexuellt innehåll", + "report_flow.label.sexual_exploitation": "Sexuell exploatering, tvång eller människohandel", + "report_flow.label.sexual_unwanted": "Sexuella bilder eller meddelanden jag inte ville ha", + "report_flow.label.something_else": "Något annat", + "report_flow.label.spam": "Skräppost eller oönskad reklam", + "report_flow.label.spam_bulk": "Skickar skräppost eller reklam i stora mängder", + "report_flow.label.spam_or_manipulation": "Skräppost eller manipulation av plattformen", + "report_flow.label.spam_profile": "Deras profil används för skräppost eller reklam", + "report_flow.label.suicide_promotion": "Uppmuntrar till självmord eller delar metoder", + "report_flow.label.suicide_promotion_profile": "Deras profil uppmuntrar till självmord", + "report_flow.label.synthetic_media": "Falska eller AI-skapade medier som presenteras som verkliga", + "report_flow.label.terrorism": "Terrorism eller våldsbejakande extremism", + "report_flow.label.terrorism_guild": "Rekryterar för eller främjar terrorism eller våldsbejakande extremism", + "report_flow.label.threat": "Hot eller uppmaningar till våld", + "report_flow.label.threat_to_share": "De hotar med att dela det", + "report_flow.label.too_young": "De är yngre än minimiåldern för att använda {product_name}", + "report_flow.label.unwanted_contact": "Förföljer, eller kontaktar upprepade gånger, mig eller någon annan efter att ha blivit ombedd att sluta, blivit blockerad eller blivit borttagen", + "report_flow.label.violence_glorification": "Förhärligar våld i verkligheten", + "report_flow.label.violence_incitement": "Uppmuntrar till våld eller förklarar hur man skadar människor", + "report_flow.label.violence_misinfo": "Våld, extremism eller skadlig falsk information", + "report_flow.label.violent_threat": "Säger att de kommer att skada någon", + "report_flow.label.worried_profile": "Jag är orolig för deras säkerhet", + "report_flow.label.worried_self_harm": "Jag är rädd att de kan skada sig själva", + "report_flow.label.worried_suicide": "Jag är rädd att de kan försöka begå självmord", + "report_flow.notice.need_more_info.body": "För att kunna granska detta behöver vi ett meddelande där de anger hur gamla de är eller gör det tydligt att de är under minimiåldern för att använda {product_name}. Anmäl det meddelandet i stället.", + "report_flow.notice.need_more_info.title": "Vi kan inte agera på detta än", + "report_flow.notice.need_more_info_profile.body": "För att kunna granska detta behöver vi se var de anger hur gamla de är eller gör det tydligt att de är under minimiåldern för att använda {product_name}. Anmäl i stället det meddelandet eller den profilen.", + "report_flow.screen.abuse.title": "Vad handlar det om?", + "report_flow.screen.abuse_guild.title": "Vad gör folk i den här communityn?", + "report_flow.screen.age_stated_message.title": "Står det i meddelandet hur gammal personen är?", + "report_flow.screen.age_stated_profile.title": "Står det i profilen hur gammal personen är?", + "report_flow.screen.community_parts.subtitle": "Välj så många som du behöver.", + "report_flow.screen.community_parts.title": "Vilka delar av communityn är inblandade?", + "report_flow.screen.crisis_support.subtitle": "Krislinjer erbjuder gratis, konfidentiellt stöd.", + "report_flow.screen.crisis_support.title": "Någon kan hjälpa dig just nu", + "report_flow.screen.false_info.subtitle": "Åsikter, satir och debatt i god tro är tillåtna. Olagligt förtal kan anmälas enligt förordningen om digitala tjänster (DSA).", + "report_flow.screen.false_info.subtitle_self_hosted": "Åsikter, satir och debatt i god tro är tillåtna.", + "report_flow.screen.false_info.title": "Vad är vilseledande med det?", + "report_flow.screen.harassment.title": "Hur riktas det mot någon?", + "report_flow.screen.hate.title": "Hur angriper det människor på grund av vilka de är?", + "report_flow.screen.impersonation.subtitle": "Tydligt märkt parodi eller rollspel är tillåtet.", + "report_flow.screen.impersonation.title": "Vem imiteras, eller är det ett bedrägeri?", + "report_flow.screen.minor_risk.title": "Hur utsätter den här personen en minderårig för risk?", + "report_flow.screen.minor_risk_guild.title": "Hur utsätter den här communityn minderåriga för risk?", + "report_flow.screen.minor_sexual.subtitle": "Tecknat, skrivet eller AI-genererat innehåll räknas när en karaktär beskrivs som minderårig eller är tydligt prepubertal, inklusive lolicon, shotacon och cub.", + "report_flow.screen.minor_sexual.title": "Vad såg du som involverade en minderårig?", + "report_flow.screen.minor_sexual_guild.title": "Vad såg du som involverade minderåriga?", + "report_flow.screen.private_info.subtitle": "Välj så många som du behöver. Om ett intimt foto visar någon under 18, gå tillbaka och anmäl det under ”Sexualisering av en minderårig”.", + "report_flow.screen.private_info.title": "Vilka privata uppgifter är inblandade?", + "report_flow.screen.profile_abuse.title": "Vad är skadligt med profilen?", + "report_flow.screen.profile_hate_violence.title": "Vad visar eller främjar profilen?", + "report_flow.screen.profile_intro.options_heading": "Läs mer", + "report_flow.screen.profile_intro.subtitle": "Berätta vad som är fel med den här profilen. De får inte veta vem som har anmält dem.", + "report_flow.screen.profile_intro.title": "Anmäl profil", + "report_flow.screen.profile_minor_sexual.title": "Vad i profilen involverar en minderårig?", + "report_flow.screen.profile_parts.subtitle": "Välj så många som du behöver.", + "report_flow.screen.profile_parts.title": "Vilka delar av profilen är ett problem?", + "report_flow.screen.profile_private_info.title": "Vilka privata uppgifter finns i deras profil?", + "report_flow.screen.profile_sexual.title": "Berätta om det sexuella innehållet i deras profil", + "report_flow.screen.profile_threat.title": "Hur involverar deras profil våld?", + "report_flow.screen.root_guild.subtitle": "Välj det alternativ som passar bäst för det som pågår i den här communityn.", + "report_flow.screen.root_guild.title": "Vad är fel med den här communityn?", + "report_flow.screen.root_message.subtitle": "Välj det alternativ som passar bäst. Du kan se över allt innan det skickas.", + "report_flow.screen.root_message.title": "Anmäl meddelande", + "report_flow.screen.root_user.subtitle": "Välj det alternativ som passar bäst för det som finns i deras profil.", + "report_flow.screen.root_user.title": "Vad är fel med deras profil?", + "report_flow.screen.self_harm.subtitle": "Ingen straffas för att ha berättat att de har det svårt. Att berätta att du är orolig hjälper oss att erbjuda stöd.", + "report_flow.screen.self_harm.title": "Vad sa eller delade de?", + "report_flow.screen.self_harm_guild.title": "Vad uppmuntrar medlemmarna till?", + "report_flow.screen.self_harm_profile.title": "Vad säger eller visar deras profil?", + "report_flow.screen.sexual.subtitle": "Om någon som visas eller är inblandad är under 18, välj ”Sexualisering av en minderårig”.", + "report_flow.screen.sexual.title": "Berätta om det sexuella innehållet", + "report_flow.screen.sexual_guild.subtitle": "Om någon som visas eller är inblandad är under 18, välj ”Sexualisering av minderåriga”.", + "report_flow.screen.sexual_guild.title": "Berätta om det sexuella innehållet i den här communityn", + "report_flow.screen.something_else_guild.title": "Vad mer pågår i den här communityn?", + "report_flow.screen.something_else_message.title": "Vad mer pågår?", + "report_flow.screen.something_else_user.title": "Vad mer är fel med den här profilen?", + "report_flow.screen.spam_kind_guild.title": "Hur missbrukar den här communityn plattformen?", + "report_flow.screen.spam_profile.title": "Hur missbrukas kontot?", + "report_flow.screen.threat.title": "Hur involverar det våld?", + "report_flow.screen.violence_misinfo.title": "Vilket av dessa stämmer in?", + "report_flow.screen.violence_misinfo_guild.title": "Vilket av dessa sker i den här communityn?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/th.json b/fluxer_api/src/api/content_i18n/weblate/locales/th.json index dcf1358fa..447036e09 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/th.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/th.json @@ -14,5 +14,202 @@ "guild.default_category_text": "ช่องข้อความ", "guild.default_category_voice": "ช่องเสียง", "guild.default_channel_text": "ทั่วไป", - "guild.default_channel_voice": "ทั่วไป" + "guild.default_channel_voice": "ทั่วไป", + "report_flow.description.name": "ชื่อผู้ใช้ ชื่อที่แสดง หรือชื่อเล่นในคอมมูนิตี้", + "report_flow.description.photo": "สิ่งที่พวกเขาใช้เป็นรูปโปรไฟล์และแบนเนอร์", + "report_flow.description.profile_text": "ประวัติส่วนตัว สถานะกำหนดเอง หรือคำสรรพนาม", + "report_flow.label.abuse": "เนื้อหาที่ล่วงละเมิดหรือเป็นอันตราย", + "report_flow.label.account_trading": "การขายบัญชี หรือข้อมูลการเข้าสู่ระบบหรือรายละเอียดบัตรที่ถูกขโมย", + "report_flow.label.account_trading_communities": "การซื้อหรือขายบัญชีหรือคอมมูนิตี้", + "report_flow.label.address": "ที่อยู่บ้านหรือที่ทำงาน", + "report_flow.label.adult_content_no_gate": "เนื้อหาสำหรับผู้ใหญ่ที่ไม่มีการจำกัดอายุ 18+", + "report_flow.label.adult_content_profile": "เนื้อหาสำหรับผู้ใหญ่ที่โจ่งแจ้งในโปรไฟล์", + "report_flow.label.adult_content_unmarked": "เนื้อหาสำหรับผู้ใหญ่ในช่องคอมมูนิตี้ที่ไม่ได้ระบุว่าเป็น 18+", + "report_flow.label.age_no_message": "ไม่ ไม่ได้ระบุอายุ", + "report_flow.label.age_no_profile": "ไม่ ไม่ได้ระบุอายุ", + "report_flow.label.age_yes_message": "ใช่ มีการระบุอายุของพวกเขา", + "report_flow.label.age_yes_profile": "ใช่ โปรไฟล์ของพวกเขาระบุอายุ", + "report_flow.label.atrocity_denial": "การปฏิเสธหรือเฉลิมฉลองฮอโลคอสต์หรือการฆ่าล้างเผ่าพันธุ์อื่นๆ", + "report_flow.label.ban_evasion": "การหลีกเลี่ยงการแบนด้วยบัญชีอื่น", + "report_flow.label.channel_names": "ชื่อช่อง", + "report_flow.label.community_banner": "แบนเนอร์คอมมูนิตี้", + "report_flow.label.community_icon": "ไอคอนคอมมูนิตี้", + "report_flow.label.community_name": "ชื่อคอมมูนิตี้", + "report_flow.label.conversion_therapy": "ส่งเสริมการบำบัดเพื่อเปลี่ยนรสนิยมทางเพศหรืออัตลักษณ์ทางเพศ", + "report_flow.label.copyright": "การร้องเรียนเรื่องลิขสิทธิ์หรือเครื่องหมายการค้า", + "report_flow.label.crisis_lines": "สายด่วนช่วยเหลือภาวะวิกฤตในประเทศของคุณ", + "report_flow.label.csam": "ภาพหรือวิดีโอการล่วงละเมิดทางเพศเด็ก ไม่ว่าจะเป็นของจริงหรือสร้างโดย AI", + "report_flow.label.discovery_listing": "รายการใน Discovery", + "report_flow.label.dislike": "ไม่เหมาะกับฉัน", + "report_flow.label.dsa": "เนื้อหาที่ผิดกฎหมายในสหภาพยุโรป (กฎหมายบริการดิจิทัล หรือ DSA)", + "report_flow.label.eating_disorder_promotion": "ส่งเสริมพฤติกรรมการกินที่ผิดปกติ", + "report_flow.label.eating_disorder_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมความผิดปกติในการกิน", + "report_flow.label.email": "ที่อยู่อีเมล", + "report_flow.label.emoji_stickers": "อิโมจิหรือสติกเกอร์ที่กำหนดเอง", + "report_flow.label.face_photo": "รูปถ่ายใบหน้าของพวกเขา", + "report_flow.label.fake_account": "บัญชีปลอม บอท หรือการละเมิดอัตโนมัติ", + "report_flow.label.fake_account_profile": "บัญชีปลอมหรือหลอกลวง", + "report_flow.label.false_claims": "การเผยแพร่เรื่องโกหกเพื่อทำลายชื่อเสียงของบุคคลใดบุคคลหนึ่ง", + "report_flow.label.false_info": "เผยแพร่ข้อมูลเท็จที่เป็นอันตราย", + "report_flow.label.financial": "บัตร บัญชีธนาคาร หรือรายละเอียดทางการเงินอื่นๆ", + "report_flow.label.fraud": "พวกเขากำลังพยายามหลอกลวงผู้คนเพื่อเอาเงินหรือบัญชี", + "report_flow.label.fraud_guild": "หลอกลวงผู้คนให้เสียเงินหรือบัญชี", + "report_flow.label.government_id": "เอกสารประจำตัวหรือหมายเลขประจำตัว", + "report_flow.label.graphic_violence": "ความรุนแรงจริงที่แสดงเพื่อสร้างความตกใจ เช่น ภาพสยดสยองหรือการทารุณกรรมสัตว์", + "report_flow.label.harassment": "การกลั่นแกล้ง การคุกคาม หรือการสะกดรอยตาม", + "report_flow.label.harassment_direct": "การโจมตีบุคคลซ้ำๆ ด้วยคำพูดดูถูกหรือการล่วงละเมิด", + "report_flow.label.harassment_guild": "การคุกคาม การกลั่นแกล้ง หรือการสะกดรอยตามผู้อื่น", + "report_flow.label.harassment_profile": "โปรไฟล์ของพวกเขาคุกคามหรือมุ่งเป้าโจมตีฉันหรือผู้อื่น", + "report_flow.label.harmful_false_claims": "การกล่าวอ้างเท็จที่อาจก่อให้เกิดอันตรายร้ายแรงในโลกแห่งความเป็นจริง", + "report_flow.label.hate": "ความเกลียดชังหรือการเลือกปฏิบัติต่อผู้คนเพราะตัวตนของพวกเขา", + "report_flow.label.hate_dehumanizing": "การเปรียบเทียบผู้คนกับสัตว์ โรคภัยไข้เจ็บ หรือสิ่งสกปรก หรือการเรียกพวกเขาว่าด้อยกว่ามนุษย์", + "report_flow.label.hate_incitement": "การเรียกร้องให้ใช้ความรุนแรงหรือการกีดกันกลุ่มคน", + "report_flow.label.hate_other": "การโจมตีอื่นๆ ต่อผู้คนเพราะตัวตนของพวกเขา", + "report_flow.label.hate_slurs": "คำเหยียด สัญลักษณ์แสดงความเกลียดชัง หรือการเหมารวมที่ดูถูกเหยียดหยาม", + "report_flow.label.hate_violence": "ความเกลียดชัง ความรุนแรง หรือแนวคิดสุดโต่ง", + "report_flow.label.identity": "รสนิยมทางเพศ อัตลักษณ์ทางเพศ หรือภาวะอินเตอร์เซ็กซ์", + "report_flow.label.illegal_activity": "กิจกรรมที่ผิดกฎหมายอื่นๆ", + "report_flow.label.illegal_goods": "การขายยาเสพติด อาวุธ หรือสิ่งผิดกฎหมายอื่นๆ", + "report_flow.label.impersonation": "การแอบอ้างเป็นผู้อื่น หรือการหลอกลวงผู้คน", + "report_flow.label.impersonation_guild": "การแอบอ้างเป็น {product_name} หรือองค์กรอื่น", + "report_flow.label.impersonation_organization": "บริษัท แบรนด์ หรือกลุ่ม", + "report_flow.label.impersonation_person": "ฉันหรือคนใกล้ชิด", + "report_flow.label.impersonation_public_figure": "บุคคลที่มีชื่อเสียง เช่น ครีเอเตอร์หรือนักการเมือง", + "report_flow.label.impersonation_staff": "เจ้าหน้าที่ {product_name} หรือฝ่ายสนับสนุน", + "report_flow.label.intimate_image_abuse": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวซึ่งถูกแชร์โดยไม่ได้รับความยินยอม รวมถึง Deepfake หรือการขู่ว่าจะแชร์ภาพเหล่านั้น", + "report_flow.label.intimate_image_abuse_guild": "การแชร์ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวโดยไม่ได้รับความยินยอม รวมถึง Deepfake", + "report_flow.label.intimate_image_abuse_profile": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวของบุคคลซึ่งถูกแชร์โดยไม่ได้รับความยินยอม รวมถึง Deepfake", + "report_flow.label.intimate_photo": "ภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัว", + "report_flow.label.invite_splash": "ภาพปกคำเชิญ", + "report_flow.label.ip_address": "ที่อยู่ IP", + "report_flow.label.learn_more": "อ่านหลักเกณฑ์คอมมูนิตี้ของ {product_name}", + "report_flow.label.legal_name": "ชื่อจริงหรือชื่อตามกฎหมาย", + "report_flow.label.lgbtq_targeting": "การจงใจเรียกผิดเพศ การเรียกด้วยชื่อเดิมที่เลิกใช้แล้ว การเปิดเผยอัตลักษณ์ทางเพศของใครโดยไม่ได้รับความยินยอม หรือการปฏิเสธอัตลักษณ์ของเขา", + "report_flow.label.malware_guild": "การเผยแพร่มัลแวร์หรือลิงก์ฟิชชิ่ง", + "report_flow.label.malware_phishing": "ความพยายามในการฟิชชิ่ง มัลแวร์ หรือแฮ็ก", + "report_flow.label.member_activity": "สิ่งที่สมาชิกโพสต์หรือทำที่นั่น", + "report_flow.label.metric_manipulation": "การปลอมแปลงจำนวนสมาชิกหรือจำนวนรีแอ็กชัน", + "report_flow.label.minor_contact": "การขอให้ผู้เยาว์มาพบ หรือขอรูปภาพหรือรายละเอียดส่วนตัว ในลักษณะที่ดูเหมือนเป็นการล่าเหยื่อ", + "report_flow.label.minor_dating_community": "เป็นคอมมูนิตี้สำหรับการออกเดทระหว่างผู้เยาว์", + "report_flow.label.minor_fictional": "เนื้อหาทางเพศเกี่ยวกับตัวละครเด็กที่วาด เขียน หรือสร้างโดย AI", + "report_flow.label.minor_grooming": "การล่อลวงผู้เยาว์ (grooming) หรือการสร้างความไว้วางใจที่ไม่เหมาะสมกับผู้เยาว์", + "report_flow.label.minor_grooming_guild": "สมาชิกล่อลวงผู้เยาว์ (grooming) หรือสร้างความไว้วางใจที่ไม่เหมาะสมกับผู้เยาว์", + "report_flow.label.minor_in_adult_space": "ผู้เยาว์อยู่ในช่องหรือคอมมูนิตี้ 18+", + "report_flow.label.minor_in_adult_space_guild": "อนุญาตให้ผู้เยาว์เข้าช่อง 18+", + "report_flow.label.minor_risk": "ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยง", + "report_flow.label.minor_risk_guild": "ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยง", + "report_flow.label.minor_sexual": "การทำให้ผู้เยาว์เป็นวัตถุทางเพศ", + "report_flow.label.minor_sexual_contact": "การเกี้ยวพาราสีผู้เยาว์หรือส่งข้อความทางเพศถึงผู้เยาว์", + "report_flow.label.minor_sexual_contact_guild": "สมาชิกเกี้ยวพาราสีผู้เยาว์หรือส่งข้อความทางเพศถึงผู้เยาว์", + "report_flow.label.minor_sexual_content": "ผู้เยาว์แชร์เนื้อหาทางเพศด้วยตนเอง", + "report_flow.label.minor_sexual_content_guild": "ผู้เยาว์โพสต์หรือส่งเนื้อหาทางเพศ", + "report_flow.label.minor_sexual_content_profile": "โปรไฟล์ของผู้เยาว์ที่มีเนื้อหาทางเพศ", + "report_flow.label.minor_sexual_guild": "การทำให้ผู้เยาว์เป็นวัตถุทางเพศ", + "report_flow.label.minor_sexualization": "ความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์", + "report_flow.label.minor_sexualization_guild": "สมาชิกแสดงความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์", + "report_flow.label.minor_sexualization_profile": "ความคิดเห็นทางเพศเกี่ยวกับผู้เยาว์ในโปรไฟล์ของพวกเขา", + "report_flow.label.name": "ชื่อ", + "report_flow.label.other": "สิ่งอื่นที่ไม่ได้ระบุไว้ที่นี่", + "report_flow.label.other_identifying": "ข้อมูลอื่นที่สามารถใช้ระบุตัวตนหรือระบุตำแหน่งที่อยู่ของบุคคลได้", + "report_flow.label.permits_violations": "อนุญาตให้มีการละเมิดกฎอย่างร้ายแรง", + "report_flow.label.phone": "หมายเลขโทรศัพท์", + "report_flow.label.photo": "รูปภาพ", + "report_flow.label.platform_abuse": "การขูดข้อมูล ระบบอัตโนมัติ หรือการละเมิดแพลตฟอร์มอื่นๆ", + "report_flow.label.private_conversation": "ข้อความส่วนตัว ภาพหน้าจอ หรือบันทึกการโทร", + "report_flow.label.private_info": "การแชร์รายละเอียดส่วนตัวของผู้อื่น", + "report_flow.label.private_info_profile": "โปรไฟล์ของพวกเขาแชร์รายละเอียดส่วนตัวของผู้อื่น", + "report_flow.label.profile_text": "ข้อความโปรไฟล์", + "report_flow.label.raid": "การจัดหรือเข้าร่วมการบุกโจมตีหรือรุมโจมตี", + "report_flow.label.raid_guild": "การจัดการบุกโจมตีหรือรุมโจมตีผู้คนหรือคอมมูนิตี้", + "report_flow.label.rude_language": "คำหยาบหรือคำพูดหยาบคาย", + "report_flow.label.self_harm": "มีคนอาจทำร้ายตัวเอง หรือกำลังส่งเสริมการทำร้ายตัวเอง", + "report_flow.label.self_harm_graphic": "ภาพการทำร้ายตัวเองที่โจ่งแจ้ง", + "report_flow.label.self_harm_guild": "สมาชิกยุยงให้ผู้อื่นทำร้ายตัวเอง", + "report_flow.label.self_harm_pressure": "การกดดันหรือท้าทายให้ใครบางคนทำร้ายตัวเอง", + "report_flow.label.self_harm_pressure_guild": "การกดดันหรือท้าทายให้ผู้คนทำร้ายตัวเอง", + "report_flow.label.self_harm_profile": "โปรไฟล์ของพวกเขาบ่งบอกถึงการทำร้ายตัวเองหรือส่งเสริมให้ทำร้ายตัวเอง", + "report_flow.label.self_harm_promotion": "ส่งเสริมการทำร้ายตัวเองหรือแบ่งปันวิธีการ", + "report_flow.label.self_harm_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมการทำร้ายตัวเอง", + "report_flow.label.sexual": "เนื้อหาทางเพศ", + "report_flow.label.sexual_exploitation": "การแสวงหาประโยชน์ทางเพศ การบีบบังคับ หรือการค้ามนุษย์", + "report_flow.label.sexual_unwanted": "รูปภาพหรือข้อความทางเพศที่ฉันไม่ต้องการ", + "report_flow.label.something_else": "อย่างอื่น", + "report_flow.label.spam": "สแปมหรือโฆษณาที่ไม่ต้องการ", + "report_flow.label.spam_bulk": "การส่งสแปมหรือโฆษณาจำนวนมาก", + "report_flow.label.spam_or_manipulation": "สแปมหรือการบิดเบือนแพลตฟอร์ม", + "report_flow.label.spam_profile": "โปรไฟล์ของพวกเขาใช้สำหรับสแปมหรือโฆษณา", + "report_flow.label.suicide_promotion": "ส่งเสริมการฆ่าตัวตายหรือแบ่งปันวิธีการ", + "report_flow.label.suicide_promotion_profile": "โปรไฟล์ของพวกเขาส่งเสริมการฆ่าตัวตาย", + "report_flow.label.synthetic_media": "สื่อปลอมหรือสื่อที่สร้างโดย AI ที่นำเสนอว่าเป็นของจริง", + "report_flow.label.terrorism": "การก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง", + "report_flow.label.terrorism_guild": "การชักชวนหรือส่งเสริมการก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง", + "report_flow.label.threat": "การข่มขู่หรือการยุยงให้ใช้ความรุนแรง", + "report_flow.label.threat_to_share": "พวกเขากำลังขู่ว่าจะแชร์", + "report_flow.label.too_young": "พวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำในการใช้ {product_name}", + "report_flow.label.unwanted_contact": "การสะกดรอยตามหรือติดต่อฉันหรือผู้อื่นซ้ำๆ หลังจากถูกขอให้หยุด บล็อก หรือลบออก", + "report_flow.label.violence_glorification": "ยกย่องความรุนแรงในโลกแห่งความเป็นจริง", + "report_flow.label.violence_incitement": "การส่งเสริมความรุนแรงหรืออธิบายวิธีทำร้ายผู้อื่น", + "report_flow.label.violence_misinfo": "ความรุนแรง แนวคิดสุดโต่ง หรือข้อมูลเท็จที่เป็นอันตราย", + "report_flow.label.violent_threat": "บอกว่าจะทำร้ายใครบางคน", + "report_flow.label.worried_profile": "ฉันกังวลเกี่ยวกับความปลอดภัยของพวกเขา", + "report_flow.label.worried_self_harm": "ฉันกลัวว่าพวกเขาอาจทำร้ายตัวเอง", + "report_flow.label.worried_suicide": "ฉันกลัวว่าพวกเขาอาจพยายามฆ่าตัวตาย", + "report_flow.notice.need_more_info.body": "ในการตรวจสอบ เราต้องการข้อความที่พวกเขาบอกอายุของตนเอง หรือทำให้ชัดเจนว่าพวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำของ {product_name} โปรดรายงานข้อความนั้นแทน", + "report_flow.notice.need_more_info.title": "เรายังดำเนินการไม่ได้", + "report_flow.notice.need_more_info_profile.body": "ในการตรวจสอบ เราต้องการเห็นว่าพวกเขาบอกอายุของตนเองที่ไหน หรือทำให้ชัดเจนว่าพวกเขาอายุต่ำกว่าเกณฑ์ขั้นต่ำของ {product_name} โปรดรายงานข้อความหรือโปรไฟล์นั้นแทน", + "report_flow.screen.abuse.title": "เกี่ยวข้องกับอะไร", + "report_flow.screen.abuse_guild.title": "ผู้คนในคอมมูนิตี้นี้กำลังทำอะไรอยู่", + "report_flow.screen.age_stated_message.title": "ข้อความนี้ระบุอายุของพวกเขาหรือไม่", + "report_flow.screen.age_stated_profile.title": "โปรไฟล์ของพวกเขาระบุอายุหรือไม่", + "report_flow.screen.community_parts.subtitle": "เลือกได้มากเท่าที่คุณต้องการ", + "report_flow.screen.community_parts.title": "ส่วนใดของคอมมูนิตี้ที่เกี่ยวข้อง", + "report_flow.screen.crisis_support.subtitle": "สายด่วนช่วยเหลือภาวะวิกฤตให้คำปรึกษาฟรีและเก็บเป็นความลับ", + "report_flow.screen.crisis_support.title": "มีคนพร้อมช่วยเหลือคุณได้ทันที", + "report_flow.screen.false_info.subtitle": "ความคิดเห็น การเสียดสี และการถกเถียงโดยสุจริตเป็นสิ่งที่อนุญาต การหมิ่นประมาทที่ผิดกฎหมายสามารถรายงานได้ภายใต้กฎหมายบริการดิจิทัล (DSA)", + "report_flow.screen.false_info.subtitle_self_hosted": "ความคิดเห็น การเสียดสี และการถกเถียงโดยสุจริตเป็นสิ่งที่อนุญาต", + "report_flow.screen.false_info.title": "สิ่งนี้ทำให้เข้าใจผิดอย่างไร", + "report_flow.screen.harassment.title": "มีคนถูกมุ่งเป้าโจมตีอย่างไร", + "report_flow.screen.hate.title": "โจมตีผู้คนเพราะตัวตนของพวกเขาอย่างไร", + "report_flow.screen.impersonation.subtitle": "การล้อเลียนหรือการสวมบทบาทที่ระบุไว้อย่างชัดเจนเป็นสิ่งที่อนุญาต", + "report_flow.screen.impersonation.title": "ใครถูกแอบอ้าง หรือเป็นการหลอกลวง", + "report_flow.screen.minor_risk.title": "บุคคลนี้ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยงได้อย่างไร", + "report_flow.screen.minor_risk_guild.title": "คอมมูนิตี้นี้ทำให้ผู้เยาว์ตกอยู่ในความเสี่ยงได้อย่างไร", + "report_flow.screen.minor_sexual.subtitle": "เนื้อหาที่วาด เขียน หรือสร้างโดย AI จะนับรวมเมื่อตัวละครถูกอธิบายว่าเป็นผู้เยาว์ หรือเป็นเด็กก่อนวัยแรกรุ่นอย่างชัดเจน รวมถึง lolicon, shotacon และ cub", + "report_flow.screen.minor_sexual.title": "คุณเห็นอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.minor_sexual_guild.title": "คุณเห็นอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.private_info.subtitle": "เลือกได้มากเท่าที่คุณต้องการ หากภาพเปลือยหรือภาพทางเพศที่เป็นส่วนตัวแสดงบุคคลที่อายุต่ำกว่า 18 ปี ให้ย้อนกลับไปและรายงานภายใต้ “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.private_info.title": "มีรายละเอียดส่วนตัวใดบ้างที่เกี่ยวข้อง", + "report_flow.screen.profile_abuse.title": "โปรไฟล์ของพวกเขามีอันตรายอย่างไร", + "report_flow.screen.profile_hate_violence.title": "โปรไฟล์ของพวกเขากำลังแสดงหรือส่งเสริมอะไร", + "report_flow.screen.profile_intro.options_heading": "ดูเพิ่มเติม", + "report_flow.screen.profile_intro.subtitle": "บอกเราว่ามีอะไรผิดปกติกับโปรไฟล์นี้ พวกเขาจะไม่ทราบว่าใครเป็นผู้รายงาน", + "report_flow.screen.profile_intro.title": "รายงานโปรไฟล์", + "report_flow.screen.profile_minor_sexual.title": "โปรไฟล์ของพวกเขามีอะไรที่เกี่ยวข้องกับผู้เยาว์", + "report_flow.screen.profile_parts.subtitle": "เลือกได้มากเท่าที่คุณต้องการ", + "report_flow.screen.profile_parts.title": "ส่วนใดของโปรไฟล์ของพวกเขามีปัญหา", + "report_flow.screen.profile_private_info.title": "มีรายละเอียดส่วนตัวใดบ้างในโปรไฟล์ของพวกเขา", + "report_flow.screen.profile_sexual.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศในโปรไฟล์ของพวกเขา", + "report_flow.screen.profile_threat.title": "โปรไฟล์ของพวกเขามีส่วนเกี่ยวข้องกับความรุนแรงได้อย่างไร", + "report_flow.screen.root_guild.subtitle": "เลือกข้อที่ตรงที่สุดกับสิ่งที่เกิดขึ้นในคอมมูนิตี้นี้", + "report_flow.screen.root_guild.title": "มีอะไรผิดปกติกับคอมมูนิตี้นี้", + "report_flow.screen.root_message.subtitle": "เลือกข้อที่ตรงที่สุด คุณสามารถตรวจสอบทุกอย่างก่อนที่จะส่งได้", + "report_flow.screen.root_message.title": "รายงานข้อความ", + "report_flow.screen.root_user.subtitle": "เลือกข้อที่ตรงที่สุดกับสิ่งที่อยู่ในโปรไฟล์ของพวกเขา", + "report_flow.screen.root_user.title": "มีอะไรผิดปกติกับโปรไฟล์ของพวกเขา", + "report_flow.screen.self_harm.subtitle": "ไม่มีใครถูกลงโทษจากการบอกว่าพวกเขากำลังประสบปัญหา การบอกเราว่าคุณกังวลช่วยให้เราสามารถให้การสนับสนุนได้", + "report_flow.screen.self_harm.title": "พวกเขาพูดหรือแชร์อะไร", + "report_flow.screen.self_harm_guild.title": "สมาชิกกำลังยุยงหรือส่งเสริมอะไร", + "report_flow.screen.self_harm_profile.title": "โปรไฟล์ของพวกเขากล่าวหรือแสดงอะไร", + "report_flow.screen.sexual.subtitle": "หากบุคคลที่ปรากฏหรือเกี่ยวข้องคนใดมีอายุต่ำกว่า 18 ปี ให้เลือก “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.sexual.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศ", + "report_flow.screen.sexual_guild.subtitle": "หากบุคคลที่ปรากฏหรือเกี่ยวข้องคนใดมีอายุต่ำกว่า 18 ปี ให้เลือก “การทำให้ผู้เยาว์เป็นวัตถุทางเพศ”", + "report_flow.screen.sexual_guild.title": "บอกเราเกี่ยวกับเนื้อหาทางเพศในคอมมูนิตี้นี้", + "report_flow.screen.something_else_guild.title": "มีอะไรอีกบ้างที่เกิดขึ้นในคอมมูนิตี้นี้", + "report_flow.screen.something_else_message.title": "มีอะไรอีกบ้างที่เกิดขึ้น", + "report_flow.screen.something_else_user.title": "มีอะไรอีกบ้างที่ผิดปกติกับโปรไฟล์นี้", + "report_flow.screen.spam_kind_guild.title": "คอมมูนิตี้นี้ละเมิดแพลตฟอร์มอย่างไร", + "report_flow.screen.spam_profile.title": "บัญชีนี้ถูกนำไปใช้ในทางที่ผิดอย่างไร", + "report_flow.screen.threat.title": "มันเกี่ยวข้องกับความรุนแรงได้อย่างไร", + "report_flow.screen.violence_misinfo.title": "ข้อใดตรงกับเรื่องนี้", + "report_flow.screen.violence_misinfo_guild.title": "ข้อใดเกิดขึ้นในคอมมูนิตี้นี้" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/tr.json b/fluxer_api/src/api/content_i18n/weblate/locales/tr.json index 857a70cca..783ac2e44 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/tr.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/tr.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Metin kanalları", "guild.default_category_voice": "Sesli kanallar", "guild.default_channel_text": "genel", - "guild.default_channel_voice": "Genel" + "guild.default_channel_voice": "Genel", + "report_flow.description.name": "Kullanıcı adı, görünen ad veya topluluk takma adı", + "report_flow.description.photo": "Avatar ve banner olarak kullandıkları", + "report_flow.description.profile_text": "Biyografi, özel durum veya zamirler", + "report_flow.label.abuse": "Saldırgan veya zararlı içerik", + "report_flow.label.account_trading": "Hesap satışı veya çalınan giriş bilgileri ya da kart detayları", + "report_flow.label.account_trading_communities": "Hesap veya topluluk satın alma veya satma", + "report_flow.label.address": "Ev adresi veya iş yeri", + "report_flow.label.adult_content_no_gate": "18+ yaş kısıtlaması olmayan yetişkin içeriği", + "report_flow.label.adult_content_profile": "Profilinde açık cinsel içerikli yetişkin içeriği", + "report_flow.label.adult_content_unmarked": "18+ olarak işaretlenmemiş bir topluluk kanalındaki yetişkinlere yönelik içerik", + "report_flow.label.age_no_message": "Hayır, yaşlarını belirtmiyor", + "report_flow.label.age_no_profile": "Hayır, profilleri yaşlarını belirtmiyor", + "report_flow.label.age_yes_message": "Evet, yaşlarını belirtiyor", + "report_flow.label.age_yes_profile": "Evet, profilleri yaşlarını belirtiyor", + "report_flow.label.atrocity_denial": "Holokost'u veya diğer soykırımları inkâr etme ya da kutlama", + "report_flow.label.ban_evasion": "Başka bir hesapla yasaklamayı aşma", + "report_flow.label.channel_names": "Kanal adları", + "report_flow.label.community_banner": "Topluluk banner'ı", + "report_flow.label.community_icon": "Topluluk simgesi", + "report_flow.label.community_name": "Topluluk adı", + "report_flow.label.conversion_therapy": "Dönüşüm terapisini teşvik etme", + "report_flow.label.copyright": "Telif hakkı veya ticari marka şikayeti", + "report_flow.label.crisis_lines": "Ülkenizdeki kriz hatları", + "report_flow.label.csam": "Çocuk cinsel istismarına ait gerçek veya yapay zeka ile üretilmiş görseller ya da videolar", + "report_flow.label.discovery_listing": "Keşfet listesi", + "report_flow.label.dislike": "Bana göre değil", + "report_flow.label.dsa": "AB'de yasa dışı içerik (Dijital Hizmetler Yasası)", + "report_flow.label.eating_disorder_promotion": "Düzensiz yeme davranışlarını teşvik etme", + "report_flow.label.eating_disorder_promotion_profile": "Profili yeme bozukluklarını teşvik ediyor", + "report_flow.label.email": "E-posta adresi", + "report_flow.label.emoji_stickers": "Özel emoji veya çıkartmalar", + "report_flow.label.face_photo": "Yüzlerinin fotoğrafı", + "report_flow.label.fake_account": "Sahte hesap, bot veya otomatik kötüye kullanım", + "report_flow.label.fake_account_profile": "Sahte veya yanıltıcı bir hesap", + "report_flow.label.false_claims": "Belirli bir kişinin itibarını zedelemek için yalan yayma", + "report_flow.label.false_info": "Zararlı yanlış bilgiler yayma", + "report_flow.label.financial": "Kart, banka veya diğer finansal bilgiler", + "report_flow.label.fraud": "İnsanların parasını veya hesaplarını dolandırıcılıkla ele geçirmeye çalışıyorlar", + "report_flow.label.fraud_guild": "İnsanların parasını veya hesaplarını dolandırıcılıkla ele geçirme", + "report_flow.label.government_id": "Kimlik belgesi veya kimlik numarası", + "report_flow.label.graphic_violence": "Şok etmek için gösterilen gerçek şiddet, örneğin vahşet görüntüleri veya hayvanlara zulüm", + "report_flow.label.harassment": "Zorbalık, taciz veya takip", + "report_flow.label.harassment_direct": "Birini tekrar tekrar hakaret veya tacizle hedef alma", + "report_flow.label.harassment_guild": "İnsanları taciz etme, onlara zorbalık yapma veya onları takip etme", + "report_flow.label.harassment_profile": "Profili beni veya başka birini taciz ediyor ya da hedef alıyor", + "report_flow.label.harmful_false_claims": "Gerçek dünyada ciddi zarara yol açabilecek yanlış iddialar", + "report_flow.label.hate": "İnsanlara kim oldukları nedeniyle yöneltilen nefret veya ayrımcılık", + "report_flow.label.hate_dehumanizing": "İnsanları hayvanlarla, hastalıkla veya pislikle kıyaslama ya da insanlıktan aşağı olarak niteleme", + "report_flow.label.hate_incitement": "Bir gruba karşı şiddet veya dışlama çağrıları", + "report_flow.label.hate_other": "İnsanlara kim oldukları nedeniyle yapılan diğer saldırılar", + "report_flow.label.hate_slurs": "Aşağılayıcı hakaret sözcükleri, nefret sembolleri veya küçük düşürücü kalıp yargılar", + "report_flow.label.hate_violence": "Nefret, şiddet veya aşırıcılık", + "report_flow.label.identity": "Cinsel yönelim, cinsiyet kimliği veya interseks durumu", + "report_flow.label.illegal_activity": "Diğer yasa dışı etkinlik", + "report_flow.label.illegal_goods": "Uyuşturucu, silah veya başka yasa dışı satışlar", + "report_flow.label.impersonation": "Başka biri gibi davranma veya insanları dolandırma", + "report_flow.label.impersonation_guild": "{product_name} veya başka bir kuruluş gibi davranma", + "report_flow.label.impersonation_organization": "Bir şirket, marka veya grup", + "report_flow.label.impersonation_person": "Ben veya bana yakın biri", + "report_flow.label.impersonation_public_figure": "Tanınmış bir kişi, örneğin bir içerik üreticisi veya politikacı", + "report_flow.label.impersonation_staff": "{product_name} personeli veya destek ekibi", + "report_flow.label.intimate_image_abuse": "Deepfake'ler dahil, rıza olmadan paylaşılan mahrem görüntüler veya bunları paylaşma tehdidi", + "report_flow.label.intimate_image_abuse_guild": "Deepfake'ler dahil, mahrem görüntüleri rıza olmadan paylaşma", + "report_flow.label.intimate_image_abuse_profile": "Deepfake'ler dahil, birinin mahrem görüntülerinin rıza olmadan paylaşılması", + "report_flow.label.intimate_photo": "Mahrem veya çıplak fotoğraf", + "report_flow.label.invite_splash": "Davet karşılama görseli", + "report_flow.label.ip_address": "IP adresi", + "report_flow.label.learn_more": "{product_name} Topluluk Yönergeleri'ni okuyun", + "report_flow.label.legal_name": "Gerçek veya yasal ad", + "report_flow.label.lgbtq_targeting": "Birine kasıtlı olarak yanlış cinsiyetle hitap etme, eski adıyla hitap etme (deadnaming), kimliğini ifşa etme ya da kimliğini inkâr etme", + "report_flow.label.malware_guild": "Kötü amaçlı yazılım veya kimlik avı bağlantıları dağıtma", + "report_flow.label.malware_phishing": "Kimlik avı, kötü amaçlı yazılım veya bilgisayar korsanlığı girişimleri", + "report_flow.label.member_activity": "Üyelerin orada paylaştıkları veya yaptıkları", + "report_flow.label.metric_manipulation": "Üye veya tepki sayılarını sahteleme", + "report_flow.label.minor_contact": "Reşit olmayan birinden, istismarcı nitelikte görünen bir şekilde buluşma, fotoğraf veya kişisel bilgi isteme", + "report_flow.label.minor_dating_community": "Reşit olmayanlar arasında flörtleşme için bir topluluktur", + "report_flow.label.minor_fictional": "Çizilmiş, yazılmış veya yapay zeka tarafından oluşturulmuş kurgusal bir çocuğun cinsel içeriği", + "report_flow.label.minor_grooming": "Reşit olmayan birini istismar amacıyla ayartma (grooming) veya onunla uygunsuz bir güven ilişkisi kurma", + "report_flow.label.minor_grooming_guild": "Üyeler reşit olmayanları istismar amacıyla ayartıyor (grooming) veya onlarla uygunsuz bir güven ilişkisi kuruyor", + "report_flow.label.minor_in_adult_space": "Reşit olmayan biri 18+ bir kanalda veya toplulukta", + "report_flow.label.minor_in_adult_space_guild": "18+ kanallarda reşit olmayanlara izin veriliyor", + "report_flow.label.minor_risk": "Reşit olmayan birini riske atma", + "report_flow.label.minor_risk_guild": "Reşit olmayanları riske atma", + "report_flow.label.minor_sexual": "Reşit olmayan birini cinselleştirme", + "report_flow.label.minor_sexual_contact": "Reşit olmayan biriyle flört etme veya ona cinsel içerikli mesajlar gönderme", + "report_flow.label.minor_sexual_contact_guild": "Üyeler reşit olmayanlarla flört ediyor veya onlara cinsel içerikli mesajlar gönderiyor", + "report_flow.label.minor_sexual_content": "Reşit olmayan biri kendisi cinsel içerik paylaşıyor", + "report_flow.label.minor_sexual_content_guild": "Reşit olmayanlar cinsel içerik paylaşıyor veya gönderiyor", + "report_flow.label.minor_sexual_content_profile": "Cinsel içerik barındıran, reşit olmayan birine ait profil", + "report_flow.label.minor_sexual_guild": "Reşit olmayanları cinselleştirme", + "report_flow.label.minor_sexualization": "Reşit olmayanlar hakkında cinsel yorumlar", + "report_flow.label.minor_sexualization_guild": "Üyeler reşit olmayanlar hakkında cinsel yorumlar yapıyor", + "report_flow.label.minor_sexualization_profile": "Profilinde reşit olmayanlar hakkında cinsel yorumlar", + "report_flow.label.name": "Adlar", + "report_flow.label.other": "Burada listelenmeyen bir şey", + "report_flow.label.other_identifying": "Birini tanımlayabilecek veya yerini belirleyebilecek diğer bilgiler", + "report_flow.label.permits_violations": "Ciddi kural ihlallerine izin veriyor", + "report_flow.label.phone": "Telefon numarası", + "report_flow.label.photo": "Resimler", + "report_flow.label.platform_abuse": "Kazıma, otomasyon veya diğer platform suistimalleri", + "report_flow.label.private_conversation": "Özel mesajlar, ekran görüntüleri veya arama kayıtları", + "report_flow.label.private_info": "Birinin özel bilgilerini paylaşma", + "report_flow.label.private_info_profile": "Profili birinin özel bilgilerini paylaşıyor", + "report_flow.label.profile_text": "Profil metni", + "report_flow.label.raid": "Bir baskın veya toplu saldırı düzenleme ya da bunlara katılma", + "report_flow.label.raid_guild": "Kişilere veya topluluklara karşı baskınlar veya toplu saldırılar düzenleme", + "report_flow.label.rude_language": "Küfür veya kaba sözler", + "report_flow.label.self_harm": "Birisi kendine zarar verebilir veya kendine zarar vermeyi teşvik ediyor", + "report_flow.label.self_harm_graphic": "Kendine zarar vermeyi açıkça gösteren görüntüler", + "report_flow.label.self_harm_guild": "Üyeler başkalarını kendilerine zarar vermeye itiyor", + "report_flow.label.self_harm_pressure": "Birine kendine zarar vermesi için baskı yapma veya ona bunu yapması için meydan okuma", + "report_flow.label.self_harm_pressure_guild": "İnsanlara kendilerine zarar vermeleri için baskı yapma veya meydan okuma", + "report_flow.label.self_harm_profile": "Profili kendine zarar vermeyi ima ediyor veya teşvik ediyor", + "report_flow.label.self_harm_promotion": "Kendine zarar vermeyi teşvik etme veya yöntemlerini paylaşma", + "report_flow.label.self_harm_promotion_profile": "Profilinde kendine zarar verme teşvik ediliyor", + "report_flow.label.sexual": "Cinsel içerik", + "report_flow.label.sexual_exploitation": "Cinsel istismar, zorlama veya insan ticareti", + "report_flow.label.sexual_unwanted": "İstemediğim cinsel içerikli görseller veya mesajlar", + "report_flow.label.something_else": "Başka bir şey", + "report_flow.label.spam": "Spam veya istenmeyen reklamlar", + "report_flow.label.spam_bulk": "Toplu olarak spam veya reklam gönderme", + "report_flow.label.spam_or_manipulation": "Spam veya platform manipülasyonu", + "report_flow.label.spam_profile": "Profilleri spam veya reklam için kullanılıyor", + "report_flow.label.suicide_promotion": "İntiharı teşvik etme veya yöntemlerini paylaşma", + "report_flow.label.suicide_promotion_profile": "Profilleri intiharı teşvik ediyor", + "report_flow.label.synthetic_media": "Gerçek gibi gösterilen sahte veya yapay zeka ürünü medya", + "report_flow.label.terrorism": "Terörizm veya şiddet yanlısı aşırıcılık", + "report_flow.label.terrorism_guild": "Terörizm veya şiddet yanlısı aşırıcılık için eleman toplama veya teşvik etme", + "report_flow.label.threat": "Tehditler veya şiddet çağrıları", + "report_flow.label.threat_to_share": "Paylaşmakla tehdit ediyorlar", + "report_flow.label.too_young": "{product_name} kullanmak için gereken minimum yaşın altındalar", + "report_flow.label.unwanted_contact": "Durması istendikten, engellendikten veya kaldırıldıktan sonra beni veya başkasını takip etme veya tekrar tekrar iletişime geçme", + "report_flow.label.violence_glorification": "Gerçek dünyadaki şiddeti yüceltme", + "report_flow.label.violence_incitement": "Şiddeti teşvik etme veya insanlara nasıl zarar verileceğini açıklama", + "report_flow.label.violence_misinfo": "Şiddet, aşırıcılık veya zararlı yanlış bilgi", + "report_flow.label.violent_threat": "Birine zarar vereceklerini söyleme", + "report_flow.label.worried_profile": "Onların güvenliği konusunda endişeliyim", + "report_flow.label.worried_self_harm": "Kendilerine zarar verebileceklerinden korkuyorum", + "report_flow.label.worried_suicide": "İntihar girişiminde bulunabileceklerinden korkuyorum", + "report_flow.notice.need_more_info.body": "Bunu inceleyebilmemiz için, kaç yaşında olduklarını söyledikleri veya {product_name} kullanmak için gereken minimum yaşın altında olduklarını açıkça belirttikleri bir mesaja ihtiyacımız var. Bunun yerine o mesajı bildirin.", + "report_flow.notice.need_more_info.title": "Henüz işlem yapamayız", + "report_flow.notice.need_more_info_profile.body": "Bunu inceleyebilmemiz için, kaç yaşında olduklarını söyledikleri veya {product_name} kullanmak için gereken minimum yaşın altında olduklarını açıkça belirttikleri yeri görmemiz gerekiyor. Bunun yerine o mesajı veya profili bildirin.", + "report_flow.screen.abuse.title": "Neler içeriyor?", + "report_flow.screen.abuse_guild.title": "Bu topluluktaki kişiler neler yapıyor?", + "report_flow.screen.age_stated_message.title": "Bu mesaj kaç yaşında olduklarını belirtiyor mu?", + "report_flow.screen.age_stated_profile.title": "Profilleri kaç yaşında olduklarını belirtiyor mu?", + "report_flow.screen.community_parts.subtitle": "İhtiyacınız kadarını seçin.", + "report_flow.screen.community_parts.title": "Topluluğun hangi bölümleri söz konusu?", + "report_flow.screen.crisis_support.subtitle": "Kriz hatları ücretsiz, gizli destek sunar.", + "report_flow.screen.crisis_support.title": "Şu anda size yardım edebilecek biri var", + "report_flow.screen.false_info.subtitle": "Fikirler, hiciv ve iyi niyetli tartışmalara izin verilir. Yasa dışı iftira, Dijital Hizmetler Yasası kapsamında bildirilebilir.", + "report_flow.screen.false_info.subtitle_self_hosted": "Fikirler, hiciv ve iyi niyetli tartışmalara izin verilir.", + "report_flow.screen.false_info.title": "Nesi yanıltıcı?", + "report_flow.screen.harassment.title": "Birisi nasıl hedef alınıyor?", + "report_flow.screen.hate.title": "İnsanlara kim oldukları nedeniyle nasıl saldırıyor?", + "report_flow.screen.impersonation.subtitle": "Açıkça belirtilmiş parodi veya rol yapmaya izin verilir.", + "report_flow.screen.impersonation.title": "Kimin kimliğine bürünülüyor veya bu bir dolandırıcılık mı?", + "report_flow.screen.minor_risk.title": "Bu kişi reşit olmayan birini nasıl riske atıyor?", + "report_flow.screen.minor_risk_guild.title": "Bu topluluk reşit olmayanları nasıl riske atıyor?", + "report_flow.screen.minor_sexual.subtitle": "Çizilmiş, yazılmış veya yapay zeka ile üretilmiş içerikler, bir karakter reşit olmayan biri olarak tanımlandığında veya açıkça ergenlik öncesi çağda olduğunda (lolicon, shotacon ve cub dahil) bu kapsama girer.", + "report_flow.screen.minor_sexual.title": "Reşit olmayan biriyle ilgili ne gördünüz?", + "report_flow.screen.minor_sexual_guild.title": "Reşit olmayanlarla ilgili ne gördünüz?", + "report_flow.screen.private_info.subtitle": "İhtiyacınız kadarını seçin. Mahrem bir fotoğraf 18 yaşın altındaki birini gösteriyorsa, geri dönün ve bunu “Reşit olmayan birini cinselleştirme” seçeneği altında bildirin.", + "report_flow.screen.private_info.title": "Hangi özel bilgiler söz konusu?", + "report_flow.screen.profile_abuse.title": "Profilinde ne zararlı?", + "report_flow.screen.profile_hate_violence.title": "Profilleri ne gösteriyor veya neyi teşvik ediyor?", + "report_flow.screen.profile_intro.options_heading": "Daha fazla bilgi edinin", + "report_flow.screen.profile_intro.subtitle": "Bu profilde neyin yanlış olduğunu bize söyleyin. Bildirimi kimin yaptığı onlara söylenmeyecek.", + "report_flow.screen.profile_intro.title": "Profili bildir", + "report_flow.screen.profile_minor_sexual.title": "Profillerinde reşit olmayan biriyle ilgili olan ne var?", + "report_flow.screen.profile_parts.subtitle": "İhtiyacınız kadarını seçin.", + "report_flow.screen.profile_parts.title": "Profilinin hangi kısımları sorunlu?", + "report_flow.screen.profile_private_info.title": "Profilinde hangi özel bilgiler yer alıyor?", + "report_flow.screen.profile_sexual.title": "Profillerindeki cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.profile_threat.title": "Profillerinde şiddet nasıl yer alıyor?", + "report_flow.screen.root_guild.subtitle": "Bu toplulukta olup bitene en yakın seçeneği belirleyin.", + "report_flow.screen.root_guild.title": "Bu toplulukla ilgili sorun nedir?", + "report_flow.screen.root_message.subtitle": "En yakın seçeneği belirleyin. Göndermeden önce her şeyi kontrol edebilirsiniz.", + "report_flow.screen.root_message.title": "Mesajı bildir", + "report_flow.screen.root_user.subtitle": "Profillerinde olana en yakın seçeneği belirleyin.", + "report_flow.screen.root_user.title": "Profillerindeki sorun nedir?", + "report_flow.screen.self_harm.subtitle": "Kimse zorlandığını söylediği için cezalandırılmaz. Endişeli olduğunuzu bize söylemeniz, destek sunmamıza yardımcı olur.", + "report_flow.screen.self_harm.title": "Ne söylediler veya paylaştılar?", + "report_flow.screen.self_harm_guild.title": "Üyeler neyi teşvik ediyor?", + "report_flow.screen.self_harm_profile.title": "Profilleri ne söylüyor veya ne gösteriyor?", + "report_flow.screen.sexual.subtitle": "Gösterilen veya dahil olan herhangi biri 18 yaşın altındaysa “Reşit olmayan birini cinselleştirme” seçeneğini belirleyin.", + "report_flow.screen.sexual.title": "Cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.sexual_guild.subtitle": "Gösterilen veya dahil olan herhangi biri 18 yaşın altındaysa “Reşit olmayanları cinselleştirme” seçeneğini belirleyin.", + "report_flow.screen.sexual_guild.title": "Bu topluluktaki cinsel içerik hakkında bize bilgi verin", + "report_flow.screen.something_else_guild.title": "Bu toplulukta başka ne oluyor?", + "report_flow.screen.something_else_message.title": "Başka ne oluyor?", + "report_flow.screen.something_else_user.title": "Bu profilde başka ne sorun var?", + "report_flow.screen.spam_kind_guild.title": "Bu topluluk platformu nasıl kötüye kullanıyor?", + "report_flow.screen.spam_profile.title": "Hesap nasıl kötüye kullanılıyor?", + "report_flow.screen.threat.title": "Şiddet nasıl yer alıyor?", + "report_flow.screen.violence_misinfo.title": "Bunlardan hangisi buna uyuyor?", + "report_flow.screen.violence_misinfo_guild.title": "Bunlardan hangisi bu toplulukta oluyor?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/uk.json b/fluxer_api/src/api/content_i18n/weblate/locales/uk.json index 3c5337ec1..17a36c548 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/uk.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/uk.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Текстові канали", "guild.default_category_voice": "Голосові канали", "guild.default_channel_text": "загальний", - "guild.default_channel_voice": "Загальний" + "guild.default_channel_voice": "Загальний", + "report_flow.description.name": "Ім'я користувача, ім'я для відображення або псевдонім у спільноті", + "report_flow.description.photo": "Аватар і банер, які вони використовують", + "report_flow.description.profile_text": "Біографія, власний статус або займенники", + "report_flow.label.abuse": "Образливий або шкідливий вміст", + "report_flow.label.account_trading": "Продаж облікових записів, викрадених даних для входу чи даних карток", + "report_flow.label.account_trading_communities": "Купівля або продаж облікових записів чи спільнот", + "report_flow.label.address": "Домашня адреса або місце роботи", + "report_flow.label.adult_content_no_gate": "Вміст для дорослих без вікового обмеження 18+", + "report_flow.label.adult_content_profile": "Відвертий вміст для дорослих у їхньому профілі", + "report_flow.label.adult_content_unmarked": "Вміст для дорослих у каналі спільноти, який не позначено як 18+", + "report_flow.label.age_no_message": "Ні, у повідомленні вік не згадано", + "report_flow.label.age_no_profile": "Ні, у профілі вік не згадано", + "report_flow.label.age_yes_message": "Так, у повідомленні згадано їхній вік", + "report_flow.label.age_yes_profile": "Так, у профілі згадано їхній вік", + "report_flow.label.atrocity_denial": "Заперечення або прославляння Голокосту чи інших геноцидів", + "report_flow.label.ban_evasion": "Обхід бану через інший обліковий запис", + "report_flow.label.channel_names": "Назви каналів", + "report_flow.label.community_banner": "Банер спільноти", + "report_flow.label.community_icon": "Іконка спільноти", + "report_flow.label.community_name": "Назва спільноти", + "report_flow.label.conversion_therapy": "Пропаганда конверсійної терапії", + "report_flow.label.copyright": "Скарга щодо авторських прав або торговельної марки", + "report_flow.label.crisis_lines": "Гарячі лінії кризової допомоги у вашій країні", + "report_flow.label.csam": "Реальні або згенеровані ШІ зображення чи відео сексуального насильства над дітьми", + "report_flow.label.discovery_listing": "Запис у Discovery", + "report_flow.label.dislike": "Мені це просто не підходить", + "report_flow.label.dsa": "Вміст, незаконний в ЄС (Акт про цифрові послуги)", + "report_flow.label.eating_disorder_promotion": "Заохочення розладів харчової поведінки", + "report_flow.label.eating_disorder_promotion_profile": "Їхній профіль пропагує розлади харчової поведінки", + "report_flow.label.email": "Адреса електронної пошти", + "report_flow.label.emoji_stickers": "Власні емоджі або стікери", + "report_flow.label.face_photo": "Фото їхнього обличчя", + "report_flow.label.fake_account": "Фейковий обліковий запис, бот або автоматизоване зловживання", + "report_flow.label.fake_account_profile": "Фейковий або оманливий обліковий запис", + "report_flow.label.false_claims": "Поширення брехні, щоб зашкодити репутації конкретної людини", + "report_flow.label.false_info": "Поширення шкідливої неправдивої інформації", + "report_flow.label.financial": "Дані картки, банківські або інші фінансові дані", + "report_flow.label.fraud": "Вони намагаються виманити в людей гроші або облікові записи", + "report_flow.label.fraud_guild": "Виманювання в людей грошей або облікових записів", + "report_flow.label.government_id": "Документ, що посвідчує особу, або ідентифікаційний номер", + "report_flow.label.graphic_violence": "Реальне насильство, показане, щоб шокувати, як-от криваві сцени чи жорстоке поводження з тваринами", + "report_flow.label.harassment": "Булінг, переслідування або сталкінг", + "report_flow.label.harassment_direct": "Неодноразове цькування когось образами чи знущаннями", + "report_flow.label.harassment_guild": "Переслідування, булінг або сталкінг людей", + "report_flow.label.harassment_profile": "Їхній профіль переслідує або цькує мене чи когось іншого", + "report_flow.label.harmful_false_claims": "Неправдиві заяви, які можуть завдати серйозної шкоди в реальному світі", + "report_flow.label.hate": "Ненависть або дискримінація людей через те, ким вони є", + "report_flow.label.hate_dehumanizing": "Порівняння людей із тваринами, хворобами чи брудом або твердження, що вони менш ніж люди", + "report_flow.label.hate_incitement": "Заклики до насильства щодо групи людей або до її виключення", + "report_flow.label.hate_other": "Інші напади на людей через те, ким вони є", + "report_flow.label.hate_slurs": "Образливі слова щодо груп людей, символи ненависті або принизливі стереотипи", + "report_flow.label.hate_violence": "Ненависть, насильство чи екстремізм", + "report_flow.label.identity": "Сексуальна орієнтація, гендерна ідентичність або інтерсексуальність", + "report_flow.label.illegal_activity": "Інша незаконна діяльність", + "report_flow.label.illegal_goods": "Продаж наркотиків, зброї чи інших незаконних товарів", + "report_flow.label.impersonation": "Видавання себе за когось або шахрайство", + "report_flow.label.impersonation_guild": "Видавання себе за {product_name} або іншу організацію", + "report_flow.label.impersonation_organization": "Компанія, бренд або група", + "report_flow.label.impersonation_person": "Я або хтось із моїх близьких", + "report_flow.label.impersonation_public_figure": "Відома особа, наприклад автор вмісту чи політик", + "report_flow.label.impersonation_staff": "Співробітник {product_name} або служба підтримки", + "report_flow.label.intimate_image_abuse": "Інтимні зображення, поширені без згоди, включно з діпфейками, або погроза їх поширення", + "report_flow.label.intimate_image_abuse_guild": "Поширення інтимних зображень без згоди, включно з діпфейками", + "report_flow.label.intimate_image_abuse_profile": "Інтимні зображення когось, поширені без згоди, включно з діпфейками", + "report_flow.label.intimate_photo": "Інтимне або оголене фото", + "report_flow.label.invite_splash": "Заставка запрошення", + "report_flow.label.ip_address": "IP-адреса", + "report_flow.label.learn_more": "Ознайомтеся з правилами спільноти {product_name}", + "report_flow.label.legal_name": "Справжнє або юридичне ім'я", + "report_flow.label.lgbtq_targeting": "Навмисний місджендеринг, використання колишнього імені людини (деднеймінг), аутинг або заперечення її ідентичності", + "report_flow.label.malware_guild": "Розповсюдження шкідливого програмного забезпечення або фішингових посилань", + "report_flow.label.malware_phishing": "Фішинг, шкідливе програмне забезпечення або спроби злому", + "report_flow.label.member_activity": "Що публікують або роблять там учасники", + "report_flow.label.metric_manipulation": "Фальсифікація кількості учасників або реакцій", + "report_flow.label.minor_contact": "Прохання до неповнолітнього зустрітися, надіслати фото чи особисті дані так, що це схоже на хижацьку поведінку", + "report_flow.label.minor_dating_community": "Це спільнота для знайомств між неповнолітніми", + "report_flow.label.minor_fictional": "Намальований, написаний або згенерований ШІ вміст сексуального характеру із вигаданою дитиною", + "report_flow.label.minor_grooming": "Грумінг або побудова неналежної довіри з неповнолітнім", + "report_flow.label.minor_grooming_guild": "Учасники займаються грумінгом неповнолітніх або будують з ними неналежні довірчі стосунки", + "report_flow.label.minor_in_adult_space": "Неповнолітній перебуває в каналі або спільноті 18+", + "report_flow.label.minor_in_adult_space_guild": "Неповнолітні особи допускаються до каналів 18+", + "report_flow.label.minor_risk": "Наражання неповнолітньої особи на ризик", + "report_flow.label.minor_risk_guild": "Наражання неповнолітніх осіб на ризик", + "report_flow.label.minor_sexual": "Сексуалізація неповнолітньої особи", + "report_flow.label.minor_sexual_contact": "Флірт із неповнолітньою особою або надсилання їй повідомлень сексуального характеру", + "report_flow.label.minor_sexual_contact_guild": "Учасники фліртують із неповнолітніми особами або надсилають їм повідомлення сексуального характеру", + "report_flow.label.minor_sexual_content": "Неповнолітня особа сама поширює вміст сексуального характеру", + "report_flow.label.minor_sexual_content_guild": "Неповнолітні особи публікують або надсилають вміст сексуального характеру", + "report_flow.label.minor_sexual_content_profile": "Профіль неповнолітньої особи з вмістом сексуального характеру", + "report_flow.label.minor_sexual_guild": "Сексуалізація неповнолітніх осіб", + "report_flow.label.minor_sexualization": "Сексуальні коментарі про неповнолітніх осіб", + "report_flow.label.minor_sexualization_guild": "Учасники роблять сексуальні коментарі про неповнолітніх осіб", + "report_flow.label.minor_sexualization_profile": "Сексуальні коментарі про неповнолітніх осіб у їхньому профілі", + "report_flow.label.name": "Імена", + "report_flow.label.other": "Щось, чого немає в цьому списку", + "report_flow.label.other_identifying": "Інша інформація, яка може ідентифікувати або визначити місцезнаходження особи", + "report_flow.label.permits_violations": "Це дозволяє серйозно порушувати правила", + "report_flow.label.phone": "Номер телефону", + "report_flow.label.photo": "Зображення", + "report_flow.label.platform_abuse": "Збирання даних, автоматизація або інше зловживання платформою", + "report_flow.label.private_conversation": "Приватні повідомлення, знімки екрана або записи дзвінків", + "report_flow.label.private_info": "Поширення чиїхось приватних даних", + "report_flow.label.private_info_profile": "Їхній профіль поширює чиїсь приватні дані", + "report_flow.label.profile_text": "Текст профілю", + "report_flow.label.raid": "Організація або приєднання до рейду чи цькування", + "report_flow.label.raid_guild": "Організація рейдів або цькування проти людей чи спільнот", + "report_flow.label.rude_language": "Нецензурна лексика або грубі висловлювання", + "report_flow.label.self_harm": "Хтось може заподіяти собі шкоду або заохочує до цього", + "report_flow.label.self_harm_graphic": "Натуралістичні зображення заподіяння собі шкоди", + "report_flow.label.self_harm_guild": "Учасники спонукають інших заподіяти собі шкоду", + "report_flow.label.self_harm_pressure": "Тиск на когось або підбурювання «на слабо» заподіяти собі шкоду", + "report_flow.label.self_harm_pressure_guild": "Тиск на людей або підбурювання «на слабо» заподіяти собі шкоду", + "report_flow.label.self_harm_profile": "Їхній профіль вказує на заподіяння собі шкоди або заохочує до нього", + "report_flow.label.self_harm_promotion": "Заохочення до заподіяння собі шкоди або поширення методів", + "report_flow.label.self_harm_promotion_profile": "Їхній профіль заохочує до заподіяння собі шкоди", + "report_flow.label.sexual": "Сексуальний вміст", + "report_flow.label.sexual_exploitation": "Сексуальна експлуатація, примус або торгівля людьми", + "report_flow.label.sexual_unwanted": "Сексуальні зображення або повідомлення, яких я не хотів(-ла)", + "report_flow.label.something_else": "Щось інше", + "report_flow.label.spam": "Спам або небажана реклама", + "report_flow.label.spam_bulk": "Масова розсилка спаму або реклами", + "report_flow.label.spam_or_manipulation": "Спам або маніпуляції платформою", + "report_flow.label.spam_profile": "Їхній профіль використовується для спаму або реклами", + "report_flow.label.suicide_promotion": "Заохочення до самогубства або поширення методів", + "report_flow.label.suicide_promotion_profile": "Їхній профіль заохочує самогубство", + "report_flow.label.synthetic_media": "Фейкові або створені ШІ медіа, представлені як справжні", + "report_flow.label.terrorism": "Тероризм або насильницький екстремізм", + "report_flow.label.terrorism_guild": "Вербування або пропаганда тероризму чи насильницького екстремізму", + "report_flow.label.threat": "Погрози або заклики до насильства", + "report_flow.label.threat_to_share": "Вони погрожують поширити це", + "report_flow.label.too_young": "Вони не досягли мінімального віку, щоб користуватися {product_name}", + "report_flow.label.unwanted_contact": "Сталкінг або багаторазові контакти зі мною чи кимось іншим після прохання припинити, блокування або видалення", + "report_flow.label.violence_glorification": "Прославлення реального насильства", + "report_flow.label.violence_incitement": "Заохочення насильства або пояснення, як завдати шкоди людям", + "report_flow.label.violence_misinfo": "Насильство, екстремізм або шкідлива неправдива інформація", + "report_flow.label.violent_threat": "Вони кажуть, що завдадуть комусь шкоди", + "report_flow.label.worried_profile": "Я турбуюся про безпеку цієї людини", + "report_flow.label.worried_self_harm": "Я боюся, що ця людина може заподіяти собі шкоду", + "report_flow.label.worried_suicide": "Я боюся, що ця людина може спробувати вчинити самогубство", + "report_flow.notice.need_more_info.body": "Щоб розглянути це, нам потрібне повідомлення, де людина вказує свій вік або дає зрозуміти, що не досягла мінімального віку для користування {product_name}. Натомість поскаржтеся на таке повідомлення.", + "report_flow.notice.need_more_info.title": "Поки що ми не можемо вжити заходів", + "report_flow.notice.need_more_info_profile.body": "Щоб розглянути це, нам потрібно побачити, де людина вказує свій вік або дає зрозуміти, що не досягла мінімального віку для користування {product_name}. Натомість поскаржтеся на таке повідомлення або профіль.", + "report_flow.screen.abuse.title": "Чого це стосується?", + "report_flow.screen.abuse_guild.title": "Що роблять люди в цій спільноті?", + "report_flow.screen.age_stated_message.title": "Чи в цьому повідомленні вказано їхній вік?", + "report_flow.screen.age_stated_profile.title": "Чи вказано в їхньому профілі вік?", + "report_flow.screen.community_parts.subtitle": "Виберіть стільки, скільки потрібно.", + "report_flow.screen.community_parts.title": "Яких частин спільноти це стосується?", + "report_flow.screen.crisis_support.subtitle": "Гарячі лінії кризової допомоги пропонують безкоштовну конфіденційну підтримку.", + "report_flow.screen.crisis_support.title": "Хтось може допомогти просто зараз", + "report_flow.screen.false_info.subtitle": "Думки, сатира та добросовісні дебати дозволені. Про незаконний наклеп можна повідомити відповідно до Акту про цифрові послуги.", + "report_flow.screen.false_info.subtitle_self_hosted": "Думки, сатира та добросовісні дебати дозволені.", + "report_flow.screen.false_info.title": "Що вводить в оману?", + "report_flow.screen.harassment.title": "Як саме когось цькують?", + "report_flow.screen.hate.title": "Як це спрямовано проти людей через те, ким вони є?", + "report_flow.screen.impersonation.subtitle": "Чітко позначені пародії або рольові ігри дозволені.", + "report_flow.screen.impersonation.title": "За кого видають себе, чи це шахрайство?", + "report_flow.screen.minor_risk.title": "Як ця особа наражає неповнолітнього на ризик?", + "report_flow.screen.minor_risk_guild.title": "Як ця спільнота наражає неповнолітніх на ризик?", + "report_flow.screen.minor_sexual.subtitle": "Намальований, написаний або створений ШІ вміст враховується, якщо персонажа описано як неповнолітнього або він явно допубертатного віку, зокрема lolicon, shotacon і cub.", + "report_flow.screen.minor_sexual.title": "Що ви бачили за участю неповнолітньої особи?", + "report_flow.screen.minor_sexual_guild.title": "Що ви бачили за участю неповнолітніх осіб?", + "report_flow.screen.private_info.subtitle": "Виберіть стільки, скільки потрібно. Якщо на інтимному фото зображено особу, якій менше 18 років, поверніться назад і поскаржтеся на це в розділі «Сексуалізація неповнолітньої особи».", + "report_flow.screen.private_info.title": "Яких приватних даних це стосується?", + "report_flow.screen.profile_abuse.title": "Що шкідливого в їхньому профілі?", + "report_flow.screen.profile_hate_violence.title": "Що показує або пропагує їхній профіль?", + "report_flow.screen.profile_intro.options_heading": "Докладніше", + "report_flow.screen.profile_intro.subtitle": "Розкажіть, що не так із цим профілем. Особа не дізнається, хто на неї поскаржився.", + "report_flow.screen.profile_intro.title": "Поскаржитися на профіль", + "report_flow.screen.profile_minor_sexual.title": "Що в їхньому профілі стосується неповнолітньої особи?", + "report_flow.screen.profile_parts.subtitle": "Виберіть стільки, скільки потрібно.", + "report_flow.screen.profile_parts.title": "Які частини їхнього профілю є проблемою?", + "report_flow.screen.profile_private_info.title": "Які приватні дані містяться в їхньому профілі?", + "report_flow.screen.profile_sexual.title": "Розкажіть про сексуальний вміст у їхньому профілі", + "report_flow.screen.profile_threat.title": "Як їхній профіль пов'язаний із насильством?", + "report_flow.screen.root_guild.subtitle": "Виберіть найближчий варіант того, що відбувається в цій спільноті.", + "report_flow.screen.root_guild.title": "Що не так із цією спільнотою?", + "report_flow.screen.root_message.subtitle": "Виберіть найближчий варіант. Ви можете перевірити все перед надсиланням.", + "report_flow.screen.root_message.title": "Поскаржитися на повідомлення", + "report_flow.screen.root_user.subtitle": "Виберіть найближчий варіант того, що є в їхньому профілі.", + "report_flow.screen.root_user.title": "Що не так із їхнім профілем?", + "report_flow.screen.self_harm.subtitle": "Нікого не карають за те, що людина говорить про свої труднощі. Якщо ви повідомите нам про свої побоювання, це допоможе нам надати підтримку.", + "report_flow.screen.self_harm.title": "Що вони сказали або чим поділилися?", + "report_flow.screen.self_harm_guild.title": "Що заохочують учасники?", + "report_flow.screen.self_harm_profile.title": "Що сказано чи показано в їхньому профілі?", + "report_flow.screen.sexual.subtitle": "Якщо комусь із показаних або залучених осіб менше 18 років, виберіть «Сексуалізація неповнолітньої особи».", + "report_flow.screen.sexual.title": "Розкажіть про сексуальний вміст", + "report_flow.screen.sexual_guild.subtitle": "Якщо комусь із показаних або залучених осіб менше 18 років, виберіть «Сексуалізація неповнолітніх осіб».", + "report_flow.screen.sexual_guild.title": "Розкажіть про сексуальний вміст у цій спільноті", + "report_flow.screen.something_else_guild.title": "Що ще відбувається в цій спільноті?", + "report_flow.screen.something_else_message.title": "Що ще відбувається?", + "report_flow.screen.something_else_user.title": "Що ще не так із цим профілем?", + "report_flow.screen.spam_kind_guild.title": "Як ця спільнота зловживає платформою?", + "report_flow.screen.spam_profile.title": "Як обліковий запис використовується не за призначенням?", + "report_flow.screen.threat.title": "Як це пов'язано з насильством?", + "report_flow.screen.violence_misinfo.title": "Що з цього найбільше підходить?", + "report_flow.screen.violence_misinfo_guild.title": "Що з цього відбувається в цій спільноті?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/vi.json b/fluxer_api/src/api/content_i18n/weblate/locales/vi.json index 0265e0091..f09cd8b08 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/vi.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/vi.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Kênh văn bản", "guild.default_category_voice": "Kênh thoại", "guild.default_channel_text": "chung", - "guild.default_channel_voice": "Chung" + "guild.default_channel_voice": "Chung", + "report_flow.description.name": "Tên người dùng, tên hiển thị hoặc biệt danh cộng đồng", + "report_flow.description.photo": "Ảnh đại diện và ảnh bìa họ dùng", + "report_flow.description.profile_text": "Tiểu sử, trạng thái tùy chỉnh hoặc đại từ nhân xưng", + "report_flow.label.abuse": "Nội dung lạm dụng hoặc có hại", + "report_flow.label.account_trading": "Bán tài khoản, hoặc thông tin đăng nhập hoặc chi tiết thẻ bị đánh cắp", + "report_flow.label.account_trading_communities": "Mua hoặc bán tài khoản hoặc cộng đồng", + "report_flow.label.address": "Địa chỉ nhà hoặc nơi làm việc", + "report_flow.label.adult_content_no_gate": "Nội dung người lớn không có giới hạn 18+", + "report_flow.label.adult_content_profile": "Nội dung người lớn lộ liễu trong hồ sơ của họ", + "report_flow.label.adult_content_unmarked": "Nội dung người lớn trong kênh cộng đồng không được đánh dấu 18+", + "report_flow.label.age_no_message": "Không, tin nhắn không đề cập đến tuổi", + "report_flow.label.age_no_profile": "Không, hồ sơ không đề cập đến tuổi", + "report_flow.label.age_yes_message": "Có, tin nhắn đề cập đến tuổi của họ", + "report_flow.label.age_yes_profile": "Có, hồ sơ của họ có đề cập đến tuổi", + "report_flow.label.atrocity_denial": "Phủ nhận hoặc ca ngợi Holocaust hoặc các cuộc diệt chủng khác", + "report_flow.label.ban_evasion": "Lách lệnh cấm bằng một tài khoản khác", + "report_flow.label.channel_names": "Tên kênh", + "report_flow.label.community_banner": "Ảnh bìa cộng đồng", + "report_flow.label.community_icon": "Biểu tượng cộng đồng", + "report_flow.label.community_name": "Tên cộng đồng", + "report_flow.label.conversion_therapy": "Quảng bá liệu pháp chuyển đổi", + "report_flow.label.copyright": "Khiếu nại bản quyền hoặc nhãn hiệu", + "report_flow.label.crisis_lines": "Đường dây nóng khủng hoảng tại quốc gia của bạn", + "report_flow.label.csam": "Ảnh hoặc video lạm dụng tình dục trẻ em, dù là thật hay do AI tạo ra", + "report_flow.label.discovery_listing": "Danh sách khám phá", + "report_flow.label.dislike": "Không hợp với tôi", + "report_flow.label.dsa": "Nội dung bất hợp pháp tại EU (Đạo luật Dịch vụ Kỹ thuật số)", + "report_flow.label.eating_disorder_promotion": "Khuyến khích chứng rối loạn ăn uống", + "report_flow.label.eating_disorder_promotion_profile": "Hồ sơ của họ quảng bá chứng rối loạn ăn uống", + "report_flow.label.email": "Địa chỉ email", + "report_flow.label.emoji_stickers": "Biểu tượng cảm xúc hoặc nhãn dán tùy chỉnh", + "report_flow.label.face_photo": "Ảnh khuôn mặt của họ", + "report_flow.label.fake_account": "Tài khoản giả mạo, bot hoặc lạm dụng tự động", + "report_flow.label.fake_account_profile": "Một tài khoản giả hoặc mang tính lừa dối", + "report_flow.label.false_claims": "Lan truyền lời nói dối để làm tổn hại danh tiếng của một người cụ thể", + "report_flow.label.false_info": "Lan truyền thông tin sai lệch có hại", + "report_flow.label.financial": "Thẻ, ngân hàng hoặc các chi tiết tài chính khác", + "report_flow.label.fraud": "Họ đang cố lừa lấy tiền hoặc tài khoản của mọi người", + "report_flow.label.fraud_guild": "Lừa lấy tiền hoặc tài khoản của mọi người", + "report_flow.label.government_id": "Giấy tờ tùy thân hoặc số giấy tờ tùy thân", + "report_flow.label.graphic_violence": "Bạo lực thật được hiển thị để gây sốc, như cảnh máu me hoặc ngược đãi động vật", + "report_flow.label.harassment": "Bắt nạt, quấy rối hoặc theo dõi", + "report_flow.label.harassment_direct": "Liên tục nhắm vào ai đó bằng lời lăng mạ hoặc xúc phạm", + "report_flow.label.harassment_guild": "Quấy rối, bắt nạt hoặc theo dõi người khác", + "report_flow.label.harassment_profile": "Hồ sơ của họ quấy rối hoặc nhắm mục tiêu vào tôi hoặc người khác", + "report_flow.label.harmful_false_claims": "Tuyên bố sai sự thật có thể gây ra tác hại nghiêm trọng trong thế giới thực", + "report_flow.label.hate": "Thù ghét hoặc phân biệt đối xử với mọi người vì họ là ai", + "report_flow.label.hate_dehumanizing": "So sánh người với động vật, bệnh tật hoặc rác rưởi, hoặc gọi họ là kém hơn con người", + "report_flow.label.hate_incitement": "Kêu gọi bạo lực hoặc loại trừ một nhóm", + "report_flow.label.hate_other": "Các cuộc tấn công khác vào mọi người vì họ là ai", + "report_flow.label.hate_slurs": "Từ ngữ miệt thị, biểu tượng thù ghét hoặc định kiến hạ thấp nhân phẩm", + "report_flow.label.hate_violence": "Thù ghét, bạo lực hoặc chủ nghĩa cực đoan", + "report_flow.label.identity": "Xu hướng tính dục, bản dạng giới hoặc tình trạng liên giới tính", + "report_flow.label.illegal_activity": "Hoạt động trái phép khác", + "report_flow.label.illegal_goods": "Buôn bán ma túy, vũ khí hoặc các mặt hàng bất hợp pháp khác", + "report_flow.label.impersonation": "Mạo danh người khác hoặc lừa đảo mọi người", + "report_flow.label.impersonation_guild": "Giả mạo {product_name} hoặc một tổ chức khác", + "report_flow.label.impersonation_organization": "Một công ty, thương hiệu hoặc nhóm", + "report_flow.label.impersonation_person": "Tôi hoặc người thân thiết với tôi", + "report_flow.label.impersonation_public_figure": "Một người nổi tiếng, như người sáng tạo nội dung hoặc chính trị gia", + "report_flow.label.impersonation_staff": "Nhân viên hoặc bộ phận hỗ trợ của {product_name}", + "report_flow.label.intimate_image_abuse": "Hình ảnh nhạy cảm được chia sẻ mà không có sự đồng ý, bao gồm deepfake hoặc đe dọa chia sẻ chúng", + "report_flow.label.intimate_image_abuse_guild": "Chia sẻ hình ảnh nhạy cảm mà không có sự đồng ý, bao gồm deepfake", + "report_flow.label.intimate_image_abuse_profile": "Hình ảnh nhạy cảm của ai đó được chia sẻ mà không có sự đồng ý, bao gồm deepfake", + "report_flow.label.intimate_photo": "Ảnh nhạy cảm hoặc ảnh khỏa thân", + "report_flow.label.invite_splash": "Ảnh bìa lời mời", + "report_flow.label.ip_address": "Địa chỉ IP", + "report_flow.label.learn_more": "Đọc Nguyên tắc Cộng đồng của {product_name}", + "report_flow.label.legal_name": "Tên thật hoặc tên pháp lý", + "report_flow.label.lgbtq_targeting": "Cố ý gọi sai giới tính, dùng tên cũ (deadname) hoặc tiết lộ trái ý muốn xu hướng tính dục hay bản dạng giới của ai đó, hoặc phủ nhận danh tính của họ", + "report_flow.label.malware_guild": "Phát tán phần mềm độc hại hoặc liên kết phishing", + "report_flow.label.malware_phishing": "Phishing, phần mềm độc hại hoặc nỗ lực xâm nhập trái phép (hack)", + "report_flow.label.member_activity": "Những gì thành viên đăng hoặc làm ở đó", + "report_flow.label.metric_manipulation": "Làm giả số lượng thành viên hoặc lượt phản ứng", + "report_flow.label.minor_contact": "Yêu cầu trẻ vị thành niên gặp mặt, hoặc xin ảnh hoặc thông tin cá nhân, theo cách có vẻ có ý đồ xâm hại", + "report_flow.label.minor_dating_community": "Đây là một cộng đồng hẹn hò giữa trẻ vị thành niên", + "report_flow.label.minor_fictional": "Nội dung tình dục được vẽ, viết hoặc tạo bằng AI về một đứa trẻ hư cấu", + "report_flow.label.minor_grooming": "Dụ dỗ (grooming) hoặc xây dựng lòng tin không phù hợp với trẻ vị thành niên", + "report_flow.label.minor_grooming_guild": "Các thành viên dụ dỗ (grooming) hoặc xây dựng lòng tin không phù hợp với trẻ vị thành niên", + "report_flow.label.minor_in_adult_space": "Trẻ vị thành niên đang ở trong kênh hoặc cộng đồng 18+", + "report_flow.label.minor_in_adult_space_guild": "Trẻ vị thành niên được phép vào kênh 18+", + "report_flow.label.minor_risk": "Gây nguy hiểm cho trẻ vị thành niên", + "report_flow.label.minor_risk_guild": "Gây nguy hiểm cho trẻ vị thành niên", + "report_flow.label.minor_sexual": "Tình dục hóa trẻ vị thành niên", + "report_flow.label.minor_sexual_contact": "Tán tỉnh hoặc nhắn tin tình dục với trẻ vị thành niên", + "report_flow.label.minor_sexual_contact_guild": "Các thành viên tán tỉnh hoặc nhắn tin tình dục với trẻ vị thành niên", + "report_flow.label.minor_sexual_content": "Trẻ vị thành niên tự chia sẻ nội dung tình dục", + "report_flow.label.minor_sexual_content_guild": "Trẻ vị thành niên đăng hoặc gửi nội dung tình dục", + "report_flow.label.minor_sexual_content_profile": "Hồ sơ của trẻ vị thành niên có nội dung tình dục", + "report_flow.label.minor_sexual_guild": "Tình dục hóa trẻ vị thành niên", + "report_flow.label.minor_sexualization": "Bình luận tình dục về trẻ vị thành niên", + "report_flow.label.minor_sexualization_guild": "Các thành viên đưa ra bình luận tình dục về trẻ vị thành niên", + "report_flow.label.minor_sexualization_profile": "Bình luận tình dục về trẻ vị thành niên trong hồ sơ của họ", + "report_flow.label.name": "Tên", + "report_flow.label.other": "Một điều gì đó không được liệt kê ở đây", + "report_flow.label.other_identifying": "Thông tin khác có thể nhận dạng hoặc định vị ai đó", + "report_flow.label.permits_violations": "Nó cho phép vi phạm quy tắc nghiêm trọng", + "report_flow.label.phone": "Số điện thoại", + "report_flow.label.photo": "Ảnh", + "report_flow.label.platform_abuse": "Thu thập dữ liệu trái phép (scraping), tự động hóa hoặc lạm dụng nền tảng theo cách khác", + "report_flow.label.private_conversation": "Tin nhắn riêng tư, ảnh chụp màn hình hoặc bản ghi cuộc gọi", + "report_flow.label.private_info": "Chia sẻ thông tin riêng tư của ai đó", + "report_flow.label.private_info_profile": "Hồ sơ của họ chia sẻ thông tin riêng tư của ai đó", + "report_flow.label.profile_text": "Văn bản trong hồ sơ", + "report_flow.label.raid": "Tổ chức hoặc tham gia một cuộc raid hoặc xúm vào công kích", + "report_flow.label.raid_guild": "Tổ chức các cuộc raid hoặc xúm vào công kích người khác hoặc cộng đồng", + "report_flow.label.rude_language": "Chửi thề hoặc lời lẽ thô lỗ", + "report_flow.label.self_harm": "Ai đó có thể tự làm hại bản thân, hoặc đang khuyến khích tự làm hại bản thân", + "report_flow.label.self_harm_graphic": "Hình ảnh gây sốc về việc tự làm hại bản thân", + "report_flow.label.self_harm_guild": "Các thành viên xúi giục người khác tự làm hại bản thân", + "report_flow.label.self_harm_pressure": "Gây áp lực hoặc thách thức ai đó tự làm hại bản thân", + "report_flow.label.self_harm_pressure_guild": "Gây áp lực hoặc thách thức mọi người tự làm hại bản thân", + "report_flow.label.self_harm_profile": "Hồ sơ của họ cho thấy dấu hiệu tự làm hại bản thân hoặc khuyến khích việc đó", + "report_flow.label.self_harm_promotion": "Khuyến khích tự làm hại bản thân hoặc chia sẻ phương pháp", + "report_flow.label.self_harm_promotion_profile": "Hồ sơ của họ khuyến khích hành vi tự làm hại bản thân", + "report_flow.label.sexual": "Nội dung tình dục", + "report_flow.label.sexual_exploitation": "Bóc lột, ép buộc hoặc buôn người vì mục đích tình dục", + "report_flow.label.sexual_unwanted": "Hình ảnh hoặc tin nhắn tình dục mà tôi không muốn", + "report_flow.label.something_else": "Một điều gì đó khác", + "report_flow.label.spam": "Spam hoặc quảng cáo không mong muốn", + "report_flow.label.spam_bulk": "Gửi spam hoặc quảng cáo hàng loạt", + "report_flow.label.spam_or_manipulation": "Spam hoặc thao túng nền tảng", + "report_flow.label.spam_profile": "Hồ sơ của họ được dùng để gửi spam hoặc quảng cáo", + "report_flow.label.suicide_promotion": "Khuyến khích tự tử hoặc chia sẻ phương pháp", + "report_flow.label.suicide_promotion_profile": "Hồ sơ của họ khuyến khích tự tử", + "report_flow.label.synthetic_media": "Phương tiện truyền thông giả mạo hoặc do AI tạo ra được trình bày như thật", + "report_flow.label.terrorism": "Khủng bố hoặc chủ nghĩa cực đoan bạo lực", + "report_flow.label.terrorism_guild": "Tuyển mộ hoặc cổ xúy khủng bố hoặc chủ nghĩa cực đoan bạo lực", + "report_flow.label.threat": "Đe dọa hoặc kêu gọi bạo lực", + "report_flow.label.threat_to_share": "Họ đang đe dọa chia sẻ nó", + "report_flow.label.too_young": "Họ dưới độ tuổi tối thiểu để sử dụng {product_name}", + "report_flow.label.unwanted_contact": "Theo dõi hoặc liên tục liên hệ với tôi hoặc người khác sau khi bị yêu cầu dừng lại, bị chặn hoặc bị xóa", + "report_flow.label.violence_glorification": "Tôn vinh bạo lực ngoài đời thực", + "report_flow.label.violence_incitement": "Khuyến khích bạo lực hoặc giải thích cách làm hại người khác", + "report_flow.label.violence_misinfo": "Bạo lực, chủ nghĩa cực đoan hoặc thông tin sai lệch có hại", + "report_flow.label.violent_threat": "Nói rằng họ sẽ làm hại ai đó", + "report_flow.label.worried_profile": "Tôi lo lắng về sự an toàn của họ", + "report_flow.label.worried_self_harm": "Tôi lo rằng họ có thể tự làm hại bản thân", + "report_flow.label.worried_suicide": "Tôi lo rằng họ có thể cố gắng tự tử", + "report_flow.notice.need_more_info.body": "Để xem xét điều này, chúng tôi cần một tin nhắn mà họ nói rõ tuổi của mình hoặc cho thấy họ dưới độ tuổi tối thiểu của {product_name}. Thay vào đó, hãy báo cáo tin nhắn đó.", + "report_flow.notice.need_more_info.title": "Chúng tôi chưa thể xử lý", + "report_flow.notice.need_more_info_profile.body": "Để xem xét điều này, chúng tôi cần xem nơi họ nói rõ tuổi của mình hoặc cho thấy họ dưới độ tuổi tối thiểu của {product_name}. Thay vào đó, hãy báo cáo tin nhắn hoặc hồ sơ đó.", + "report_flow.screen.abuse.title": "Nó liên quan đến điều gì?", + "report_flow.screen.abuse_guild.title": "Mọi người trong cộng đồng này đang làm gì?", + "report_flow.screen.age_stated_message.title": "Tin nhắn này có nói rõ tuổi của họ không?", + "report_flow.screen.age_stated_profile.title": "Hồ sơ của họ có ghi rõ tuổi không?", + "report_flow.screen.community_parts.subtitle": "Chọn nhiều mục nếu cần.", + "report_flow.screen.community_parts.title": "Những phần nào của cộng đồng có liên quan?", + "report_flow.screen.crisis_support.subtitle": "Các đường dây nóng khủng hoảng cung cấp hỗ trợ miễn phí, bảo mật.", + "report_flow.screen.crisis_support.title": "Có người có thể giúp ngay bây giờ", + "report_flow.screen.false_info.subtitle": "Ý kiến, châm biếm và tranh luận thiện chí được cho phép. Hành vi phỉ báng bất hợp pháp có thể bị báo cáo theo Đạo luật Dịch vụ Kỹ thuật số.", + "report_flow.screen.false_info.subtitle_self_hosted": "Ý kiến, châm biếm và tranh luận thiện chí được cho phép.", + "report_flow.screen.false_info.title": "Nội dung này gây hiểu lầm như thế nào?", + "report_flow.screen.harassment.title": "Ai đó đang bị nhắm đến bằng cách nào?", + "report_flow.screen.hate.title": "Nó tấn công mọi người vì họ là ai như thế nào?", + "report_flow.screen.impersonation.subtitle": "Hành vi nhại lại hoặc nhập vai được dán nhãn rõ ràng là được phép.", + "report_flow.screen.impersonation.title": "Ai đang bị mạo danh, hay đây là một vụ lừa đảo?", + "report_flow.screen.minor_risk.title": "Người này đang gây nguy hiểm cho trẻ vị thành niên như thế nào?", + "report_flow.screen.minor_risk_guild.title": "Cộng đồng này gây nguy hiểm cho trẻ vị thành niên như thế nào?", + "report_flow.screen.minor_sexual.subtitle": "Nội dung vẽ, viết hoặc AI được tính khi một nhân vật được mô tả là trẻ vị thành niên hoặc rõ ràng là chưa dậy thì, bao gồm lolicon, shotacon và cub.", + "report_flow.screen.minor_sexual.title": "Bạn đã thấy gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.minor_sexual_guild.title": "Bạn đã thấy gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.private_info.subtitle": "Chọn nhiều mục nếu cần. Nếu ảnh nhạy cảm có hình người dưới 18 tuổi, hãy quay lại và báo cáo ảnh đó trong mục “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.private_info.title": "Những chi tiết riêng tư nào có liên quan?", + "report_flow.screen.profile_abuse.title": "Điều gì gây hại về hồ sơ của họ?", + "report_flow.screen.profile_hate_violence.title": "Hồ sơ của họ hiển thị hoặc quảng bá điều gì?", + "report_flow.screen.profile_intro.options_heading": "Tìm hiểu thêm", + "report_flow.screen.profile_intro.subtitle": "Cho chúng tôi biết có gì sai với hồ sơ này. Họ sẽ không biết ai đã báo cáo họ.", + "report_flow.screen.profile_intro.title": "Báo cáo hồ sơ", + "report_flow.screen.profile_minor_sexual.title": "Hồ sơ của họ có gì liên quan đến trẻ vị thành niên?", + "report_flow.screen.profile_parts.subtitle": "Chọn nhiều mục nếu cần.", + "report_flow.screen.profile_parts.title": "Những phần nào trong hồ sơ của họ có vấn đề?", + "report_flow.screen.profile_private_info.title": "Những chi tiết riêng tư nào có trong hồ sơ của họ?", + "report_flow.screen.profile_sexual.title": "Hãy cho chúng tôi biết về nội dung tình dục trong hồ sơ của họ", + "report_flow.screen.profile_threat.title": "Hồ sơ của họ liên quan đến bạo lực như thế nào?", + "report_flow.screen.root_guild.subtitle": "Chọn mục khớp nhất với những gì đang diễn ra trong cộng đồng này.", + "report_flow.screen.root_guild.title": "Có vấn đề gì với cộng đồng này?", + "report_flow.screen.root_message.subtitle": "Chọn mục khớp nhất. Bạn có thể xem lại mọi thứ trước khi gửi.", + "report_flow.screen.root_message.title": "Báo cáo tin nhắn", + "report_flow.screen.root_user.subtitle": "Chọn mục khớp nhất với những gì có trong hồ sơ của họ.", + "report_flow.screen.root_user.title": "Có vấn đề gì với hồ sơ của họ?", + "report_flow.screen.self_harm.subtitle": "Không ai bị trừng phạt vì nói rằng họ đang gặp khó khăn. Việc bạn nói với chúng tôi rằng bạn đang lo lắng sẽ giúp chúng tôi hỗ trợ.", + "report_flow.screen.self_harm.title": "Họ đã nói hoặc chia sẻ điều gì?", + "report_flow.screen.self_harm_guild.title": "Các thành viên đang khuyến khích điều gì?", + "report_flow.screen.self_harm_profile.title": "Hồ sơ của họ nói hoặc thể hiện điều gì?", + "report_flow.screen.sexual.subtitle": "Nếu bất kỳ ai xuất hiện hoặc có liên quan dưới 18 tuổi, hãy chọn “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.sexual.title": "Hãy cho chúng tôi biết về nội dung tình dục", + "report_flow.screen.sexual_guild.subtitle": "Nếu bất kỳ ai xuất hiện hoặc có liên quan dưới 18 tuổi, hãy chọn “Tình dục hóa trẻ vị thành niên”.", + "report_flow.screen.sexual_guild.title": "Hãy cho chúng tôi biết về nội dung tình dục trong cộng đồng này", + "report_flow.screen.something_else_guild.title": "Còn điều gì khác đang diễn ra trong cộng đồng này?", + "report_flow.screen.something_else_message.title": "Còn điều gì khác đang diễn ra?", + "report_flow.screen.something_else_user.title": "Còn điều gì khác không ổn với hồ sơ này?", + "report_flow.screen.spam_kind_guild.title": "Cộng đồng này đang lạm dụng nền tảng như thế nào?", + "report_flow.screen.spam_profile.title": "Tài khoản đang bị lạm dụng như thế nào?", + "report_flow.screen.threat.title": "Nó liên quan đến bạo lực như thế nào?", + "report_flow.screen.violence_misinfo.title": "Mục nào trong số này khớp với trường hợp này?", + "report_flow.screen.violence_misinfo_guild.title": "Điều nào trong số này xảy ra trong cộng đồng này?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/zh-CN.json b/fluxer_api/src/api/content_i18n/weblate/locales/zh-CN.json index 0d5048c36..a6eab50ec 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/zh-CN.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/zh-CN.json @@ -14,5 +14,202 @@ "guild.default_category_text": "文字频道", "guild.default_category_voice": "语音频道", "guild.default_channel_text": "综合", - "guild.default_channel_voice": "综合" + "guild.default_channel_voice": "综合", + "report_flow.description.name": "用户名、显示名称或社区昵称", + "report_flow.description.photo": "他们用作头像和横幅的图片", + "report_flow.description.profile_text": "个人简介、自定义状态或代词", + "report_flow.label.abuse": "辱骂性或有害的内容", + "report_flow.label.account_trading": "出售账号,或被盗的登录信息或银行卡信息", + "report_flow.label.account_trading_communities": "买卖账号或社区", + "report_flow.label.address": "家庭住址或工作地点", + "report_flow.label.adult_content_no_gate": "未设置 18+ 年龄限制的成人内容", + "report_flow.label.adult_content_profile": "个人资料中的露骨成人内容", + "report_flow.label.adult_content_unmarked": "社区频道中未标记为 18+ 的成人内容", + "report_flow.label.age_no_message": "否,消息中没有提及", + "report_flow.label.age_no_profile": "否,个人资料中没有提及", + "report_flow.label.age_yes_message": "是,消息中提到了他们的年龄", + "report_flow.label.age_yes_profile": "是,其个人资料提到了他们的年龄", + "report_flow.label.atrocity_denial": "否认或美化犹太人大屠杀或其他种族灭绝", + "report_flow.label.ban_evasion": "使用其他账号规避封禁", + "report_flow.label.channel_names": "频道名称", + "report_flow.label.community_banner": "社区横幅", + "report_flow.label.community_icon": "社区图标", + "report_flow.label.community_name": "社区名称", + "report_flow.label.conversion_therapy": "宣传转化疗法", + "report_flow.label.copyright": "版权或商标投诉", + "report_flow.label.crisis_lines": "你所在国家或地区的危机热线", + "report_flow.label.csam": "真实或 AI 生成的儿童性虐待图像或视频", + "report_flow.label.discovery_listing": "社区发现列表", + "report_flow.label.dislike": "我就是不喜欢", + "report_flow.label.dsa": "在欧盟属违法的内容(《数字服务法》)", + "report_flow.label.eating_disorder_promotion": "鼓励进食障碍行为", + "report_flow.label.eating_disorder_promotion_profile": "其个人资料宣传进食障碍", + "report_flow.label.email": "电子邮件地址", + "report_flow.label.emoji_stickers": "自定义表情或贴纸", + "report_flow.label.face_photo": "他们的脸部照片", + "report_flow.label.fake_account": "虚假账号、机器人或自动化滥用", + "report_flow.label.fake_account_profile": "虚假或欺骗性账号", + "report_flow.label.false_claims": "散布谎言以损害特定个人的声誉", + "report_flow.label.false_info": "散布有害的虚假信息", + "report_flow.label.financial": "银行卡、银行账户或其他财务信息", + "report_flow.label.fraud": "他们试图骗取他人的钱财或账号", + "report_flow.label.fraud_guild": "骗取他人的钱财或账号", + "report_flow.label.government_id": "身份证件或证件号码", + "report_flow.label.graphic_violence": "真实的暴力场面,旨在造成冲击,例如血腥或虐待动物", + "report_flow.label.harassment": "欺凌、骚扰或跟踪", + "report_flow.label.harassment_direct": "反复用侮辱或辱骂的言行针对某人", + "report_flow.label.harassment_guild": "骚扰、欺凌或跟踪他人", + "report_flow.label.harassment_profile": "其个人资料骚扰或针对我或其他人", + "report_flow.label.harmful_false_claims": "可能造成严重现实伤害的虚假声明", + "report_flow.label.hate": "因身份而针对他人的仇恨或歧视", + "report_flow.label.hate_dehumanizing": "将人比作动物、疾病或污秽,或称其不算是人", + "report_flow.label.hate_incitement": "煽动对某个群体的暴力或排斥", + "report_flow.label.hate_other": "其他基于身份的攻击", + "report_flow.label.hate_slurs": "侮辱性词语、仇恨符号或贬低性刻板印象", + "report_flow.label.hate_violence": "仇恨、暴力或极端主义", + "report_flow.label.identity": "性取向、性别认同或间性人身份", + "report_flow.label.illegal_activity": "其他违法活动", + "report_flow.label.illegal_goods": "销售毒品、武器或其他违法物品", + "report_flow.label.impersonation": "冒充他人或诈骗他人", + "report_flow.label.impersonation_guild": "冒充 {product_name} 或其他组织", + "report_flow.label.impersonation_organization": "公司、品牌或团体", + "report_flow.label.impersonation_person": "我或我身边的人", + "report_flow.label.impersonation_public_figure": "知名人士,如创作者或政治家", + "report_flow.label.impersonation_staff": "{product_name} 员工或客服", + "report_flow.label.intimate_image_abuse": "未经同意分享私密图片,包括深度伪造,或威胁分享这些图片", + "report_flow.label.intimate_image_abuse_guild": "未经同意分享私密图片,包括深度伪造", + "report_flow.label.intimate_image_abuse_profile": "未经同意分享某人的私密图片,包括深度伪造", + "report_flow.label.intimate_photo": "私密或裸露的照片", + "report_flow.label.invite_splash": "邀请背景图", + "report_flow.label.ip_address": "IP 地址", + "report_flow.label.learn_more": "阅读 {product_name} 社区准则", + "report_flow.label.legal_name": "真实姓名或法定姓名", + "report_flow.label.lgbtq_targeting": "故意错称性别、使用曾用名称呼,或未经本人同意公开其性取向或性别身份,或否认其身份", + "report_flow.label.malware_guild": "分发恶意软件或网络钓鱼链接", + "report_flow.label.malware_phishing": "网络钓鱼、恶意软件或黑客攻击", + "report_flow.label.member_activity": "成员在那里发布或做的事", + "report_flow.label.metric_manipulation": "伪造成员数量或表情回应数量", + "report_flow.label.minor_contact": "以看似意图诱骗或侵害的方式要求未成年人见面,或索要其照片或个人信息", + "report_flow.label.minor_dating_community": "这是一个供未成年人之间约会的社区", + "report_flow.label.minor_fictional": "绘制、撰写或 AI 生成的涉及虚构儿童的性内容", + "report_flow.label.minor_grooming": "诱骗未成年人,或与未成年人建立不当信任", + "report_flow.label.minor_grooming_guild": "成员诱骗未成年人,或与未成年人建立不当信任", + "report_flow.label.minor_in_adult_space": "未成年人在 18+ 频道或社区中", + "report_flow.label.minor_in_adult_space_guild": "未成年人被允许进入 18+ 频道", + "report_flow.label.minor_risk": "使未成年人处于危险之中", + "report_flow.label.minor_risk_guild": "使未成年人处于危险之中", + "report_flow.label.minor_sexual": "性化未成年人", + "report_flow.label.minor_sexual_contact": "与未成年人调情,或向其发送带性意味的消息", + "report_flow.label.minor_sexual_contact_guild": "成员与未成年人调情,或向其发送带性意味的消息", + "report_flow.label.minor_sexual_content": "未成年人自己分享性内容", + "report_flow.label.minor_sexual_content_guild": "未成年人发布或发送性内容", + "report_flow.label.minor_sexual_content_profile": "未成年人的个人资料中含有性内容", + "report_flow.label.minor_sexual_guild": "性化未成年人", + "report_flow.label.minor_sexualization": "对未成年人发表带性意味的评论", + "report_flow.label.minor_sexualization_guild": "成员对未成年人发表带性意味的评论", + "report_flow.label.minor_sexualization_profile": "个人资料中有对未成年人发表的带性意味的评论", + "report_flow.label.name": "名称", + "report_flow.label.other": "此处未列出的内容", + "report_flow.label.other_identifying": "可能识别或定位某人的信息", + "report_flow.label.permits_violations": "允许严重违反规则的行为", + "report_flow.label.phone": "电话号码", + "report_flow.label.photo": "图片", + "report_flow.label.platform_abuse": "抓取、自动化或其他平台滥用", + "report_flow.label.private_conversation": "私密消息、屏幕截图或通话录音", + "report_flow.label.private_info": "泄露他人的私人信息", + "report_flow.label.private_info_profile": "其个人资料泄露了他人的私人信息", + "report_flow.label.profile_text": "个人资料文字", + "report_flow.label.raid": "组织或参与突袭或围攻", + "report_flow.label.raid_guild": "组织针对个人或社区的突袭或围攻", + "report_flow.label.rude_language": "说脏话或粗鲁言论", + "report_flow.label.self_harm": "有人可能伤害自己,或在鼓励自残", + "report_flow.label.self_harm_graphic": "血腥的自残图片", + "report_flow.label.self_harm_guild": "成员怂恿他人伤害自己", + "report_flow.label.self_harm_pressure": "逼迫他人自残,或以挑战的形式怂恿他人自残", + "report_flow.label.self_harm_pressure_guild": "逼迫他人自残,或以挑战的形式怂恿他人自残", + "report_flow.label.self_harm_profile": "他们的个人资料暗示自残或鼓励自残", + "report_flow.label.self_harm_promotion": "鼓励自残或分享方法", + "report_flow.label.self_harm_promotion_profile": "其个人资料鼓励自残", + "report_flow.label.sexual": "性内容", + "report_flow.label.sexual_exploitation": "性剥削、胁迫或人口贩运", + "report_flow.label.sexual_unwanted": "我不想要的带有性内容的图片或消息", + "report_flow.label.something_else": "其他", + "report_flow.label.spam": "垃圾信息或不请自来的广告", + "report_flow.label.spam_bulk": "批量发送垃圾信息或广告", + "report_flow.label.spam_or_manipulation": "垃圾信息或平台操控", + "report_flow.label.spam_profile": "其个人资料用于发送垃圾信息或广告", + "report_flow.label.suicide_promotion": "鼓励自杀或分享方法", + "report_flow.label.suicide_promotion_profile": "其个人资料鼓励自杀", + "report_flow.label.synthetic_media": "冒充真实内容的虚假或 AI 生成媒体", + "report_flow.label.terrorism": "恐怖主义或暴力极端主义", + "report_flow.label.terrorism_guild": "招募或宣扬恐怖主义或暴力极端主义", + "report_flow.label.threat": "威胁或煽动暴力", + "report_flow.label.threat_to_share": "他们威胁要分享", + "report_flow.label.too_young": "他们未满 {product_name} 的最低使用年龄", + "report_flow.label.unwanted_contact": "在被要求停止、被屏蔽或被移除后,仍跟踪或反复联系我或他人", + "report_flow.label.violence_glorification": "美化现实暴力", + "report_flow.label.violence_incitement": "鼓励暴力或讲解如何伤害他人", + "report_flow.label.violence_misinfo": "暴力、极端主义或有害的虚假信息", + "report_flow.label.violent_threat": "扬言要伤害某人", + "report_flow.label.worried_profile": "我担心他们的安全", + "report_flow.label.worried_self_harm": "我担心他们会伤害自己", + "report_flow.label.worried_suicide": "我担心他们会尝试自杀", + "report_flow.notice.need_more_info.body": "为了审核此内容,我们需要一条他们说明自己年龄,或明确表示未满 {product_name} 的最低使用年龄的消息。请改为举报该消息。", + "report_flow.notice.need_more_info.title": "暂时无法处理", + "report_flow.notice.need_more_info_profile.body": "为了审核此内容,我们需要看到他们说明自己年龄,或明确表示未满 {product_name} 的最低使用年龄的位置。请改为举报该消息或个人资料。", + "report_flow.screen.abuse.title": "涉及什么?", + "report_flow.screen.abuse_guild.title": "这个社区的成员在做什么?", + "report_flow.screen.age_stated_message.title": "这条消息是否说明了他们的年龄?", + "report_flow.screen.age_stated_profile.title": "他们的个人资料中说明了他们的年龄吗?", + "report_flow.screen.community_parts.subtitle": "按需选择,可多选。", + "report_flow.screen.community_parts.title": "涉及社区的哪些部分?", + "report_flow.screen.crisis_support.subtitle": "危机热线提供免费、保密的帮助。", + "report_flow.screen.crisis_support.title": "现在就有人能帮助你", + "report_flow.screen.false_info.subtitle": "允许发表意见、讽刺和善意辩论。违法诽谤可根据《数字服务法》举报。", + "report_flow.screen.false_info.subtitle_self_hosted": "允许发表意见、讽刺和善意辩论。", + "report_flow.screen.false_info.title": "它有什么误导性?", + "report_flow.screen.harassment.title": "有人是如何被针对的?", + "report_flow.screen.hate.title": "它如何基于身份攻击他人?", + "report_flow.screen.impersonation.subtitle": "明确标注的恶搞或角色扮演是允许的。", + "report_flow.screen.impersonation.title": "谁被冒充了,或者这是个骗局?", + "report_flow.screen.minor_risk.title": "此人如何让未成年人面临风险?", + "report_flow.screen.minor_risk_guild.title": "此社区如何让未成年人面临风险?", + "report_flow.screen.minor_sexual.subtitle": "当角色被描述为未成年人或明显处于青春期前时,绘制、书写或 AI 生成的内容同样适用,包括 lolicon、shotacon 和 cub。", + "report_flow.screen.minor_sexual.title": "你看到了什么涉及未成年人的内容?", + "report_flow.screen.minor_sexual_guild.title": "你看到了什么涉及未成年人的内容?", + "report_flow.screen.private_info.subtitle": "按需选择,可多选。如果私密照片中的人未满 18 岁,请返回并在“性化未成年人”下举报。", + "report_flow.screen.private_info.title": "涉及哪些私人信息?", + "report_flow.screen.profile_abuse.title": "他们的个人资料有什么有害之处?", + "report_flow.screen.profile_hate_violence.title": "他们的个人资料显示或宣传了什么?", + "report_flow.screen.profile_intro.options_heading": "了解详情", + "report_flow.screen.profile_intro.subtitle": "告诉我们这个个人资料有什么问题。对方不会知道是谁举报的。", + "report_flow.screen.profile_intro.title": "举报个人资料", + "report_flow.screen.profile_minor_sexual.title": "他们的个人资料中有哪些涉及未成年人的内容?", + "report_flow.screen.profile_parts.subtitle": "按需选择,可多选。", + "report_flow.screen.profile_parts.title": "他们的个人资料中有哪些部分有问题?", + "report_flow.screen.profile_private_info.title": "他们的个人资料中有哪些私人信息?", + "report_flow.screen.profile_sexual.title": "请说明其个人资料中的性内容", + "report_flow.screen.profile_threat.title": "其个人资料如何涉及暴力?", + "report_flow.screen.root_guild.subtitle": "请选择最能描述此社区情况的选项。", + "report_flow.screen.root_guild.title": "此社区有什么问题?", + "report_flow.screen.root_message.subtitle": "请选择最接近的选项。发送前你可以检查所有内容。", + "report_flow.screen.root_message.title": "举报消息", + "report_flow.screen.root_user.subtitle": "请选择最能描述其个人资料内容的选项。", + "report_flow.screen.root_user.title": "其个人资料有什么问题?", + "report_flow.screen.self_harm.subtitle": "没有人会因为说自己状态不好而受到惩罚。告诉我们你的担忧,有助于我们提供支持。", + "report_flow.screen.self_harm.title": "他们说了或分享了什么?", + "report_flow.screen.self_harm_guild.title": "成员在鼓励什么?", + "report_flow.screen.self_harm_profile.title": "其个人资料说了或展示了什么?", + "report_flow.screen.sexual.subtitle": "如果所示或涉及的任何人未满 18 岁,请选择“性化未成年人”。", + "report_flow.screen.sexual.title": "请说明性内容", + "report_flow.screen.sexual_guild.subtitle": "如果所示或涉及的任何人未满 18 岁,请选择“性化未成年人”。", + "report_flow.screen.sexual_guild.title": "请说明此社区中的性内容", + "report_flow.screen.something_else_guild.title": "此社区还有其他什么情况?", + "report_flow.screen.something_else_message.title": "还有什么情况?", + "report_flow.screen.something_else_user.title": "此个人资料还有什么问题?", + "report_flow.screen.spam_kind_guild.title": "此社区如何滥用平台?", + "report_flow.screen.spam_profile.title": "该账号被如何滥用?", + "report_flow.screen.threat.title": "它如何涉及暴力?", + "report_flow.screen.violence_misinfo.title": "以下哪项符合?", + "report_flow.screen.violence_misinfo_guild.title": "此社区中发生了以下哪种情况?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/locales/zh-TW.json b/fluxer_api/src/api/content_i18n/weblate/locales/zh-TW.json index 1e7d02313..3d28605c7 100644 --- a/fluxer_api/src/api/content_i18n/weblate/locales/zh-TW.json +++ b/fluxer_api/src/api/content_i18n/weblate/locales/zh-TW.json @@ -14,5 +14,202 @@ "guild.default_category_text": "文字頻道", "guild.default_category_voice": "語音頻道", "guild.default_channel_text": "一般", - "guild.default_channel_voice": "一般" + "guild.default_channel_voice": "一般", + "report_flow.description.name": "使用者名稱、顯示名稱或社群暱稱", + "report_flow.description.photo": "他們使用的大頭貼和橫幅", + "report_flow.description.profile_text": "個人簡介、自訂狀態或代名詞", + "report_flow.label.abuse": "辱罵性或有害的內容", + "report_flow.label.account_trading": "販售帳號,或被盜的登入資訊或卡片資料", + "report_flow.label.account_trading_communities": "買賣帳號或社群", + "report_flow.label.address": "住家地址或工作地點", + "report_flow.label.adult_content_no_gate": "未設 18 歲以上年齡限制的成人內容", + "report_flow.label.adult_content_profile": "個人檔案中的露骨成人內容", + "report_flow.label.adult_content_unmarked": "社群頻道中未標示為 18 歲以上的成人內容", + "report_flow.label.age_no_message": "否,沒有提到", + "report_flow.label.age_no_profile": "否,沒有提到", + "report_flow.label.age_yes_message": "是,有提到他們的年齡", + "report_flow.label.age_yes_profile": "是,他們的個人檔案中有提到年齡", + "report_flow.label.atrocity_denial": "否認或慶祝猶太人大屠殺或其他種族滅絕", + "report_flow.label.ban_evasion": "使用其他帳號規避停權", + "report_flow.label.channel_names": "頻道名稱", + "report_flow.label.community_banner": "社群橫幅", + "report_flow.label.community_icon": "社群圖示", + "report_flow.label.community_name": "社群名稱", + "report_flow.label.conversion_therapy": "宣傳性傾向矯正治療", + "report_flow.label.copyright": "著作權或商標投訴", + "report_flow.label.crisis_lines": "您所在國家/地區的危機專線", + "report_flow.label.csam": "兒童性虐待的真實或 AI 生成圖片或影片", + "report_flow.label.discovery_listing": "探索列表", + "report_flow.label.dislike": "對我來說不太適合", + "report_flow.label.dsa": "在歐盟屬違法的內容(《數位服務法》)", + "report_flow.label.eating_disorder_promotion": "鼓勵飲食失調", + "report_flow.label.eating_disorder_promotion_profile": "他們的個人檔案宣傳飲食失調", + "report_flow.label.email": "電子郵件地址", + "report_flow.label.emoji_stickers": "自訂表情符號或貼圖", + "report_flow.label.face_photo": "他們的臉部照片", + "report_flow.label.fake_account": "假帳號、機器人或自動化濫用", + "report_flow.label.fake_account_profile": "虛假或具欺騙性的帳號", + "report_flow.label.false_claims": "散佈謊言以損害特定人士的名譽", + "report_flow.label.false_info": "散佈有害的虛假資訊", + "report_flow.label.financial": "卡片、銀行或其他財務詳細資料", + "report_flow.label.fraud": "他們試圖詐騙人們的錢財或帳號", + "report_flow.label.fraud_guild": "騙取他人的金錢或帳號", + "report_flow.label.government_id": "身分證明文件或身分證號碼", + "report_flow.label.graphic_violence": "顯示真實暴力以造成震驚,例如血腥畫面或虐待動物", + "report_flow.label.harassment": "霸凌、騷擾或跟蹤", + "report_flow.label.harassment_direct": "不斷針對某人進行辱罵或言語攻擊", + "report_flow.label.harassment_guild": "騷擾、霸凌或跟蹤他人", + "report_flow.label.harassment_profile": "他們的個人檔案騷擾或針對我或其他人", + "report_flow.label.harmful_false_claims": "可能造成嚴重現實傷害的虛假聲明", + "report_flow.label.hate": "針對他人身分的仇恨或歧視", + "report_flow.label.hate_dehumanizing": "將人比作動物、疾病或污穢,或稱其為非人類", + "report_flow.label.hate_incitement": "煽動對某群體的暴力或排斥", + "report_flow.label.hate_other": "其他針對他人身分的攻擊", + "report_flow.label.hate_slurs": "歧視性辱稱、仇恨符號或貶低性刻板印象", + "report_flow.label.hate_violence": "仇恨、暴力或極端主義", + "report_flow.label.identity": "性傾向、性別認同或雙性人狀態", + "report_flow.label.illegal_activity": "其他非法活動", + "report_flow.label.illegal_goods": "毒品、武器或其他非法商品販售", + "report_flow.label.impersonation": "冒充他人或詐騙他人", + "report_flow.label.impersonation_guild": "冒充 {product_name} 或其他組織", + "report_flow.label.impersonation_organization": "一家公司、品牌或團體", + "report_flow.label.impersonation_person": "我或我親近的人", + "report_flow.label.impersonation_public_figure": "知名人士,例如創作者或政治人物", + "report_flow.label.impersonation_staff": "{product_name} 員工或客服", + "report_flow.label.intimate_image_abuse": "未經同意分享私密影像(包括深偽 deepfake 影像),或威脅分享這些影像", + "report_flow.label.intimate_image_abuse_guild": "未經同意分享私密影像(包括深偽 deepfake 影像)", + "report_flow.label.intimate_image_abuse_profile": "未經同意分享某人的私密影像(包括深偽 deepfake 影像)", + "report_flow.label.intimate_photo": "私密或裸露照片", + "report_flow.label.invite_splash": "邀請背景圖", + "report_flow.label.ip_address": "IP 位址", + "report_flow.label.learn_more": "閱讀 {product_name} 社群指南", + "report_flow.label.legal_name": "真實姓名或法定姓名", + "report_flow.label.lgbtq_targeting": "故意錯稱性別、使用舊名或揭露他人性向,或否認他人的身分", + "report_flow.label.malware_guild": "散佈惡意軟體或網路釣魚連結", + "report_flow.label.malware_phishing": "網路釣魚、惡意軟體或駭客攻擊", + "report_flow.label.member_activity": "成員在其中發布的內容或所做的事", + "report_flow.label.metric_manipulation": "造假成員人數或反應數量", + "report_flow.label.minor_contact": "以看似意圖不軌的方式,要求未成年人見面,或索取照片或個人資料", + "report_flow.label.minor_dating_community": "這是供未成年人彼此約會的社群", + "report_flow.label.minor_fictional": "虛構兒童的繪畫、文字或 AI 生成的性內容", + "report_flow.label.minor_grooming": "對未成年人進行誘騙(grooming),或與其建立不當信任關係", + "report_flow.label.minor_grooming_guild": "成員對未成年人進行誘騙(grooming),或與其建立不當信任關係", + "report_flow.label.minor_in_adult_space": "未成年人在 18 歲以上頻道或社群中", + "report_flow.label.minor_in_adult_space_guild": "允許未成年人進入 18+ 頻道", + "report_flow.label.minor_risk": "讓未成年人身陷險境", + "report_flow.label.minor_risk_guild": "讓未成年人身陷險境", + "report_flow.label.minor_sexual": "性化未成年人", + "report_flow.label.minor_sexual_contact": "與未成年人調情,或向其傳送性相關訊息", + "report_flow.label.minor_sexual_contact_guild": "成員與未成年人調情,或向其傳送性相關訊息", + "report_flow.label.minor_sexual_content": "未成年人自行分享性內容", + "report_flow.label.minor_sexual_content_guild": "未成年人發布或傳送性內容", + "report_flow.label.minor_sexual_content_profile": "未成年人的個人檔案含有性內容", + "report_flow.label.minor_sexual_guild": "性化未成年人", + "report_flow.label.minor_sexualization": "關於未成年人的性相關言論", + "report_flow.label.minor_sexualization_guild": "成員發表關於未成年人的性相關言論", + "report_flow.label.minor_sexualization_profile": "個人檔案中有關於未成年人的性相關言論", + "report_flow.label.name": "名稱", + "report_flow.label.other": "此處未列出的內容", + "report_flow.label.other_identifying": "其他可能識別或定位某人的資訊", + "report_flow.label.permits_violations": "它容許嚴重違反規則的行為", + "report_flow.label.phone": "電話號碼", + "report_flow.label.photo": "圖片", + "report_flow.label.platform_abuse": "資料爬取、自動化操作或其他濫用平台的行為", + "report_flow.label.private_conversation": "私人訊息、螢幕截圖或通話錄音", + "report_flow.label.private_info": "分享他人的個人資訊", + "report_flow.label.private_info_profile": "他們的個人檔案分享了他人的個人資訊", + "report_flow.label.profile_text": "個人檔案文字", + "report_flow.label.raid": "組織或參與突襲或圍攻", + "report_flow.label.raid_guild": "組織針對個人或社群的突襲或圍攻", + "report_flow.label.rude_language": "髒話或無禮言論", + "report_flow.label.self_harm": "有人可能傷害自己,或在鼓勵自殘", + "report_flow.label.self_harm_graphic": "血腥的自殘圖片", + "report_flow.label.self_harm_guild": "成員慫恿他人傷害自己", + "report_flow.label.self_harm_pressure": "逼迫他人傷害自己,或以挑戰的形式慫恿他人傷害自己", + "report_flow.label.self_harm_pressure_guild": "逼迫他人傷害自己,或以挑戰的形式慫恿他人傷害自己", + "report_flow.label.self_harm_profile": "他們的個人檔案暗示或鼓勵自殘", + "report_flow.label.self_harm_promotion": "鼓勵自殘或分享方法", + "report_flow.label.self_harm_promotion_profile": "他們的個人檔案鼓勵自殘", + "report_flow.label.sexual": "性內容", + "report_flow.label.sexual_exploitation": "性剝削、脅迫或人口販運", + "report_flow.label.sexual_unwanted": "我不想收到的性圖片或訊息", + "report_flow.label.something_else": "其他", + "report_flow.label.spam": "垃圾訊息或不想要的廣告", + "report_flow.label.spam_bulk": "大量傳送垃圾訊息或廣告", + "report_flow.label.spam_or_manipulation": "垃圾訊息或平台操控", + "report_flow.label.spam_profile": "他們的個人檔案用於傳送垃圾訊息或廣告", + "report_flow.label.suicide_promotion": "鼓勵自殺或分享方法", + "report_flow.label.suicide_promotion_profile": "他們的個人檔案鼓勵自殺", + "report_flow.label.synthetic_media": "將偽造或 AI 製作的媒體內容呈現為真實內容", + "report_flow.label.terrorism": "恐怖主義或暴力極端主義", + "report_flow.label.terrorism_guild": "招募或宣揚恐怖主義或暴力極端主義", + "report_flow.label.threat": "威脅或煽動暴力", + "report_flow.label.threat_to_share": "他們威脅要分享", + "report_flow.label.too_young": "他們未達使用 {product_name} 的最低年齡", + "report_flow.label.unwanted_contact": "在要求停止、封鎖或移除後,仍跟蹤或重複聯絡我或其他人", + "report_flow.label.violence_glorification": "頌揚現實世界的暴力", + "report_flow.label.violence_incitement": "鼓勵暴力或解釋如何傷害他人", + "report_flow.label.violence_misinfo": "暴力、極端主義或有害的虛假資訊", + "report_flow.label.violent_threat": "揚言要傷害某人", + "report_flow.label.worried_profile": "我擔心他們的安全", + "report_flow.label.worried_self_harm": "我擔心他們可能會傷害自己", + "report_flow.label.worried_suicide": "我擔心他們可能會嘗試自殺", + "report_flow.notice.need_more_info.body": "為了審核,我們需要一則他們說明自己年齡,或明確表示未滿 {product_name} 最低年齡的訊息。請改為檢舉該則訊息。", + "report_flow.notice.need_more_info.title": "目前無法處理", + "report_flow.notice.need_more_info_profile.body": "為了審核,我們需要看到他們在哪裡說明自己的年齡,或明確表示未滿 {product_name} 最低年齡。請改為檢舉該則訊息或個人檔案。", + "report_flow.screen.abuse.title": "涉及哪些內容?", + "report_flow.screen.abuse_guild.title": "這個社群的成員在做什麼?", + "report_flow.screen.age_stated_message.title": "這則訊息有提到他們的年齡嗎?", + "report_flow.screen.age_stated_profile.title": "他們的個人檔案有提到他們的年齡嗎?", + "report_flow.screen.community_parts.subtitle": "請選擇所有適用的項目。", + "report_flow.screen.community_parts.title": "涉及社群的哪些部分?", + "report_flow.screen.crisis_support.subtitle": "危機專線提供免費、保密的支援。", + "report_flow.screen.crisis_support.title": "有人可以立即提供協助", + "report_flow.screen.false_info.subtitle": "意見、諷刺和善意的辯論是允許的。違法誹謗可依《數位服務法》檢舉。", + "report_flow.screen.false_info.subtitle_self_hosted": "意見、諷刺和善意的辯論是允許的。", + "report_flow.screen.false_info.title": "內容哪裡具有誤導性?", + "report_flow.screen.harassment.title": "有人是如何被針對的?", + "report_flow.screen.hate.title": "內容如何針對他人的身分進行攻擊?", + "report_flow.screen.impersonation.subtitle": "明確標示的惡搞或角色扮演是允許的。", + "report_flow.screen.impersonation.title": "是誰被冒充,或這是詐騙?", + "report_flow.screen.minor_risk.title": "此人如何讓未成年人面臨風險?", + "report_flow.screen.minor_risk_guild.title": "此社群如何讓未成年人面臨風險?", + "report_flow.screen.minor_sexual.subtitle": "當角色被描述為未成年人或明顯尚未進入青春期時,繪製、文字或 AI 內容也包含在內,包括 lolicon、shotacon 和 cub。", + "report_flow.screen.minor_sexual.title": "您看到了什麼涉及未成年人的內容?", + "report_flow.screen.minor_sexual_guild.title": "您看到了什麼涉及未成年人的內容?", + "report_flow.screen.private_info.subtitle": "請選擇所有適用的項目。如果私密照片中的人未滿 18 歲,請返回並以「性化未成年人」檢舉。", + "report_flow.screen.private_info.title": "涉及哪些個人資訊?", + "report_flow.screen.profile_abuse.title": "他們的個人檔案有什麼有害之處?", + "report_flow.screen.profile_hate_violence.title": "他們的個人檔案顯示或宣傳了什麼內容?", + "report_flow.screen.profile_intro.options_heading": "瞭解詳情", + "report_flow.screen.profile_intro.subtitle": "請告訴我們這個個人檔案的問題所在。對方不會知道是誰檢舉的。", + "report_flow.screen.profile_intro.title": "檢舉個人檔案", + "report_flow.screen.profile_minor_sexual.title": "他們的個人檔案中,有什麼涉及未成年人?", + "report_flow.screen.profile_parts.subtitle": "請選擇所有適用的項目。", + "report_flow.screen.profile_parts.title": "他們的個人檔案的哪些部分有問題?", + "report_flow.screen.profile_private_info.title": "他們的個人檔案中有哪些個人資訊?", + "report_flow.screen.profile_sexual.title": "告訴我們他們個人檔案中的性內容", + "report_flow.screen.profile_threat.title": "他們的個人檔案如何涉及暴力?", + "report_flow.screen.root_guild.subtitle": "請選擇最符合此社群情況的選項。", + "report_flow.screen.root_guild.title": "這個社群有什麼問題?", + "report_flow.screen.root_message.subtitle": "請選擇最接近的選項。送出檢舉前,您可以檢查所有內容。", + "report_flow.screen.root_message.title": "檢舉訊息", + "report_flow.screen.root_user.subtitle": "請選擇最符合他們個人檔案內容的選項。", + "report_flow.screen.root_user.title": "他們的個人檔案有什麼問題?", + "report_flow.screen.self_harm.subtitle": "沒有人會因為說自己過得很辛苦而受到懲罰。告訴我們您的擔憂,有助於我們提供支援。", + "report_flow.screen.self_harm.title": "他們說了或分享了什麼?", + "report_flow.screen.self_harm_guild.title": "成員們在鼓勵什麼?", + "report_flow.screen.self_harm_profile.title": "他們的個人檔案說了或顯示了什麼?", + "report_flow.screen.sexual.subtitle": "如果顯示或涉及的任何人未滿 18 歲,請選擇「性化未成年人」。", + "report_flow.screen.sexual.title": "告訴我們性內容的相關資訊", + "report_flow.screen.sexual_guild.subtitle": "如果顯示或涉及的任何人未滿 18 歲,請選擇「性化未成年人」。", + "report_flow.screen.sexual_guild.title": "告訴我們這個社群中的性內容", + "report_flow.screen.something_else_guild.title": "這個社群還有什麼其他情況?", + "report_flow.screen.something_else_message.title": "還有什麼其他情況?", + "report_flow.screen.something_else_user.title": "這個個人檔案還有什麼其他問題?", + "report_flow.screen.spam_kind_guild.title": "這個社群如何濫用平台?", + "report_flow.screen.spam_profile.title": "該帳號如何被濫用?", + "report_flow.screen.threat.title": "它如何涉及暴力?", + "report_flow.screen.violence_misinfo.title": "哪一個最符合?", + "report_flow.screen.violence_misinfo_guild.title": "社群中發生了哪種情況?" } diff --git a/fluxer_api/src/api/content_i18n/weblate/messages.json b/fluxer_api/src/api/content_i18n/weblate/messages.json index 332fccf79..378fdcce6 100644 --- a/fluxer_api/src/api/content_i18n/weblate/messages.json +++ b/fluxer_api/src/api/content_i18n/weblate/messages.json @@ -14,5 +14,202 @@ "guild.default_category_text": "Text channels", "guild.default_category_voice": "Voice channels", "guild.default_channel_text": "general", - "guild.default_channel_voice": "General" + "guild.default_channel_voice": "General", + "report_flow.description.name": "Username, display name or community nickname", + "report_flow.description.photo": "What they use as avatar and banner", + "report_flow.description.profile_text": "Bio, custom status or pronouns", + "report_flow.label.abuse": "Abusive or harmful content", + "report_flow.label.account_trading": "Selling accounts, or stolen logins or card details", + "report_flow.label.account_trading_communities": "Buying or selling accounts or communities", + "report_flow.label.address": "Home address or workplace", + "report_flow.label.adult_content_no_gate": "Adult content without an 18+ age restriction", + "report_flow.label.adult_content_profile": "Explicit adult content in their profile", + "report_flow.label.adult_content_unmarked": "Adult content in a community channel that isn't marked 18+", + "report_flow.label.age_no_message": "No, it doesn't mention it", + "report_flow.label.age_no_profile": "No, it doesn't mention it", + "report_flow.label.age_yes_message": "Yes, it mentions their age", + "report_flow.label.age_yes_profile": "Yes, their profile mentions their age", + "report_flow.label.atrocity_denial": "Denying or celebrating the Holocaust or other genocides", + "report_flow.label.ban_evasion": "Getting around a ban with another account", + "report_flow.label.channel_names": "Channel names", + "report_flow.label.community_banner": "Community banner", + "report_flow.label.community_icon": "Community icon", + "report_flow.label.community_name": "Community name", + "report_flow.label.conversion_therapy": "Promoting conversion therapy", + "report_flow.label.copyright": "Copyright or trademark complaint", + "report_flow.label.crisis_lines": "Crisis lines in your country", + "report_flow.label.csam": "Real or AI-generated images or videos of child sexual abuse", + "report_flow.label.discovery_listing": "Discovery listing", + "report_flow.label.dislike": "It's just not for me", + "report_flow.label.dsa": "Content that's illegal in the EU (Digital Services Act)", + "report_flow.label.eating_disorder_promotion": "Encouraging disordered eating", + "report_flow.label.eating_disorder_promotion_profile": "Their profile promotes eating disorders", + "report_flow.label.email": "Email address", + "report_flow.label.emoji_stickers": "Custom emoji or stickers", + "report_flow.label.face_photo": "Photo of their face", + "report_flow.label.fake_account": "Fake account, bot or automated abuse", + "report_flow.label.fake_account_profile": "A fake or deceptive account", + "report_flow.label.false_claims": "Spreading lies to hurt a specific person's reputation", + "report_flow.label.false_info": "Spreading harmful false information", + "report_flow.label.financial": "Card, bank or other financial details", + "report_flow.label.fraud": "They are trying to con people out of money or accounts", + "report_flow.label.fraud_guild": "Conning people out of money or accounts", + "report_flow.label.government_id": "ID document or ID number", + "report_flow.label.graphic_violence": "Real violence shown to shock, like gore or animal cruelty", + "report_flow.label.harassment": "Bullying, harassment or stalking", + "report_flow.label.harassment_direct": "Repeatedly targeting someone with insults or abuse", + "report_flow.label.harassment_guild": "Harassing, bullying or stalking people", + "report_flow.label.harassment_profile": "Their profile harasses or targets me or someone else", + "report_flow.label.harmful_false_claims": "False claims that could cause serious real-world harm", + "report_flow.label.hate": "Hate or discrimination against people for who they are", + "report_flow.label.hate_dehumanizing": "Comparing people to animals, disease or filth, or calling them less than human", + "report_flow.label.hate_incitement": "Calls for violence or exclusion against a group", + "report_flow.label.hate_other": "Other attacks on people for who they are", + "report_flow.label.hate_slurs": "Slurs, hateful symbols or demeaning stereotypes", + "report_flow.label.hate_violence": "Hate, violence or extremism", + "report_flow.label.identity": "Sexual orientation, gender identity or intersex status", + "report_flow.label.illegal_activity": "Other illegal activity", + "report_flow.label.illegal_goods": "Drug, weapon or other illegal sales", + "report_flow.label.impersonation": "Pretending to be someone, or scamming people", + "report_flow.label.impersonation_guild": "Pretending to be {product_name} or another organization", + "report_flow.label.impersonation_organization": "A company, brand or group", + "report_flow.label.impersonation_person": "Me or someone close to me", + "report_flow.label.impersonation_public_figure": "A well-known person, like a creator or politician", + "report_flow.label.impersonation_staff": "{product_name} staff or support", + "report_flow.label.intimate_image_abuse": "Intimate images shared without consent, including deepfakes, or a threat to share them", + "report_flow.label.intimate_image_abuse_guild": "Sharing intimate images without consent, including deepfakes", + "report_flow.label.intimate_image_abuse_profile": "Intimate images of someone shared without consent, including deepfakes", + "report_flow.label.intimate_photo": "Intimate or nude photo", + "report_flow.label.invite_splash": "Invite splash", + "report_flow.label.ip_address": "IP address", + "report_flow.label.learn_more": "Read the {product_name} Community Guidelines", + "report_flow.label.legal_name": "Real or legal name", + "report_flow.label.lgbtq_targeting": "Deliberately misgendering, deadnaming or outing someone, or denying their identity", + "report_flow.label.malware_guild": "Distributing malware or phishing links", + "report_flow.label.malware_phishing": "Phishing, malware or hacking attempts", + "report_flow.label.member_activity": "What members post or do there", + "report_flow.label.metric_manipulation": "Faking member or reaction counts", + "report_flow.label.minor_contact": "Asking a minor to meet up, or for photos or personal details, in a way that seems predatory", + "report_flow.label.minor_dating_community": "It is a community for dating between minors", + "report_flow.label.minor_fictional": "Drawn, written or AI-generated sexual content of a fictional child", + "report_flow.label.minor_grooming": "Grooming or building inappropriate trust with a minor", + "report_flow.label.minor_grooming_guild": "Members groom or build inappropriate trust with minors", + "report_flow.label.minor_in_adult_space": "A minor is in an 18+ channel or community", + "report_flow.label.minor_in_adult_space_guild": "Minors are allowed in 18+ channels", + "report_flow.label.minor_risk": "Putting a minor at risk", + "report_flow.label.minor_risk_guild": "Putting minors at risk", + "report_flow.label.minor_sexual": "Sexualizing a minor", + "report_flow.label.minor_sexual_contact": "Flirting with a minor or messaging them sexually", + "report_flow.label.minor_sexual_contact_guild": "Members flirt with minors or message them sexually", + "report_flow.label.minor_sexual_content": "A minor is sharing sexual content themselves", + "report_flow.label.minor_sexual_content_guild": "Minors post or send sexual content", + "report_flow.label.minor_sexual_content_profile": "A minor's profile with sexual content", + "report_flow.label.minor_sexual_guild": "Sexualizing minors", + "report_flow.label.minor_sexualization": "Sexual comments about minors", + "report_flow.label.minor_sexualization_guild": "Members make sexual comments about minors", + "report_flow.label.minor_sexualization_profile": "Sexual comments about minors in their profile", + "report_flow.label.name": "Names", + "report_flow.label.other": "Something not listed here", + "report_flow.label.other_identifying": "Other information that could identify or locate someone", + "report_flow.label.permits_violations": "It allows serious rule-breaking", + "report_flow.label.phone": "Phone number", + "report_flow.label.photo": "Pictures", + "report_flow.label.platform_abuse": "Scraping, automation or other platform abuse", + "report_flow.label.private_conversation": "Private messages, screenshots or call recordings", + "report_flow.label.private_info": "Sharing someone's private details", + "report_flow.label.private_info_profile": "Their profile shares someone's private details", + "report_flow.label.profile_text": "Profile text", + "report_flow.label.raid": "Organizing or joining a raid or pile-on", + "report_flow.label.raid_guild": "Organizing raids or pile-ons against people or communities", + "report_flow.label.rude_language": "Swearing or rude remarks", + "report_flow.label.self_harm": "Someone might hurt themselves, or is encouraging self-harm", + "report_flow.label.self_harm_graphic": "Graphic images of self-harm", + "report_flow.label.self_harm_guild": "Members push others to hurt themselves", + "report_flow.label.self_harm_pressure": "Pressuring or challenging someone to hurt themselves", + "report_flow.label.self_harm_pressure_guild": "Pressuring or challenging people to hurt themselves", + "report_flow.label.self_harm_profile": "Their profile suggests self-harm or encourages it", + "report_flow.label.self_harm_promotion": "Encouraging self-harm or sharing methods", + "report_flow.label.self_harm_promotion_profile": "Their profile encourages self-harm", + "report_flow.label.sexual": "Sexual content", + "report_flow.label.sexual_exploitation": "Sexual exploitation, coercion or trafficking", + "report_flow.label.sexual_unwanted": "Sexual images or messages I didn't want", + "report_flow.label.something_else": "Something else", + "report_flow.label.spam": "Spam or unwanted ads", + "report_flow.label.spam_bulk": "Sending spam or advertising in bulk", + "report_flow.label.spam_or_manipulation": "Spam or platform manipulation", + "report_flow.label.spam_profile": "Their profile is used for spam or advertising", + "report_flow.label.suicide_promotion": "Encouraging suicide or sharing methods", + "report_flow.label.suicide_promotion_profile": "Their profile encourages suicide", + "report_flow.label.synthetic_media": "Fake or AI-made media presented as real", + "report_flow.label.terrorism": "Terrorism or violent extremism", + "report_flow.label.terrorism_guild": "Recruiting for or promoting terrorism or violent extremism", + "report_flow.label.threat": "Threats or calls for violence", + "report_flow.label.threat_to_share": "They are threatening to share it", + "report_flow.label.too_young": "They're under the minimum age to use {product_name}", + "report_flow.label.unwanted_contact": "Stalking or repeatedly contacting me or someone else after being asked to stop, blocked or removed", + "report_flow.label.violence_glorification": "Glorifying real-world violence", + "report_flow.label.violence_incitement": "Encouraging violence or explaining how to hurt people", + "report_flow.label.violence_misinfo": "Violence, extremism or harmful false information", + "report_flow.label.violent_threat": "Saying they will hurt someone", + "report_flow.label.worried_profile": "I'm worried about their safety", + "report_flow.label.worried_self_harm": "I'm afraid they might hurt themselves", + "report_flow.label.worried_suicide": "I'm afraid they might attempt suicide", + "report_flow.notice.need_more_info.body": "To review this, we need a message where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message instead.", + "report_flow.notice.need_more_info.title": "We can't act on this yet", + "report_flow.notice.need_more_info_profile.body": "To review this, we need to see where they say how old they are or make it clear they're under {product_name}'s minimum age. Report that message or profile instead.", + "report_flow.screen.abuse.title": "What does it involve?", + "report_flow.screen.abuse_guild.title": "What are people in this community doing?", + "report_flow.screen.age_stated_message.title": "Does this message say how old they are?", + "report_flow.screen.age_stated_profile.title": "Does their profile say how old they are?", + "report_flow.screen.community_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.community_parts.title": "Which parts of the community are involved?", + "report_flow.screen.crisis_support.subtitle": "Crisis lines offer free, confidential support.", + "report_flow.screen.crisis_support.title": "Someone can help right now", + "report_flow.screen.false_info.subtitle": "Opinions, satire and good-faith debate are allowed. Unlawful defamation can be reported under the Digital Services Act.", + "report_flow.screen.false_info.subtitle_self_hosted": "Opinions, satire and good-faith debate are allowed.", + "report_flow.screen.false_info.title": "What's misleading about it?", + "report_flow.screen.harassment.title": "How is someone being targeted?", + "report_flow.screen.hate.title": "How does it attack people for who they are?", + "report_flow.screen.impersonation.subtitle": "Clearly labeled parody or roleplay is allowed.", + "report_flow.screen.impersonation.title": "Who's being impersonated, or is it a scam?", + "report_flow.screen.minor_risk.title": "How is this person putting a minor at risk?", + "report_flow.screen.minor_risk_guild.title": "How does this community put minors at risk?", + "report_flow.screen.minor_sexual.subtitle": "Drawn, written or AI content counts when a character is described as a minor or is clearly prepubescent, including lolicon, shotacon and cub.", + "report_flow.screen.minor_sexual.title": "What did you see involving a minor?", + "report_flow.screen.minor_sexual_guild.title": "What did you see involving minors?", + "report_flow.screen.private_info.subtitle": "Pick as many as you need. If an intimate photo shows someone under 18, go back and report it under Sexualizing a minor.", + "report_flow.screen.private_info.title": "Which private details are involved?", + "report_flow.screen.profile_abuse.title": "What's harmful about their profile?", + "report_flow.screen.profile_hate_violence.title": "What does their profile show or promote?", + "report_flow.screen.profile_intro.options_heading": "Learn more", + "report_flow.screen.profile_intro.subtitle": "Tell us what's wrong with this profile. They won't be told who reported them.", + "report_flow.screen.profile_intro.title": "Report profile", + "report_flow.screen.profile_minor_sexual.title": "What in their profile involves a minor?", + "report_flow.screen.profile_parts.subtitle": "Pick as many as you need.", + "report_flow.screen.profile_parts.title": "Which parts of their profile are a problem?", + "report_flow.screen.profile_private_info.title": "Which private details are in their profile?", + "report_flow.screen.profile_sexual.title": "Tell us about the sexual content in their profile", + "report_flow.screen.profile_threat.title": "How does their profile involve violence?", + "report_flow.screen.root_guild.subtitle": "Pick the closest match for what is going on in this community.", + "report_flow.screen.root_guild.title": "What's wrong with this community?", + "report_flow.screen.root_message.subtitle": "Pick the closest match. You can check everything before it is sent.", + "report_flow.screen.root_message.title": "Report message", + "report_flow.screen.root_user.subtitle": "Pick the closest match for what is in their profile.", + "report_flow.screen.root_user.title": "What's wrong with their profile?", + "report_flow.screen.self_harm.subtitle": "Nobody is punished for saying they are struggling. Telling us you are worried helps us offer support.", + "report_flow.screen.self_harm.title": "What did they say or share?", + "report_flow.screen.self_harm_guild.title": "What are members encouraging?", + "report_flow.screen.self_harm_profile.title": "What does their profile say or show?", + "report_flow.screen.sexual.subtitle": "If anyone shown or involved is under 18, choose Sexualizing a minor.", + "report_flow.screen.sexual.title": "Tell us about the sexual content", + "report_flow.screen.sexual_guild.subtitle": "If anyone shown or involved is under 18, choose Sexualizing minors.", + "report_flow.screen.sexual_guild.title": "Tell us about the sexual content in this community", + "report_flow.screen.something_else_guild.title": "What else is going on in this community?", + "report_flow.screen.something_else_message.title": "What else is going on?", + "report_flow.screen.something_else_user.title": "What else is wrong with this profile?", + "report_flow.screen.spam_kind_guild.title": "How is this community abusing the platform?", + "report_flow.screen.spam_profile.title": "How is the account being misused?", + "report_flow.screen.threat.title": "How does it involve violence?", + "report_flow.screen.violence_misinfo.title": "Which of these matches it?", + "report_flow.screen.violence_misinfo_guild.title": "Which of these happens in this community?" } diff --git a/fluxer_api/src/api/database/CassandraUdtParity.test.ts b/fluxer_api/src/api/database/CassandraUdtParity.test.ts new file mode 100644 index 000000000..11f96f4e1 --- /dev/null +++ b/fluxer_api/src/api/database/CassandraUdtParity.test.ts @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import fs from 'node:fs'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import type {IARMessageContextRow} from '@app/api/database/types/ReportTypes'; +import { + DSAReportEmailVerifications, + DSAReportTickets, + GuildReportSubmissionsByReporter, + IARSubmissions, + MessageReportSubmissionsByReporter, + UserReportSubmissionsByReporter, +} from '@app/api/Tables'; +import {describe, expect, it} from 'vitest'; + +const THIS_DIR = path.dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = path.resolve(THIS_DIR, '../../../..'); + +interface SchemaField { + name: string; + type: string; +} + +const SCHEMA = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'tools/dev/cassandra_target_schema.json'), 'utf8')) as { + user_types: Array<{name: string; fields: Array}>; + tables: Array<{name: string; columns: Array}>; +}; + +const IAR_MESSAGE_CONTEXT_FIELDS = { + message_id: 'bigint', + channel_id: 'bigint', + author_id: 'bigint', + webhook_id: 'bigint', + author_username: 'text', + author_discriminator: 'int', + author_avatar_hash: 'text', + content: 'text', + timestamp: 'timestamp', + edited_timestamp: 'timestamp', + type: 'int', + flags: 'int', + mention_everyone: 'boolean', + mention_users: 'set', + mention_roles: 'set', + mention_channels: 'set', + attachments: 'frozen>', + embeds: 'frozen>', + sticker_items: 'frozen>', + missing_attachments: 'frozen>', +} satisfies Record; + +const REPORT_TABLES = [ + IARSubmissions, + MessageReportSubmissionsByReporter, + UserReportSubmissionsByReporter, + GuildReportSubmissionsByReporter, + DSAReportEmailVerifications, + DSAReportTickets, +]; + +function sortedFields(fields: Iterable<[string, string]>): Array<[string, string]> { + return [...fields].sort(([left], [right]) => left.localeCompare(right)); +} + +describe('Cassandra UDT parity', () => { + it('stores every iar_message_context field the API writes, with the same type', () => { + const userType = SCHEMA.user_types.find((entry) => entry.name === 'iar_message_context'); + expect(userType).toBeDefined(); + expect(sortedFields(userType!.fields.map((field) => [field.name, field.type]))).toEqual( + sortedFields(Object.entries(IAR_MESSAGE_CONTEXT_FIELDS)), + ); + }); + + it.each(REPORT_TABLES.map((table) => [table.name, table] as const))( + '%s has the same columns as the target schema', + (name, table) => { + const schemaTable = SCHEMA.tables.find((entry) => entry.name === name); + expect(schemaTable).toBeDefined(); + expect(schemaTable!.columns.map((column) => column.name).sort()).toEqual([...table.columns].sort()); + }, + ); +}); diff --git a/fluxer_api/src/api/database/types/ReportTypes.ts b/fluxer_api/src/api/database/types/ReportTypes.ts index b66d92657..076661191 100644 --- a/fluxer_api/src/api/database/types/ReportTypes.ts +++ b/fluxer_api/src/api/database/types/ReportTypes.ts @@ -7,7 +7,8 @@ type MentionCollection = ReadonlyArray | Set | null | undefined; export interface IARMessageContextRow { message_id: bigint; channel_id: bigint | null; - author_id: bigint; + author_id: bigint | null; + webhook_id?: bigint | null; author_username: string; author_discriminator: number; author_avatar_hash: string | null; @@ -23,6 +24,7 @@ export interface IARMessageContextRow { attachments: Array | null; embeds: Array | null; sticker_items: Array | null; + missing_attachments?: Array | null; } export interface IARSubmissionRow { @@ -60,6 +62,30 @@ export interface IARSubmissionRow { reported_channel_effective_nsfw?: boolean | null; reported_channel_effective_content_warning_level?: number | null; reported_channel_effective_content_warning_text?: string | null; + reason: string | null; + flow_revision: string | null; + flow_steps: string | null; + flow_locale: string | null; + flow_surface: string | null; + reporter_good_faith_confirmed: boolean | null; + reported_webhook_id: bigint | null; + reported_webhook_name: string | null; + reported_webhook_avatar_hash: string | null; + reported_webhook_default_name: string | null; + reported_webhook_default_avatar_hash: string | null; + reported_webhook_type: number | null; + reported_webhook_application_id: bigint | null; + reported_webhook_channel_id: bigint | null; + reported_webhook_guild_id: bigint | null; + reported_webhook_created_at: Date | null; + reported_webhook_creator_id: bigint | null; + reported_webhook_creator_username: string | null; + reported_webhook_creator_discriminator: number | null; + reported_webhook_creator_global_name: string | null; + reported_webhook_creator_avatar_hash: string | null; + reported_profile_snapshot?: string | null; + legal_hold_until?: Date | null; + legal_hold_reason?: string | null; } export interface DSAReportEmailVerificationRow { @@ -84,6 +110,20 @@ export interface MessageReportSubmissionByReporterRow { reported_at: Date; } +export interface UserReportSubmissionByReporterRow { + reporter_id: bigint; + reported_user_id: bigint; + report_id: bigint; + reported_at: Date; +} + +export interface GuildReportSubmissionByReporterRow { + reporter_id: bigint; + reported_guild_id: bigint; + report_id: bigint; + reported_at: Date; +} + export const IAR_SUBMISSION_COLUMNS = [ 'report_id', 'reporter_id', @@ -119,6 +159,30 @@ export const IAR_SUBMISSION_COLUMNS = [ 'reported_channel_effective_nsfw', 'reported_channel_effective_content_warning_level', 'reported_channel_effective_content_warning_text', + 'reason', + 'flow_revision', + 'flow_steps', + 'flow_locale', + 'flow_surface', + 'reporter_good_faith_confirmed', + 'reported_webhook_id', + 'reported_webhook_name', + 'reported_webhook_avatar_hash', + 'reported_webhook_default_name', + 'reported_webhook_default_avatar_hash', + 'reported_webhook_type', + 'reported_webhook_application_id', + 'reported_webhook_channel_id', + 'reported_webhook_guild_id', + 'reported_webhook_created_at', + 'reported_webhook_creator_id', + 'reported_webhook_creator_username', + 'reported_webhook_creator_discriminator', + 'reported_webhook_creator_global_name', + 'reported_webhook_creator_avatar_hash', + 'reported_profile_snapshot', + 'legal_hold_until', + 'legal_hold_reason', ] as const satisfies ReadonlyArray; export const DSA_REPORT_EMAIL_VERIFICATION_COLUMNS = [ 'email_lower', @@ -139,3 +203,15 @@ export const MESSAGE_REPORT_SUBMISSION_BY_REPORTER_COLUMNS = [ 'report_id', 'reported_at', ] as const satisfies ReadonlyArray; +export const USER_REPORT_SUBMISSION_BY_REPORTER_COLUMNS = [ + 'reporter_id', + 'reported_user_id', + 'report_id', + 'reported_at', +] as const satisfies ReadonlyArray; +export const GUILD_REPORT_SUBMISSION_BY_REPORTER_COLUMNS = [ + 'reporter_id', + 'reported_guild_id', + 'report_id', + 'reported_at', +] as const satisfies ReadonlyArray; diff --git a/fluxer_api/src/api/experiment/tests/ChannelLoadGateCoverage.test.ts b/fluxer_api/src/api/experiment/tests/ChannelLoadGateCoverage.test.ts index 0b0889ef8..31f784f79 100644 --- a/fluxer_api/src/api/experiment/tests/ChannelLoadGateCoverage.test.ts +++ b/fluxer_api/src/api/experiment/tests/ChannelLoadGateCoverage.test.ts @@ -16,7 +16,7 @@ const EXPECTED_LOADS: Readonly> = { 'admin/controllers/ThreadAdminController.ts': [1, 'admin_or_system'], 'admin/services/AdminAuditService.ts': [1, 'admin_or_system'], 'admin/services/AdminMessageService.ts': [4, 'admin_or_system'], - 'admin/services/AdminReportService.ts': [4, 'gated'], + 'admin/services/AdminReportService.ts': [4, 'admin_or_system'], 'channel/ChannelRepository.ts': [1, 'admin_or_system'], 'channel/services/AttachmentUploadService.ts': [1, 'gated'], 'channel/services/BaseChannelAuthService.ts': [4, 'gated'], diff --git a/fluxer_api/src/api/middleware/ContentFilterMiddleware.ts b/fluxer_api/src/api/middleware/ContentFilterMiddleware.ts index 4a0a2da9c..758999122 100644 --- a/fluxer_api/src/api/middleware/ContentFilterMiddleware.ts +++ b/fluxer_api/src/api/middleware/ContentFilterMiddleware.ts @@ -77,7 +77,7 @@ const SKIP_CONTENT_FILTER_PATH_PARTS = [ '/auth/', '/oauth2/', '/premium/store/', - '/reports/dsa/email/', + '/reports/dsa', '/users/@me/authorized-ips', '/users/@me/email-change/', '/users/@me/mfa/', diff --git a/fluxer_api/src/api/middleware/ResponseTypeMiddleware.ts b/fluxer_api/src/api/middleware/ResponseTypeMiddleware.ts index a910bef42..765b80229 100644 --- a/fluxer_api/src/api/middleware/ResponseTypeMiddleware.ts +++ b/fluxer_api/src/api/middleware/ResponseTypeMiddleware.ts @@ -105,6 +105,7 @@ export interface OpenAPIRouteMetadata { requestBodyRequired?: boolean; statusCode?: number | Array; bodylessStatusCodes?: Array; + errorStatusCodes?: Array; security?: SecurityScheme | Array; tags: string | Array; deprecated?: boolean; diff --git a/fluxer_api/src/api/middleware/ServiceMiddleware.ts b/fluxer_api/src/api/middleware/ServiceMiddleware.ts index f846f7ed8..20fc0696f 100644 --- a/fluxer_api/src/api/middleware/ServiceMiddleware.ts +++ b/fluxer_api/src/api/middleware/ServiceMiddleware.ts @@ -163,6 +163,7 @@ export function getReportServiceInstance(): ReportService { getStorageService(), getGatewayService(), getRateLimitService(), + getWebhookRepository(), getReportSearchService(), ); } diff --git a/fluxer_api/src/api/middleware/tests/BlocklistSeverityLabel.test.ts b/fluxer_api/src/api/middleware/tests/BlocklistSeverityLabel.test.ts new file mode 100644 index 000000000..8069375a6 --- /dev/null +++ b/fluxer_api/src/api/middleware/tests/BlocklistSeverityLabel.test.ts @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {AdminRepository} from '@app/api/admin/AdminRepository'; +import {ContentBlocklistCategory, ContentBlocklistSeverity} from '@app/api/constants/ContentModeration'; +import {bannedAvatarHashCache} from '@app/api/middleware/BannedAvatarHashCache'; +import {fileShaCache} from '@app/api/middleware/FileShaCache'; +import {urlBlocklistCache} from '@app/api/middleware/UrlBlocklistCache'; +import {afterEach, describe, expect, it, vi} from 'vitest'; + +const SEVERITIES = [ + ['allow', ContentBlocklistSeverity.ALLOW], + ['warn', ContentBlocklistSeverity.WARN], + ['block', ContentBlocklistSeverity.BLOCK], + ['block and report', ContentBlocklistSeverity.BLOCK_AND_REPORT], + ['unset', null], +] as const; + +const FILE_SHA = 'a'.repeat(64); +const AVATAR_HASH = 'b'.repeat(8); + +const rowMeta = { + category: ContentBlocklistCategory.MANUAL, + source_url: null, + added_at: new Date(), + added_by: 1n, + notes: null, +}; + +describe('blocklist severity is a stored label', () => { + afterEach(() => { + vi.restoreAllMocks(); + urlBlocklistCache.resetForTesting(); + fileShaCache.resetForTesting(); + bannedAvatarHashCache.resetForTesting(); + }); + + it.each(SEVERITIES)('a %s url row and url domain row still block', async (_label, severity) => { + vi.spyOn(AdminRepository.prototype, 'loadAllBannedUrls').mockResolvedValue([ + {...rowMeta, url_canonical: 'https://blocked.example/path', severity}, + ]); + vi.spyOn(AdminRepository.prototype, 'loadAllBannedUrlDomains').mockResolvedValue([ + {...rowMeta, domain: 'blocked-domain.example', match_subdomains: true, severity}, + ]); + await urlBlocklistCache.refresh(); + expect(urlBlocklistCache.size.urls).toBe(1); + expect(urlBlocklistCache.isUrlBanned('https://blocked.example/path')).toBe(true); + expect(urlBlocklistCache.containsBannedLink('see https://blocked.example/path')).toBe(true); + expect(urlBlocklistCache.containsBannedLink('see https://www.blocked-domain.example/x')).toBe(true); + expect(urlBlocklistCache.containsBannedLink('see https://allowed.example/path')).toBe(false); + }); + + it.each(SEVERITIES)('a %s file sha row still blocks', async (_label, severity) => { + vi.spyOn(AdminRepository.prototype, 'loadAllBannedFileShas').mockResolvedValue([ + {...rowMeta, sha256_hex: FILE_SHA.toUpperCase(), content_type: 'image/png', severity}, + ]); + await fileShaCache.refresh(); + expect(fileShaCache.size).toBe(1); + expect(fileShaCache.isBanned(FILE_SHA)).toBe(true); + expect(fileShaCache.isBanned('c'.repeat(64))).toBe(false); + }); + + it.each(SEVERITIES)('a %s avatar hash row still blocks', async (_label, severity) => { + vi.spyOn(AdminRepository.prototype, 'loadAllBannedAvatarHashes').mockResolvedValue([ + {...rowMeta, hash_short: AVATAR_HASH, severity}, + ]); + await bannedAvatarHashCache.refresh(); + expect(bannedAvatarHashCache.size).toBe(1); + expect(bannedAvatarHashCache.contains(AVATAR_HASH)).toBe(true); + expect(bannedAvatarHashCache.contains(`a_${AVATAR_HASH}`)).toBe(true); + expect(bannedAvatarHashCache.contains('c'.repeat(8))).toBe(false); + }); +}); diff --git a/fluxer_api/src/api/middleware/tests/ContentFilterMiddleware.test.ts b/fluxer_api/src/api/middleware/tests/ContentFilterMiddleware.test.ts index 0b7bac2b1..184c7617e 100644 --- a/fluxer_api/src/api/middleware/tests/ContentFilterMiddleware.test.ts +++ b/fluxer_api/src/api/middleware/tests/ContentFilterMiddleware.test.ts @@ -63,6 +63,22 @@ describe('extractStringValues', () => { const result = extractStringValues(body); expect(result).toEqual(['visible label']); }); + test('omits the structural fields of report flow submissions', () => { + const body = { + channel_id: '111111111111111111', + message_id: '222222222222222222', + user_id: '333333333333333333', + guild_id: '444444444444444444', + revision_hash: '6b1f0c9e2a7d4413', + locale: 'de', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['email', 'phone']}, + ], + }; + const result = extractStringValues(body); + expect(result).toEqual([]); + }); }); describe('shouldSkipContentFilterPath', () => { @@ -76,6 +92,16 @@ describe('shouldSkipContentFilterPath', () => { const result = paths.map((path) => shouldSkipContentFilterPath(path)); expect(result).toEqual([true, true, true, true]); }); + test('skips every DSA report body, which has to quote the reported content', () => { + const paths = ['/reports/dsa', '/reports/dsa/email/send', '/reports/dsa/email/verify']; + const result = paths.map((path) => shouldSkipContentFilterPath(path)); + expect(result).toEqual([true, true, true]); + }); + test('does not skip in-app report submissions', () => { + const paths = ['/reports/message', '/reports/user', '/reports/flows/message/submissions']; + const result = paths.map((path) => shouldSkipContentFilterPath(path)); + expect(result).toEqual([false, false, false]); + }); test('does not skip public content update request bodies', () => { const paths = ['/guilds/123/vanity-url', '/channels/123/messages', '/users/@me']; const result = paths.map((path) => shouldSkipContentFilterPath(path)); diff --git a/fluxer_api/src/api/openapi/openapi.json b/fluxer_api/src/api/openapi/openapi.json index 5594f1911..f80285fee 100644 --- a/fluxer_api/src/api/openapi/openapi.json +++ b/fluxer_api/src/api/openapi/openapi.json @@ -14163,10 +14163,10 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Creates a DSA complaint report with verified email for Digital Services Act compliance.", + "description": "Creates a DSA complaint report with verified email for Digital Services Act compliance. The reason comes from the answers given in the DSA report flow.", "requestBody": { "required": true, - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DsaReportRequest"}}} + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DsaReportFlowRequest"}}} } } }, @@ -14209,9 +14209,13 @@ "500": { "description": "Internal Server Error - An unexpected error occurred", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} + }, + "503": { + "description": "Service Unavailable - The request could not be completed right now", + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Initiates DSA (Digital Services Act) report submission by sending verification email to reporter.", + "description": "Initiates DSA (Digital Services Act) report submission by sending verification email to reporter. Responds with 503 when the email could not be sent.", "requestBody": { "required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DsaReportEmailSendRequest"}}} @@ -14266,10 +14270,10 @@ } } }, - "/reports/guild": { + "/reports/flows/message/submissions": { "post": { - "operationId": "report_guild", - "summary": "Report guild", + "operationId": "submit_message_report_flow", + "summary": "Submit message report flow", "tags": ["Reports"], "responses": { "200": { @@ -14315,18 +14319,20 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Submits a report about a guild to moderators for policy violation review.", + "description": "Files a report about a message from the answers given in the in-app message report flow. The reporter must be able to access the channel and target message.", "security": [{"sessionToken": []}], "requestBody": { "required": true, - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportGuildRequest"}}} + "content": { + "application/json": {"schema": {"$ref": "#/components/schemas/ReportFlowMessageSubmissionRequest"}} + } } } }, - "/reports/message": { + "/reports/flows/user/submissions": { "post": { - "operationId": "report_message", - "summary": "Report message", + "operationId": "submit_user_report_flow", + "summary": "Submit user report flow", "tags": ["Reports"], "responses": { "200": { @@ -14372,36 +14378,28 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Submits a report about a message to moderators for content violation review. The reporter must be able to access the channel and target message.", + "description": "Files a report about a user profile from the answers given in the in-app user profile report flow.", "security": [{"sessionToken": []}], "requestBody": { "required": true, - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportMessageRequest"}}} + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportFlowUserSubmissionRequest"}}} } } }, - "/reports/user": { - "post": { - "operationId": "report_user", - "summary": "Report user", + "/reports/flows/{target_type}": { + "get": { + "operationId": "get_report_flow", + "summary": "Get report flow", "tags": ["Reports"], "responses": { "200": { "description": "Success", - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportResponse"}}} + "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportFlowResponse"}}} }, "400": { "description": "Bad Request - The request was malformed or contained invalid data", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} }, - "401": { - "description": "Unauthorized - Authentication is required or the token is invalid", - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} - }, - "403": { - "description": "Forbidden - You do not have permission to perform this action", - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} - }, "429": { "description": "Too Many Requests - You are being rate limited", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ThrottledError"}}}, @@ -14429,12 +14427,33 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Submits a report about a user to moderators for content violation or behaviour review.", - "security": [{"sessionToken": []}], - "requestBody": { - "required": true, - "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ReportUserRequest"}}} - } + "description": "Returns every screen of the report flow for a target type, rendered in the requested locale. Message and user flows are available in app and on the DSA form, the guild flow only on the DSA form.", + "parameters": [ + { + "name": "target_type", + "in": "path", + "required": true, + "schema": {"$ref": "#/components/schemas/ReportFlowTargetType"}, + "description": "Kind of entity a report flow is about" + }, + { + "name": "surface", + "in": "query", + "required": false, + "schema": {"default": "in_app", "$ref": "#/components/schemas/ReportFlowSurface"}, + "description": "Where the flow is shown" + }, + { + "name": "locale", + "in": "query", + "required": false, + "schema": { + "description": "Language tag of the client UI. The server picks the closest supported locale and reports it in the locale field", + "type": "string" + }, + "description": "Language tag of the client UI. The server picks the closest supported locale and reports it in the locale field" + } + ] } }, "/search/messages": { @@ -23187,7 +23206,10 @@ "Error": { "type": "object", "properties": { - "code": {"type": "string", "description": "Machine-readable error code"}, + "code": { + "type": "string", + "description": "Machine-readable error code. Known values are listed in the APIErrorCode schema" + }, "message": {"type": "string", "description": "Human-readable error message"}, "errors": { "description": "Field-specific validation errors", @@ -23210,7 +23232,10 @@ "ThrottledError": { "type": "object", "properties": { - "code": {"type": "string", "description": "Machine-readable error code"}, + "code": { + "type": "string", + "description": "Machine-readable error code. Known values are listed in the APIErrorCode schema" + }, "message": {"type": "string", "description": "Human-readable error message"}, "errors": { "description": "Field-specific validation errors", @@ -28118,17 +28143,62 @@ } ] }, - "ReportUserRequest": { + "ReportFlowSurface": { + "description": "Where the flow is shown", + "x-enumNames": ["in_app", "dsa"], + "x-enumDescriptions": ["The in-app report flow", "The public Digital Services Act report form"], + "enum": ["in_app", "dsa"], + "type": "string" + }, + "ReportFlowTargetType": { + "description": "Kind of entity a report flow is about", + "x-enumNames": ["message", "user", "guild"], + "x-enumDescriptions": ["A message", "A user profile", "A community, on the DSA form only"], + "enum": ["message", "user", "guild"], + "type": "string" + }, + "ReportFlowResponse": { "type": "object", "properties": { - "user_id": {"description": "ID of the user being reported", "$ref": "#/components/schemas/SnowflakeType"}, - "category": {"$ref": "#/components/schemas/UserReportCategory"}, - "guild_id": { - "description": "ID of the guild where the violation occurred", - "$ref": "#/components/schemas/SnowflakeType" - } + "target_type": {"$ref": "#/components/schemas/ReportFlowTargetType"}, + "surface": {"$ref": "#/components/schemas/ReportFlowSurface"}, + "revision_hash": {"type": "string"}, + "locale": {"type": "string", "description": "Locale the copy was rendered in"}, + "start_screen_id": {"type": "string"}, + "guidelines_url": { + "description": "Community guidelines page, null when the instance has none", + "type": ["string", "null"] + }, + "screens": {"type": "array", "items": {"$ref": "#/components/schemas/ReportFlowScreen"}}, + "notices": {"type": "array", "items": {"$ref": "#/components/schemas/ReportFlowNotice"}} }, - "required": ["user_id", "category"] + "required": [ + "target_type", + "surface", + "revision_hash", + "locale", + "start_screen_id", + "guidelines_url", + "screens", + "notices" + ], + "additionalProperties": false + }, + "ReportFlowUserSubmissionRequest": { + "type": "object", + "properties": { + "revision_hash": {"type": "string"}, + "steps": { + "minItems": 1, + "maxItems": 16, + "type": "array", + "items": {"$ref": "#/components/schemas/ReportFlowStep"} + }, + "locale": {"description": "Language tag the reporter saw the flow in", "type": "string"}, + "user_id": {"$ref": "#/components/schemas/SnowflakeType"}, + "guild_id": {"$ref": "#/components/schemas/SnowflakeType"} + }, + "required": ["revision_hash", "steps", "user_id"] }, "ReportResponse": { "type": "object", @@ -28137,38 +28207,27 @@ "description": "The unique identifier for this report", "$ref": "#/components/schemas/SnowflakeStringType" }, - "status": {"type": "string", "description": "Current status of the report (pending, reviewed, resolved)"}, + "status": {"type": "string", "description": "Current status of the report (pending, resolved)"}, "reported_at": {"type": "string", "description": "ISO 8601 timestamp when the report was submitted"} }, "required": ["report_id", "status", "reported_at"], "additionalProperties": false }, - "ReportMessageRequest": { + "ReportFlowMessageSubmissionRequest": { "type": "object", "properties": { - "channel_id": { - "description": "ID of the accessible channel containing the reported message", - "$ref": "#/components/schemas/SnowflakeType" + "revision_hash": {"type": "string"}, + "steps": { + "minItems": 1, + "maxItems": 16, + "type": "array", + "items": {"$ref": "#/components/schemas/ReportFlowStep"} }, - "message_id": { - "description": "ID of the accessible message being reported", - "$ref": "#/components/schemas/SnowflakeType" - }, - "category": {"$ref": "#/components/schemas/MessageReportCategory"} + "locale": {"description": "Language tag the reporter saw the flow in", "type": "string"}, + "channel_id": {"$ref": "#/components/schemas/SnowflakeType"}, + "message_id": {"$ref": "#/components/schemas/SnowflakeType"} }, - "required": ["channel_id", "message_id", "category"] - }, - "ReportGuildRequest": { - "type": "object", - "properties": { - "guild_id": {"description": "ID of the guild being reported", "$ref": "#/components/schemas/SnowflakeType"}, - "category": {"$ref": "#/components/schemas/GuildReportCategory"}, - "invite_code": { - "description": "Invite code proving access to the guild (required when not a member of a non-discoverable guild)", - "type": "string" - } - }, - "required": ["guild_id", "category"] + "required": ["revision_hash", "steps", "channel_id", "message_id"] }, "DsaReportEmailVerifyRequest": { "type": "object", @@ -28205,11 +28264,11 @@ "required": ["ok"], "additionalProperties": false }, - "DsaReportRequest": { + "DsaReportFlowRequest": { "oneOf": [ - {"$ref": "#/components/schemas/MessageDsaReportRequest"}, - {"$ref": "#/components/schemas/UserDsaReportRequest"}, - {"$ref": "#/components/schemas/GuildDsaReportRequest"} + {"$ref": "#/components/schemas/MessageDsaReportFlowRequest"}, + {"$ref": "#/components/schemas/UserDsaReportFlowRequest"}, + {"$ref": "#/components/schemas/GuildDsaReportFlowRequest"} ] }, "ReadStateAckBulkRequest": { @@ -38128,234 +38187,88 @@ "additionalProperties": false }, "UnsignedInt64StringType": {"type": "string", "pattern": "^\\d+$", "format": "int64"}, - "GuildDsaReportRequest": { + "GuildDsaReportFlowRequest": { "type": "object", "properties": { "ticket": {"description": "Verification ticket obtained from email verification", "type": "string"}, - "additional_info": {"description": "Additional context or details about the report", "type": "string"}, - "reporter_full_legal_name": { - "description": "Full legal name of the person filing the report", - "type": "string" - }, "reporter_country_of_residence": { - "description": "EU country code of the reporter residence", - "x-enumNames": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], - "x-enumDescriptions": [ - "Austria", - "Belgium", - "Bulgaria", - "Croatia", - "Cyprus", - "Czechia", - "Denmark", - "Estonia", - "Finland", - "France", - "Germany", - "Greece", - "Hungary", - "Ireland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Malta", - "Netherlands", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Sweden" - ], - "enum": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], + "$ref": "#/components/schemas/EuCountryCode", + "description": "EU country code of the reporter residence" + }, + "revision_hash": { + "description": "revision_hash of the DSA report flow the reporter answered", "type": "string" }, - "reporter_fluxer_tag": { - "description": "Fluxer tag of the reporter if they have an account", - "type": "string", - "minLength": 3, - "maxLength": 37 + "steps": { + "minItems": 1, + "maxItems": 16, + "type": "array", + "items": {"$ref": "#/components/schemas/ReportFlowStep"}, + "description": "Screens of the DSA report flow and the answers chosen on each, in order" + }, + "good_faith_confirmed": { + "type": "boolean", + "const": true, + "description": "Confirms in good faith that the information and allegations in the notice are accurate and complete" + }, + "locale": {"description": "Language tag the reporter saw the flow in", "type": "string"}, + "additional_info": { + "description": "Explanation of the problem. If the reporter believes the content is illegal, which law it breaks and why", + "type": "string" + }, + "reporter_full_legal_name": { + "description": "Full legal name of the person filing the report, required unless the report is about child sexual abuse", + "type": "string" }, "report_type": {"type": "string", "const": "guild", "description": "Type of report"}, - "category": {"$ref": "#/components/schemas/GuildReportCategory"}, "guild_id": {"description": "ID of the guild being reported", "$ref": "#/components/schemas/SnowflakeType"}, "invite_code": {"description": "Invite code used to access the guild", "type": "string"} }, "required": [ "ticket", - "reporter_full_legal_name", "reporter_country_of_residence", + "revision_hash", + "steps", + "good_faith_confirmed", + "additional_info", "report_type", - "category", "guild_id" ] }, - "UserDsaReportRequest": { + "UserDsaReportFlowRequest": { "type": "object", "properties": { "ticket": {"description": "Verification ticket obtained from email verification", "type": "string"}, - "additional_info": {"description": "Additional context or details about the report", "type": "string"}, - "reporter_full_legal_name": { - "description": "Full legal name of the person filing the report", - "type": "string" - }, "reporter_country_of_residence": { - "description": "EU country code of the reporter residence", - "x-enumNames": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], - "x-enumDescriptions": [ - "Austria", - "Belgium", - "Bulgaria", - "Croatia", - "Cyprus", - "Czechia", - "Denmark", - "Estonia", - "Finland", - "France", - "Germany", - "Greece", - "Hungary", - "Ireland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Malta", - "Netherlands", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Sweden" - ], - "enum": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], + "$ref": "#/components/schemas/EuCountryCode", + "description": "EU country code of the reporter residence" + }, + "revision_hash": { + "description": "revision_hash of the DSA report flow the reporter answered", "type": "string" }, - "reporter_fluxer_tag": { - "description": "Fluxer tag of the reporter if they have an account", - "type": "string", - "minLength": 3, - "maxLength": 37 + "steps": { + "minItems": 1, + "maxItems": 16, + "type": "array", + "items": {"$ref": "#/components/schemas/ReportFlowStep"}, + "description": "Screens of the DSA report flow and the answers chosen on each, in order" + }, + "good_faith_confirmed": { + "type": "boolean", + "const": true, + "description": "Confirms in good faith that the information and allegations in the notice are accurate and complete" + }, + "locale": {"description": "Language tag the reporter saw the flow in", "type": "string"}, + "additional_info": { + "description": "Explanation of the problem. If the reporter believes the content is illegal, which law it breaks and why", + "type": "string" + }, + "reporter_full_legal_name": { + "description": "Full legal name of the person filing the report, required unless the report is about child sexual abuse", + "type": "string" }, "report_type": {"type": "string", "const": "user", "description": "Type of report"}, - "category": {"$ref": "#/components/schemas/UserReportCategory"}, "user_id": {"description": "ID of the user being reported", "$ref": "#/components/schemas/SnowflakeType"}, "user_tag": { "description": "Fluxer tag of the user being reported", @@ -38364,116 +38277,50 @@ "maxLength": 37 } }, - "required": ["ticket", "reporter_full_legal_name", "reporter_country_of_residence", "report_type", "category"] + "required": [ + "ticket", + "reporter_country_of_residence", + "revision_hash", + "steps", + "good_faith_confirmed", + "additional_info", + "report_type" + ] }, - "MessageDsaReportRequest": { + "MessageDsaReportFlowRequest": { "type": "object", "properties": { "ticket": {"description": "Verification ticket obtained from email verification", "type": "string"}, - "additional_info": {"description": "Additional context or details about the report", "type": "string"}, - "reporter_full_legal_name": { - "description": "Full legal name of the person filing the report", - "type": "string" - }, "reporter_country_of_residence": { - "description": "EU country code of the reporter residence", - "x-enumNames": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], - "x-enumDescriptions": [ - "Austria", - "Belgium", - "Bulgaria", - "Croatia", - "Cyprus", - "Czechia", - "Denmark", - "Estonia", - "Finland", - "France", - "Germany", - "Greece", - "Hungary", - "Ireland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Malta", - "Netherlands", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Sweden" - ], - "enum": [ - "AT", - "BE", - "BG", - "HR", - "CY", - "CZ", - "DK", - "EE", - "FI", - "FR", - "DE", - "GR", - "HU", - "IE", - "IT", - "LV", - "LT", - "LU", - "MT", - "NL", - "PL", - "PT", - "RO", - "SK", - "SI", - "ES", - "SE" - ], + "$ref": "#/components/schemas/EuCountryCode", + "description": "EU country code of the reporter residence" + }, + "revision_hash": { + "description": "revision_hash of the DSA report flow the reporter answered", "type": "string" }, - "reporter_fluxer_tag": { - "description": "Fluxer tag of the reporter if they have an account", - "type": "string", - "minLength": 3, - "maxLength": 37 + "steps": { + "minItems": 1, + "maxItems": 16, + "type": "array", + "items": {"$ref": "#/components/schemas/ReportFlowStep"}, + "description": "Screens of the DSA report flow and the answers chosen on each, in order" + }, + "good_faith_confirmed": { + "type": "boolean", + "const": true, + "description": "Confirms in good faith that the information and allegations in the notice are accurate and complete" + }, + "locale": {"description": "Language tag the reporter saw the flow in", "type": "string"}, + "additional_info": { + "description": "Explanation of the problem. If the reporter believes the content is illegal, which law it breaks and why", + "type": "string" + }, + "reporter_full_legal_name": { + "description": "Full legal name of the person filing the report, required unless the report is about child sexual abuse", + "type": "string" }, "report_type": {"type": "string", "const": "message", "description": "Type of report"}, - "category": {"$ref": "#/components/schemas/MessageReportCategory"}, "message_link": {"description": "Link to the message being reported", "type": "string"}, "reported_user_tag": { "description": "Fluxer tag of the user who sent the message", @@ -38484,126 +38331,195 @@ }, "required": [ "ticket", - "reporter_full_legal_name", "reporter_country_of_residence", + "revision_hash", + "steps", + "good_faith_confirmed", + "additional_info", "report_type", - "category", "message_link" ] }, - "MessageReportCategory": { - "description": "Category of the message report", + "ReportFlowStep": { + "type": "object", + "properties": { + "screen_id": {"type": "string"}, + "option_id": {"type": "string"}, + "item_ids": {"minItems": 1, "maxItems": 32, "type": "array", "items": {"type": "string"}} + }, + "required": ["screen_id"] + }, + "EuCountryCode": { + "description": "EU country code of residence", "x-enumNames": [ - "harassment", - "hate_speech", - "violent_content", - "spam", - "nsfw_violation", - "illegal_activity", - "doxxing", - "self_harm", - "child_safety", - "malicious_links", - "impersonation", - "other" + "AT", + "BE", + "BG", + "HR", + "CY", + "CZ", + "DK", + "EE", + "FI", + "FR", + "DE", + "GR", + "HU", + "IE", + "IT", + "LV", + "LT", + "LU", + "MT", + "NL", + "PL", + "PT", + "RO", + "SK", + "SI", + "ES", + "SE" ], "x-enumDescriptions": [ - "Content that harasses, bullies, or intimidates users", - "Content promoting hatred against protected groups", - "Content depicting or promoting violence", - "Unsolicited bulk messages or promotional content", - "Adult content posted outside age-restricted channels", - "Content promoting or facilitating illegal activities", - "Content revealing private personal information", - "Content promoting self-harm or suicide", - "Content that endangers minors or depicts child abuse", - "Links to malware, phishing, or other malicious sites", - "Content falsely claiming to be another person or entity", - "Other violations not covered by specific categories" + "Austria", + "Belgium", + "Bulgaria", + "Croatia", + "Cyprus", + "Czechia", + "Denmark", + "Estonia", + "Finland", + "France", + "Germany", + "Greece", + "Hungary", + "Ireland", + "Italy", + "Latvia", + "Lithuania", + "Luxembourg", + "Malta", + "Netherlands", + "Poland", + "Portugal", + "Romania", + "Slovakia", + "Slovenia", + "Spain", + "Sweden" ], "enum": [ - "harassment", - "hate_speech", - "violent_content", - "spam", - "nsfw_violation", - "illegal_activity", - "doxxing", - "self_harm", - "child_safety", - "malicious_links", - "impersonation", - "other" + "AT", + "BE", + "BG", + "HR", + "CY", + "CZ", + "DK", + "EE", + "FI", + "FR", + "DE", + "GR", + "HU", + "IE", + "IT", + "LV", + "LT", + "LU", + "MT", + "NL", + "PL", + "PT", + "RO", + "SK", + "SI", + "ES", + "SE" ], "type": "string" }, - "UserReportCategory": { - "description": "Category of the user report", - "x-enumNames": [ - "harassment", - "hate_speech", - "spam_account", - "impersonation", - "underage_user", - "inappropriate_profile", - "other" - ], + "ReportFlowNotice": { + "type": "object", + "properties": {"id": {"type": "string"}, "title": {"type": "string"}, "body": {"type": "string"}}, + "required": ["id", "title", "body"], + "additionalProperties": false + }, + "ReportFlowScreen": { + "type": "object", + "properties": { + "id": {"type": "string"}, + "title": {"type": "string"}, + "subtitle": {"type": ["string", "null"]}, + "urgent": {"type": "boolean"}, + "options": {"type": "array", "items": {"$ref": "#/components/schemas/ReportFlowOption"}}, + "options_heading": {"type": ["string", "null"]}, + "checklist": {"anyOf": [{"$ref": "#/components/schemas/ReportFlowChecklist"}, {"type": "null"}]}, + "next_screen_id": { + "description": "Set on an info screen, which has a Next button instead of choices", + "type": ["string", "null"] + } + }, + "required": ["id", "title", "subtitle", "urgent", "options", "options_heading", "checklist", "next_screen_id"], + "additionalProperties": false + }, + "ReportFlowChecklist": { + "type": "object", + "properties": { + "items": {"type": "array", "items": {"$ref": "#/components/schemas/ReportFlowChecklistItem"}}, + "min_checked": {"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, + "outcome": {"$ref": "#/components/schemas/ReportFlowOutcome"} + }, + "required": ["items", "min_checked", "outcome"], + "additionalProperties": false + }, + "ReportFlowOption": { + "type": "object", + "properties": { + "id": {"type": "string"}, + "label": {"type": "string"}, + "outcome": {"$ref": "#/components/schemas/ReportFlowOutcome"} + }, + "required": ["id", "label", "outcome"], + "additionalProperties": false + }, + "ReportFlowOutcome": { + "type": "object", + "properties": { + "type": {"$ref": "#/components/schemas/ReportFlowOutcomeType"}, + "screen_id": {"description": "Next screen when type is screen", "type": ["string", "null"]}, + "reason": {"description": "Report reason when type is submit", "type": ["string", "null"]}, + "notice_id": { + "description": "Notice to show when type is end, null for the thank-you screen", + "type": ["string", "null"] + }, + "url": {"description": "Page to open when type is link", "type": ["string", "null"]} + }, + "required": ["type", "screen_id", "reason", "notice_id", "url"], + "additionalProperties": false + }, + "ReportFlowOutcomeType": { + "description": "What choosing an option does", + "x-enumNames": ["screen", "submit", "end", "link"], "x-enumDescriptions": [ - "User engages in harassment, bullying, or intimidation", - "User promotes hatred against protected groups", - "Account used for spamming or bulk messaging", - "User falsely claims to be another person or entity", - "User appears to be under the minimum required age", - "Profile contains inappropriate or offensive content", - "Other violations not covered by specific categories" - ], - "enum": [ - "harassment", - "hate_speech", - "spam_account", - "impersonation", - "underage_user", - "inappropriate_profile", - "other" + "Go to another screen", + "Show the summary, then file a report", + "Finish without filing a report", + "Open an external page" ], + "enum": ["screen", "submit", "end", "link"], "type": "string" }, - "GuildReportCategory": { - "description": "Category of the guild report", - "x-enumNames": [ - "harassment", - "hate_speech", - "extremist_community", - "illegal_activity", - "child_safety", - "raid_coordination", - "spam", - "malware_distribution", - "other" - ], - "x-enumDescriptions": [ - "Guild facilitates harassment, bullying, or intimidation", - "Guild promotes hatred against protected groups", - "Guild promotes extremist or terrorist ideologies", - "Guild promotes or facilitates illegal activities", - "Guild endangers minors or hosts child abuse content", - "Guild coordinates attacks on other communities", - "Guild used for spamming or bulk messaging", - "Guild distributes malware or malicious software", - "Other violations not covered by specific categories" - ], - "enum": [ - "harassment", - "hate_speech", - "extremist_community", - "illegal_activity", - "child_safety", - "raid_coordination", - "spam", - "malware_distribution", - "other" - ], - "type": "string" + "ReportFlowChecklistItem": { + "type": "object", + "properties": { + "id": {"type": "string"}, + "label": {"type": "string"}, + "description": {"type": ["string", "null"]} + }, + "required": ["id", "label", "description"], + "additionalProperties": false }, "MessageSearchResultsResponse": { "type": "object", @@ -39650,6 +39566,602 @@ "Int64Type": { "anyOf": [{"type": "string"}, {"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}], "format": "int64" + }, + "APIErrorCode": { + "type": "string", + "enum": [ + "ACCESS_DENIED", + "ANNOUNCEMENT_CHANNEL_REQUIRED", + "BAD_GATEWAY", + "BAD_REQUEST", + "BLUESKY_OAUTH_AUTHORIZATION_FAILED", + "BLUESKY_OAUTH_NOT_ENABLED", + "ACCOUNT_LIMITED", + "ACCOUNT_IDENTITY_LOCKED", + "ACCOUNT_SUSPENDED_PERMANENTLY", + "ACCOUNT_SUSPENDED_TEMPORARILY", + "ACCOUNT_TOO_NEW_FOR_GUILD", + "ACLS_MUST_BE_NON_EMPTY", + "ADMIN_API_KEY_NOT_FOUND", + "APPLICATION_NOT_OWNED", + "ALREADY_FRIENDS", + "BOTS_CANNOT_CREATE_GUILDS", + "BOTS_CANNOT_SEND_FRIEND_REQUESTS", + "BOT_ALREADY_IN_GUILD", + "BOT_IS_PRIVATE", + "BOT_USER_AUTH_ENDPOINT_ACCESS_DENIED", + "BOT_USER_AUTH_SESSION_CREATION_DENIED", + "BOT_USER_GENERATION_FAILED", + "BOT_USER_NOT_FOUND", + "CALL_ALREADY_EXISTS", + "CANNOT_EDIT_OTHER_USER_MESSAGE", + "CANNOT_EXECUTE_ON_DM", + "CANNOT_BLOCK_SYSTEM_USER", + "CANNOT_MODIFY_SYSTEM_WEBHOOK", + "CANNOT_REDEEM_PLUTONIUM_WITH_VISIONARY", + "CANNOT_REPORT_GUILD", + "CANNOT_REPORT_OWN_GUILD", + "CANNOT_REPORT_OWN_MESSAGE", + "CANNOT_REPORT_YOURSELF", + "CANNOT_SEND_EMPTY_MESSAGE", + "CANNOT_SEND_FRIEND_REQUEST_TO_BLOCKED_USER", + "CANNOT_SEND_FRIEND_REQUEST_TO_SELF", + "CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL", + "CANNOT_SEND_MESSAGES_TO_USER", + "CANNOT_TRANSFER_OWNERSHIP_TO_BOT", + "CANNOT_SHRINK_RESERVED_SLOTS", + "CAPTCHA_REQUIRED", + "CHANNEL_ALREADY_FOLLOWED", + "CHANNEL_HAS_FOLLOWED_CHANNELS", + "CHANNEL_HAS_THREADS", + "CHANNEL_TYPE_CONVERSION_NOT_SUPPORTED", + "COMMUNICATION_DISABLED", + "CONNECTION_ALREADY_EXISTS", + "CONNECTION_INITIATION_TOKEN_INVALID", + "CONNECTION_INVALID_TYPE", + "CONNECTION_LIMIT_REACHED", + "CONNECTION_NOT_FOUND", + "CONNECTION_VERIFICATION_FAILED", + "CONFLICT", + "CONTENT_BLOCKED", + "DELETION_FAILED", + "DISCOVERY_ALREADY_APPLIED", + "DISCOVERY_APPLICATION_ALREADY_REVIEWED", + "DISCOVERY_APPLICATION_NOT_FOUND", + "DISCOVERY_DISABLED", + "DISCOVERY_INSUFFICIENT_MEMBERS", + "DISCOVERY_NOT_DISCOVERABLE", + "DISCRIMINATOR_REQUIRED", + "EMAIL_SERVICE_NOT_TESTABLE", + "EMAIL_UNAVAILABLE_ON_INSTANCE", + "EMAIL_VERIFICATION_REQUIRED", + "DIRECT_MESSAGE_EMAIL_VERIFICATION_REQUIRED", + "FOLLOW_TARGET_CONTENT_WARNING_REQUIRED", + "FOLLOW_TARGET_NOT_AGE_RESTRICTED", + "FRIEND_REQUEST_EMAIL_VERIFICATION_REQUIRED", + "GUILD_CREATION_EMAIL_VERIFICATION_REQUIRED", + "GUILD_CREATION_PERMISSION_REQUIRED", + "GUILD_EMAIL_VERIFICATION_REQUIRED", + "INVALID_FOLLOW_TARGET_CHANNEL", + "MESSAGE_ALREADY_CROSSPOSTED", + "MESSAGE_CROSSPOST_RATE_LIMITED", + "MESSAGE_NOT_CROSSPOSTABLE", + "MFA_EMAIL_VERIFICATION_REQUIRED", + "PROFILE_EMAIL_VERIFICATION_REQUIRED", + "PUBLISHED_MESSAGE_EDIT_RATE_LIMITED", + "PURCHASE_EMAIL_VERIFICATION_REQUIRED", + "REACTION_EMAIL_VERIFICATION_REQUIRED", + "REPORT_EMAIL_VERIFICATION_REQUIRED", + "REGISTRATION_CLOSED", + "REGISTRATION_PENDING_APPROVAL", + "REGISTRATION_REJECTED", + "REGISTRATION_URL_INVALID", + "EXPLICIT_CONTENT_CANNOT_BE_SENT", + "FEATURE_NOT_AVAILABLE_SELF_HOSTED", + "FEATURE_TEMPORARILY_DISABLED", + "FILE_SIZE_TOO_LARGE", + "FORBIDDEN", + "FORUM_TAG_NAMES_MUST_BE_UNIQUE", + "FORUM_TAG_REQUIRED", + "FRIEND_REQUEST_BLOCKED", + "GATEWAY_TIMEOUT", + "GENERAL_ERROR", + "GONE", + "GIFT_CODE_ALREADY_REDEEMED", + "GUILD_TEMPLATE_INVALID", + "GUILD_VERIFICATION_REQUIRED", + "HANDOFF_CODE_EXPIRED", + "HARVEST_EXPIRED", + "HARVEST_FAILED", + "HARVEST_NOT_READY", + "HIDE_MEDIA_DOWNLOAD_OPTION_MEDIA_ONLY", + "INTERNAL_SERVER_ERROR", + "INVALID_ACLS_FORMAT", + "INVALID_API_ORIGIN", + "INVALID_AUTH_TOKEN", + "INVALID_BOT_FLAG", + "INVALID_CAPTCHA", + "INVALID_CHANNEL_TYPE_FOR_CALL", + "INVALID_CHANNEL_TYPE", + "INVALID_DSA_REPORT_TARGET", + "INVALID_DSA_TICKET", + "INVALID_DSA_VERIFICATION_CODE", + "INVALID_FLAGS_FORMAT", + "INVALID_FORM_BODY", + "INVALID_HANDOFF_CODE", + "INVALID_ORIGIN_HANDOFF_NONCE", + "INVALID_PASSKEY_BRIDGE_NONCE", + "INVALID_PERMISSIONS_INTEGER", + "INVALID_PERMISSIONS_NEGATIVE", + "INVALID_REPORT_FLOW_ANSWERS", + "INVALID_REQUEST", + "INVALID_STREAM_KEY_FORMAT", + "INVALID_STREAM_THUMBNAIL_PAYLOAD", + "INVALID_SYSTEM_FLAG", + "INVALID_TIMESTAMP", + "INVALID_TOKEN", + "INVALID_THREAD_NOTIFICATION_SETTINGS", + "INVALID_WEBAUTHN_AUTHENTICATION_COUNTER", + "INVALID_WEBAUTHN_CREDENTIAL_COUNTER", + "INVALID_WEBAUTHN_CREDENTIAL", + "INVALID_WEBAUTHN_PUBLIC_KEY_FORMAT", + "INVITES_DISABLED", + "IP_AUTHORIZATION_REQUIRED", + "IP_AUTHORIZATION_RESEND_COOLDOWN", + "IP_AUTHORIZATION_RESEND_LIMIT_EXCEEDED", + "GLOBAL_IP_BANNED", + "GLOBAL_IP_TEMPORARILY_BANNED", + "IP_BAN_DECLINED", + "MAX_APPLICATIONS", + "MAX_BOOKMARKS", + "MAX_ACTIVE_THREADS", + "MAX_CATEGORY_CHANNELS", + "MAX_EMOJIS", + "MAX_FAVORITE_MEMES", + "MAX_FRIENDS", + "MAX_FORUM_TAGS", + "MAX_GROUP_DM_RECIPIENTS", + "MAX_GROUP_DMS", + "GROUP_DM_RECIPIENTS_NOT_ADDABLE", + "MAX_GUILD_CHANNELS", + "MAX_GUILD_MEMBERS", + "MAX_GUILD_ROLES", + "MAX_GUILDS", + "MAX_PINNED_THREADS_IN_FORUM", + "MAX_INVITES", + "MAX_REACTIONS", + "MAX_STICKERS", + "MAX_THREAD_MEMBERS", + "MAX_WEBHOOKS_PER_CHANNEL", + "MAX_WEBHOOKS_PER_GUILD", + "NCMEC_ALREADY_SUBMITTED", + "NCMEC_SUBMISSION_FAILED", + "MEDIA_METADATA_ERROR", + "METHOD_NOT_ALLOWED", + "MISSING_ACCESS", + "MISSING_ACL", + "MISSING_AUTHORIZATION", + "MISSING_OAUTH_SCOPE", + "MISSING_PERMISSIONS", + "NO_ACTIVE_CALL", + "NO_ACTIVE_SUBSCRIPTION", + "NO_TAGS_AVAILABLE_TO_NON_MODERATORS", + "NOT_FOUND", + "NOT_IMPLEMENTED", + "NO_PASSKEYS_REGISTERED", + "NO_PENDING_DELETION", + "NO_USERS_WITH_FLUXERTAG_EXIST", + "NOT_A_BOT_APPLICATION", + "NOT_FRIENDS_WITH_USER", + "NSFW_CONTENT_AGE_RESTRICTED", + "PASSKEY_AUTHENTICATION_FAILED", + "PREMIUM_PURCHASE_BLOCKED", + "PREVIEW_MUST_BE_JPEG", + "PROCESSING_FAILED", + "RATE_LIMITED", + "REPORT_ALREADY_RESOLVED", + "REPORT_BANNED", + "REPORT_FLOW_OUTDATED", + "RESPONSE_VALIDATION_ERROR", + "RESOURCE_LOCKED", + "SERVICE_UNAVAILABLE", + "SESSION_TOKEN_MISMATCH", + "SINGLE_COMMUNITY_CANNOT_CREATE_GUILDS", + "SINGLE_COMMUNITY_CANNOT_DELETE", + "SINGLE_COMMUNITY_CANNOT_LEAVE", + "INSTANCE_POLICY_TRANSITION_NOT_ALLOWED", + "SLOWMODE_RATE_LIMITED", + "SEARCH_INDEX_NOT_READY", + "SSO_REQUIRED", + "STORE_BILLING_UNAVAILABLE", + "STORE_NOTIFICATION_UNAUTHORIZED", + "STORE_PURCHASE_INVALID", + "STORE_PURCHASE_OWNED_BY_OTHER_ACCOUNT", + "STORE_PURCHASE_SANDBOX_NOT_ENTITLED", + "STREAM_KEY_CHANNEL_MISMATCH", + "STREAM_KEY_SCOPE_MISMATCH", + "STRIPE_ERROR", + "STRIPE_GIFT_REDEMPTION_IN_PROGRESS", + "STRIPE_INVALID_PRODUCT", + "STRIPE_INVALID_PRODUCT_CONFIGURATION", + "STRIPE_NO_ACTIVE_SUBSCRIPTION", + "STRIPE_NO_PURCHASE_HISTORY", + "STRIPE_REFUND_OUTSIDE_WINDOW", + "STRIPE_REFUND_COOLDOWN_ACTIVE", + "STRIPE_NO_SUBSCRIPTION", + "STRIPE_PAYMENT_NOT_AVAILABLE", + "STRIPE_SUBSCRIPTION_ALREADY_CANCELING", + "STRIPE_SUBSCRIPTION_NOT_CANCELING", + "STRIPE_WEBHOOK_NOT_AVAILABLE", + "STRIPE_WEBHOOK_SIGNATURE_INVALID", + "STRIPE_WEBHOOK_SIGNATURE_MISSING", + "DIRECT_MESSAGES_DISABLED", + "NEW_CONVERSATIONS_LIMITED", + "DONATION_AMOUNT_INVALID", + "DONATION_MAGIC_LINK_EXPIRED", + "DONATION_MAGIC_LINK_INVALID", + "DONATION_MAGIC_LINK_USED", + "SUDO_MODE_REQUIRED", + "TAG_ALREADY_TAKEN", + "TEMPORARY_INVITE_REQUIRES_PRESENCE", + "TEST_HARNESS_DISABLED", + "TEST_HARNESS_FORBIDDEN", + "THREAD_ALREADY_CREATED_FOR_MESSAGE", + "THREAD_ARCHIVED", + "THREAD_LOCKED", + "TWO_FA_NOT_ENABLED", + "TWO_FACTOR_REQUIRED", + "UNAUTHORIZED", + "UNCLAIMED_ACCOUNT_CANNOT_ACCEPT_FRIEND_REQUESTS", + "UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS", + "UNCLAIMED_ACCOUNT_CANNOT_CREATE_APPLICATIONS", + "UNCLAIMED_ACCOUNT_CANNOT_CREATE_GUILDS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_GROUP_DMS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_ONE_ON_ONE_VOICE_CALLS", + "UNCLAIMED_ACCOUNT_CANNOT_JOIN_VOICE_CHANNELS", + "UNCLAIMED_ACCOUNT_CANNOT_MAKE_PURCHASES", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_DIRECT_MESSAGES", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_FRIEND_REQUESTS", + "UNCLAIMED_ACCOUNT_CANNOT_SEND_MESSAGES", + "UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS", + "UNKNOWN_CHANNEL", + "UNKNOWN_EMOJI", + "UNKNOWN_FAVORITE_MEME", + "UNKNOWN_FORUM_TAG", + "UNKNOWN_GIFT_CODE", + "UNKNOWN_GUILD", + "UNKNOWN_HARVEST", + "UNKNOWN_INVITE", + "UNKNOWN_MEMBER", + "UNKNOWN_MESSAGE", + "UNKNOWN_ORIGIN_HANDOFF", + "UNKNOWN_PASSKEY_BRIDGE", + "UNKNOWN_PASSKEY_MIGRATION", + "UNKNOWN_REPORT", + "UNKNOWN_ROLE", + "UNKNOWN_STICKER", + "UNKNOWN_STORE_PURCHASE", + "UNKNOWN_THREAD_MEMBER", + "UNKNOWN_USER_FLAG", + "UNKNOWN_USER", + "UNKNOWN_VOICE_REGION", + "UNKNOWN_VOICE_SERVER", + "UNKNOWN_WEBAUTHN_CREDENTIAL", + "UNKNOWN_APPLICATION", + "UNKNOWN_WEBHOOK", + "WEBHOOK_FORUM_TARGET_CONFLICT", + "WEBHOOK_FORUM_TARGET_REQUIRED", + "WEBHOOK_SERVICE_FORUM_UNSUPPORTED", + "WEBHOOK_THREAD_NAME_REQUIRES_FORUM", + "USERNAME_NOT_AVAILABLE", + "USERNAME_SIGN_IN_ONLY", + "UPDATE_FAILED", + "USER_BANNED_FROM_GUILD", + "USER_IP_BANNED_FROM_GUILD", + "USER_NOT_IN_VOICE", + "USER_OWNS_GUILDS", + "VALIDATION_ERROR", + "VOICE_CHANNEL_FULL", + "WEBAUTHN_CREDENTIAL_LIMIT_REACHED", + "AGE_VERIFICATION_ALREADY_VERIFIED" + ], + "description": "Known error codes returned by API operations", + "x-enumDescriptions": [ + "You don't have access to this resource or feature.", + "This action is only available in announcement channels.", + "Bad gateway.", + "Bad request.", + "We couldn't resolve that Bluesky handle. Please check it and try again.", + "Bluesky connections are not enabled on this instance.", + "Messaging is paused on your account. Check your email for a quick step to continue.", + "The sign-in method is already set and can't be changed.", + "This account has been permanently suspended.", + "This account has been temporarily suspended.", + "Your account is too new to send messages in this community.", + "ACLs must be non-empty.", + "Admin API key wasn't found.", + "You don't own this application.", + "You're already friends with this user.", + "Bots can't create communities.", + "Bots can't send friend requests.", + "This bot is already in the community.", + "This bot is private.", + "Bot users can't use auth endpoints.", + "Bot users can't create auth sessions.", + "Bot user generation failed.", + "Bot user wasn't found.", + "A call is already in progress in this channel.", + "You can't edit another user's message.", + "This action can't be performed in a DM.", + "You can't block the system user.", + "You can't edit system messages.", + "You can't redeem {premium_tier_name} with Visionary.", + "You can't report this community.", + "You can't report your own community.", + "You can't report your own message.", + "You can't report yourself.", + "You can't send an empty message.", + "You can't send a friend request to a blocked user.", + "You can't send a friend request to yourself.", + "You can't send messages in a non-text channel.", + "You can't send messages to this user.", + "Community ownership can't be transferred to a bot.", + "You can't shrink reserved slots.", + "Verification required. Try again.", + "This channel already receives updates from that announcement channel.", + "Remove the followed channels posting here before converting it to an announcement channel.", + "Channels with threads can't be converted to announcement channels.", + "Only text and announcement channels can be converted into each other.", + "Communication is disabled.", + "A connection of this type with this identifier already exists.", + "The connection initiation token is invalid or has expired.", + "The connection type is not supported.", + "You've reached the maximum number of connections ({limit}).", + "Unknown connection.", + "Connection verification failed. Make sure the verification token is correctly placed.", + "Conflict.", + "This content was blocked by safety systems.", + "We couldn't delete the resource. Please try again.", + "This community has already applied for Discovery.", + "This Discovery application has already been reviewed.", + "Discovery application wasn't found.", + "Discovery isn't available on this instance.", + "This community doesn't meet the minimum member count for Discovery.", + "This community isn't listed in Discovery.", + "Discriminator is required.", + "Email service is temporarily unavailable. Please try again later.", + "This instance doesn't use email.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Updates from a channel with a content warning can only go to a channel with a content warning or an age restriction.", + "Updates from an age-restricted channel can only go to an age-restricted channel.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "You don't have permission to create communities on this instance. Contact your instance administrator to request access.", + "Email verification is required for this action.", + "Followed channels can only post into text channels.", + "This message has already been published.", + "This channel has reached its publishing limit. It can publish 10 messages in a row, then one more every 6 minutes.", + "This message cannot be published.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "This published message has reached its editing limit. It allows 3 quick edits, then 1 every 20 minutes.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Email verification is required for this action.", + "Registration is closed on this instance.", + "This registration is waiting for admin approval.", + "This registration request was rejected.", + "This registration link is invalid or has expired.", + "Explicit content can't be sent.", + "This feature isn't available on self-hosted instances.", + "This feature is temporarily disabled.", + "File size is too large. Maximum file size is {maxSize}.", + "Forbidden.", + "Tag names must be unique.", + "A tag is required to create a post in this channel.", + "User does not accept friend requests at this time.", + "Gateway timeout.", + "Something went wrong. Please try again later.", + "Gone.", + "Gift code is already redeemed.", + "The community template data is invalid or malformed.", + "Community verification is required.", + "Handoff code expired.", + "Your data export request has expired. Please request a new export.", + "Your data export request failed. Please try again.", + "Your data export is still being prepared. Please check back in a few moments.", + "Hiding media download options is only available in media channels.", + "Internal server error.", + "Invalid ACL format.", + "Invalid API origin.", + "Invalid or expired authorization token.", + "Invalid bot flag.", + "Verification failed. Try again.", + "Calls can only be made in direct messages or group DMs.", + "Invalid channel type.", + "Invalid DSA report target.", + "Invalid DSA ticket.", + "Invalid DSA verification code.", + "Invalid flags format.", + "Invalid form body.", + "Invalid handoff code.", + "This sign-in transfer doesn't match the one you started.", + "This passkey request could not be confirmed. Try again.", + "Permissions must be a valid integer.", + "Permissions must be non-negative.", + "These answers don't match the report form. Start the report again.", + "Invalid request.", + "Invalid stream key format.", + "Invalid stream thumbnail payload.", + "Invalid system flag.", + "Invalid timestamp.", + "Invalid or expired authorization token.", + "Invalid thread notification settings.", + "Invalid WebAuthn authentication counter.", + "Invalid WebAuthn credential counter.", + "Failed to verify WebAuthn credential.", + "Invalid WebAuthn public key format.", + "Invites are disabled.", + "IP authorization is required.", + "IP authorization resend is on cooldown.", + "IP authorization resend limit exceeded.", + "Your IP address {ipAddress} has been permanently blocked from the Fluxer API by platform administrators. If you believe this is a mistake, contact support@fluxer.app to appeal. Include this IP address in your appeal.", + "Your IP address {ipAddress} has been temporarily blocked from the Fluxer API. The block lifts on its own when it expires. If you think this is a mistake, contact support@fluxer.com and include this IP address.", + "This IP address cannot be added to the blocklist.", + "You've reached the maximum of {limit, plural, one {# application} other {# applications}}.", + "You've reached the maximum of {count, plural, one {# bookmark} other {# bookmarks}}.", + "This community has reached its active thread limit of {count}.", + "You've reached the maximum of {count, plural, one {# category channel} other {# category channels}}.", + "You've reached the maximum of {count, plural, one {# emoji} other {# emojis}}.", + "You've reached the maximum of {count, plural, one {# saved media item} other {# saved media items}}.", + "You've reached the maximum of {count, plural, one {# friend} other {# friends}}.", + "This channel has reached its tag limit of {count}.", + "You've reached the maximum of {count, plural, one {# group DM recipient} other {# group DM recipients}}.", + "You've reached the maximum of {count, plural, one {# group DM} other {# group DMs}}.", + "One or more selected users can't be added to this group DM.", + "You've reached the maximum of {count, plural, one {# community channel} other {# community channels}}.", + "You've reached the maximum of {count, plural, one {# community member} other {# community members}}.", + "You've reached the maximum of {count, plural, one {# community role} other {# community roles}}.", + "You've reached the maximum of {count, plural, one {# community} other {# communities}}.", + "This channel has reached its pinned post limit of {count}.", + "You've reached the maximum of {count, plural, one {# invite} other {# invites}}.", + "You've reached the maximum of {count, plural, one {# reaction} other {# reactions}}.", + "You've reached the maximum of {count, plural, one {# sticker} other {# stickers}}.", + "This thread has reached its member limit of {count}.", + "You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per channel.", + "You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per community.", + "This content has already been submitted to NCMEC.", + "We couldn't submit the report to NCMEC. Please try again later.", + "Media metadata error.", + "Method not allowed.", + "You don't have access to this resource or feature.", + "Missing ACL.", + "Missing or invalid authorization header.", + "The requested scope isn't supported or you don't have permission to request it.", + "You don't have the permissions required to perform this action.", + "No active call.", + "No active subscription.", + "A tag is required, but only moderators can apply the tags in this channel.", + "Not found.", + "Not implemented.", + "No passkeys are registered.", + "Invalid request.", + "There are too many users with this username.", + "This application isn't a bot.", + "You're not friends with this user.", + "NSFW content is age restricted.", + "Passkey authentication failed.", + "No active subscription.", + "Preview must be JPEG.", + "We couldn't process the request. Please try again.", + "You're being rate limited.", + "Report already resolved.", + "You've been banned from submitting reports.", + "The report form changed while you were filling it in. Start the report again.", + "Response validation failed: {errors}.", + "This resource is being modified. Please try again shortly.", + "Service unavailable.", + "Session token mismatch.", + "This instance is a single community, so additional communities cannot be created.", + "The community for this instance cannot be deleted.", + "You cannot leave the community for this instance.", + "This instance policy change is not allowed.", + "Slowmode rate limited.", + "The search index isn't ready yet. Try again in a moment.", + "Invalid request.", + "In-app purchases are unavailable right now. Try again later.", + "The notification signature is invalid.", + "This purchase could not be verified.", + "This purchase is linked to a different account.", + "Test purchases cannot be applied to this account.", + "Stream key channel mismatch.", + "Stream key scope mismatch.", + "Payment processing encountered an error. Please try again or contact support.", + "Gift code redemption is in progress. Try again in a moment.", + "Invalid product selection.", + "Invalid product configuration.", + "No active subscription found.", + "No purchase history found. Customer portal isn't available.", + "This purchase is outside the 3-day self-serve refund window.", + "You can request a self-serve refund once every 30 days. Please try again later.", + "No subscription found.", + "Payment processing is temporarily unavailable. Please try again later.", + "Subscription is already set to cancel at period end.", + "Subscription isn't set to cancel.", + "Webhook processing isn't available.", + "Stripe webhook signature is invalid.", + "Stripe webhook signature is missing.", + "Direct messages and friend requests are disabled on this instance.", + "You can't start new conversations right now. Please try again later.", + "Donation amount is invalid.", + "Magic link has expired.", + "Magic link is invalid.", + "Magic link has already been used.", + "Sudo mode is required.", + "This tag is already taken.", + "Temporary invite requires presence.", + "Test harness is disabled.", + "Test harness is forbidden.", + "A thread has already been created for this message.", + "This thread is archived.", + "This thread is locked.", + "Two-factor authentication isn't enabled.", + "Two-factor authentication is required.", + "Unauthorized.", + "You're not friends with this user.", + "Invalid request.", + "Invalid request.", + "You need to complete your account setup before you can create communities.", + "You can't add yourself to a group DM.", + "Invalid request.", + "Invalid request.", + "Invalid request.", + "You can't send messages to this user.", + "Bots can't send friend requests.", + "Invalid request.", + "You need to complete your account setup before you can submit reports.", + "Channel wasn't found.", + "Unknown emoji.", + "Unknown saved media.", + "Tag wasn't found.", + "Unknown gift code.", + "Community wasn't found.", + "Unknown data export.", + "Invite wasn't found or is no longer valid.", + "Member wasn't found in this community.", + "Message wasn't found.", + "This sign-in transfer has expired or was already used.", + "This passkey request has expired. Try again.", + "There is no passkey to update right now.", + "Unknown report.", + "Role wasn't found.", + "Unknown sticker.", + "Unknown store purchase.", + "Thread member wasn't found.", + "The specified user flag isn't recognized.", + "User wasn't found.", + "Unknown voice region.", + "Unknown voice server.", + "Unknown WebAuthn credential.", + "Unknown application.", + "Unknown webhook.", + "You can't specify both `thread_id` and `thread_name`.", + "Webhooks posting to this channel need a `thread_id` or a `thread_name`.", + "This webhook service can't post to a forum or media channel without a `thread_id`.", + "`thread_name` and `applied_tags` only work in forum and media channels.", + "This username is not available.", + "This is only available on instances where people sign in with a username.", + "We couldn't update the resource. Please try again.", + "This user is banned from this community.", + "This user's IP is banned from this community.", + "This user isn't in voice.", + "This user owns communities.", + "Validation failed.", + "Voice channel is full.", + "You've reached the maximum of {count, plural, one {# WebAuthn credential} other {# WebAuthn credentials}}.", + "You've already completed age verification." + ] } }, "securitySchemes": { diff --git a/fluxer_api/src/api/report/IReportRepository.ts b/fluxer_api/src/api/report/IReportRepository.ts index 3d115220e..2faacdd4e 100644 --- a/fluxer_api/src/api/report/IReportRepository.ts +++ b/fluxer_api/src/api/report/IReportRepository.ts @@ -1,13 +1,17 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {ChannelID, GuildID, MessageID, ReportID, UserID} from '@app/api/BrandedTypes'; +import type {ApplicationID, ChannelID, GuildID, MessageID, ReportID, UserID, WebhookID} from '@app/api/BrandedTypes'; import type {MessageAttachment, MessageEmbed, MessageStickerItem} from '@app/api/database/types/MessageTypes'; import type { DSAReportEmailVerificationRow, DSAReportTicketRow, + GuildReportSubmissionByReporterRow, IARSubmissionRow, MessageReportSubmissionByReporterRow, + UserReportSubmissionByReporterRow, } from '@app/api/database/types/ReportTypes'; +import type {ReportFlowStepRecord} from '@app/api/report/flows/ReportFlowRegistry'; +import type {ReportProfileSnapshot} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; export type {IARMessageContextRow, IARSubmissionRow} from '@app/api/database/types/ReportTypes'; @@ -34,7 +38,8 @@ export function reportStatusToString(status: ReportStatus | number): string { export interface IARMessageContext { messageId: MessageID; channelId: ChannelID | null; - authorId: UserID; + authorId: UserID | null; + webhookId: WebhookID | null; authorUsername: string; authorDiscriminator: number; authorAvatarHash: string | null; @@ -50,6 +55,7 @@ export interface IARMessageContext { attachments: Array; embeds: Array; stickers: Array; + missingAttachments: Array; } export interface IARSubmission { @@ -87,6 +93,30 @@ export interface IARSubmission { reportedChannelEffectiveNsfw: boolean | null; reportedChannelEffectiveContentWarningLevel: number | null; reportedChannelEffectiveContentWarningText: string | null; + reason: string | null; + flowRevision: string | null; + flowSteps: Array | null; + flowLocale: string | null; + flowSurface: string | null; + reporterGoodFaithConfirmed: boolean | null; + reportedWebhookId: WebhookID | null; + reportedWebhookName: string | null; + reportedWebhookAvatarHash: string | null; + reportedWebhookDefaultName: string | null; + reportedWebhookDefaultAvatarHash: string | null; + reportedWebhookType: number | null; + reportedWebhookApplicationId: ApplicationID | null; + reportedWebhookChannelId: ChannelID | null; + reportedWebhookGuildId: GuildID | null; + reportedWebhookCreatedAt: Date | null; + reportedWebhookCreatorId: UserID | null; + reportedWebhookCreatorUsername: string | null; + reportedWebhookCreatorDiscriminator: number | null; + reportedWebhookCreatorGlobalName: string | null; + reportedWebhookCreatorAvatarHash: string | null; + reportedProfileSnapshot: ReportProfileSnapshot | null; + legalHoldUntil: Date | null; + legalHoldReason: string | null; } export abstract class IReportRepository { @@ -94,7 +124,15 @@ export abstract class IReportRepository { abstract reserveMessageReportByReporter(data: MessageReportSubmissionByReporterRow): Promise; - abstract deleteMessageReportByReporter(reporterId: UserID, channelId: ChannelID, messageId: MessageID): Promise; + abstract releaseMessageReportByReporter(data: MessageReportSubmissionByReporterRow): Promise; + + abstract reserveUserReportByReporter(data: UserReportSubmissionByReporterRow): Promise; + + abstract releaseUserReportByReporter(data: UserReportSubmissionByReporterRow): Promise; + + abstract reserveGuildReportByReporter(data: GuildReportSubmissionByReporterRow): Promise; + + abstract releaseGuildReportByReporter(data: GuildReportSubmissionByReporterRow): Promise; abstract getReport(reportId: ReportID): Promise; @@ -105,11 +143,21 @@ export abstract class IReportRepository { auditLogReason: string | null, ): Promise; + abstract setReportLegalHold( + reportId: ReportID, + legalHoldUntil: Date | null, + legalHoldReason: string | null, + ): Promise; + + abstract clearReporterEmail(reportId: ReportID, reporterId: UserID): Promise; + + abstract deleteReport(reportId: ReportID): Promise; + abstract listAllReportsPaginated(limit: number, lastReportId?: ReportID): Promise>; abstract upsertDsaEmailVerification(row: DSAReportEmailVerificationRow): Promise; - abstract deleteDsaEmailVerification(emailLower: string): Promise; + abstract consumeDsaEmailVerification(emailLower: string, codeHash: string): Promise; abstract getDsaEmailVerification(emailLower: string): Promise; @@ -117,5 +165,5 @@ export abstract class IReportRepository { abstract getDsaTicket(ticket: string): Promise; - abstract deleteDsaTicket(ticket: string): Promise; + abstract consumeDsaTicket(ticket: string, emailLower: string): Promise; } diff --git a/fluxer_api/src/api/report/ReportController.ts b/fluxer_api/src/api/report/ReportController.ts index 692217808..c5031ef47 100644 --- a/fluxer_api/src/api/report/ReportController.ts +++ b/fluxer_api/src/api/report/ReportController.ts @@ -8,9 +8,17 @@ import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware'; import {RateLimitConfigs} from '@app/api/RateLimitConfig'; import type {HonoApp} from '@app/api/types/HonoEnv'; import {Validator} from '@app/api/Validator'; +import { + ReportFlowMessageSubmissionRequest, + ReportFlowPathParams, + ReportFlowQuery, + ReportFlowResponse, + ReportFlowUserSubmissionRequest, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; import { DsaReportEmailSendRequest, DsaReportEmailVerifyRequest, + DsaReportFlowRequest, DsaReportRequest, OkResponse, ReportGuildRequest, @@ -21,6 +29,86 @@ import { } from '@fluxer/schema/src/domains/report/ReportSchemas'; export function ReportController(app: HonoApp) { + app.get( + '/reports/flows/:target_type', + RateLimitMiddleware(RateLimitConfigs.REPORT_LIST), + OpenAPI({ + operationId: 'get_report_flow', + summary: 'Get report flow', + description: + 'Returns every screen of the report flow for a target type, rendered in the requested locale. Message and user flows are available in app and on the DSA form, the guild flow only on the DSA form.', + responseSchema: ReportFlowResponse, + statusCode: 200, + security: [], + tags: 'Reports', + }), + Validator('param', ReportFlowPathParams), + Validator('query', ReportFlowQuery), + async (ctx) => { + const {target_type} = ctx.req.valid('param'); + const {surface, locale} = ctx.req.valid('query'); + const flow = ctx.get('reportRequestService').getReportFlow({ + target: target_type, + surface, + locale: locale ?? ctx.get('requestLocale') ?? null, + }); + ctx.header('Cache-Control', 'private, no-cache'); + ctx.header('Vary', 'Accept-Language'); + return ctx.json(flow); + }, + ); + app.post( + '/reports/flows/message/submissions', + RateLimitMiddleware(RateLimitConfigs.REPORT_CREATE), + LoginRequired, + DefaultUserOnly, + OpenAPI({ + operationId: 'submit_message_report_flow', + summary: 'Submit message report flow', + description: + 'Files a report about a message from the answers given in the in-app message report flow. The reporter must be able to access the channel and target message.', + responseSchema: ReportResponse, + statusCode: 200, + security: ['bearerToken', 'sessionToken'], + tags: 'Reports', + }), + Validator('json', ReportFlowMessageSubmissionRequest), + async (ctx) => { + return ctx.json( + await ctx.get('reportRequestService').submitMessageReportFlow({ + user: ctx.get('user'), + viewer: viewerFromCtx(ctx), + data: ctx.req.valid('json'), + locale: ctx.get('requestLocale') ?? null, + }), + ); + }, + ); + app.post( + '/reports/flows/user/submissions', + RateLimitMiddleware(RateLimitConfigs.REPORT_CREATE), + LoginRequired, + DefaultUserOnly, + OpenAPI({ + operationId: 'submit_user_report_flow', + summary: 'Submit user report flow', + description: 'Files a report about a user profile from the answers given in the in-app user profile report flow.', + responseSchema: ReportResponse, + statusCode: 200, + security: ['bearerToken', 'sessionToken'], + tags: 'Reports', + }), + Validator('json', ReportFlowUserSubmissionRequest), + async (ctx) => { + return ctx.json( + await ctx.get('reportRequestService').submitUserReportFlow({ + user: ctx.get('user'), + data: ctx.req.valid('json'), + locale: ctx.get('requestLocale') ?? null, + }), + ); + }, + ); app.post( '/reports/message', RateLimitMiddleware(RateLimitConfigs.REPORT_CREATE), @@ -102,9 +190,11 @@ export function ReportController(app: HonoApp) { OpenAPI({ operationId: 'send_dsa_report_email', summary: 'Send DSA report email', - description: 'Initiates DSA (Digital Services Act) report submission by sending verification email to reporter.', + description: + 'Initiates DSA (Digital Services Act) report submission by sending verification email to reporter. Responds with 503 when the email could not be sent.', responseSchema: OkResponse, statusCode: 200, + errorStatusCodes: [503], security: [], tags: 'Reports', }), @@ -141,15 +231,22 @@ export function ReportController(app: HonoApp) { OpenAPI({ operationId: 'create_dsa_report', summary: 'Create DSA report', - description: 'Creates a DSA complaint report with verified email for Digital Services Act compliance.', + description: + 'Creates a DSA complaint report with verified email for Digital Services Act compliance. The reason comes from the answers given in the DSA report flow.', responseSchema: ReportResponse, + requestSchema: DsaReportFlowRequest, statusCode: 200, security: [], tags: 'Reports', }), Validator('json', DsaReportRequest), async (ctx) => { - return ctx.json(await ctx.get('reportRequestService').createDsaReport({data: ctx.req.valid('json')})); + return ctx.json( + await ctx.get('reportRequestService').createDsaReport({ + data: ctx.req.valid('json'), + locale: ctx.get('requestLocale') ?? null, + }), + ); }, ); } diff --git a/fluxer_api/src/api/report/ReportRepository.ts b/fluxer_api/src/api/report/ReportRepository.ts index dd29bd409..58719ad67 100644 --- a/fluxer_api/src/api/report/ReportRepository.ts +++ b/fluxer_api/src/api/report/ReportRepository.ts @@ -1,29 +1,44 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {ChannelID, MessageID, ReportID, UserID} from '@app/api/BrandedTypes'; -import {createChannelID, createGuildID, createMessageID, createReportID, createUserID} from '@app/api/BrandedTypes'; -import {fetchMany, fetchOne, upsertOne} from '@app/api/database/CassandraQueryExecution'; +import type {ReportID, UserID} from '@app/api/BrandedTypes'; +import { + createApplicationID, + createChannelID, + createGuildID, + createMessageID, + createReportID, + createUserID, + createWebhookID, +} from '@app/api/BrandedTypes'; +import {executeConditional, fetchMany, fetchOne, upsertOne} from '@app/api/database/CassandraQueryExecution'; import {Db} from '@app/api/database/CassandraTypes'; import type { DSAReportEmailVerificationRow, DSAReportTicketRow, + GuildReportSubmissionByReporterRow, MessageReportSubmissionByReporterRow, + UserReportSubmissionByReporterRow, } from '@app/api/database/types/ReportTypes'; -import type { - IARMessageContext, - IARMessageContextRow, - IARSubmission, - IARSubmissionRow, - IReportRepository, +import {parseReportFlowSteps} from '@app/api/report/flows/ReportFlowRegistry'; +import { + type IARMessageContext, + type IARMessageContextRow, + type IARSubmission, + type IARSubmissionRow, + type IReportRepository, + ReportStatus, } from '@app/api/report/IReportRepository'; import { DSAReportEmailVerifications, DSAReportTickets, + GuildReportSubmissionsByReporter, IARSubmissions, MessageReportSubmissionsByReporter, + UserReportSubmissionsByReporter, } from '@app/api/Tables'; import {ReportAlreadyResolvedError} from '@fluxer/errors/src/domains/moderation/ReportAlreadyResolvedError'; import {UnknownReportError} from '@fluxer/errors/src/domains/moderation/UnknownReportError'; +import {parseReportProfileSnapshot} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; const GET_REPORT_QUERY = IARSubmissions.select({ where: IARSubmissions.where.eq('report_id'), @@ -42,46 +57,60 @@ const GET_DSA_REPORT_TICKET_QUERY = DSAReportTickets.select({ where: DSAReportTickets.where.eq('ticket'), limit: 1, }); -const GET_MESSAGE_REPORT_SUBMISSION_BY_REPORTER_QUERY = MessageReportSubmissionsByReporter.select({ - where: [ - MessageReportSubmissionsByReporter.where.eq('reporter_id'), - MessageReportSubmissionsByReporter.where.eq('channel_id'), - MessageReportSubmissionsByReporter.where.eq('message_id'), - ], - limit: 1, -}); - +const DSA_EMAIL_VERIFICATION_WRITE_ATTEMPTS = 5; function createFetchAllReportsFirstPageQuery(limit: number) { return IARSubmissions.select({limit}); } export class ReportRepository implements IReportRepository { async createReport(data: IARSubmissionRow): Promise { - await upsertOne(IARSubmissions.insert(data)); - return this.mapRowToSubmission(data); + const row: IARSubmissionRow = { + ...data, + reported_profile_snapshot: data.reported_profile_snapshot ?? null, + legal_hold_until: data.legal_hold_until ?? null, + legal_hold_reason: data.legal_hold_reason ?? null, + }; + await upsertOne(IARSubmissions.insert(row)); + return this.mapRowToSubmission(row); } async reserveMessageReportByReporter(data: MessageReportSubmissionByReporterRow): Promise { - const existing = await fetchOne( - GET_MESSAGE_REPORT_SUBMISSION_BY_REPORTER_QUERY.bind({ - reporter_id: data.reporter_id, - channel_id: data.channel_id, - message_id: data.message_id, - }), - ); - if (existing) { - return false; - } - await upsertOne(MessageReportSubmissionsByReporter.insert(data)); - return true; + return executeConditional(MessageReportSubmissionsByReporter.insertIfNotExists(data)); } - async deleteMessageReportByReporter(reporterId: UserID, channelId: ChannelID, messageId: MessageID): Promise { - await MessageReportSubmissionsByReporter.deleteByPk({ - reporter_id: reporterId, - channel_id: channelId, - message_id: messageId, - }); + async releaseMessageReportByReporter(data: MessageReportSubmissionByReporterRow): Promise { + await executeConditional( + MessageReportSubmissionsByReporter.conditionalDeleteByPk( + {reporter_id: data.reporter_id, channel_id: data.channel_id, message_id: data.message_id}, + {report_id: data.report_id}, + ), + ); + } + + async reserveUserReportByReporter(data: UserReportSubmissionByReporterRow): Promise { + return executeConditional(UserReportSubmissionsByReporter.insertIfNotExists(data)); + } + + async releaseUserReportByReporter(data: UserReportSubmissionByReporterRow): Promise { + await executeConditional( + UserReportSubmissionsByReporter.conditionalDeleteByPk( + {reporter_id: data.reporter_id, reported_user_id: data.reported_user_id}, + {report_id: data.report_id}, + ), + ); + } + + async reserveGuildReportByReporter(data: GuildReportSubmissionByReporterRow): Promise { + return executeConditional(GuildReportSubmissionsByReporter.insertIfNotExists(data)); + } + + async releaseGuildReportByReporter(data: GuildReportSubmissionByReporterRow): Promise { + await executeConditional( + GuildReportSubmissionsByReporter.conditionalDeleteByPk( + {reporter_id: data.reporter_id, reported_guild_id: data.reported_guild_id}, + {report_id: data.report_id}, + ), + ); } async getReport(reportId: ReportID): Promise { @@ -99,13 +128,13 @@ export class ReportRepository implements IReportRepository { if (!report) { throw new UnknownReportError(); } - if (report.status !== 0) { + if (report.status !== ReportStatus.PENDING) { throw new ReportAlreadyResolvedError(); } const resolvedAt = new Date(); - const newStatus = 1; - await upsertOne( - IARSubmissions.patchByPk( + const newStatus = ReportStatus.RESOLVED; + const resolved = await executeConditional( + IARSubmissions.conditionalPatchByPk( {report_id: reportId}, { resolved_at: Db.set(resolvedAt), @@ -114,8 +143,12 @@ export class ReportRepository implements IReportRepository { audit_log_reason: Db.set(auditLogReason), status: Db.set(newStatus), }, + {status: ReportStatus.PENDING}, ), ); + if (!resolved) { + throw new ReportAlreadyResolvedError(); + } return { ...report, resolvedAt, @@ -126,6 +159,48 @@ export class ReportRepository implements IReportRepository { }; } + async setReportLegalHold( + reportId: ReportID, + legalHoldUntil: Date | null, + legalHoldReason: string | null, + ): Promise { + const report = await this.getReport(reportId); + if (!report) { + throw new UnknownReportError(); + } + const written = await executeConditional( + IARSubmissions.conditionalPatchByPk( + {report_id: reportId}, + {legal_hold_until: Db.set(legalHoldUntil), legal_hold_reason: Db.set(legalHoldReason)}, + {report_type: report.reportType}, + ), + ); + if (!written) { + throw new UnknownReportError(); + } + return {...report, legalHoldUntil, legalHoldReason}; + } + + async clearReporterEmail(reportId: ReportID, reporterId: UserID): Promise { + return executeConditional( + IARSubmissions.conditionalPatchByPk( + {report_id: reportId}, + {reporter_email: Db.set(null)}, + {reporter_id: reporterId}, + ), + ); + } + + async deleteReport(reportId: ReportID): Promise { + const report = await this.getReport(reportId); + if (!report) { + return; + } + await executeConditional( + IARSubmissions.conditionalDeleteByPk({report_id: reportId}, {report_type: report.reportType}), + ); + } + private mapRowToSubmission(row: IARSubmissionRow): IARSubmission { return { reportId: createReportID(row.report_id), @@ -162,6 +237,34 @@ export class ReportRepository implements IReportRepository { reportedChannelEffectiveNsfw: row.reported_channel_effective_nsfw ?? null, reportedChannelEffectiveContentWarningLevel: row.reported_channel_effective_content_warning_level ?? null, reportedChannelEffectiveContentWarningText: row.reported_channel_effective_content_warning_text ?? null, + reason: row.reason ?? null, + flowRevision: row.flow_revision ?? null, + flowSteps: parseReportFlowSteps(row.flow_steps), + flowLocale: row.flow_locale ?? null, + flowSurface: row.flow_surface ?? null, + reporterGoodFaithConfirmed: row.reporter_good_faith_confirmed ?? null, + reportedWebhookId: row.reported_webhook_id ? createWebhookID(row.reported_webhook_id) : null, + reportedWebhookName: row.reported_webhook_name ?? null, + reportedWebhookAvatarHash: row.reported_webhook_avatar_hash ?? null, + reportedWebhookDefaultName: row.reported_webhook_default_name ?? null, + reportedWebhookDefaultAvatarHash: row.reported_webhook_default_avatar_hash ?? null, + reportedWebhookType: row.reported_webhook_type ?? null, + reportedWebhookApplicationId: row.reported_webhook_application_id + ? createApplicationID(row.reported_webhook_application_id) + : null, + reportedWebhookChannelId: row.reported_webhook_channel_id + ? createChannelID(row.reported_webhook_channel_id) + : null, + reportedWebhookGuildId: row.reported_webhook_guild_id ? createGuildID(row.reported_webhook_guild_id) : null, + reportedWebhookCreatedAt: row.reported_webhook_created_at ?? null, + reportedWebhookCreatorId: row.reported_webhook_creator_id ? createUserID(row.reported_webhook_creator_id) : null, + reportedWebhookCreatorUsername: row.reported_webhook_creator_username ?? null, + reportedWebhookCreatorDiscriminator: row.reported_webhook_creator_discriminator ?? null, + reportedWebhookCreatorGlobalName: row.reported_webhook_creator_global_name ?? null, + reportedWebhookCreatorAvatarHash: row.reported_webhook_creator_avatar_hash ?? null, + reportedProfileSnapshot: parseReportProfileSnapshot(row.reported_profile_snapshot), + legalHoldUntil: row.legal_hold_until ?? null, + legalHoldReason: row.legal_hold_reason ?? null, }; } @@ -178,7 +281,24 @@ export class ReportRepository implements IReportRepository { } async upsertDsaEmailVerification(row: DSAReportEmailVerificationRow): Promise { - await upsertOne(DSAReportEmailVerifications.insert(row)); + for (let attempt = 0; attempt < DSA_EMAIL_VERIFICATION_WRITE_ATTEMPTS; attempt++) { + const current = await this.getDsaEmailVerification(row.email_lower); + const written = await executeConditional( + current + ? DSAReportEmailVerifications.conditionalPatchByPk( + {email_lower: row.email_lower}, + { + code_hash: Db.set(row.code_hash), + expires_at: Db.set(row.expires_at), + last_sent_at: Db.set(row.last_sent_at), + }, + {code_hash: current.code_hash}, + ) + : DSAReportEmailVerifications.insertIfNotExists(row), + ); + if (written) return; + } + throw new Error('DSA email verification kept changing during write'); } async getDsaEmailVerification(emailLower: string): Promise { @@ -188,12 +308,17 @@ export class ReportRepository implements IReportRepository { return row ?? null; } - async deleteDsaEmailVerification(emailLower: string): Promise { - await DSAReportEmailVerifications.deleteByPk({email_lower: emailLower}); + async consumeDsaEmailVerification(emailLower: string, codeHash: string): Promise { + return executeConditional( + DSAReportEmailVerifications.conditionalDeleteByPk({email_lower: emailLower}, {code_hash: codeHash}), + ); } async createDsaTicket(row: DSAReportTicketRow): Promise { - await upsertOne(DSAReportTickets.insert(row)); + const created = await executeConditional(DSAReportTickets.insertIfNotExists(row)); + if (!created) { + throw new Error('DSA ticket already exists'); + } } async getDsaTicket(ticket: string): Promise { @@ -201,8 +326,8 @@ export class ReportRepository implements IReportRepository { return row ?? null; } - async deleteDsaTicket(ticket: string): Promise { - await DSAReportTickets.deleteByPk({ticket}); + async consumeDsaTicket(ticket: string, emailLower: string): Promise { + return executeConditional(DSAReportTickets.conditionalDeleteByPk({ticket}, {email_lower: emailLower})); } private mapMessageContext(rawContext: Array): Array { @@ -210,7 +335,8 @@ export class ReportRepository implements IReportRepository { collection ? Array.from(collection) : []; return rawContext.map((msg) => ({ messageId: createMessageID(msg.message_id), - authorId: createUserID(msg.author_id), + authorId: msg.author_id ? createUserID(msg.author_id) : null, + webhookId: msg.webhook_id ? createWebhookID(msg.webhook_id) : null, channelId: msg.channel_id ? createChannelID(msg.channel_id) : null, authorUsername: msg.author_username, authorDiscriminator: msg.author_discriminator, @@ -227,6 +353,7 @@ export class ReportRepository implements IReportRepository { attachments: msg.attachments ?? [], embeds: msg.embeds ?? [], stickers: msg.sticker_items ?? [], + missingAttachments: msg.missing_attachments ?? [], })); } } diff --git a/fluxer_api/src/api/report/ReportRequestService.ts b/fluxer_api/src/api/report/ReportRequestService.ts index 4540bcf8f..be88a56ce 100644 --- a/fluxer_api/src/api/report/ReportRequestService.ts +++ b/fluxer_api/src/api/report/ReportRequestService.ts @@ -3,10 +3,24 @@ import {requireEmailVerified} from '@app/api/auth/EmailVerificationUtils'; import {createChannelID, createGuildID, createInviteCode, createMessageID, createUserID} from '@app/api/BrandedTypes'; import type {ThreadViewer} from '@app/api/experiment/ChannelThreadsGate'; +import {Logger} from '@app/api/Logger'; import type {User} from '@app/api/models/User'; +import { + getReportFlowResponse, + resolveReportFlowAnswers, + resolveReportFlowLocale, +} from '@app/api/report/flows/ReportFlowRegistry'; import {type ReportStatus, reportStatusToString} from '@app/api/report/IReportRepository'; -import type {ReportService} from '@app/api/report/ReportService'; +import type {ReportFlowRecord, ReportService} from '@app/api/report/ReportService'; import {UnclaimedAccountCannotSubmitReportsError} from '@fluxer/errors/src/domains/moderation/UnclaimedAccountCannotSubmitReportsError'; +import type { + ReportFlowMessageSubmissionRequest, + ReportFlowResponse, + ReportFlowStep, + ReportFlowSurface, + ReportFlowTargetType, + ReportFlowUserSubmissionRequest, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; import type { DsaReportEmailSendRequest, DsaReportEmailVerifyRequest, @@ -28,6 +42,18 @@ interface ReportDsaRequestContext { locale?: string | null; } +interface ReportFlowSubmissionContext { + user: User; + data: T; + locale: string | null; +} + +interface ReportFlowAnswersInput { + revision_hash: string; + steps: Array; + locale?: string | undefined; +} + interface ReportRecord { reportId: bigint; status: ReportStatus; @@ -75,6 +101,52 @@ export class ReportRequestService { return this.toReportResponse(report); } + getReportFlow(params: { + target: ReportFlowTargetType; + surface: ReportFlowSurface; + locale: string | null; + }): ReportFlowResponse { + return getReportFlowResponse(params.target, params.surface, params.locale); + } + + async submitMessageReportFlow({ + user, + viewer, + data, + locale, + }: ReportFlowSubmissionContext & { + viewer: ThreadViewer; + }): Promise { + this.requireVerifiedAccount(user); + const flow = this.resolveInAppFlow('message', data, locale); + const report = await this.reportService.reportMessage( + this.createReporter(user), + viewer, + createChannelID(data.channel_id), + createMessageID(data.message_id), + flow.category, + flow.record, + ); + return this.toReportResponse(report); + } + + async submitUserReportFlow({ + user, + data, + locale, + }: ReportFlowSubmissionContext): Promise { + this.requireVerifiedAccount(user); + const flow = this.resolveInAppFlow('user', data, locale); + const report = await this.reportService.reportUser( + this.createReporter(user), + createUserID(data.user_id), + flow.category, + data.guild_id ? createGuildID(data.guild_id) : undefined, + flow.record, + ); + return this.toReportResponse(report); + } + async sendDsaReportVerificationEmail({ data, locale, @@ -87,11 +159,40 @@ export class ReportRequestService { return {ticket}; } - async createDsaReport({data}: ReportDsaRequestContext): Promise { - const report = await this.reportService.createDsaReport(data); + async createDsaReport({data, locale}: ReportDsaRequestContext): Promise { + const report = await this.reportService.createDsaReport(data, locale ?? null); return this.toReportResponse(report); } + private resolveInAppFlow( + target: ReportFlowTargetType, + data: ReportFlowAnswersInput, + locale: string | null, + ): {category: string; record: ReportFlowRecord} { + const answers = resolveReportFlowAnswers({ + target, + surface: 'in_app', + revisionHash: data.revision_hash, + steps: data.steps, + }); + if (!answers.isCurrentRevision) { + Logger.warn( + {clientRevision: data.revision_hash, currentRevision: answers.currentRevisionHash, target}, + 'Accepted a report flow submission from an outdated revision', + ); + } + return { + category: answers.legacyCategory, + record: { + reason: answers.reason, + revisionHash: data.revision_hash, + stepsJson: answers.stepsJson, + locale: resolveReportFlowLocale(data.locale ?? locale), + surface: 'in_app', + }, + }; + } + private requireVerifiedAccount(user: User): void { if (user.isUnclaimedAccount()) { throw new UnclaimedAccountCannotSubmitReportsError(); diff --git a/fluxer_api/src/api/report/ReportService.ts b/fluxer_api/src/api/report/ReportService.ts index a97a72f93..544c22cbb 100644 --- a/fluxer_api/src/api/report/ReportService.ts +++ b/fluxer_api/src/api/report/ReportService.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {createHash, randomBytes, randomInt} from 'node:crypto'; -import type {ChannelID, GuildID, InviteCode, MessageID, ReportID, UserID} from '@app/api/BrandedTypes'; +import type {ChannelID, GuildID, InviteCode, MessageID, ReportID, UserID, WebhookID} from '@app/api/BrandedTypes'; import { createAttachmentID, createChannelID, @@ -10,6 +10,7 @@ import { createMessageID, createReportID, createUserID, + guildIdToRoleId, } from '@app/api/BrandedTypes'; import {Config} from '@app/api/Config'; import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; @@ -25,7 +26,12 @@ import { } from '@app/api/channel/utils/EffectiveContentWarning'; import {resolveNsfwScopeChannel} from '@app/api/channel/utils/ThreadNsfwScope'; import type {MessageAttachment} from '@app/api/database/types/MessageTypes'; -import type {DSAReportTicketRow} from '@app/api/database/types/ReportTypes'; +import type { + DSAReportTicketRow, + GuildReportSubmissionByReporterRow, + MessageReportSubmissionByReporterRow, + UserReportSubmissionByReporterRow, +} from '@app/api/database/types/ReportTypes'; import type {ThreadViewer} from '@app/api/experiment/ChannelThreadsGate'; import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate'; import {emitActivity} from '@app/api/infrastructure/activity/ActivityEvents'; @@ -40,8 +46,11 @@ import {Logger} from '@app/api/Logger'; import type {Attachment} from '@app/api/models/Attachment'; import type {Channel} from '@app/api/models/Channel'; import type {Guild} from '@app/api/models/Guild'; +import type {GuildMember} from '@app/api/models/GuildMember'; import type {Message} from '@app/api/models/Message'; import type {User} from '@app/api/models/User'; +import type {Webhook} from '@app/api/models/Webhook'; +import {resolveReportFlowAnswers, resolveReportFlowLocale} from '@app/api/report/flows/ReportFlowRegistry'; import type { IARMessageContextRow, IARSubmission, @@ -52,10 +61,14 @@ import {ReportStatus, ReportType} from '@app/api/report/IReportRepository'; import type {IReportSearchService} from '@app/api/search/IReportSearchService'; import type {IUserRepository} from '@app/api/user/IUserRepository'; import {isUnderEnforcement} from '@app/api/user/ProfileVisibility'; +import {isAccountClosed} from '@app/api/user/UserHelpers'; +import type {IWebhookRepository} from '@app/api/webhook/IWebhookRepository'; +import {buildHashedAssetKey} from '@app/api/worker/utils/AssetArchiveHelpers'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {ME} from '@fluxer/constants/src/AppConstants'; import {InviteTypes, MessageFlags, Permissions} from '@fluxer/constants/src/ChannelConstants'; import {GuildFeatures} from '@fluxer/constants/src/GuildConstants'; -import {UserFlags} from '@fluxer/constants/src/UserConstants'; +import {DELETED_USER_USERNAME, UserFlags} from '@fluxer/constants/src/UserConstants'; import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes'; import {CannotReportOwnMessageError} from '@fluxer/errors/src/domains/channel/CannotReportOwnMessageError'; import {UnknownChannelError} from '@fluxer/errors/src/domains/channel/UnknownChannelError'; @@ -64,6 +77,7 @@ import {ConflictError} from '@fluxer/errors/src/domains/core/ConflictError'; import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError'; import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError'; import {RateLimitError} from '@fluxer/errors/src/domains/core/RateLimitError'; +import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; import {CannotReportGuildError} from '@fluxer/errors/src/domains/guild/CannotReportGuildError'; import {CannotReportOwnGuildError} from '@fluxer/errors/src/domains/guild/CannotReportOwnGuildError'; import {UnknownGuildError} from '@fluxer/errors/src/domains/guild/UnknownGuildError'; @@ -75,6 +89,14 @@ import {InvalidDsaVerificationCodeError} from '@fluxer/errors/src/domains/modera import {ReportBannedError} from '@fluxer/errors/src/domains/moderation/ReportBannedError'; import {UnknownReportError} from '@fluxer/errors/src/domains/moderation/UnknownReportError'; import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError'; +import type {ReportFlowSurface} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import { + type ReportProfileAssetSnapshot, + type ReportProfileGuildSnapshot, + type ReportProfileMemberSnapshot, + type ReportProfileUserSnapshot, + serializeReportProfileSnapshot, +} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; import type {DsaReportRequest} from '@fluxer/schema/src/domains/report/ReportSchemas'; import {SnowflakeType} from '@fluxer/schema/src/primitives/SchemaPrimitives'; import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake'; @@ -89,6 +111,119 @@ interface ReporterMetadata { countryOfResidence: string | null; } +export interface ReportFlowRecord { + reason: string; + revisionHash: string; + stepsJson: string; + locale: string; + surface: ReportFlowSurface; +} + +interface ReportedAuthor { + userId: UserID | null; + webhookId: WebhookID | null; + webhookName: string | null; + webhookAvatarHash: string | null; +} + +interface DsaReportClassification { + category: string; + flow: ReportFlowRecord | null; +} + +type MessageContextScope = 'window' | 'target'; + +interface ProfileSnapshotSubject { + user?: User | null; + memberGuildId?: GuildID | null; + guild?: Guild | null; +} + +interface ClonedReportAttachments { + preserved: Array; + missing: Array; +} + +interface DsaReportDraft { + row: IARSubmissionRow; + profileSubject: ProfileSnapshotSubject; +} + +type ReportFlowColumns = Pick< + IARSubmissionRow, + 'reason' | 'flow_revision' | 'flow_steps' | 'flow_locale' | 'flow_surface' | 'reporter_good_faith_confirmed' +>; + +function buildReportFlowColumns(flow: ReportFlowRecord | null): ReportFlowColumns { + return { + reason: flow?.reason ?? null, + flow_revision: flow?.revisionHash ?? null, + flow_steps: flow?.stepsJson ?? null, + flow_locale: flow?.locale ?? null, + flow_surface: flow?.surface ?? null, + reporter_good_faith_confirmed: flow?.surface === 'dsa' ? true : null, + }; +} + +type ReportedWebhookColumns = Pick< + IARSubmissionRow, + | 'reported_webhook_id' + | 'reported_webhook_name' + | 'reported_webhook_avatar_hash' + | 'reported_webhook_default_name' + | 'reported_webhook_default_avatar_hash' + | 'reported_webhook_type' + | 'reported_webhook_application_id' + | 'reported_webhook_channel_id' + | 'reported_webhook_guild_id' + | 'reported_webhook_created_at' + | 'reported_webhook_creator_id' + | 'reported_webhook_creator_username' + | 'reported_webhook_creator_discriminator' + | 'reported_webhook_creator_global_name' + | 'reported_webhook_creator_avatar_hash' +>; + +function buildReportedWebhookColumns( + author: ReportedAuthor | null, + webhook: Webhook | null = null, + creator: User | null = null, +): ReportedWebhookColumns { + const creatorSnapshot = creator && !isAccountClosed(creator) ? creator : null; + return { + reported_webhook_id: author?.webhookId ?? null, + reported_webhook_name: author?.webhookName ?? null, + reported_webhook_avatar_hash: author?.webhookAvatarHash ?? null, + reported_webhook_default_name: webhook?.name ?? null, + reported_webhook_default_avatar_hash: webhook?.avatarHash ?? null, + reported_webhook_type: webhook?.type ?? null, + reported_webhook_application_id: creator?.isBot ? creator.id : null, + reported_webhook_channel_id: webhook?.channelId ?? null, + reported_webhook_guild_id: webhook?.guildId ?? null, + reported_webhook_created_at: author?.webhookId ? snowflakeToDate(author.webhookId) : null, + reported_webhook_creator_id: webhook?.creatorId ?? null, + reported_webhook_creator_username: creatorSnapshot?.username ?? null, + reported_webhook_creator_discriminator: creatorSnapshot?.discriminator ?? null, + reported_webhook_creator_global_name: creatorSnapshot?.globalName ?? null, + reported_webhook_creator_avatar_hash: creatorSnapshot?.avatarHash ?? null, + }; +} + +function messageAuthor(message: Message): ReportedAuthor | null { + if (message.authorId) { + return {userId: message.authorId, webhookId: null, webhookName: null, webhookAvatarHash: null}; + } + if (message.webhookId) { + return { + userId: null, + webhookId: message.webhookId, + webhookName: message.webhookName, + webhookAvatarHash: message.webhookAvatarHash, + }; + } + return null; +} + const REPORT_RATE_LIMIT_WINDOW = ms('1 hour'); const REPORT_RATE_LIMIT_MAX = 5; const MESSAGE_REPORT_USER_GUILD_RATE_LIMIT_MAX = 4; @@ -101,10 +236,13 @@ const DSA_CODE_SEPARATOR = '-'; const DSA_TICKET_BYTES = 32; const DSA_EMAIL_SEND_RECIPIENT_MAX = 3; const DSA_EMAIL_SEND_RECIPIENT_WINDOW = ms('1 hour'); +const DSA_EMAIL_RESEND_COOLDOWN = ms('1 minute'); +const DSA_EMAIL_VERIFY_ADDRESS_MAX = 5; +const DSA_EMAIL_VERIFY_ADDRESS_WINDOW = ms('10 minutes'); +const PUBLIC_CHANNEL_PERMISSIONS = Permissions.VIEW_CHANNEL | Permissions.READ_MESSAGE_HISTORY; async function emitReportFiled(row: IARSubmissionRow, target: ReportTarget): Promise { - const key = row.reported_user_id ?? row.reporter_id; - if (key === null) return; + const key = row.reported_user_id ?? row.reporter_id ?? 0n; await emitActivity( 'report_filed', key.toString(), @@ -138,6 +276,7 @@ export class ReportService { private storageService: IStorageService, private gatewayService: IGatewayService, private rateLimitService: IRateLimitService, + private webhookRepository: IWebhookRepository, private reportSearchService: IReportSearchService | null = null, ) { this.messageChannelAuthService = new MessageChannelAuthService( @@ -154,6 +293,7 @@ export class ReportService { channelId: ChannelID, messageId: MessageID, category: string, + flow: ReportFlowRecord | null = null, ): Promise { await this.checkReportBan(reporter.id); const reporterKey = this.getReporterRateLimitKey(reporter); @@ -164,18 +304,19 @@ export class ReportService { channelId, messageId, }); - const reportedUserId = await this.resolveReportedAuthorId(message); - if (reportedUserId == null) { + const author = await this.resolveReportedAuthor(message); + if (!author) { throw new UnknownMessageError(); } - if (reporter.id && reportedUserId === reporter.id) { + if (reporter.id && author.userId === reporter.id) { throw new CannotReportOwnMessageError(); } - const [reportedUser, messageContext] = await Promise.all([ - this.userRepository.findUnique(reportedUserId), - this.gatherMessageContext(channelId, messageId, authChannel, reportedUserId), + const [reportedUser, messageContext, webhookColumns] = await Promise.all([ + author.userId ? this.userRepository.findUnique(author.userId) : null, + this.gatherMessageContext(channelId, messageId, author, authChannel), + this.snapshotReportedWebhook(author), ]); - if (!reportedUser) { + if (author.userId && !reportedUser) { throw new UnknownUserError(); } const reportId = createReportID(await this.snowflakeService.generate()); @@ -184,7 +325,7 @@ export class ReportService { const reportData: IARSubmissionRow = { report_id: reportId, reporter_id: reporter.id, - reporter_email: reporter.email, + reporter_email: null, reporter_full_legal_name: reporter.fullLegalName, reporter_country_of_residence: reporter.countryOfResidence, reported_at: new Date(), @@ -192,8 +333,8 @@ export class ReportService { report_type: ReportType.MESSAGE, category, additional_info: null, - reported_user_id: reportedUserId, - reported_user_avatar_hash: reportedUser.avatarHash || null, + reported_user_id: author.userId, + reported_user_avatar_hash: reportedUser?.avatarHash || null, reported_guild_id: channel.guildId || null, reported_guild_name: guild?.name ?? null, reported_guild_icon_hash: guild?.iconHash || null, @@ -208,22 +349,28 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: null, ...contentWarningSnapshot, + ...buildReportFlowColumns(flow), + ...webhookColumns, }; - let duplicateReservationCreated = false; + let reservation: MessageReportSubmissionByReporterRow | null = null; if (reporter.id) { - duplicateReservationCreated = await this.reportRepository.reserveMessageReportByReporter({ + reservation = { reporter_id: reporter.id, channel_id: channelId, message_id: messageId, report_id: reportId, reported_at: reportData.reported_at, - }); - if (!duplicateReservationCreated) { + }; + if (!(await this.reportRepository.reserveMessageReportByReporter(reservation))) { throw new ConflictError({code: APIErrorCodes.CONFLICT}); } } try { await this.consumeMessageReportRateLimits({reporter, channel, message}); + reportData.reported_profile_snapshot = await this.captureProfileSnapshot(reportId, { + user: reportedUser, + memberGuildId: channel.guildId, + }); const report = await this.reportRepository.createReport(reportData); await emitReportFiled(reportData, 'message'); if (this.reportSearchService && 'indexReport' in this.reportSearchService) { @@ -233,12 +380,10 @@ export class ReportService { } return report; } catch (error) { - if (duplicateReservationCreated && reporter.id) { - await this.reportRepository - .deleteMessageReportByReporter(reporter.id, channelId, messageId) - .catch((cleanupError) => { - Logger.error({error: cleanupError, reportId}, 'Failed to clean up message report duplicate reservation'); - }); + if (reservation) { + await this.reportRepository.releaseMessageReportByReporter(reservation).catch((cleanupError) => { + Logger.error({error: cleanupError, reportId}, 'Failed to clean up message report duplicate reservation'); + }); } throw error; } @@ -249,9 +394,11 @@ export class ReportService { reportedUserId: UserID, category: string, guildId?: GuildID, + flow: ReportFlowRecord | null = null, ): Promise { await this.checkReportBan(reporter.id); - const reporterKey = this.getReporterRateLimitKey(reporter); + const rateLimitIdentifier = this.createReportRateLimitIdentifier(this.getReporterRateLimitKey(reporter)); + await this.ensureReportRateLimit(rateLimitIdentifier, REPORT_RATE_LIMIT_MAX, false); if (reporter.id && reportedUserId === reporter.id) { throw new CannotReportYourselfError(); } @@ -260,15 +407,12 @@ export class ReportService { throw new UnknownUserError(); } const reportId = createReportID(await this.snowflakeService.generate()); - const guild = guildId ? await this.guildRepository.findUnique(guildId) : null; - if (guildId && !guild) { - throw new UnknownGuildError(); - } + const guild = guildId ? await this.getGuildContextForReporter(reporter.id, guildId) : null; const contentWarningSnapshot = await this.buildContentWarningSnapshot(guild, null); const reportData: IARSubmissionRow = { report_id: reportId, reporter_id: reporter.id, - reporter_email: reporter.email, + reporter_email: null, reporter_full_legal_name: reporter.fullLegalName, reporter_country_of_residence: reporter.countryOfResidence, reported_at: new Date(), @@ -292,16 +436,43 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: null, ...contentWarningSnapshot, + ...buildReportFlowColumns(flow), + ...buildReportedWebhookColumns(null), }; - await this.ensureReportRateLimit(this.createReportRateLimitIdentifier(reporterKey), REPORT_RATE_LIMIT_MAX, true); - const report = await this.reportRepository.createReport(reportData); - await emitReportFiled(reportData, 'user'); - if (this.reportSearchService && 'indexReport' in this.reportSearchService) { - await this.reportSearchService.indexReport(report).catch((error) => { - Logger.error({error, reportId: report.reportId}, 'Failed to index user report in search'); + let reservation: UserReportSubmissionByReporterRow | null = null; + if (reporter.id) { + reservation = { + reporter_id: reporter.id, + reported_user_id: reportedUserId, + report_id: reportId, + reported_at: reportData.reported_at, + }; + if (!(await this.reportRepository.reserveUserReportByReporter(reservation))) { + throw new ConflictError({code: APIErrorCodes.CONFLICT}); + } + } + try { + await this.ensureReportRateLimit(rateLimitIdentifier, REPORT_RATE_LIMIT_MAX, true); + reportData.reported_profile_snapshot = await this.captureProfileSnapshot(reportId, { + user: reportedUser, + memberGuildId: guildId, }); + const report = await this.reportRepository.createReport(reportData); + await emitReportFiled(reportData, 'user'); + if (this.reportSearchService && 'indexReport' in this.reportSearchService) { + await this.reportSearchService.indexReport(report).catch((error) => { + Logger.error({error, reportId: report.reportId}, 'Failed to index user report in search'); + }); + } + return report; + } catch (error) { + if (reservation) { + await this.reportRepository.releaseUserReportByReporter(reservation).catch((cleanupError) => { + Logger.error({error: cleanupError, reportId}, 'Failed to clean up user report duplicate reservation'); + }); + } + throw error; } - return report; } async reportGuild( @@ -311,7 +482,8 @@ export class ReportService { inviteCode?: InviteCode, ): Promise { await this.checkReportBan(reporter.id); - const reporterKey = this.getReporterRateLimitKey(reporter); + const rateLimitIdentifier = this.createReportRateLimitIdentifier(this.getReporterRateLimitKey(reporter)); + await this.ensureReportRateLimit(rateLimitIdentifier, REPORT_RATE_LIMIT_MAX, false); const guild = await this.guildRepository.findUnique(guildId); if (!guild) { throw new UnknownGuildError(); @@ -326,7 +498,7 @@ export class ReportService { const reportData: IARSubmissionRow = { report_id: reportId, reporter_id: reporter.id, - reporter_email: reporter.email, + reporter_email: null, reporter_full_legal_name: reporter.fullLegalName, reporter_country_of_residence: reporter.countryOfResidence, reported_at: new Date(), @@ -350,16 +522,48 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: reportedInviteCode, ...contentWarningSnapshot, + ...buildReportFlowColumns(null), + ...buildReportedWebhookColumns(null), }; - await this.ensureReportRateLimit(this.createReportRateLimitIdentifier(reporterKey), REPORT_RATE_LIMIT_MAX, true); - const report = await this.reportRepository.createReport(reportData); - await emitReportFiled(reportData, 'guild'); - if (this.reportSearchService && 'indexReport' in this.reportSearchService) { - await this.reportSearchService.indexReport(report).catch((error) => { - Logger.error({error, reportId: report.reportId}, 'Failed to index guild report in search'); - }); + let reservation: GuildReportSubmissionByReporterRow | null = null; + if (reporter.id) { + reservation = { + reporter_id: reporter.id, + reported_guild_id: guildId, + report_id: reportId, + reported_at: reportData.reported_at, + }; + if (!(await this.reportRepository.reserveGuildReportByReporter(reservation))) { + throw new ConflictError({code: APIErrorCodes.CONFLICT}); + } } - return report; + try { + await this.ensureReportRateLimit(rateLimitIdentifier, REPORT_RATE_LIMIT_MAX, true); + reportData.reported_profile_snapshot = await this.captureProfileSnapshot(reportId, {guild}); + const report = await this.reportRepository.createReport(reportData); + await emitReportFiled(reportData, 'guild'); + if (this.reportSearchService && 'indexReport' in this.reportSearchService) { + await this.reportSearchService.indexReport(report).catch((error) => { + Logger.error({error, reportId: report.reportId}, 'Failed to index guild report in search'); + }); + } + return report; + } catch (error) { + if (reservation) { + await this.reportRepository.releaseGuildReportByReporter(reservation).catch((cleanupError) => { + Logger.error({error: cleanupError, reportId}, 'Failed to clean up guild report duplicate reservation'); + }); + } + throw error; + } + } + + private async getGuildContextForReporter(reporterId: UserID | null, guildId: GuildID): Promise { + const guild = await this.guildRepository.findUnique(guildId); + if (!guild || !reporterId || !(await this.guildRepository.getMember(guildId, reporterId))) { + throw new UnknownGuildError(); + } + return guild; } private async authorizeGuildReporter( @@ -381,6 +585,7 @@ export class ReportService { async sendDsaReportVerificationCode(email: string, locale: string | null = null): Promise { const normalizedEmail = this.normalizeEmail(email); + await this.ensureDsaResendCooldown(normalizedEmail); const recipientLimit = await this.rateLimitService.checkLimit({ identifier: `dsa:report:email:send:recipient:${normalizedEmail}`, maxAttempts: DSA_EMAIL_SEND_RECIPIENT_MAX, @@ -400,26 +605,81 @@ export class ReportService { throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL); } const verificationCode = this.generateDsaVerificationCode(); + const codeHash = this.hashVerificationCode(verificationCode); const expiresAt = new Date(Date.now() + ms('10 minutes')); await this.reportRepository.upsertDsaEmailVerification({ email_lower: normalizedEmail, - code_hash: this.hashVerificationCode(verificationCode), + code_hash: codeHash, expires_at: expiresAt, last_sent_at: new Date(), }); - await this.emailService.sendDsaReportVerificationCode(normalizedEmail, verificationCode, expiresAt, locale); + await this.rateLimitService.resetLimit(this.createDsaVerifyAttemptIdentifier(normalizedEmail)); + const sent = await this.emailService.sendDsaReportVerificationCode( + normalizedEmail, + verificationCode, + expiresAt, + locale, + ); + if (!sent) { + await this.reportRepository.consumeDsaEmailVerification(normalizedEmail, codeHash); + Logger.warn({template: 'dsa_report_verification'}, 'DSA report verification email was not sent'); + throw new ServiceUnavailableError(); + } + } + + private async ensureDsaResendCooldown(normalizedEmail: string): Promise { + const current = await this.reportRepository.getDsaEmailVerification(normalizedEmail); + if (!current) { + return; + } + const now = Date.now(); + if (current.expires_at.getTime() < now) { + return; + } + const remainingMs = current.last_sent_at.getTime() + DSA_EMAIL_RESEND_COOLDOWN - now; + if (remainingMs <= 0) { + return; + } + throw new RateLimitError({ + retryAfter: Math.ceil(remainingMs / 1000), + retryAfterDecimal: remainingMs / 1000, + limit: 1, + resetTime: new Date(now + remainingMs), + resetAfterDecimal: remainingMs / 1000, + }); + } + + private createDsaVerifyAttemptIdentifier(normalizedEmail: string): string { + return `dsa:report:email:verify:address:${normalizedEmail}`; } async verifyDsaReportEmail(email: string, code: string): Promise { const normalizedEmail = this.normalizeEmail(email); const verificationRow = await this.reportRepository.getDsaEmailVerification(normalizedEmail); + const attempt = await this.rateLimitService.checkLimit({ + identifier: this.createDsaVerifyAttemptIdentifier(normalizedEmail), + maxAttempts: DSA_EMAIL_VERIFY_ADDRESS_MAX, + windowMs: DSA_EMAIL_VERIFY_ADDRESS_WINDOW, + }); + if (!attempt.allowed) { + if (verificationRow) { + await this.reportRepository.consumeDsaEmailVerification(normalizedEmail, verificationRow.code_hash); + } + throw new InvalidDsaVerificationCodeError(); + } if (!verificationRow || verificationRow.expires_at.getTime() < Date.now()) { throw new InvalidDsaVerificationCodeError(); } if (this.hashVerificationCode(code) !== verificationRow.code_hash) { throw new InvalidDsaVerificationCodeError(); } - await this.reportRepository.deleteDsaEmailVerification(normalizedEmail); + const consumed = await this.reportRepository.consumeDsaEmailVerification( + normalizedEmail, + verificationRow.code_hash, + ); + if (!consumed) { + throw new InvalidDsaVerificationCodeError(); + } const ticket = randomBytes(DSA_TICKET_BYTES).toString('hex'); await this.reportRepository.createDsaTicket({ ticket, @@ -430,21 +690,31 @@ export class ReportService { return ticket; } - async createDsaReport(report: DsaReportRequest): Promise { + async createDsaReport(report: DsaReportRequest, requestLocale: string | null = null): Promise { const ticket = await this.readDsaTicket(report.ticket); + const classification = this.classifyDsaReport(report, requestLocale); const reporterMeta: ReporterMetadata = { id: null, email: ticket.email_lower, - fullLegalName: report.reporter_full_legal_name, + fullLegalName: report.reporter_full_legal_name ?? null, countryOfResidence: report.reporter_country_of_residence, }; await this.checkReportBan(null); const reporterKey = this.getReporterRateLimitKey(reporterMeta); await this.ensureReportRateLimit(this.createReportRateLimitIdentifier(reporterKey), REPORT_RATE_LIMIT_MAX, false); const reportId = createReportID(await this.snowflakeService.generate()); - const reportRow = await this.buildDsaReportRow(reportId, report, reporterMeta); + const {row: reportRow, profileSubject} = await this.buildDsaReportRow( + reportId, + report, + reporterMeta, + classification, + ); await this.ensureReportRateLimit(this.createReportRateLimitIdentifier(reporterKey), REPORT_RATE_LIMIT_MAX, true); - await this.reportRepository.deleteDsaTicket(report.ticket); + const claimed = await this.reportRepository.consumeDsaTicket(report.ticket, ticket.email_lower); + if (!claimed) { + throw new InvalidDsaTicketError(); + } + reportRow.reported_profile_snapshot = await this.captureProfileSnapshot(reportId, profileSubject); const createdReport = await this.reportRepository.createReport(reportRow); await emitReportFiled(reportRow, 'dsa'); if (this.reportSearchService && 'indexReport' in this.reportSearchService) { @@ -452,21 +722,82 @@ export class ReportService { Logger.error({error, reportId: createdReport.reportId}, 'Failed to index DSA report in search'); }); } + await this.sendDsaReportReceipt( + ticket.email_lower, + createdReport.reportId, + report.report_type, + classification.flow?.locale ?? requestLocale, + ); return createdReport; } + private async sendDsaReportReceipt( + email: string, + reportId: ReportID, + targetKind: DsaReportRequest['report_type'], + locale: string | null, + ): Promise { + try { + const sent = await this.emailService.sendReportReceivedEmail(email, reportId.toString(), targetKind, locale); + if (!sent) { + Logger.warn({template: 'report_received', reportId}, 'DSA report receipt was not sent'); + } + } catch (error) { + Logger.error({error, reportId}, 'Failed to send DSA report receipt'); + } + } + + private classifyDsaReport(report: DsaReportRequest, requestLocale: string | null): DsaReportClassification { + if (!report.steps || !report.revision_hash) { + if (!report.category) { + throw InputValidationError.fromCode('category', ValidationErrorCodes.INVALID_FORMAT); + } + return {category: report.category, flow: null}; + } + const answers = resolveReportFlowAnswers({ + target: report.report_type, + surface: 'dsa', + revisionHash: report.revision_hash, + steps: report.steps, + }); + if (!answers.isCurrentRevision) { + Logger.warn( + { + clientRevision: report.revision_hash, + currentRevision: answers.currentRevisionHash, + target: report.report_type, + }, + 'Accepted a DSA report flow submission from an outdated revision', + ); + } + if (answers.legacyCategory !== 'child_safety' && !report.reporter_full_legal_name) { + throw InputValidationError.fromCode('reporter_full_legal_name', ValidationErrorCodes.INVALID_FORMAT); + } + return { + category: answers.legacyCategory, + flow: { + reason: answers.reason, + revisionHash: report.revision_hash, + stepsJson: answers.stepsJson, + locale: resolveReportFlowLocale(report.locale ?? requestLocale), + surface: 'dsa', + }, + }; + } + private async buildDsaReportRow( reportId: ReportID, report: DsaReportRequest, reporter: ReporterMetadata, - ): Promise { + classification: DsaReportClassification, + ): Promise { switch (report.report_type) { case 'message': - return this.buildDsaMessageReportRow(reportId, report, reporter); + return this.buildDsaMessageReportRow(reportId, report, reporter, classification); case 'user': - return this.buildDsaUserReportRow(reportId, report, reporter); + return this.buildDsaUserReportRow(reportId, report, reporter, classification); case 'guild': - return this.buildDsaGuildReportRow(reportId, report, reporter); + return this.buildDsaGuildReportRow(reportId, report, reporter, classification); default: throw new InvalidDsaReportTargetError(); } @@ -481,30 +812,36 @@ export class ReportService { } >, reporter: ReporterMetadata, - ): Promise { - const {channelId, messageId} = this.extractChannelAndMessageFromLink(report.message_link); + classification: DsaReportClassification, + ): Promise { + const {guildSegment, channelId, messageId} = this.extractChannelAndMessageFromLink(report.message_link); const channel = await this.channelRepository.findUnique(channelId); - if (!channel) throw new UnknownChannelError(); + if (!channel || guildSegment !== (channel.guildId?.toString() ?? ME)) { + throw new UnknownMessageError(); + } const message = await this.channelRepository.getMessage(channelId, messageId); - if (!message) throw new UnknownMessageError(); - const reportedAuthorId = await this.resolveReportedAuthorId(message); - if (reportedAuthorId == null) { - throw new UnknownUserError(); + if (!message || message.channelId !== channelId) { + throw new UnknownMessageError(); } - if (report.reported_user_tag) { - const tagged = await this.findUserByTag(report.reported_user_tag); - if (tagged.id !== reportedAuthorId) { - throw new InvalidDsaReportTargetError(); - } + const author = await this.resolveReportedAuthor(message); + if (!author) { + throw new UnknownMessageError(); } - const reportedUser = await this.userRepository.findUnique(reportedAuthorId); - if (!reportedUser) { - throw new UnknownUserError(); + if (report.reported_user_tag && !(await this.isTagOfUser(report.reported_user_tag, author.userId))) { + throw new UnknownMessageError(); } - const messageContext = await this.gatherMessageContext(channelId, messageId, undefined, reportedAuthorId); + const reportedUser = author.userId ? await this.userRepository.findUnique(author.userId) : null; + if (author.userId && !reportedUser) { + throw new UnknownMessageError(); + } + const scope: MessageContextScope = (await this.isChannelReadableByEveryone(channel)) ? 'window' : 'target'; + const [messageContext, webhookColumns] = await Promise.all([ + this.gatherMessageContext(channelId, messageId, author, undefined, scope), + this.snapshotReportedWebhook(author), + ]); const guild = channel.guildId ? await this.guildRepository.findUnique(channel.guildId) : null; const contentWarningSnapshot = await this.buildContentWarningSnapshot(guild, channel); - return { + const row: IARSubmissionRow = { report_id: reportId, reporter_id: null, reporter_email: reporter.email, @@ -513,10 +850,10 @@ export class ReportService { reported_at: new Date(), status: ReportStatus.PENDING, report_type: ReportType.MESSAGE, - category: report.category, + category: classification.category, additional_info: report.additional_info ?? null, - reported_user_id: reportedAuthorId, - reported_user_avatar_hash: reportedUser.avatarHash || null, + reported_user_id: author.userId, + reported_user_avatar_hash: reportedUser?.avatarHash || null, reported_guild_id: channel.guildId || null, reported_guild_name: guild?.name ?? null, reported_guild_icon_hash: guild?.iconHash ?? null, @@ -531,7 +868,10 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: null, ...contentWarningSnapshot, + ...buildReportFlowColumns(classification.flow), + ...webhookColumns, }; + return {row, profileSubject: {user: reportedUser, memberGuildId: channel.guildId}}; } private async buildDsaUserReportRow( @@ -543,10 +883,11 @@ export class ReportService { } >, reporter: ReporterMetadata, - ): Promise { + classification: DsaReportClassification, + ): Promise { const target = await this.resolveDsaUser(report.user_id ?? undefined, report.user_tag ?? undefined); const contentWarningSnapshot = await this.buildContentWarningSnapshot(null, null); - return { + const row: IARSubmissionRow = { report_id: reportId, reporter_id: null, reporter_email: reporter.email, @@ -555,7 +896,7 @@ export class ReportService { reported_at: new Date(), status: ReportStatus.PENDING, report_type: ReportType.USER, - category: report.category, + category: classification.category, additional_info: report.additional_info ?? null, reported_user_id: target.id, reported_user_avatar_hash: target.avatarHash || null, @@ -573,7 +914,10 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: null, ...contentWarningSnapshot, + ...buildReportFlowColumns(classification.flow), + ...buildReportedWebhookColumns(null), }; + return {row, profileSubject: {user: target}}; } private async buildDsaGuildReportRow( @@ -585,7 +929,8 @@ export class ReportService { } >, reporter: ReporterMetadata, - ): Promise { + classification: DsaReportClassification, + ): Promise { const guildId = createGuildID(report.guild_id); const guild = await this.guildRepository.findUnique(guildId); if (!guild) { @@ -600,7 +945,7 @@ export class ReportService { await this.validateInviteForGuild(inviteCode, guildId); } const contentWarningSnapshot = await this.buildContentWarningSnapshot(guild, null); - return { + const row: IARSubmissionRow = { report_id: reportId, reporter_id: null, reporter_email: reporter.email, @@ -609,7 +954,7 @@ export class ReportService { reported_at: new Date(), status: ReportStatus.PENDING, report_type: ReportType.GUILD, - category: report.category, + category: classification.category, additional_info: report.additional_info ?? null, reported_user_id: null, reported_user_avatar_hash: null, @@ -627,7 +972,10 @@ export class ReportService { audit_log_reason: null, reported_guild_invite_code: inviteCode, ...contentWarningSnapshot, + ...buildReportFlowColumns(classification.flow), + ...buildReportedWebhookColumns(null), }; + return {row, profileSubject: {guild}}; } private async getReportableMessageForReporter({ @@ -667,9 +1015,18 @@ export class ReportService { }; } - private async resolveReportedAuthorId(message: Message): Promise { + private async snapshotReportedWebhook(author: ReportedAuthor): Promise { + if (!author.webhookId) { + return buildReportedWebhookColumns(author); + } + const webhook = await this.webhookRepository.findUnique(author.webhookId); + const creator = webhook?.creatorId ? await this.userRepository.findUnique(webhook.creatorId) : null; + return buildReportedWebhookColumns(author, webhook, creator); + } + + private async resolveReportedAuthor(message: Message): Promise { if ((message.flags & MessageFlags.IS_CROSSPOST) === 0) { - return message.authorId; + return messageAuthor(message); } if ((message.flags & MessageFlags.SOURCE_MESSAGE_DELETED) !== 0) { return null; @@ -682,7 +1039,7 @@ export class ReportService { if (!source || (source.flags & MessageFlags.IS_CROSSPOST) !== 0) { return null; } - return source.authorId; + return messageAuthor(source); } private async canAccessMessage(authChannel: AuthenticatedChannel, messageId: MessageID): Promise { @@ -692,11 +1049,15 @@ export class ReportService { if (await authChannel.hasPermission(Permissions.READ_MESSAGE_HISTORY)) { return true; } - const cutoff = authChannel.guild.message_history_cutoff; - if (!cutoff) { - return false; - } - return snowflakeToDate(messageId).getTime() >= new Date(cutoff).getTime(); + const floorMs = this.reportableFloorMs(authChannel); + return floorMs !== null && snowflakeToDate(messageId).getTime() >= floorMs; + } + + private reportableFloorMs(authChannel: AuthenticatedChannel): number | null { + const floors = [authChannel.guild?.message_history_cutoff, authChannel.member?.joined_at] + .filter((value): value is string => Boolean(value)) + .map((value) => new Date(value).getTime()); + return floors.length > 0 ? Math.min(...floors) : null; } private async buildContentWarningSnapshot( @@ -795,6 +1156,33 @@ export class ReportService { return user; } + private async isTagOfUser(tag: string, userId: UserID | null): Promise { + const parsed = this.parseFluxerTag(tag); + if (!parsed || !userId) { + return false; + } + const user = await this.userRepository.findByUsernameDiscriminator(parsed.username, parsed.discriminator); + return user?.id === userId; + } + + private async isChannelReadableByEveryone(channel: Channel): Promise { + if (!channel.guildId) { + return false; + } + const everyoneRole = await this.guildRepository.getRole(guildIdToRoleId(channel.guildId), channel.guildId); + if (!everyoneRole) { + return false; + } + if ((everyoneRole.permissions & Permissions.ADMINISTRATOR) !== 0n) { + return true; + } + const overwrite = channel.permissionOverwrites.get(everyoneRole.id); + const permissions = overwrite + ? (everyoneRole.permissions & ~overwrite.deny) | overwrite.allow + : everyoneRole.permissions; + return (permissions & PUBLIC_CHANNEL_PERMISSIONS) === PUBLIC_CHANNEL_PERMISSIONS; + } + private async readDsaTicket(ticket: string): Promise { const ticketRow = await this.reportRepository.getDsaTicket(ticket); if (!ticketRow || ticketRow.expires_at.getTime() < Date.now()) { @@ -837,6 +1225,7 @@ export class ReportService { } private extractChannelAndMessageFromLink(link: string): { + guildSegment: string; channelId: ChannelID; messageId: MessageID; } { @@ -856,6 +1245,7 @@ export class ReportService { throw new UnknownMessageError(); } return { + guildSegment: segments[1], channelId: createChannelID(channelId.data), messageId: createMessageID(messageId.data), }; @@ -886,16 +1276,6 @@ export class ReportService { return report; } - async listMyReports(reporterId: UserID, limit?: number, offset?: number): Promise> { - if (!this.reportSearchService) { - throw new FeatureTemporarilyDisabledError(); - } - const {hits} = await this.reportSearchService.listReportsByReporter(reporterId, limit, offset); - const reportIds = hits.map((hit) => createReportID(BigInt(hit.id))); - const reports = await Promise.all(reportIds.map((id) => this.reportRepository.getReport(id))); - return reports.filter((report): report is IARSubmission => report !== null); - } - async listReportsByStatus( status: number, limit?: number, @@ -908,7 +1288,14 @@ export class ReportService { const reportIds = hits.map((hit) => createReportID(BigInt(hit.id))); const loaded = await Promise.all(reportIds.map((id) => this.reportRepository.getReport(id))); const reports = loaded.filter((report): report is IARSubmission => report !== null); - return {reports, total: Math.max(0, total - (hits.length - reports.length))}; + const orphanedReportIds = reportIds.filter((_, index) => loaded[index] === null).map((id) => id.toString()); + if (orphanedReportIds.length > 0) { + Logger.warn( + {orphanedReportIds, status}, + 'Report search index lists reports that are no longer stored, run refresh_search_index reports', + ); + } + return {reports, total}; } async resolveReport( @@ -943,20 +1330,18 @@ export class ReportService { private async gatherMessageContext( channelId: ChannelID, targetMessageId: MessageID, + targetAuthor: ReportedAuthor, authChannel?: AuthenticatedChannel, - targetAuthorId?: UserID, + scope: MessageContextScope = 'window', ): Promise> { - const messagesBefore = await this.channelRepository.listMessages( - channelId, - targetMessageId, - MESSAGE_CONTEXT_WINDOW, - ); - const messagesAfter = await this.channelRepository.listMessages( - channelId, - undefined, - MESSAGE_CONTEXT_WINDOW, - targetMessageId, - ); + const messagesBefore = + scope === 'window' + ? await this.channelRepository.listMessages(channelId, targetMessageId, MESSAGE_CONTEXT_WINDOW) + : []; + const messagesAfter = + scope === 'window' + ? await this.channelRepository.listMessages(channelId, undefined, MESSAGE_CONTEXT_WINDOW, targetMessageId) + : []; const targetMessage = await this.channelRepository.getMessage(channelId, targetMessageId); if (!targetMessage) { return []; @@ -966,11 +1351,11 @@ export class ReportService { [...messagesBefore, targetMessage, ...messagesAfter], authChannel, ); - const contextAuthorId = (msg: Message): UserID | null => - msg.authorId ?? (msg.id === targetMessageId ? (targetAuthorId ?? null) : null); + const contextAuthor = (msg: Message): ReportedAuthor | null => + msg.id === targetMessageId ? targetAuthor : messageAuthor(msg); const userIds = new Set(); for (const msg of allMessages) { - const authorId = contextAuthorId(msg); + const authorId = contextAuthor(msg)?.userId; if (authorId) { userIds.add(authorId); } @@ -984,26 +1369,25 @@ export class ReportService { } const context: Array = []; for (const message of allMessages) { - const authorId = contextAuthorId(message); - const author = authorId != null ? users.get(authorId) : null; - if (!author || authorId == null) continue; - const clonedAttachments = [ - ...(message.attachments - ? await this.cloneAttachmentsForReport( - message.attachments, - MessageHelpers.attachmentStorageChannelId(message), - channelId, - ) - : []), - ...(await this.cloneOwnedEmbedAttachmentsForReport(message, channelId)), - ]; + const identity = contextAuthor(message); + if (!identity) continue; + const author = identity.userId ? users.get(identity.userId) : null; + const attachments = await this.cloneAttachmentsForReport( + message.attachments, + MessageHelpers.attachmentStorageChannelId(message), + channelId, + ); + const embedAttachments = await this.cloneOwnedEmbedAttachmentsForReport(message, channelId); + const preservedAttachments = [...attachments.preserved, ...embedAttachments.preserved]; + const missingAttachments = [...attachments.missing, ...embedAttachments.missing]; context.push({ message_id: message.id, channel_id: channelId, - author_id: authorId, - author_username: author.username, - author_discriminator: author.discriminator, - author_avatar_hash: author.avatarHash || null, + author_id: identity.userId, + webhook_id: identity.webhookId, + author_username: author ? author.username : (identity.webhookName ?? DELETED_USER_USERNAME), + author_discriminator: author ? author.discriminator : 0, + author_avatar_hash: author ? author.avatarHash || null : identity.webhookAvatarHash, content: message.content || null, timestamp: snowflakeToDate(message.id), edited_timestamp: message.editedTimestamp || null, @@ -1013,7 +1397,8 @@ export class ReportService { mention_users: message.mentionedUserIds.size > 0 ? Array.from(message.mentionedUserIds) : null, mention_roles: message.mentionedRoleIds.size > 0 ? Array.from(message.mentionedRoleIds) : null, mention_channels: message.mentionedChannelIds.size > 0 ? Array.from(message.mentionedChannelIds) : null, - attachments: clonedAttachments.length > 0 ? clonedAttachments : null, + attachments: preservedAttachments.length > 0 ? preservedAttachments : null, + missing_attachments: missingAttachments.length > 0 ? missingAttachments : null, embeds: message.embeds.length > 0 ? message.embeds.map((embed) => embed.toMessageEmbed()) : null, sticker_items: message.stickers.length > 0 ? message.stickers.map((sticker) => sticker.toMessageStickerItem()) : null, @@ -1032,22 +1417,37 @@ export class ReportService { if (await authChannel.hasPermission(Permissions.READ_MESSAGE_HISTORY)) { return messages; } - const cutoff = authChannel.guild.message_history_cutoff; - if (!cutoff) { + const floorMs = this.reportableFloorMs(authChannel); + if (floorMs === null) { return []; } - const cutoffTime = new Date(cutoff).getTime(); - return messages.filter((message) => snowflakeToDate(message.id).getTime() >= cutoffTime); + return messages.filter((message) => snowflakeToDate(message.id).getTime() >= floorMs); } private async cloneAttachmentsForReport( attachments: Array, sourceChannelId: ChannelID, reportedChannelId: ChannelID, - ): Promise> { - const clonedAttachments: Array = []; + ): Promise { + const cloned: ClonedReportAttachments = {preserved: [], missing: []}; for (const attachment of attachments) { const sourceKey = MessageHelpers.makeAttachmentCdnKey(sourceChannelId, attachment.id, attachment.filename); + const snapshot: MessageAttachment = { + attachment_id: attachment.id, + filename: attachment.filename, + size: BigInt(attachment.size), + title: attachment.title, + description: attachment.description, + width: attachment.width, + height: attachment.height, + content_type: attachment.contentType, + content_hash: attachment.contentHash, + placeholder: attachment.placeholder, + flags: attachment.flags ?? 0, + duration: attachment.duration, + nsfw: attachment.nsfw, + waveform: attachment.waveform ?? null, + }; try { await this.storageService.copyObject({ sourceBucket: Config.s3.buckets.cdn, @@ -1056,74 +1456,163 @@ export class ReportService { destinationKey: MessageHelpers.makeAttachmentCdnKey(reportedChannelId, attachment.id, attachment.filename), newContentType: attachment.contentType, }); - const clonedAttachment: MessageAttachment = { - attachment_id: attachment.id, - filename: attachment.filename, - size: BigInt(attachment.size), - title: attachment.title, - description: attachment.description, - width: attachment.width, - height: attachment.height, - content_type: attachment.contentType, - content_hash: attachment.contentHash, - placeholder: attachment.placeholder, - flags: attachment.flags ?? 0, - duration: attachment.duration, - nsfw: attachment.nsfw, - waveform: attachment.waveform ?? null, - }; - clonedAttachments.push(clonedAttachment); + cloned.preserved.push(snapshot); } catch (error) { Logger.error( {error, attachmentId: attachment.id, filename: attachment.filename, sourceChannelId}, 'Failed to clone attachment for report', ); + cloned.missing.push(snapshot); } } - return clonedAttachments; + return cloned; } private async cloneOwnedEmbedAttachmentsForReport( message: Message, reportedChannelId: ChannelID, - ): Promise> { - const clonedAttachments: Array = []; + ): Promise { + const cloned: ClonedReportAttachments = {preserved: [], missing: []}; for (const {key, media} of MessageHelpers.collectOwnedEmbedAttachments(message)) { - const [, , attachmentId, ...filenameParts] = key.split('/'); - const filename = filenameParts.join('/'); + let snapshot: MessageAttachment | null = null; try { - const metadata = await this.storageService.getObjectMetadata(Config.s3.buckets.cdn, key); - if (!metadata) continue; + const [, , attachmentId, ...filenameParts] = key.split('/'); + const filename = filenameParts.join('/'); const id = createAttachmentID(BigInt(attachmentId!)); - const contentType = media.content_type ?? metadata.contentType; - await this.storageService.copyObject({ - sourceBucket: Config.s3.buckets.cdn, - sourceKey: key, - destinationBucket: Config.s3.buckets.reports, - destinationKey: MessageHelpers.makeAttachmentCdnKey(reportedChannelId, id, filename), - newContentType: contentType, - }); - clonedAttachments.push({ + snapshot = { attachment_id: id, filename, - size: BigInt(metadata.contentLength), + size: 0n, title: null, description: media.description, width: media.width, height: media.height, - content_type: contentType, + content_type: media.content_type ?? 'application/octet-stream', content_hash: media.content_hash, placeholder: media.placeholder, flags: media.flags & ~MessageHelpers.EMBED_MEDIA_OWNED_ATTACHMENT_FLAG, duration: media.duration, nsfw: null, waveform: null, + }; + const metadata = await this.storageService.getObjectMetadata(Config.s3.buckets.cdn, key); + if (!metadata) { + Logger.warn({key, reportedChannelId}, 'Embed attachment for report is no longer stored'); + cloned.missing.push(snapshot); + continue; + } + snapshot.size = BigInt(metadata.contentLength); + snapshot.content_type = media.content_type ?? metadata.contentType; + await this.storageService.copyObject({ + sourceBucket: Config.s3.buckets.cdn, + sourceKey: key, + destinationBucket: Config.s3.buckets.reports, + destinationKey: MessageHelpers.makeAttachmentCdnKey(reportedChannelId, id, filename), + newContentType: snapshot.content_type, }); + cloned.preserved.push(snapshot); } catch (error) { Logger.error({error, key, reportedChannelId}, 'Failed to clone embed attachment for report'); + if (snapshot) { + cloned.missing.push(snapshot); + } } } - return clonedAttachments; + return cloned; + } + + private async captureProfileSnapshot(reportId: ReportID, subject: ProfileSnapshotSubject): Promise { + const user = subject.user ?? null; + const guild = subject.guild ?? null; + if (!user && !guild) { + return null; + } + const member = + user && subject.memberGuildId && !isAccountClosed(user) + ? await this.guildRepository.getMember(subject.memberGuildId, user.id) + : null; + return serializeReportProfileSnapshot({ + captured_at: new Date().toISOString(), + user: user ? await this.snapshotUserProfile(reportId, user) : null, + member: member ? await this.snapshotMemberProfile(reportId, member) : null, + guild: guild ? await this.snapshotGuildProfile(reportId, guild) : null, + }); + } + + private async snapshotUserProfile(reportId: ReportID, user: User): Promise { + const id = user.id.toString(); + if (isAccountClosed(user)) { + return { + id, + username: null, + discriminator: null, + global_name: null, + bio: null, + pronouns: null, + avatar: null, + banner: null, + }; + } + return { + id, + username: user.username, + discriminator: user.discriminator, + global_name: user.globalName, + bio: user.bio, + pronouns: user.pronouns, + avatar: await this.cloneProfileAssetForReport(reportId, 'user_avatar', 'avatars', id, user.avatarHash), + banner: await this.cloneProfileAssetForReport(reportId, 'user_banner', 'banners', id, user.bannerHash), + }; + } + + private async snapshotMemberProfile(reportId: ReportID, member: GuildMember): Promise { + const assetBase = `guilds/${member.guildId}/users/${member.userId}`; + return { + guild_id: member.guildId.toString(), + nick: member.nickname, + bio: member.bio, + pronouns: member.pronouns, + joined_at: member.joinedAt.toISOString(), + avatar: await this.cloneProfileAssetForReport(reportId, 'member_avatar', assetBase, 'avatars', member.avatarHash), + banner: await this.cloneProfileAssetForReport(reportId, 'member_banner', assetBase, 'banners', member.bannerHash), + }; + } + + private async snapshotGuildProfile(reportId: ReportID, guild: Guild): Promise { + const id = guild.id.toString(); + return { + id, + name: guild.name, + vanity_url_code: guild.vanityUrlCode, + icon: await this.cloneProfileAssetForReport(reportId, 'guild_icon', 'icons', id, guild.iconHash), + banner: await this.cloneProfileAssetForReport(reportId, 'guild_banner', 'banners', id, guild.bannerHash), + splash: await this.cloneProfileAssetForReport(reportId, 'guild_splash', 'splashes', id, guild.splashHash), + }; + } + + private async cloneProfileAssetForReport( + reportId: ReportID, + kind: string, + sourcePrefix: string, + sourceEntity: string, + hash: string | null, + ): Promise { + if (!hash) { + return null; + } + const key = `reports/${reportId}/profile/${kind}/${hash}`; + try { + await this.storageService.copyObject({ + sourceBucket: Config.s3.buckets.cdn, + sourceKey: buildHashedAssetKey(sourcePrefix, sourceEntity, hash), + destinationBucket: Config.s3.buckets.reports, + destinationKey: key, + }); + return {hash, key}; + } catch (error) { + Logger.error({error, reportId, kind}, 'Failed to clone profile asset for report'); + return {hash, key: null}; + } } private async checkReportBan(userId: UserID | null): Promise { diff --git a/fluxer_api/src/api/report/flows/ReportFlowDefinitions.ts b/fluxer_api/src/api/report/flows/ReportFlowDefinitions.ts new file mode 100644 index 000000000..3b8e958fb --- /dev/null +++ b/fluxer_api/src/api/report/flows/ReportFlowDefinitions.ts @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportFlowSurface, ReportFlowTargetType} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; + +export interface ReportFlowDef { + target: ReportFlowTargetType; + start: Partial>; +} + +export const REPORT_FLOWS: Record = { + message: {target: 'message', start: {in_app: 'root_message', dsa: 'root_message'}}, + user: {target: 'user', start: {in_app: 'profile_intro', dsa: 'profile_parts'}}, + guild: {target: 'guild', start: {dsa: 'community_parts'}}, +}; diff --git a/fluxer_api/src/api/report/flows/ReportFlowIds.snapshot.json b/fluxer_api/src/api/report/flows/ReportFlowIds.snapshot.json new file mode 100644 index 000000000..31804bbd2 --- /dev/null +++ b/fluxer_api/src/api/report/flows/ReportFlowIds.snapshot.json @@ -0,0 +1,247 @@ +{ + "active": { + "guild/abuse_guild/harassment": "submit:harassment", + "guild/abuse_guild/hate": "screen:hate", + "guild/abuse_guild/minor_risk": "screen:minor_risk_guild", + "guild/abuse_guild/raid": "submit:raid", + "guild/abuse_guild/sexual": "screen:sexual_guild", + "guild/abuse_guild/threat": "screen:threat", + "guild/community_parts/#next": "screen:root_guild", + "guild/community_parts/activity": "item", + "guild/community_parts/banner": "item", + "guild/community_parts/channel_names": "item", + "guild/community_parts/discovery_listing": "item", + "guild/community_parts/emoji_stickers": "item", + "guild/community_parts/icon": "item", + "guild/community_parts/name": "item", + "guild/community_parts/splash": "item", + "guild/false_info/false_claims": "submit:false_claims_about_person", + "guild/false_info/harmful_false_claims": "submit:harmful_false_claims", + "guild/false_info/synthetic_media": "submit:deceptive_synthetic_media", + "guild/hate/atrocity_denial": "submit:atrocity_denial", + "guild/hate/conversion_therapy": "submit:conversion_therapy", + "guild/hate/hate_dehumanizing": "submit:hate_dehumanizing", + "guild/hate/hate_incitement": "submit:hate_incitement", + "guild/hate/hate_other": "submit:hate_other", + "guild/hate/hate_slurs": "submit:hate_slurs", + "guild/hate/lgbtq_targeting": "submit:lgbtq_targeting", + "guild/minor_risk_guild/minor_dating_community": "submit:minor_dating_community", + "guild/minor_risk_guild/minor_grooming": "submit:minor_grooming", + "guild/minor_risk_guild/minor_in_adult_space": "submit:minor_in_adult_space", + "guild/minor_risk_guild/minor_sexual": "screen:minor_sexual_guild", + "guild/minor_sexual_guild/csam": "submit:csam", + "guild/minor_sexual_guild/minor_fictional": "submit:minor_fictional_sexualization", + "guild/minor_sexual_guild/minor_sexual_contact": "submit:minor_sexual_contact", + "guild/minor_sexual_guild/minor_sexual_content": "submit:minor_sexual_content", + "guild/minor_sexual_guild/minor_sexualization": "submit:minor_sexualization", + "guild/root_guild/abuse": "screen:abuse_guild", + "guild/root_guild/something_else": "screen:something_else_guild", + "guild/root_guild/spam": "screen:spam_kind_guild", + "guild/root_guild/violence_misinfo": "screen:violence_misinfo_guild", + "guild/self_harm_guild/crisis_lines": "link:crisis_lines", + "guild/self_harm_guild/eating_disorder_promotion": "submit:eating_disorder_promotion", + "guild/self_harm_guild/self_harm_graphic": "submit:self_harm_graphic", + "guild/self_harm_guild/self_harm_pressure": "submit:self_harm_pressure", + "guild/self_harm_guild/self_harm_promotion": "submit:self_harm_promotion", + "guild/self_harm_guild/suicide_promotion": "submit:suicide_promotion", + "guild/sexual_guild/adult_content_unmarked": "submit:adult_content_unmarked", + "guild/sexual_guild/intimate_image_abuse": "submit:intimate_image_abuse", + "guild/sexual_guild/minor_sexual": "screen:minor_sexual_guild", + "guild/sexual_guild/sexual_exploitation": "submit:sexual_exploitation", + "guild/something_else_guild/copyright_notice": "submit:copyright", + "guild/something_else_guild/fraud": "submit:fraud", + "guild/something_else_guild/illegal_activity": "submit:illegal_activity", + "guild/something_else_guild/illegal_goods": "submit:illegal_goods", + "guild/something_else_guild/impersonation": "submit:impersonation_organization", + "guild/something_else_guild/malware_phishing": "submit:malware_phishing", + "guild/something_else_guild/other": "submit:other", + "guild/something_else_guild/permits_violations": "submit:permits_violations", + "guild/something_else_guild/self_harm": "screen:self_harm_guild", + "guild/spam_kind_guild/account_trading": "submit:account_trading", + "guild/spam_kind_guild/metric_manipulation": "submit:metric_manipulation", + "guild/spam_kind_guild/platform_abuse": "submit:platform_abuse", + "guild/spam_kind_guild/spam_messages": "submit:spam", + "guild/threat/violence_glorification": "submit:violence_glorification", + "guild/threat/violence_incitement": "submit:violence_incitement", + "guild/threat/violent_threat": "submit:violent_threat", + "guild/violence_misinfo_guild/false_info": "screen:false_info", + "guild/violence_misinfo_guild/graphic_violence": "submit:graphic_violence", + "guild/violence_misinfo_guild/hate": "screen:hate", + "guild/violence_misinfo_guild/terrorism": "submit:terrorism_extremism", + "guild/violence_misinfo_guild/violence_glorification": "submit:violence_glorification", + "message/abuse/harassment": "screen:harassment", + "message/abuse/hate": "screen:hate", + "message/abuse/minor_risk": "screen:minor_risk", + "message/abuse/rude_language": "end", + "message/abuse/sexual": "screen:sexual", + "message/abuse/threat": "screen:threat", + "message/age_stated_message/age_no": "end:need_more_info", + "message/age_stated_message/age_yes": "submit:underage", + "message/false_info/false_claims": "submit:false_claims_about_person", + "message/false_info/harmful_false_claims": "submit:harmful_false_claims", + "message/false_info/synthetic_media": "submit:deceptive_synthetic_media", + "message/harassment/false_claims": "submit:false_claims_about_person", + "message/harassment/harassment_direct": "submit:harassment", + "message/harassment/raid": "submit:raid", + "message/harassment/unwanted_contact": "submit:unwanted_contact", + "message/hate/atrocity_denial": "submit:atrocity_denial", + "message/hate/conversion_therapy": "submit:conversion_therapy", + "message/hate/hate_dehumanizing": "submit:hate_dehumanizing", + "message/hate/hate_incitement": "submit:hate_incitement", + "message/hate/hate_other": "submit:hate_other", + "message/hate/hate_slurs": "submit:hate_slurs", + "message/hate/lgbtq_targeting": "submit:lgbtq_targeting", + "message/impersonation/fraud": "submit:fraud", + "message/impersonation/impersonation_organization": "submit:impersonation_organization", + "message/impersonation/impersonation_person": "submit:impersonation_person", + "message/impersonation/impersonation_public_figure": "submit:impersonation_public_figure", + "message/impersonation/impersonation_staff": "submit:impersonation_staff", + "message/minor_risk/minor_contact": "submit:minor_contact", + "message/minor_risk/minor_grooming": "submit:minor_grooming", + "message/minor_risk/minor_in_adult_space": "submit:minor_in_adult_space", + "message/minor_risk/minor_sexual": "screen:minor_sexual", + "message/minor_sexual/csam": "submit:csam", + "message/minor_sexual/minor_fictional": "submit:minor_fictional_sexualization", + "message/minor_sexual/minor_sexual_contact": "submit:minor_sexual_contact", + "message/minor_sexual/minor_sexual_content": "submit:minor_sexual_content", + "message/minor_sexual/minor_sexualization": "submit:minor_sexualization", + "message/private_info/#next": "submit:doxxing", + "message/private_info/address": "item", + "message/private_info/email": "item", + "message/private_info/face_photo": "item", + "message/private_info/financial": "item", + "message/private_info/government_id": "item", + "message/private_info/identity": "item", + "message/private_info/intimate_photo": "item:intimate_image_abuse", + "message/private_info/ip_address": "item", + "message/private_info/legal_name": "item", + "message/private_info/other_identifying": "item", + "message/private_info/phone": "item", + "message/private_info/private_conversation": "item", + "message/private_info/threat_to_share": "item", + "message/root_message/abuse": "screen:abuse", + "message/root_message/dislike": "end", + "message/root_message/dsa": "link:dsa", + "message/root_message/private_info": "screen:private_info", + "message/root_message/something_else": "screen:something_else_message", + "message/root_message/spam": "submit:spam", + "message/root_message/violence_misinfo": "screen:violence_misinfo", + "message/self_harm/crisis_lines": "link:crisis_lines", + "message/self_harm/eating_disorder_promotion": "submit:eating_disorder_promotion", + "message/self_harm/self_harm_graphic": "submit:self_harm_graphic", + "message/self_harm/self_harm_pressure": "submit:self_harm_pressure", + "message/self_harm/self_harm_promotion": "submit:self_harm_promotion", + "message/self_harm/suicide_promotion": "submit:suicide_promotion", + "message/self_harm/worried_self_harm": "submit:wellbeing_concern", + "message/self_harm/worried_suicide": "submit:wellbeing_concern", + "message/sexual/adult_content_unmarked": "submit:adult_content_unmarked", + "message/sexual/intimate_image_abuse": "submit:intimate_image_abuse", + "message/sexual/minor_sexual": "screen:minor_sexual", + "message/sexual/sexual_exploitation": "submit:sexual_exploitation", + "message/sexual/sexual_unwanted": "submit:sexual_unwanted", + "message/something_else_message/account_trading": "submit:account_trading", + "message/something_else_message/copyright": "link:copyright", + "message/something_else_message/copyright_notice": "submit:copyright", + "message/something_else_message/fake_account": "submit:fake_account", + "message/something_else_message/illegal_activity": "submit:illegal_activity", + "message/something_else_message/illegal_goods": "submit:illegal_goods", + "message/something_else_message/impersonation": "screen:impersonation", + "message/something_else_message/malware_phishing": "submit:malware_phishing", + "message/something_else_message/other": "submit:other", + "message/something_else_message/self_harm": "screen:self_harm", + "message/something_else_message/too_young": "screen:age_stated_message", + "message/threat/violence_glorification": "submit:violence_glorification", + "message/threat/violence_incitement": "submit:violence_incitement", + "message/threat/violent_threat": "submit:violent_threat", + "message/violence_misinfo/false_info": "screen:false_info", + "message/violence_misinfo/graphic_violence": "submit:graphic_violence", + "message/violence_misinfo/hate": "screen:hate", + "message/violence_misinfo/terrorism": "submit:terrorism_extremism", + "message/violence_misinfo/violence_glorification": "submit:violence_glorification", + "user/age_stated_profile/age_no": "end:need_more_info_profile", + "user/age_stated_profile/age_yes": "submit:underage", + "user/crisis_support/#next": "screen:self_harm_profile", + "user/crisis_support/crisis_lines": "link:crisis_lines", + "user/hate/atrocity_denial": "submit:atrocity_denial", + "user/hate/conversion_therapy": "submit:conversion_therapy", + "user/hate/hate_dehumanizing": "submit:hate_dehumanizing", + "user/hate/hate_incitement": "submit:hate_incitement", + "user/hate/hate_other": "submit:hate_other", + "user/hate/hate_slurs": "submit:hate_slurs", + "user/hate/lgbtq_targeting": "submit:lgbtq_targeting", + "user/impersonation/fraud": "submit:fraud", + "user/impersonation/impersonation_organization": "submit:impersonation_organization", + "user/impersonation/impersonation_person": "submit:impersonation_person", + "user/impersonation/impersonation_public_figure": "submit:impersonation_public_figure", + "user/impersonation/impersonation_staff": "submit:impersonation_staff", + "user/profile_abuse/harassment": "submit:harassment", + "user/profile_abuse/hate": "screen:hate", + "user/profile_abuse/minor_sexual": "screen:profile_minor_sexual", + "user/profile_abuse/sexual": "screen:profile_sexual", + "user/profile_abuse/threat": "screen:profile_threat", + "user/profile_hate_violence/graphic_violence": "submit:graphic_violence", + "user/profile_hate_violence/hate": "screen:hate", + "user/profile_hate_violence/terrorism": "submit:terrorism_extremism", + "user/profile_hate_violence/violence_glorification": "submit:violence_glorification", + "user/profile_intro/#next": "screen:profile_parts", + "user/profile_intro/learn_more": "link:guidelines", + "user/profile_minor_sexual/csam": "submit:csam", + "user/profile_minor_sexual/minor_fictional": "submit:minor_fictional_sexualization", + "user/profile_minor_sexual/minor_sexual_content": "submit:minor_sexual_content", + "user/profile_minor_sexual/minor_sexualization": "submit:minor_sexualization", + "user/profile_parts/#next": "screen:root_user", + "user/profile_parts/name": "item", + "user/profile_parts/photo": "item", + "user/profile_parts/profile_text": "item", + "user/profile_private_info/#next": "submit:doxxing", + "user/profile_private_info/address": "item", + "user/profile_private_info/email": "item", + "user/profile_private_info/face_photo": "item", + "user/profile_private_info/financial": "item", + "user/profile_private_info/government_id": "item", + "user/profile_private_info/identity": "item", + "user/profile_private_info/intimate_photo": "item:intimate_image_abuse", + "user/profile_private_info/ip_address": "item", + "user/profile_private_info/legal_name": "item", + "user/profile_private_info/other_identifying": "item", + "user/profile_private_info/phone": "item", + "user/profile_private_info/private_conversation": "item", + "user/profile_private_info/threat_to_share": "item", + "user/profile_sexual/adult_content_profile": "submit:adult_content_unmarked", + "user/profile_sexual/intimate_image_abuse": "submit:intimate_image_abuse", + "user/profile_sexual/minor_sexual": "screen:profile_minor_sexual", + "user/profile_sexual/sexual_exploitation": "submit:sexual_exploitation", + "user/profile_threat/violence_glorification": "submit:violence_glorification", + "user/profile_threat/violence_incitement": "submit:violence_incitement", + "user/profile_threat/violent_threat": "submit:violent_threat", + "user/root_user/abuse": "screen:profile_abuse", + "user/root_user/dsa": "link:dsa", + "user/root_user/hate_violence": "screen:profile_hate_violence", + "user/root_user/impersonation": "screen:impersonation", + "user/root_user/something_else": "screen:something_else_user", + "user/root_user/spam": "screen:spam_profile", + "user/self_harm_profile/eating_disorder_promotion": "submit:eating_disorder_promotion", + "user/self_harm_profile/self_harm_graphic": "submit:self_harm_graphic", + "user/self_harm_profile/self_harm_promotion": "submit:self_harm_promotion", + "user/self_harm_profile/suicide_promotion": "submit:suicide_promotion", + "user/self_harm_profile/worried": "submit:wellbeing_concern", + "user/something_else_user/account_trading": "submit:account_trading", + "user/something_else_user/ban_evasion": "submit:ban_evasion", + "user/something_else_user/copyright": "link:copyright", + "user/something_else_user/copyright_notice": "submit:copyright", + "user/something_else_user/illegal_activity": "submit:illegal_activity", + "user/something_else_user/illegal_goods": "submit:illegal_goods", + "user/something_else_user/malware_phishing": "submit:malware_phishing", + "user/something_else_user/other": "submit:other", + "user/something_else_user/private_info": "screen:profile_private_info", + "user/something_else_user/self_harm": "screen:crisis_support", + "user/something_else_user/too_young": "screen:age_stated_profile", + "user/spam_profile/account_trading": "submit:account_trading", + "user/spam_profile/fake_account": "submit:fake_account", + "user/spam_profile/platform_abuse": "submit:platform_abuse", + "user/spam_profile/spam_profile": "submit:spam" + }, + "retired": { + "message/something_else_message/violence_misinfo": "screen:violence_misinfo" + } +} diff --git a/fluxer_api/src/api/report/flows/ReportFlowRegistry.ts b/fluxer_api/src/api/report/flows/ReportFlowRegistry.ts new file mode 100644 index 000000000..37c1f43ce --- /dev/null +++ b/fluxer_api/src/api/report/flows/ReportFlowRegistry.ts @@ -0,0 +1,810 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createHash} from 'node:crypto'; +import {Config} from '@app/api/Config'; +import {getContentMessage} from '@app/api/content_i18n/ContentI18n'; +import {CONTENT_I18N_MESSAGES} from '@app/api/content_i18n/ContentI18nMessages'; +import {REPORT_FLOWS, type ReportFlowDef} from '@app/api/report/flows/ReportFlowDefinitions'; +import { + REPORT_FLOW_NOTICES, + REPORT_FLOW_SCREENS, + type ReportFlowCopyKey, + type ReportFlowLinkId, + type ReportFlowNoticeDef, + type ReportFlowOptionDef, + type ReportFlowOutcomeDef, + type ReportFlowScreenDef, +} from '@app/api/report/flows/ReportFlowScreens'; +import {getLegacyCategory, isReportReasonKey, type ReportReasonKey} from '@app/api/report/flows/ReportReasonCatalog'; +import {type LocaleCode, Locales} from '@fluxer/constants/src/Locales'; +import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes'; +import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError'; +import {InvalidReportFlowAnswersError} from '@fluxer/errors/src/domains/moderation/InvalidReportFlowAnswersError'; +import {ReportFlowOutdatedError} from '@fluxer/errors/src/domains/moderation/ReportFlowOutdatedError'; +import type { + ReportFlowOutcome, + ReportFlowResponse, + ReportFlowScreen, + ReportFlowSurface, + ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import {parseAcceptLanguage} from '@pkgs/locale/src/LocaleService'; + +export interface ReportFlowLibrary { + flows: Record; + screens: ReadonlyArray; + notices: ReadonlyArray; +} + +export interface ReportFlowInstance { + selfHosted: boolean; +} + +export type ReportFlowScreenKind = 'choice' | 'checklist' | 'info'; + +export interface ReportFlowVariantScreen { + def: ReportFlowScreenDef; + kind: ReportFlowScreenKind; + subtitle: ReportFlowCopyKey | null; + options: ReadonlyArray; +} + +export interface ReportFlowVariant { + target: ReportFlowTargetType; + surface: ReportFlowSurface; + startScreenId: string; + screens: ReadonlyMap; + notices: ReadonlyArray; + revisionHash: string; +} + +export interface ReportFlowStepRecord { + screen_id: string; + option_id?: string; + item_ids?: Array; +} + +export interface ReportFlowStepInput { + screen_id: string; + option_id?: string | undefined; + item_ids?: ReadonlyArray | undefined; +} + +export interface ResolvedReportFlowAnswers { + reason: ReportReasonKey; + legacyCategory: string; + steps: Array; + stepsJson: string; + currentRevisionHash: string; + isCurrentRevision: boolean; +} + +export interface ReportFlowAnswersDescription { + revision_hash: string; + surface: string; + locale: string | null; + steps: Array<{ + screen_id: string; + screen_title: string; + option_id: string | null; + option_label: string | null; + items: Array<{id: string; label: string}>; + }>; +} + +export const REPORT_FLOW_LIBRARY: ReportFlowLibrary = { + flows: REPORT_FLOWS, + screens: REPORT_FLOW_SCREENS, + notices: REPORT_FLOW_NOTICES, +}; + +const REPORT_FLOW_TARGETS: ReadonlyArray = ['message', 'user', 'guild']; +const REPORT_FLOW_SURFACES: ReadonlyArray = ['in_app', 'dsa']; +const REPORT_FLOW_ID_PATTERN = /^[a-z0-9_]{1,48}$/; +const MAX_WALK_SCREENS = 10; +const CRISIS_LINES_URL = 'https://befrienders.org'; +const ADMIN_LOCALE = 'en-US'; +const NORWEGIAN_LANGUAGE_CODES: ReadonlySet = new Set(['nb', 'nn']); + +export function getReportFlowScreenKind(screen: ReportFlowScreenDef): ReportFlowScreenKind { + if (screen.checklist) { + return 'checklist'; + } + if (screen.nextScreenId !== undefined) { + return 'info'; + } + return 'choice'; +} + +function isLinkAvailable(link: ReportFlowLinkId, instance: ReportFlowInstance): boolean { + return link === 'crisis_lines' || !instance.selfHosted; +} + +function resolveScreenSubtitle( + def: ReportFlowScreenDef, + surface: ReportFlowSurface, + instance: ReportFlowInstance, +): ReportFlowCopyKey | null { + const variants = def.subtitleVariants; + if (surface === 'dsa' && variants?.dsa !== undefined) { + return variants.dsa; + } + if (instance.selfHosted && variants?.selfHosted !== undefined) { + return variants.selfHosted; + } + return def.subtitle ?? null; +} + +function isOptionInVariant( + option: ReportFlowOptionDef, + surface: ReportFlowSurface, + instance: ReportFlowInstance, +): boolean { + if (option.surface !== undefined && option.surface !== surface) { + return false; + } + return option.outcome.type !== 'link' || isLinkAvailable(option.outcome.link, instance); +} + +function getScreenEdges(screen: ReportFlowVariantScreen): Array { + const edges: Array = []; + for (const option of screen.options) { + if (option.outcome.type === 'screen') { + edges.push(option.outcome.screenId); + } + } + if (screen.def.checklist?.outcome.type === 'screen') { + edges.push(screen.def.checklist.outcome.screenId); + } + if (screen.def.nextScreenId !== undefined) { + edges.push(screen.def.nextScreenId); + } + return edges; +} + +function getScreenOutcomes(screen: ReportFlowVariantScreen): Array { + const outcomes = screen.options.map((option) => option.outcome); + if (screen.def.checklist) { + outcomes.push(screen.def.checklist.outcome); + } + return outcomes; +} + +function canonicalOutcome(outcome: ReportFlowOutcomeDef): string { + switch (outcome.type) { + case 'screen': + return `screen:${outcome.screenId}`; + case 'submit': + return `submit:${outcome.reason}`; + case 'end': + return outcome.noticeId === undefined ? 'end' : `end:${outcome.noticeId}`; + case 'link': + return `link:${outcome.link}`; + } +} + +function computeRevisionHash( + target: ReportFlowTargetType, + surface: ReportFlowSurface, + startScreenId: string, + screens: ReadonlyMap, + notices: ReadonlyArray, +): string { + const canonical = { + target, + surface, + start: startScreenId, + screens: [...screens.values()] + .sort((a, b) => (a.def.id < b.def.id ? -1 : a.def.id > b.def.id ? 1 : 0)) + .map((screen) => ({ + id: screen.def.id, + kind: screen.kind, + title: screen.def.title, + subtitle: screen.subtitle, + options_heading: screen.options.length > 0 ? (screen.def.optionsHeading ?? null) : null, + urgent: screen.def.urgent === true, + next: screen.def.nextScreenId ?? null, + options: screen.options.map((option) => ({ + id: option.id, + label: option.label, + outcome: canonicalOutcome(option.outcome), + })), + checklist: screen.def.checklist + ? { + items: screen.def.checklist.items.map((item) => ({ + id: item.id, + label: item.label, + description: item.description ?? null, + reason: item.reason ?? null, + })), + min_checked: screen.def.checklist.minChecked, + outcome: canonicalOutcome(screen.def.checklist.outcome), + } + : null, + })), + notices: notices.map((notice) => ({id: notice.id, title: notice.title, body: notice.body})), + }; + return createHash('sha256').update(JSON.stringify(canonical)).digest('hex').slice(0, 16); +} + +export function buildReportFlowVariant( + library: ReportFlowLibrary, + target: ReportFlowTargetType, + surface: ReportFlowSurface, + instance: ReportFlowInstance, +): ReportFlowVariant | null { + const startScreenId = library.flows[target].start[surface]; + if (startScreenId === undefined) { + return null; + } + const screenDefs = new Map(library.screens.map((screen) => [screen.id, screen])); + const screens = new Map(); + const noticeIds = new Set(); + const queue = [startScreenId]; + for (let index = 0; index < queue.length; index++) { + const screenId = queue[index]; + if (screens.has(screenId)) { + continue; + } + const def = screenDefs.get(screenId); + if (!def) { + throw new Error(`Report flow ${target}/${surface} references an unknown screen: ${screenId}`); + } + const screen: ReportFlowVariantScreen = { + def, + kind: getReportFlowScreenKind(def), + subtitle: resolveScreenSubtitle(def, surface, instance), + options: (def.options ?? []).filter((option) => isOptionInVariant(option, surface, instance)), + }; + screens.set(screenId, screen); + for (const outcome of getScreenOutcomes(screen)) { + if (outcome.type === 'end' && outcome.noticeId !== undefined) { + noticeIds.add(outcome.noticeId); + } + } + queue.push(...getScreenEdges(screen)); + } + const notices = library.notices.filter((notice) => noticeIds.has(notice.id)); + return { + target, + surface, + startScreenId, + screens, + notices, + revisionHash: computeRevisionHash(target, surface, startScreenId, screens, notices), + }; +} + +function collectDefinitionErrors(library: ReportFlowLibrary): Array { + const errors: Array = []; + const screenIds = new Set(); + const noticeIds = new Set(library.notices.map((notice) => notice.id)); + const checkId = (id: string, where: string) => { + if (!REPORT_FLOW_ID_PATTERN.test(id)) { + errors.push(`${where}: id "${id}" does not match ${REPORT_FLOW_ID_PATTERN}`); + } + }; + const checkKey = (key: string | undefined, where: string) => { + if (key !== undefined && !Object.hasOwn(CONTENT_I18N_MESSAGES, key)) { + errors.push(`${where}: unknown copy key ${key}`); + } + }; + const checkOutcome = (outcome: ReportFlowOutcomeDef, where: string) => { + if (outcome.type === 'submit' && !isReportReasonKey(outcome.reason)) { + errors.push(`${where}: unknown reason ${outcome.reason}`); + } + if (outcome.type === 'end' && outcome.noticeId !== undefined && !noticeIds.has(outcome.noticeId)) { + errors.push(`${where}: unknown notice ${outcome.noticeId}`); + } + }; + for (const notice of library.notices) { + checkId(notice.id, `notice ${notice.id}`); + checkKey(notice.title, `notice ${notice.id}`); + checkKey(notice.body, `notice ${notice.id}`); + } + if (noticeIds.size !== library.notices.length) { + errors.push('notice ids are not unique'); + } + for (const screen of library.screens) { + const where = `screen ${screen.id}`; + checkId(screen.id, where); + if (screenIds.has(screen.id)) { + errors.push(`${where}: duplicate screen id`); + } + screenIds.add(screen.id); + checkKey(screen.title, where); + checkKey(screen.subtitle, where); + checkKey(screen.subtitleVariants?.dsa ?? undefined, where); + checkKey(screen.subtitleVariants?.selfHosted ?? undefined, where); + checkKey(screen.optionsHeading, where); + const options = screen.options ?? []; + const kind = getReportFlowScreenKind(screen); + if (kind === 'checklist' && (options.length > 0 || screen.nextScreenId !== undefined)) { + errors.push(`${where}: a checklist screen has no options and no next screen`); + } + if (kind === 'info' && options.some((option) => option.outcome.type !== 'link')) { + errors.push(`${where}: an info screen only has link options`); + } + if (kind === 'choice' && !options.some((option) => option.outcome.type !== 'link')) { + errors.push(`${where}: a choice screen needs at least one option that is not a link`); + } + const optionIds = new Set(); + for (const option of options) { + const optionWhere = `${where} option ${option.id}`; + checkId(option.id, optionWhere); + if (optionIds.has(option.id)) { + errors.push(`${optionWhere}: duplicate option id`); + } + optionIds.add(option.id); + checkKey(option.label, optionWhere); + checkOutcome(option.outcome, optionWhere); + const endsWithoutNotice = option.outcome.type === 'end' && option.outcome.noticeId === undefined; + const linksToDsa = + option.outcome.type === 'link' && (option.outcome.link === 'dsa' || option.outcome.link === 'copyright'); + if ((endsWithoutNotice || linksToDsa) && option.surface !== 'in_app') { + errors.push(`${optionWhere}: a no-report or DSA link option must be limited to in_app`); + } + } + if (screen.checklist) { + const {items, minChecked, outcome} = screen.checklist; + const itemIds = new Set(); + for (const item of items) { + const itemWhere = `${where} item ${item.id}`; + checkId(item.id, itemWhere); + if (itemIds.has(item.id)) { + errors.push(`${itemWhere}: duplicate item id`); + } + itemIds.add(item.id); + checkKey(item.label, itemWhere); + checkKey(item.description, itemWhere); + if (item.reason !== undefined && !isReportReasonKey(item.reason)) { + errors.push(`${itemWhere}: unknown reason ${item.reason}`); + } + } + if (!Number.isInteger(minChecked) || minChecked < 1 || minChecked > items.length) { + errors.push(`${where}: min checked must be between 1 and the item count`); + } + checkOutcome(outcome, `${where} checklist`); + } + } + for (const screen of library.screens) { + const targets = [ + ...(screen.options ?? []).flatMap((option) => + option.outcome.type === 'screen' ? [option.outcome.screenId] : [], + ), + ...(screen.checklist?.outcome.type === 'screen' ? [screen.checklist.outcome.screenId] : []), + ...(screen.nextScreenId !== undefined ? [screen.nextScreenId] : []), + ]; + for (const next of targets) { + if (!screenIds.has(next)) { + errors.push(`screen ${screen.id}: next screen ${next} is not defined`); + } + } + } + for (const target of REPORT_FLOW_TARGETS) { + for (const surface of REPORT_FLOW_SURFACES) { + const start = library.flows[target].start[surface]; + if (start !== undefined && !screenIds.has(start)) { + errors.push(`flow ${target}/${surface}: start screen ${start} is not defined`); + } + } + } + return errors; +} + +function collectVariantErrors(variant: ReportFlowVariant): Array { + const errors: Array = []; + const name = `flow ${variant.target}/${variant.surface}`; + const startKind = variant.screens.get(variant.startScreenId)?.kind; + const mustStartWithInfo = variant.target === 'user' && variant.surface === 'in_app'; + if (mustStartWithInfo !== (startKind === 'info')) { + errors.push( + mustStartWithInfo + ? `${name}: the start screen must be an info screen` + : `${name}: the start screen must not be an info screen`, + ); + } + for (const screen of variant.screens.values()) { + if (screen.kind === 'choice' && !screen.options.some((option) => option.outcome.type !== 'link')) { + errors.push(`${name} screen ${screen.def.id}: no option that is not a link remains`); + } + for (const outcome of getScreenOutcomes(screen)) { + if (outcome.type === 'submit') { + checkLegacyCategory(outcome.reason, variant.target, `${name} screen ${screen.def.id}`, errors); + } + } + for (const item of screen.def.checklist?.items ?? []) { + if (item.reason !== undefined) { + checkLegacyCategory(item.reason, variant.target, `${name} screen ${screen.def.id}`, errors); + } + } + } + const depth = new Map(); + const visiting = new Set(); + const measure = (screenId: string): number => { + const known = depth.get(screenId); + if (known !== undefined) { + return known; + } + if (visiting.has(screenId)) { + errors.push(`${name}: cycle through screen ${screenId}`); + return Number.POSITIVE_INFINITY; + } + visiting.add(screenId); + const screen = variant.screens.get(screenId); + let longest = 0; + for (const next of screen ? getScreenEdges(screen) : []) { + longest = Math.max(longest, measure(next)); + } + visiting.delete(screenId); + depth.set(screenId, longest + 1); + return longest + 1; + }; + const longestWalk = measure(variant.startScreenId); + if (Number.isFinite(longestWalk) && longestWalk > MAX_WALK_SCREENS) { + errors.push(`${name}: longest walk is ${longestWalk} screens, the limit is ${MAX_WALK_SCREENS}`); + } + return errors; +} + +function checkLegacyCategory(reason: string, target: ReportFlowTargetType, where: string, errors: Array) { + if (!isReportReasonKey(reason) || !getLegacyCategory(reason, target)) { + errors.push(`${where}: reason ${reason} has no legacy category for ${target}`); + } +} + +export function assertValidReportFlowLibrary(library: ReportFlowLibrary): void { + const errors = collectDefinitionErrors(library); + if (errors.length === 0) { + const reachable = new Set(); + for (const selfHosted of [false, true]) { + for (const target of REPORT_FLOW_TARGETS) { + for (const surface of REPORT_FLOW_SURFACES) { + const variant = buildReportFlowVariant(library, target, surface, {selfHosted}); + if (!variant) { + continue; + } + errors.push(...collectVariantErrors(variant)); + for (const screenId of variant.screens.keys()) { + reachable.add(screenId); + } + } + } + } + for (const screen of library.screens) { + if (!reachable.has(screen.id)) { + errors.push(`screen ${screen.id}: not reachable from any flow`); + } + } + } + if (errors.length > 0) { + throw new Error(`Invalid report flow definitions:\n${[...new Set(errors)].join('\n')}`); + } +} + +export function buildReportFlowLedger(library: ReportFlowLibrary): Record { + const ledger: Record = {}; + for (const target of REPORT_FLOW_TARGETS) { + for (const surface of REPORT_FLOW_SURFACES) { + const variant = buildReportFlowVariant(library, target, surface, {selfHosted: false}); + if (!variant) { + continue; + } + for (const screen of variant.screens.values()) { + const prefix = `${target}/${screen.def.id}`; + for (const option of screen.options) { + ledger[`${prefix}/${option.id}`] = canonicalOutcome(option.outcome); + } + if (screen.def.checklist) { + for (const item of screen.def.checklist.items) { + ledger[`${prefix}/${item.id}`] = item.reason === undefined ? 'item' : `item:${item.reason}`; + } + ledger[`${prefix}/#next`] = canonicalOutcome(screen.def.checklist.outcome); + } + if (screen.def.nextScreenId !== undefined) { + ledger[`${prefix}/#next`] = `screen:${screen.def.nextScreenId}`; + } + } + } + } + return Object.fromEntries(Object.entries(ledger).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))); +} + +assertValidReportFlowLibrary(REPORT_FLOW_LIBRARY); + +const variantCache = new Map(); +const responseCache = new Map(); + +function getCurrentInstance(): ReportFlowInstance { + return {selfHosted: Config.instance.selfHosted}; +} + +function getProductName(): string { + return Config.instance.branding.productName || 'Fluxer'; +} + +function getGuidelinesUrl(instance: ReportFlowInstance): string | null { + return isLinkAvailable('guidelines', instance) ? `${Config.endpoints.marketing}/guidelines` : null; +} + +function getLinkUrl(link: ReportFlowLinkId, instance: ReportFlowInstance): string | null { + switch (link) { + case 'dsa': + return `${Config.endpoints.webApp}/report`; + case 'copyright': + return `${Config.endpoints.webApp}/report?option=copyright_notice`; + case 'crisis_lines': + return CRISIS_LINES_URL; + case 'guidelines': + return getGuidelinesUrl(instance); + } +} + +function findReportFlowVariant(target: ReportFlowTargetType, surface: ReportFlowSurface): ReportFlowVariant | null { + const instance = getCurrentInstance(); + const cacheKey = `${target}:${surface}:${instance.selfHosted}`; + if (!variantCache.has(cacheKey)) { + variantCache.set(cacheKey, buildReportFlowVariant(REPORT_FLOW_LIBRARY, target, surface, instance)); + } + return variantCache.get(cacheKey) ?? null; +} + +export function getReportFlowVariant(target: ReportFlowTargetType, surface: ReportFlowSurface): ReportFlowVariant { + const variant = findReportFlowVariant(target, surface); + if (!variant) { + throw InputValidationError.fromCode('surface', ValidationErrorCodes.INVALID_FORMAT); + } + return variant; +} + +export function resolveReportFlowLocale(raw: string | null | undefined): LocaleCode { + if (!raw) { + return parseAcceptLanguage(null); + } + const tag = raw.trim().replaceAll('_', '-'); + const language = tag.split(/[-,;]/)[0].toLowerCase(); + return parseAcceptLanguage(NORWEGIAN_LANGUAGE_CODES.has(language) ? Locales.NO : tag); +} + +function renderCopy(key: ReportFlowCopyKey, locale: string): string { + return getContentMessage(key, locale, {product_name: getProductName()}); +} + +function renderOutcome(outcome: ReportFlowOutcomeDef, instance: ReportFlowInstance): ReportFlowOutcome { + return { + type: outcome.type, + screen_id: outcome.type === 'screen' ? outcome.screenId : null, + reason: outcome.type === 'submit' ? outcome.reason : null, + notice_id: outcome.type === 'end' ? (outcome.noticeId ?? null) : null, + url: outcome.type === 'link' ? getLinkUrl(outcome.link, instance) : null, + }; +} + +function renderScreen(screen: ReportFlowVariantScreen, locale: string, instance: ReportFlowInstance): ReportFlowScreen { + const {def} = screen; + return { + id: def.id, + title: renderCopy(def.title, locale), + subtitle: screen.subtitle ? renderCopy(screen.subtitle, locale) : null, + urgent: def.urgent === true, + options: screen.options.map((option) => ({ + id: option.id, + label: renderCopy(option.label, locale), + outcome: renderOutcome(option.outcome, instance), + })), + options_heading: def.optionsHeading && screen.options.length > 0 ? renderCopy(def.optionsHeading, locale) : null, + checklist: def.checklist + ? { + items: def.checklist.items.map((item) => ({ + id: item.id, + label: renderCopy(item.label, locale), + description: item.description ? renderCopy(item.description, locale) : null, + })), + min_checked: def.checklist.minChecked, + outcome: renderOutcome(def.checklist.outcome, instance), + } + : null, + next_screen_id: def.nextScreenId ?? null, + }; +} + +export function getReportFlowResponse( + target: ReportFlowTargetType, + surface: ReportFlowSurface, + rawLocale: string | null | undefined, +): ReportFlowResponse { + const variant = getReportFlowVariant(target, surface); + const locale = resolveReportFlowLocale(rawLocale); + const instance = getCurrentInstance(); + const cacheKey = [ + target, + surface, + locale, + instance.selfHosted, + getProductName(), + Config.endpoints.webApp, + Config.endpoints.marketing, + ].join('\u0000'); + const cached = responseCache.get(cacheKey); + if (cached) { + return cached; + } + const response: ReportFlowResponse = { + target_type: target, + surface, + revision_hash: variant.revisionHash, + locale, + start_screen_id: variant.startScreenId, + guidelines_url: getGuidelinesUrl(instance), + screens: [...variant.screens.values()].map((screen) => renderScreen(screen, locale, instance)), + notices: variant.notices.map((notice) => ({ + id: notice.id, + title: renderCopy(notice.title, locale), + body: renderCopy(notice.body, locale), + })), + }; + responseCache.set(cacheKey, response); + return response; +} + +function findInvalidStep( + variant: ReportFlowVariant, + steps: ReadonlyArray, +): {invalidStep: number} | {reason: ReportReasonKey; steps: Array} { + let expectedScreenId: string | null = variant.startScreenId; + let finalReason: ReportReasonKey | null = null; + let itemReason: ReportReasonKey | null = null; + const records: Array = []; + for (let index = 0; index < steps.length; index++) { + const step = steps[index]; + if (expectedScreenId === null || step.screen_id !== expectedScreenId) { + return {invalidStep: index}; + } + const screen = variant.screens.get(expectedScreenId); + if (!screen) { + return {invalidStep: index}; + } + let outcome: ReportFlowOutcomeDef; + if (screen.kind === 'choice') { + const option = + step.option_id !== undefined && step.item_ids === undefined + ? screen.options.find((candidate) => candidate.id === step.option_id) + : undefined; + if (!option) { + return {invalidStep: index}; + } + outcome = option.outcome; + records.push({screen_id: step.screen_id, option_id: option.id}); + } else if (screen.kind === 'checklist' && screen.def.checklist) { + const {items, minChecked} = screen.def.checklist; + const chosen = new Set(step.item_ids ?? []); + const known = items.filter((item) => chosen.has(item.id)); + if ( + step.option_id !== undefined || + step.item_ids === undefined || + chosen.size !== step.item_ids.length || + known.length !== chosen.size || + known.length < minChecked + ) { + return {invalidStep: index}; + } + itemReason ??= known.find((item) => item.reason !== undefined)?.reason ?? null; + outcome = screen.def.checklist.outcome; + records.push({screen_id: step.screen_id, item_ids: known.map((item) => item.id)}); + } else { + if (step.option_id !== undefined || step.item_ids !== undefined || screen.def.nextScreenId === undefined) { + return {invalidStep: index}; + } + outcome = {type: 'screen', screenId: screen.def.nextScreenId}; + records.push({screen_id: step.screen_id}); + } + if (outcome.type === 'screen') { + expectedScreenId = outcome.screenId; + } else if (outcome.type === 'submit') { + expectedScreenId = null; + finalReason = outcome.reason; + } else { + return {invalidStep: index}; + } + } + if (finalReason === null) { + return {invalidStep: Math.max(steps.length - 1, 0)}; + } + return {reason: itemReason ?? finalReason, steps: records}; +} + +export function resolveReportFlowAnswers(params: { + target: ReportFlowTargetType; + surface: ReportFlowSurface; + revisionHash: string; + steps: ReadonlyArray; +}): ResolvedReportFlowAnswers { + const variant = getReportFlowVariant(params.target, params.surface); + const isCurrentRevision = params.revisionHash === variant.revisionHash; + const result = findInvalidStep(variant, params.steps); + if ('invalidStep' in result) { + if (isCurrentRevision) { + throw new InvalidReportFlowAnswersError(result.invalidStep); + } + throw new ReportFlowOutdatedError(); + } + return { + reason: result.reason, + legacyCategory: getLegacyCategory(result.reason, params.target), + steps: result.steps, + stepsJson: JSON.stringify(result.steps), + currentRevisionHash: variant.revisionHash, + isCurrentRevision, + }; +} + +function isStringArray(value: unknown): value is Array { + return Array.isArray(value) && value.every((entry) => typeof entry === 'string'); +} + +export function parseReportFlowSteps(json: string | null | undefined): Array | null { + if (!json) { + return null; + } + let parsed: unknown; + try { + parsed = JSON.parse(json); + } catch { + return null; + } + if (!Array.isArray(parsed)) { + return null; + } + const steps: Array = []; + for (const entry of parsed) { + if (typeof entry !== 'object' || entry === null) { + return null; + } + const {screen_id, option_id, item_ids} = entry as Record; + if ( + typeof screen_id !== 'string' || + (option_id !== undefined && typeof option_id !== 'string') || + (item_ids !== undefined && !isStringArray(item_ids)) + ) { + return null; + } + steps.push({ + screen_id, + ...(option_id !== undefined ? {option_id} : {}), + ...(item_ids !== undefined ? {item_ids} : {}), + }); + } + return steps; +} + +export function describeReportFlowAnswers(params: { + revisionHash: string; + surface: string; + locale: string | null; + steps: ReadonlyArray; +}): ReportFlowAnswersDescription { + const screenDefs = new Map(REPORT_FLOW_LIBRARY.screens.map((screen) => [screen.id, screen])); + return { + revision_hash: params.revisionHash, + surface: params.surface, + locale: params.locale, + steps: params.steps.map((step) => { + const screen = screenDefs.get(step.screen_id); + const option = + step.option_id === undefined + ? undefined + : screen?.options?.find((candidate) => candidate.id === step.option_id); + return { + screen_id: step.screen_id, + screen_title: screen ? renderCopy(screen.title, ADMIN_LOCALE) : step.screen_id, + option_id: step.option_id ?? null, + option_label: + step.option_id === undefined ? null : option ? renderCopy(option.label, ADMIN_LOCALE) : step.option_id, + items: (step.item_ids ?? []).map((itemId) => { + const item = screen?.checklist?.items.find((candidate) => candidate.id === itemId); + return {id: itemId, label: item ? renderCopy(item.label, ADMIN_LOCALE) : itemId}; + }), + }; + }), + }; +} diff --git a/fluxer_api/src/api/report/flows/ReportFlowScreens.ts b/fluxer_api/src/api/report/flows/ReportFlowScreens.ts new file mode 100644 index 000000000..d923ec04c --- /dev/null +++ b/fluxer_api/src/api/report/flows/ReportFlowScreens.ts @@ -0,0 +1,1037 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ContentI18nKey} from '@app/api/content_i18n/ContentI18nMessages'; +import type {ReportReasonKey} from '@app/api/report/flows/ReportReasonCatalog'; +import type {ReportFlowSurface} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; + +export type ReportFlowCopyKey = Extract; + +export type ReportFlowLinkId = 'dsa' | 'copyright' | 'crisis_lines' | 'guidelines'; + +export type ReportFlowOutcomeDef = + | {type: 'screen'; screenId: string} + | {type: 'submit'; reason: ReportReasonKey} + | {type: 'end'; noticeId?: string} + | {type: 'link'; link: ReportFlowLinkId}; + +export interface ReportFlowOptionDef { + id: string; + label: ReportFlowCopyKey; + outcome: ReportFlowOutcomeDef; + surface?: ReportFlowSurface; +} + +export interface ReportFlowChecklistItemDef { + id: string; + label: ReportFlowCopyKey; + description?: ReportFlowCopyKey; + reason?: ReportReasonKey; +} + +export interface ReportFlowChecklistDef { + items: ReadonlyArray; + minChecked: number; + outcome: Extract; +} + +export interface ReportFlowSubtitleVariantsDef { + dsa?: ReportFlowCopyKey | null; + selfHosted?: ReportFlowCopyKey | null; +} + +export interface ReportFlowScreenDef { + id: string; + title: ReportFlowCopyKey; + subtitle?: ReportFlowCopyKey; + subtitleVariants?: ReportFlowSubtitleVariantsDef; + urgent?: true; + options?: ReadonlyArray; + optionsHeading?: ReportFlowCopyKey; + checklist?: ReportFlowChecklistDef; + nextScreenId?: string; +} + +export interface ReportFlowNoticeDef { + id: string; + title: ReportFlowCopyKey; + body: ReportFlowCopyKey; +} + +export const REPORT_FLOW_NOTICES: ReadonlyArray = [ + { + id: 'need_more_info', + title: 'report_flow.notice.need_more_info.title', + body: 'report_flow.notice.need_more_info.body', + }, + { + id: 'need_more_info_profile', + title: 'report_flow.notice.need_more_info.title', + body: 'report_flow.notice.need_more_info_profile.body', + }, +]; + +export const PRIVATE_INFO_ITEMS: ReadonlyArray = [ + {id: 'email', label: 'report_flow.label.email'}, + {id: 'phone', label: 'report_flow.label.phone'}, + {id: 'address', label: 'report_flow.label.address'}, + {id: 'legal_name', label: 'report_flow.label.legal_name'}, + {id: 'government_id', label: 'report_flow.label.government_id'}, + {id: 'face_photo', label: 'report_flow.label.face_photo'}, + {id: 'identity', label: 'report_flow.label.identity'}, + {id: 'financial', label: 'report_flow.label.financial'}, + {id: 'ip_address', label: 'report_flow.label.ip_address'}, + {id: 'intimate_photo', label: 'report_flow.label.intimate_photo', reason: 'intimate_image_abuse'}, + {id: 'private_conversation', label: 'report_flow.label.private_conversation'}, + {id: 'other_identifying', label: 'report_flow.label.other_identifying'}, + {id: 'threat_to_share', label: 'report_flow.label.threat_to_share'}, +]; + +export const REPORT_FLOW_SCREENS: ReadonlyArray = [ + { + id: 'root_message', + title: 'report_flow.screen.root_message.title', + subtitle: 'report_flow.screen.root_message.subtitle', + options: [ + {id: 'abuse', label: 'report_flow.label.abuse', outcome: {type: 'screen', screenId: 'abuse'}}, + { + id: 'private_info', + label: 'report_flow.label.private_info', + outcome: {type: 'screen', screenId: 'private_info'}, + }, + { + id: 'violence_misinfo', + label: 'report_flow.label.violence_misinfo', + outcome: {type: 'screen', screenId: 'violence_misinfo'}, + }, + {id: 'spam', label: 'report_flow.label.spam', outcome: {type: 'submit', reason: 'spam'}}, + { + id: 'something_else', + label: 'report_flow.label.something_else', + outcome: {type: 'screen', screenId: 'something_else_message'}, + }, + {id: 'dislike', label: 'report_flow.label.dislike', outcome: {type: 'end'}, surface: 'in_app'}, + {id: 'dsa', label: 'report_flow.label.dsa', outcome: {type: 'link', link: 'dsa'}, surface: 'in_app'}, + ], + }, + { + id: 'abuse', + title: 'report_flow.screen.abuse.title', + options: [ + {id: 'minor_risk', label: 'report_flow.label.minor_risk', outcome: {type: 'screen', screenId: 'minor_risk'}}, + {id: 'threat', label: 'report_flow.label.threat', outcome: {type: 'screen', screenId: 'threat'}}, + {id: 'harassment', label: 'report_flow.label.harassment', outcome: {type: 'screen', screenId: 'harassment'}}, + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + {id: 'sexual', label: 'report_flow.label.sexual', outcome: {type: 'screen', screenId: 'sexual'}}, + {id: 'rude_language', label: 'report_flow.label.rude_language', outcome: {type: 'end'}, surface: 'in_app'}, + ], + }, + { + id: 'harassment', + title: 'report_flow.screen.harassment.title', + options: [ + { + id: 'harassment_direct', + label: 'report_flow.label.harassment_direct', + outcome: {type: 'submit', reason: 'harassment'}, + }, + { + id: 'unwanted_contact', + label: 'report_flow.label.unwanted_contact', + outcome: {type: 'submit', reason: 'unwanted_contact'}, + }, + {id: 'raid', label: 'report_flow.label.raid', outcome: {type: 'submit', reason: 'raid'}}, + { + id: 'false_claims', + label: 'report_flow.label.false_claims', + outcome: {type: 'submit', reason: 'false_claims_about_person'}, + }, + ], + }, + { + id: 'hate', + title: 'report_flow.screen.hate.title', + options: [ + {id: 'hate_slurs', label: 'report_flow.label.hate_slurs', outcome: {type: 'submit', reason: 'hate_slurs'}}, + { + id: 'hate_dehumanizing', + label: 'report_flow.label.hate_dehumanizing', + outcome: {type: 'submit', reason: 'hate_dehumanizing'}, + }, + { + id: 'hate_incitement', + label: 'report_flow.label.hate_incitement', + outcome: {type: 'submit', reason: 'hate_incitement'}, + }, + { + id: 'atrocity_denial', + label: 'report_flow.label.atrocity_denial', + outcome: {type: 'submit', reason: 'atrocity_denial'}, + }, + { + id: 'lgbtq_targeting', + label: 'report_flow.label.lgbtq_targeting', + outcome: {type: 'submit', reason: 'lgbtq_targeting'}, + }, + { + id: 'conversion_therapy', + label: 'report_flow.label.conversion_therapy', + outcome: {type: 'submit', reason: 'conversion_therapy'}, + }, + {id: 'hate_other', label: 'report_flow.label.hate_other', outcome: {type: 'submit', reason: 'hate_other'}}, + ], + }, + { + id: 'sexual', + title: 'report_flow.screen.sexual.title', + subtitle: 'report_flow.screen.sexual.subtitle', + urgent: true, + options: [ + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual', + outcome: {type: 'screen', screenId: 'minor_sexual'}, + }, + { + id: 'sexual_unwanted', + label: 'report_flow.label.sexual_unwanted', + outcome: {type: 'submit', reason: 'sexual_unwanted'}, + }, + { + id: 'adult_content_unmarked', + label: 'report_flow.label.adult_content_unmarked', + outcome: {type: 'submit', reason: 'adult_content_unmarked'}, + }, + { + id: 'intimate_image_abuse', + label: 'report_flow.label.intimate_image_abuse', + outcome: {type: 'submit', reason: 'intimate_image_abuse'}, + }, + { + id: 'sexual_exploitation', + label: 'report_flow.label.sexual_exploitation', + outcome: {type: 'submit', reason: 'sexual_exploitation'}, + }, + ], + }, + { + id: 'minor_sexual', + title: 'report_flow.screen.minor_sexual.title', + subtitle: 'report_flow.screen.minor_sexual.subtitle', + urgent: true, + options: [ + {id: 'csam', label: 'report_flow.label.csam', outcome: {type: 'submit', reason: 'csam'}}, + { + id: 'minor_sexual_contact', + label: 'report_flow.label.minor_sexual_contact', + outcome: {type: 'submit', reason: 'minor_sexual_contact'}, + }, + { + id: 'minor_sexual_content', + label: 'report_flow.label.minor_sexual_content', + outcome: {type: 'submit', reason: 'minor_sexual_content'}, + }, + { + id: 'minor_sexualization', + label: 'report_flow.label.minor_sexualization', + outcome: {type: 'submit', reason: 'minor_sexualization'}, + }, + { + id: 'minor_fictional', + label: 'report_flow.label.minor_fictional', + outcome: {type: 'submit', reason: 'minor_fictional_sexualization'}, + }, + ], + }, + { + id: 'threat', + title: 'report_flow.screen.threat.title', + urgent: true, + options: [ + { + id: 'violent_threat', + label: 'report_flow.label.violent_threat', + outcome: {type: 'submit', reason: 'violent_threat'}, + }, + { + id: 'violence_incitement', + label: 'report_flow.label.violence_incitement', + outcome: {type: 'submit', reason: 'violence_incitement'}, + }, + { + id: 'violence_glorification', + label: 'report_flow.label.violence_glorification', + outcome: {type: 'submit', reason: 'violence_glorification'}, + }, + ], + }, + { + id: 'minor_risk', + title: 'report_flow.screen.minor_risk.title', + urgent: true, + options: [ + { + id: 'minor_grooming', + label: 'report_flow.label.minor_grooming', + outcome: {type: 'submit', reason: 'minor_grooming'}, + }, + { + id: 'minor_contact', + label: 'report_flow.label.minor_contact', + outcome: {type: 'submit', reason: 'minor_contact'}, + }, + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual', + outcome: {type: 'screen', screenId: 'minor_sexual'}, + }, + { + id: 'minor_in_adult_space', + label: 'report_flow.label.minor_in_adult_space', + outcome: {type: 'submit', reason: 'minor_in_adult_space'}, + }, + ], + }, + { + id: 'violence_misinfo', + title: 'report_flow.screen.violence_misinfo.title', + options: [ + {id: 'false_info', label: 'report_flow.label.false_info', outcome: {type: 'screen', screenId: 'false_info'}}, + { + id: 'violence_glorification', + label: 'report_flow.label.violence_glorification', + outcome: {type: 'submit', reason: 'violence_glorification'}, + }, + { + id: 'graphic_violence', + label: 'report_flow.label.graphic_violence', + outcome: {type: 'submit', reason: 'graphic_violence'}, + }, + {id: 'terrorism', label: 'report_flow.label.terrorism', outcome: {type: 'submit', reason: 'terrorism_extremism'}}, + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + ], + }, + { + id: 'false_info', + title: 'report_flow.screen.false_info.title', + subtitle: 'report_flow.screen.false_info.subtitle', + subtitleVariants: {selfHosted: 'report_flow.screen.false_info.subtitle_self_hosted'}, + options: [ + { + id: 'false_claims', + label: 'report_flow.label.false_claims', + outcome: {type: 'submit', reason: 'false_claims_about_person'}, + }, + { + id: 'harmful_false_claims', + label: 'report_flow.label.harmful_false_claims', + outcome: {type: 'submit', reason: 'harmful_false_claims'}, + }, + { + id: 'synthetic_media', + label: 'report_flow.label.synthetic_media', + outcome: {type: 'submit', reason: 'deceptive_synthetic_media'}, + }, + ], + }, + { + id: 'private_info', + title: 'report_flow.screen.private_info.title', + subtitle: 'report_flow.screen.private_info.subtitle', + checklist: {items: PRIVATE_INFO_ITEMS, minChecked: 1, outcome: {type: 'submit', reason: 'doxxing'}}, + }, + { + id: 'something_else_message', + title: 'report_flow.screen.something_else_message.title', + options: [ + {id: 'self_harm', label: 'report_flow.label.self_harm', outcome: {type: 'screen', screenId: 'self_harm'}}, + { + id: 'too_young', + label: 'report_flow.label.too_young', + outcome: {type: 'screen', screenId: 'age_stated_message'}, + }, + { + id: 'impersonation', + label: 'report_flow.label.impersonation', + outcome: {type: 'screen', screenId: 'impersonation'}, + }, + {id: 'fake_account', label: 'report_flow.label.fake_account', outcome: {type: 'submit', reason: 'fake_account'}}, + { + id: 'malware_phishing', + label: 'report_flow.label.malware_phishing', + outcome: {type: 'submit', reason: 'malware_phishing'}, + }, + { + id: 'account_trading', + label: 'report_flow.label.account_trading', + outcome: {type: 'submit', reason: 'account_trading'}, + }, + { + id: 'illegal_goods', + label: 'report_flow.label.illegal_goods', + outcome: {type: 'submit', reason: 'illegal_goods'}, + }, + { + id: 'illegal_activity', + label: 'report_flow.label.illegal_activity', + outcome: {type: 'submit', reason: 'illegal_activity'}, + }, + { + id: 'copyright', + label: 'report_flow.label.copyright', + outcome: {type: 'link', link: 'copyright'}, + surface: 'in_app', + }, + { + id: 'copyright_notice', + label: 'report_flow.label.copyright', + outcome: {type: 'submit', reason: 'copyright'}, + surface: 'dsa', + }, + {id: 'other', label: 'report_flow.label.other', outcome: {type: 'submit', reason: 'other'}}, + ], + }, + { + id: 'age_stated_message', + title: 'report_flow.screen.age_stated_message.title', + options: [ + {id: 'age_yes', label: 'report_flow.label.age_yes_message', outcome: {type: 'submit', reason: 'underage'}}, + {id: 'age_no', label: 'report_flow.label.age_no_message', outcome: {type: 'end', noticeId: 'need_more_info'}}, + ], + }, + { + id: 'self_harm', + title: 'report_flow.screen.self_harm.title', + subtitle: 'report_flow.screen.self_harm.subtitle', + subtitleVariants: {dsa: null}, + urgent: true, + options: [ + { + id: 'worried_self_harm', + label: 'report_flow.label.worried_self_harm', + outcome: {type: 'submit', reason: 'wellbeing_concern'}, + surface: 'in_app', + }, + { + id: 'worried_suicide', + label: 'report_flow.label.worried_suicide', + outcome: {type: 'submit', reason: 'wellbeing_concern'}, + surface: 'in_app', + }, + { + id: 'self_harm_promotion', + label: 'report_flow.label.self_harm_promotion', + outcome: {type: 'submit', reason: 'self_harm_promotion'}, + }, + { + id: 'suicide_promotion', + label: 'report_flow.label.suicide_promotion', + outcome: {type: 'submit', reason: 'suicide_promotion'}, + }, + { + id: 'eating_disorder_promotion', + label: 'report_flow.label.eating_disorder_promotion', + outcome: {type: 'submit', reason: 'eating_disorder_promotion'}, + }, + { + id: 'self_harm_graphic', + label: 'report_flow.label.self_harm_graphic', + outcome: {type: 'submit', reason: 'self_harm_graphic'}, + }, + { + id: 'self_harm_pressure', + label: 'report_flow.label.self_harm_pressure', + outcome: {type: 'submit', reason: 'self_harm_pressure'}, + }, + {id: 'crisis_lines', label: 'report_flow.label.crisis_lines', outcome: {type: 'link', link: 'crisis_lines'}}, + ], + }, + { + id: 'impersonation', + title: 'report_flow.screen.impersonation.title', + subtitle: 'report_flow.screen.impersonation.subtitle', + options: [ + {id: 'fraud', label: 'report_flow.label.fraud', outcome: {type: 'submit', reason: 'fraud'}}, + { + id: 'impersonation_staff', + label: 'report_flow.label.impersonation_staff', + outcome: {type: 'submit', reason: 'impersonation_staff'}, + }, + { + id: 'impersonation_person', + label: 'report_flow.label.impersonation_person', + outcome: {type: 'submit', reason: 'impersonation_person'}, + }, + { + id: 'impersonation_public_figure', + label: 'report_flow.label.impersonation_public_figure', + outcome: {type: 'submit', reason: 'impersonation_public_figure'}, + }, + { + id: 'impersonation_organization', + label: 'report_flow.label.impersonation_organization', + outcome: {type: 'submit', reason: 'impersonation_organization'}, + }, + ], + }, + { + id: 'profile_intro', + title: 'report_flow.screen.profile_intro.title', + subtitle: 'report_flow.screen.profile_intro.subtitle', + optionsHeading: 'report_flow.screen.profile_intro.options_heading', + options: [{id: 'learn_more', label: 'report_flow.label.learn_more', outcome: {type: 'link', link: 'guidelines'}}], + nextScreenId: 'profile_parts', + }, + { + id: 'profile_parts', + title: 'report_flow.screen.profile_parts.title', + subtitle: 'report_flow.screen.profile_parts.subtitle', + checklist: { + items: [ + {id: 'photo', label: 'report_flow.label.photo', description: 'report_flow.description.photo'}, + {id: 'name', label: 'report_flow.label.name', description: 'report_flow.description.name'}, + { + id: 'profile_text', + label: 'report_flow.label.profile_text', + description: 'report_flow.description.profile_text', + }, + ], + minChecked: 1, + outcome: {type: 'screen', screenId: 'root_user'}, + }, + }, + { + id: 'root_user', + title: 'report_flow.screen.root_user.title', + subtitle: 'report_flow.screen.root_user.subtitle', + options: [ + {id: 'abuse', label: 'report_flow.label.abuse', outcome: {type: 'screen', screenId: 'profile_abuse'}}, + { + id: 'hate_violence', + label: 'report_flow.label.hate_violence', + outcome: {type: 'screen', screenId: 'profile_hate_violence'}, + }, + { + id: 'impersonation', + label: 'report_flow.label.impersonation', + outcome: {type: 'screen', screenId: 'impersonation'}, + }, + {id: 'spam', label: 'report_flow.label.spam', outcome: {type: 'screen', screenId: 'spam_profile'}}, + { + id: 'something_else', + label: 'report_flow.label.something_else', + outcome: {type: 'screen', screenId: 'something_else_user'}, + }, + {id: 'dsa', label: 'report_flow.label.dsa', outcome: {type: 'link', link: 'dsa'}, surface: 'in_app'}, + ], + }, + { + id: 'spam_profile', + title: 'report_flow.screen.spam_profile.title', + options: [ + {id: 'spam_profile', label: 'report_flow.label.spam_profile', outcome: {type: 'submit', reason: 'spam'}}, + { + id: 'fake_account', + label: 'report_flow.label.fake_account_profile', + outcome: {type: 'submit', reason: 'fake_account'}, + }, + { + id: 'account_trading', + label: 'report_flow.label.account_trading_communities', + outcome: {type: 'submit', reason: 'account_trading'}, + }, + { + id: 'platform_abuse', + label: 'report_flow.label.platform_abuse', + outcome: {type: 'submit', reason: 'platform_abuse'}, + }, + ], + }, + { + id: 'profile_abuse', + title: 'report_flow.screen.profile_abuse.title', + options: [ + { + id: 'harassment', + label: 'report_flow.label.harassment_profile', + outcome: {type: 'submit', reason: 'harassment'}, + }, + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + {id: 'sexual', label: 'report_flow.label.sexual', outcome: {type: 'screen', screenId: 'profile_sexual'}}, + {id: 'threat', label: 'report_flow.label.threat', outcome: {type: 'screen', screenId: 'profile_threat'}}, + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual', + outcome: {type: 'screen', screenId: 'profile_minor_sexual'}, + }, + ], + }, + { + id: 'profile_sexual', + title: 'report_flow.screen.profile_sexual.title', + subtitle: 'report_flow.screen.sexual.subtitle', + urgent: true, + options: [ + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual', + outcome: {type: 'screen', screenId: 'profile_minor_sexual'}, + }, + { + id: 'adult_content_profile', + label: 'report_flow.label.adult_content_profile', + outcome: {type: 'submit', reason: 'adult_content_unmarked'}, + }, + { + id: 'intimate_image_abuse', + label: 'report_flow.label.intimate_image_abuse_profile', + outcome: {type: 'submit', reason: 'intimate_image_abuse'}, + }, + { + id: 'sexual_exploitation', + label: 'report_flow.label.sexual_exploitation', + outcome: {type: 'submit', reason: 'sexual_exploitation'}, + }, + ], + }, + { + id: 'profile_minor_sexual', + title: 'report_flow.screen.profile_minor_sexual.title', + subtitle: 'report_flow.screen.minor_sexual.subtitle', + urgent: true, + options: [ + {id: 'csam', label: 'report_flow.label.csam', outcome: {type: 'submit', reason: 'csam'}}, + { + id: 'minor_sexual_content', + label: 'report_flow.label.minor_sexual_content_profile', + outcome: {type: 'submit', reason: 'minor_sexual_content'}, + }, + { + id: 'minor_sexualization', + label: 'report_flow.label.minor_sexualization_profile', + outcome: {type: 'submit', reason: 'minor_sexualization'}, + }, + { + id: 'minor_fictional', + label: 'report_flow.label.minor_fictional', + outcome: {type: 'submit', reason: 'minor_fictional_sexualization'}, + }, + ], + }, + { + id: 'profile_threat', + title: 'report_flow.screen.profile_threat.title', + urgent: true, + options: [ + { + id: 'violent_threat', + label: 'report_flow.label.violent_threat', + outcome: {type: 'submit', reason: 'violent_threat'}, + }, + { + id: 'violence_incitement', + label: 'report_flow.label.violence_incitement', + outcome: {type: 'submit', reason: 'violence_incitement'}, + }, + { + id: 'violence_glorification', + label: 'report_flow.label.violence_glorification', + outcome: {type: 'submit', reason: 'violence_glorification'}, + }, + ], + }, + { + id: 'profile_hate_violence', + title: 'report_flow.screen.profile_hate_violence.title', + options: [ + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + { + id: 'violence_glorification', + label: 'report_flow.label.violence_glorification', + outcome: {type: 'submit', reason: 'violence_glorification'}, + }, + { + id: 'graphic_violence', + label: 'report_flow.label.graphic_violence', + outcome: {type: 'submit', reason: 'graphic_violence'}, + }, + {id: 'terrorism', label: 'report_flow.label.terrorism', outcome: {type: 'submit', reason: 'terrorism_extremism'}}, + ], + }, + { + id: 'something_else_user', + title: 'report_flow.screen.something_else_user.title', + options: [ + { + id: 'too_young', + label: 'report_flow.label.too_young', + outcome: {type: 'screen', screenId: 'age_stated_profile'}, + }, + { + id: 'private_info', + label: 'report_flow.label.private_info_profile', + outcome: {type: 'screen', screenId: 'profile_private_info'}, + }, + { + id: 'self_harm', + label: 'report_flow.label.self_harm_profile', + outcome: {type: 'screen', screenId: 'crisis_support'}, + }, + { + id: 'malware_phishing', + label: 'report_flow.label.malware_phishing', + outcome: {type: 'submit', reason: 'malware_phishing'}, + }, + { + id: 'account_trading', + label: 'report_flow.label.account_trading', + outcome: {type: 'submit', reason: 'account_trading'}, + }, + {id: 'ban_evasion', label: 'report_flow.label.ban_evasion', outcome: {type: 'submit', reason: 'ban_evasion'}}, + { + id: 'illegal_goods', + label: 'report_flow.label.illegal_goods', + outcome: {type: 'submit', reason: 'illegal_goods'}, + }, + { + id: 'illegal_activity', + label: 'report_flow.label.illegal_activity', + outcome: {type: 'submit', reason: 'illegal_activity'}, + }, + { + id: 'copyright', + label: 'report_flow.label.copyright', + outcome: {type: 'link', link: 'copyright'}, + surface: 'in_app', + }, + { + id: 'copyright_notice', + label: 'report_flow.label.copyright', + outcome: {type: 'submit', reason: 'copyright'}, + surface: 'dsa', + }, + {id: 'other', label: 'report_flow.label.other', outcome: {type: 'submit', reason: 'other'}}, + ], + }, + { + id: 'age_stated_profile', + title: 'report_flow.screen.age_stated_profile.title', + options: [ + {id: 'age_yes', label: 'report_flow.label.age_yes_profile', outcome: {type: 'submit', reason: 'underage'}}, + { + id: 'age_no', + label: 'report_flow.label.age_no_profile', + outcome: {type: 'end', noticeId: 'need_more_info_profile'}, + }, + ], + }, + { + id: 'crisis_support', + title: 'report_flow.screen.crisis_support.title', + subtitle: 'report_flow.screen.crisis_support.subtitle', + urgent: true, + options: [ + {id: 'crisis_lines', label: 'report_flow.label.crisis_lines', outcome: {type: 'link', link: 'crisis_lines'}}, + ], + nextScreenId: 'self_harm_profile', + }, + { + id: 'self_harm_profile', + title: 'report_flow.screen.self_harm_profile.title', + subtitle: 'report_flow.screen.self_harm.subtitle', + subtitleVariants: {dsa: null}, + urgent: true, + options: [ + { + id: 'worried', + label: 'report_flow.label.worried_profile', + outcome: {type: 'submit', reason: 'wellbeing_concern'}, + surface: 'in_app', + }, + { + id: 'self_harm_promotion', + label: 'report_flow.label.self_harm_promotion_profile', + outcome: {type: 'submit', reason: 'self_harm_promotion'}, + }, + { + id: 'suicide_promotion', + label: 'report_flow.label.suicide_promotion_profile', + outcome: {type: 'submit', reason: 'suicide_promotion'}, + }, + { + id: 'eating_disorder_promotion', + label: 'report_flow.label.eating_disorder_promotion_profile', + outcome: {type: 'submit', reason: 'eating_disorder_promotion'}, + }, + { + id: 'self_harm_graphic', + label: 'report_flow.label.self_harm_graphic', + outcome: {type: 'submit', reason: 'self_harm_graphic'}, + }, + ], + }, + { + id: 'profile_private_info', + title: 'report_flow.screen.profile_private_info.title', + subtitle: 'report_flow.screen.private_info.subtitle', + checklist: {items: PRIVATE_INFO_ITEMS, minChecked: 1, outcome: {type: 'submit', reason: 'doxxing'}}, + }, + { + id: 'community_parts', + title: 'report_flow.screen.community_parts.title', + subtitle: 'report_flow.screen.community_parts.subtitle', + checklist: { + items: [ + {id: 'activity', label: 'report_flow.label.member_activity'}, + {id: 'name', label: 'report_flow.label.community_name'}, + {id: 'channel_names', label: 'report_flow.label.channel_names'}, + {id: 'icon', label: 'report_flow.label.community_icon'}, + {id: 'banner', label: 'report_flow.label.community_banner'}, + {id: 'emoji_stickers', label: 'report_flow.label.emoji_stickers'}, + {id: 'splash', label: 'report_flow.label.invite_splash'}, + {id: 'discovery_listing', label: 'report_flow.label.discovery_listing'}, + ], + minChecked: 1, + outcome: {type: 'screen', screenId: 'root_guild'}, + }, + }, + { + id: 'root_guild', + title: 'report_flow.screen.root_guild.title', + subtitle: 'report_flow.screen.root_guild.subtitle', + options: [ + { + id: 'spam', + label: 'report_flow.label.spam_or_manipulation', + outcome: {type: 'screen', screenId: 'spam_kind_guild'}, + }, + {id: 'abuse', label: 'report_flow.label.abuse', outcome: {type: 'screen', screenId: 'abuse_guild'}}, + { + id: 'violence_misinfo', + label: 'report_flow.label.violence_misinfo', + outcome: {type: 'screen', screenId: 'violence_misinfo_guild'}, + }, + { + id: 'something_else', + label: 'report_flow.label.something_else', + outcome: {type: 'screen', screenId: 'something_else_guild'}, + }, + ], + }, + { + id: 'spam_kind_guild', + title: 'report_flow.screen.spam_kind_guild.title', + options: [ + {id: 'spam_messages', label: 'report_flow.label.spam_bulk', outcome: {type: 'submit', reason: 'spam'}}, + { + id: 'metric_manipulation', + label: 'report_flow.label.metric_manipulation', + outcome: {type: 'submit', reason: 'metric_manipulation'}, + }, + { + id: 'account_trading', + label: 'report_flow.label.account_trading_communities', + outcome: {type: 'submit', reason: 'account_trading'}, + }, + { + id: 'platform_abuse', + label: 'report_flow.label.platform_abuse', + outcome: {type: 'submit', reason: 'platform_abuse'}, + }, + ], + }, + { + id: 'abuse_guild', + title: 'report_flow.screen.abuse_guild.title', + options: [ + {id: 'raid', label: 'report_flow.label.raid_guild', outcome: {type: 'submit', reason: 'raid'}}, + {id: 'harassment', label: 'report_flow.label.harassment_guild', outcome: {type: 'submit', reason: 'harassment'}}, + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + {id: 'sexual', label: 'report_flow.label.sexual', outcome: {type: 'screen', screenId: 'sexual_guild'}}, + {id: 'threat', label: 'report_flow.label.threat', outcome: {type: 'screen', screenId: 'threat'}}, + { + id: 'minor_risk', + label: 'report_flow.label.minor_risk_guild', + outcome: {type: 'screen', screenId: 'minor_risk_guild'}, + }, + ], + }, + { + id: 'sexual_guild', + title: 'report_flow.screen.sexual_guild.title', + subtitle: 'report_flow.screen.sexual_guild.subtitle', + urgent: true, + options: [ + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual_guild', + outcome: {type: 'screen', screenId: 'minor_sexual_guild'}, + }, + { + id: 'adult_content_unmarked', + label: 'report_flow.label.adult_content_no_gate', + outcome: {type: 'submit', reason: 'adult_content_unmarked'}, + }, + { + id: 'intimate_image_abuse', + label: 'report_flow.label.intimate_image_abuse_guild', + outcome: {type: 'submit', reason: 'intimate_image_abuse'}, + }, + { + id: 'sexual_exploitation', + label: 'report_flow.label.sexual_exploitation', + outcome: {type: 'submit', reason: 'sexual_exploitation'}, + }, + ], + }, + { + id: 'minor_sexual_guild', + title: 'report_flow.screen.minor_sexual_guild.title', + subtitle: 'report_flow.screen.minor_sexual.subtitle', + urgent: true, + options: [ + {id: 'csam', label: 'report_flow.label.csam', outcome: {type: 'submit', reason: 'csam'}}, + { + id: 'minor_sexual_contact', + label: 'report_flow.label.minor_sexual_contact_guild', + outcome: {type: 'submit', reason: 'minor_sexual_contact'}, + }, + { + id: 'minor_sexual_content', + label: 'report_flow.label.minor_sexual_content_guild', + outcome: {type: 'submit', reason: 'minor_sexual_content'}, + }, + { + id: 'minor_sexualization', + label: 'report_flow.label.minor_sexualization_guild', + outcome: {type: 'submit', reason: 'minor_sexualization'}, + }, + { + id: 'minor_fictional', + label: 'report_flow.label.minor_fictional', + outcome: {type: 'submit', reason: 'minor_fictional_sexualization'}, + }, + ], + }, + { + id: 'minor_risk_guild', + title: 'report_flow.screen.minor_risk_guild.title', + urgent: true, + options: [ + { + id: 'minor_dating_community', + label: 'report_flow.label.minor_dating_community', + outcome: {type: 'submit', reason: 'minor_dating_community'}, + }, + { + id: 'minor_grooming', + label: 'report_flow.label.minor_grooming_guild', + outcome: {type: 'submit', reason: 'minor_grooming'}, + }, + { + id: 'minor_in_adult_space', + label: 'report_flow.label.minor_in_adult_space_guild', + outcome: {type: 'submit', reason: 'minor_in_adult_space'}, + }, + { + id: 'minor_sexual', + label: 'report_flow.label.minor_sexual_guild', + outcome: {type: 'screen', screenId: 'minor_sexual_guild'}, + }, + ], + }, + { + id: 'violence_misinfo_guild', + title: 'report_flow.screen.violence_misinfo_guild.title', + options: [ + { + id: 'terrorism', + label: 'report_flow.label.terrorism_guild', + outcome: {type: 'submit', reason: 'terrorism_extremism'}, + }, + { + id: 'violence_glorification', + label: 'report_flow.label.violence_glorification', + outcome: {type: 'submit', reason: 'violence_glorification'}, + }, + { + id: 'graphic_violence', + label: 'report_flow.label.graphic_violence', + outcome: {type: 'submit', reason: 'graphic_violence'}, + }, + {id: 'false_info', label: 'report_flow.label.false_info', outcome: {type: 'screen', screenId: 'false_info'}}, + {id: 'hate', label: 'report_flow.label.hate', outcome: {type: 'screen', screenId: 'hate'}}, + ], + }, + { + id: 'something_else_guild', + title: 'report_flow.screen.something_else_guild.title', + options: [ + { + id: 'permits_violations', + label: 'report_flow.label.permits_violations', + outcome: {type: 'submit', reason: 'permits_violations'}, + }, + { + id: 'self_harm', + label: 'report_flow.label.self_harm_guild', + outcome: {type: 'screen', screenId: 'self_harm_guild'}, + }, + { + id: 'malware_phishing', + label: 'report_flow.label.malware_guild', + outcome: {type: 'submit', reason: 'malware_phishing'}, + }, + { + id: 'illegal_goods', + label: 'report_flow.label.illegal_goods', + outcome: {type: 'submit', reason: 'illegal_goods'}, + }, + { + id: 'illegal_activity', + label: 'report_flow.label.illegal_activity', + outcome: {type: 'submit', reason: 'illegal_activity'}, + }, + { + id: 'impersonation', + label: 'report_flow.label.impersonation_guild', + outcome: {type: 'submit', reason: 'impersonation_organization'}, + }, + {id: 'fraud', label: 'report_flow.label.fraud_guild', outcome: {type: 'submit', reason: 'fraud'}}, + {id: 'copyright_notice', label: 'report_flow.label.copyright', outcome: {type: 'submit', reason: 'copyright'}}, + {id: 'other', label: 'report_flow.label.other', outcome: {type: 'submit', reason: 'other'}}, + ], + }, + { + id: 'self_harm_guild', + title: 'report_flow.screen.self_harm_guild.title', + urgent: true, + options: [ + { + id: 'self_harm_promotion', + label: 'report_flow.label.self_harm_promotion', + outcome: {type: 'submit', reason: 'self_harm_promotion'}, + }, + { + id: 'suicide_promotion', + label: 'report_flow.label.suicide_promotion', + outcome: {type: 'submit', reason: 'suicide_promotion'}, + }, + { + id: 'eating_disorder_promotion', + label: 'report_flow.label.eating_disorder_promotion', + outcome: {type: 'submit', reason: 'eating_disorder_promotion'}, + }, + { + id: 'self_harm_graphic', + label: 'report_flow.label.self_harm_graphic', + outcome: {type: 'submit', reason: 'self_harm_graphic'}, + }, + { + id: 'self_harm_pressure', + label: 'report_flow.label.self_harm_pressure_guild', + outcome: {type: 'submit', reason: 'self_harm_pressure'}, + }, + {id: 'crisis_lines', label: 'report_flow.label.crisis_lines', outcome: {type: 'link', link: 'crisis_lines'}}, + ], + }, +]; diff --git a/fluxer_api/src/api/report/flows/ReportReasonCatalog.ts b/fluxer_api/src/api/report/flows/ReportReasonCatalog.ts new file mode 100644 index 000000000..27e7fe073 --- /dev/null +++ b/fluxer_api/src/api/report/flows/ReportReasonCatalog.ts @@ -0,0 +1,429 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportFlowTargetType} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; + +interface ReportReasonDef { + label: string; + highestPriority: boolean; + message: string; + user: string; + guild: string; +} + +export const REPORT_REASONS = { + spam: {label: 'Spam', highestPriority: false, message: 'spam', user: 'spam_account', guild: 'spam'}, + fake_account: { + label: 'Fake or deceptive account', + highestPriority: false, + message: 'spam', + user: 'spam_account', + guild: 'spam', + }, + platform_abuse: { + label: 'Scraping, automation or other platform abuse', + highestPriority: false, + message: 'spam', + user: 'spam_account', + guild: 'spam', + }, + account_trading: { + label: 'Buying or selling accounts, logins or card details', + highestPriority: false, + message: 'illegal_activity', + user: 'spam_account', + guild: 'illegal_activity', + }, + metric_manipulation: { + label: 'Faked member or reaction counts', + highestPriority: false, + message: 'spam', + user: 'spam_account', + guild: 'spam', + }, + harassment: { + label: 'Harassment or bullying', + highestPriority: false, + message: 'harassment', + user: 'harassment', + guild: 'harassment', + }, + unwanted_contact: { + label: 'Stalking or unwanted contact', + highestPriority: false, + message: 'harassment', + user: 'harassment', + guild: 'harassment', + }, + raid: { + label: 'Raid or coordinated attack', + highestPriority: false, + message: 'harassment', + user: 'harassment', + guild: 'raid_coordination', + }, + false_claims_about_person: { + label: 'False claims used to target a person', + highestPriority: false, + message: 'harassment', + user: 'harassment', + guild: 'harassment', + }, + hate_slurs: { + label: 'Slurs, hateful symbols or stereotypes', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + hate_dehumanizing: { + label: 'Dehumanizing a group', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + hate_incitement: { + label: 'Calls for violence or exclusion against a group', + highestPriority: true, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + atrocity_denial: { + label: 'Genocide or atrocity denial or celebration', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + lgbtq_targeting: { + label: 'Misgendering, deadnaming, outing or identity denial', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + conversion_therapy: { + label: 'Promoting conversion therapy', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + hate_other: { + label: 'Other attacks on people for who they are', + highestPriority: false, + message: 'hate_speech', + user: 'hate_speech', + guild: 'hate_speech', + }, + violent_threat: { + label: 'Threat of violence', + highestPriority: true, + message: 'violent_content', + user: 'harassment', + guild: 'harassment', + }, + violence_incitement: { + label: 'Encouraging violence or instructions to harm', + highestPriority: true, + message: 'violent_content', + user: 'inappropriate_profile', + guild: 'violent_content', + }, + violence_glorification: { + label: 'Glorifying real-world violence', + highestPriority: false, + message: 'violent_content', + user: 'inappropriate_profile', + guild: 'violent_content', + }, + graphic_violence: { + label: 'Real violence shown to shock', + highestPriority: false, + message: 'violent_content', + user: 'inappropriate_profile', + guild: 'violent_content', + }, + terrorism_extremism: { + label: 'Terrorism or violent extremism', + highestPriority: false, + message: 'violent_content', + user: 'inappropriate_profile', + guild: 'extremist_community', + }, + harmful_false_claims: { + label: 'False claims likely to cause serious harm', + highestPriority: false, + message: 'other', + user: 'other', + guild: 'other', + }, + deceptive_synthetic_media: { + label: 'Fake or AI media presented as real', + highestPriority: false, + message: 'other', + user: 'other', + guild: 'other', + }, + sexual_unwanted: { + label: 'Sexual images or messages nobody asked for', + highestPriority: false, + message: 'harassment', + user: 'harassment', + guild: 'harassment', + }, + adult_content_unmarked: { + label: 'Adult content outside an 18+ space', + highestPriority: false, + message: 'nsfw_violation', + user: 'inappropriate_profile', + guild: 'nsfw_violation', + }, + intimate_image_abuse: { + label: 'Intimate images shared without consent', + highestPriority: true, + message: 'doxxing', + user: 'inappropriate_profile', + guild: 'harassment', + }, + sexual_exploitation: { + label: 'Sexual exploitation, coercion or trafficking', + highestPriority: true, + message: 'illegal_activity', + user: 'inappropriate_profile', + guild: 'illegal_activity', + }, + minor_fictional_sexualization: { + label: 'Sexualized fictional child', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_sexualization: { + label: 'Sexual comments about minors', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_sexual_contact: { + label: 'Flirting with or sexually messaging a minor', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_sexual_content: { + label: 'A minor sharing sexual content themselves', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + csam: { + label: 'Child sexual abuse material', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_grooming: { + label: 'Grooming a minor', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_contact: { + label: 'Predatory contact with a minor', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_in_adult_space: { + label: 'A minor in an 18+ space', + highestPriority: false, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + minor_dating_community: { + label: 'Community for dating between minors', + highestPriority: true, + message: 'child_safety', + user: 'child_safety', + guild: 'child_safety', + }, + doxxing: { + label: 'Private information shared without consent', + highestPriority: false, + message: 'doxxing', + user: 'inappropriate_profile', + guild: 'harassment', + }, + underage: { + label: 'Under the minimum age', + highestPriority: false, + message: 'underage_user', + user: 'underage_user', + guild: 'underage_user', + }, + wellbeing_concern: { + label: "Worried about someone's safety", + highestPriority: true, + message: 'self_harm', + user: 'other', + guild: 'self_harm', + }, + self_harm_promotion: { + label: 'Encouraging self-harm or sharing methods', + highestPriority: false, + message: 'self_harm', + user: 'inappropriate_profile', + guild: 'self_harm', + }, + suicide_promotion: { + label: 'Encouraging suicide', + highestPriority: false, + message: 'self_harm', + user: 'inappropriate_profile', + guild: 'self_harm', + }, + eating_disorder_promotion: { + label: 'Encouraging disordered eating', + highestPriority: false, + message: 'self_harm', + user: 'inappropriate_profile', + guild: 'self_harm', + }, + self_harm_graphic: { + label: 'Graphic self-harm images', + highestPriority: false, + message: 'self_harm', + user: 'inappropriate_profile', + guild: 'self_harm', + }, + self_harm_pressure: { + label: 'Pressuring someone to harm themselves', + highestPriority: false, + message: 'self_harm', + user: 'inappropriate_profile', + guild: 'self_harm', + }, + impersonation_staff: { + label: 'Pretending to be staff or support', + highestPriority: false, + message: 'impersonation', + user: 'impersonation', + guild: 'impersonation', + }, + impersonation_person: { + label: 'Impersonating a person', + highestPriority: false, + message: 'impersonation', + user: 'impersonation', + guild: 'impersonation', + }, + impersonation_public_figure: { + label: 'Impersonating a well-known person', + highestPriority: false, + message: 'impersonation', + user: 'impersonation', + guild: 'impersonation', + }, + impersonation_organization: { + label: 'Impersonating a company, brand or group', + highestPriority: false, + message: 'impersonation', + user: 'impersonation', + guild: 'impersonation', + }, + fraud: { + label: 'Conning people out of money or accounts', + highestPriority: false, + message: 'illegal_activity', + user: 'spam_account', + guild: 'illegal_activity', + }, + illegal_goods: { + label: 'Drug, weapon or other illegal sales', + highestPriority: false, + message: 'illegal_activity', + user: 'inappropriate_profile', + guild: 'illegal_activity', + }, + illegal_activity: { + label: 'Other illegal activity', + highestPriority: false, + message: 'illegal_activity', + user: 'inappropriate_profile', + guild: 'illegal_activity', + }, + malware_phishing: { + label: 'Phishing, malware or hacking attempts', + highestPriority: false, + message: 'malicious_links', + user: 'spam_account', + guild: 'malware_distribution', + }, + ban_evasion: { + label: 'Getting around a ban', + highestPriority: false, + message: 'other', + user: 'other', + guild: 'other', + }, + permits_violations: { + label: 'Community allows serious rule-breaking', + highestPriority: false, + message: 'other', + user: 'other', + guild: 'other', + }, + copyright: { + label: 'Copyright or trademark complaint', + highestPriority: false, + message: 'other', + user: 'other', + guild: 'other', + }, + other: {label: 'Something not listed', highestPriority: false, message: 'other', user: 'other', guild: 'other'}, +} as const satisfies Record; + +export type ReportReasonKey = keyof typeof REPORT_REASONS; + +export interface ReportReason { + key: ReportReasonKey; + label: string; + highestPriority: boolean; + legacyCategories: Record; +} + +export function isReportReasonKey(value: string): value is ReportReasonKey { + return Object.hasOwn(REPORT_REASONS, value); +} + +export function getLegacyCategory(reason: ReportReasonKey, target: ReportFlowTargetType): string { + return REPORT_REASONS[reason][target]; +} + +function toReportReason(key: ReportReasonKey): ReportReason { + const def: ReportReasonDef = REPORT_REASONS[key]; + return { + key, + label: def.label, + highestPriority: def.highestPriority, + legacyCategories: {message: def.message, user: def.user, guild: def.guild}, + }; +} + +export function findReportReason(key: string): ReportReason | null { + return isReportReasonKey(key) ? toReportReason(key) : null; +} + +export function listReportReasons(): Array { + return (Object.keys(REPORT_REASONS) as Array).map(toReportReason); +} diff --git a/fluxer_api/src/api/report/tests/ContentReporting.test.ts b/fluxer_api/src/api/report/tests/ContentReporting.test.ts index 0a51bc29e..08a6f8cf8 100644 --- a/fluxer_api/src/api/report/tests/ContentReporting.test.ts +++ b/fluxer_api/src/api/report/tests/ContentReporting.test.ts @@ -9,7 +9,9 @@ import { setUserACLs, type TestAccount, } from '@app/api/auth/tests/AuthTestUtils'; -import {createUserID} from '@app/api/BrandedTypes'; +import {createGuildID, createReportID, createUserID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {loadFixture, sendMessageWithAttachments} from '@app/api/channel/tests/AttachmentTestUtils'; import { acceptInvite, createChannel, @@ -19,20 +21,28 @@ import { createGuild, createPermissionOverwrite, getChannel, + leaveGuild, sendChannelMessage, setupTestGuildWithMembers, + updateGuild, } from '@app/api/channel/tests/ChannelTestUtils'; +import {deleteOneOrMany} from '@app/api/database/CassandraQueryExecution'; +import {GuildMemberRepository} from '@app/api/guild/repositories/GuildMemberRepository'; import {ensureSessionStarted} from '@app/api/message/tests/MessageTestUtils'; +import {getRateLimitService} from '@app/api/middleware/ServiceSingletons'; import {ReadStateRepository} from '@app/api/read_state/ReadStateRepository'; import {ReportRepository} from '@app/api/report/ReportRepository'; +import {Users} from '@app/api/Tables'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; import {HTTP_STATUS, TEST_IDS} from '@app/api/test/TestConstants'; import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {Permissions} from '@fluxer/constants/src/ChannelConstants'; +import {DELETED_USER_USERNAME} from '@fluxer/constants/src/UserConstants'; import type {GuildResponse} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas'; +import {extractTimestamp} from '@fluxer/snowflake/src/SnowflakeUtils'; import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n'; -import {afterEach, beforeEach, describe, expect, test} from 'vitest'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; interface ReportResponse { report_id: string; @@ -77,6 +87,66 @@ async function countReports(): Promise { return (await new ReportRepository().listAllReportsPaginated(100)).length; } +async function readReport(reportId: string) { + const report = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + if (!report) { + throw new Error(`Report ${reportId} was not stored`); + } + return report; +} + +function reportMessage(harness: ApiTestHarness, token: string, channelId: string, messageId: string) { + return createBuilder(harness, token) + .post('/reports/message') + .body({channel_id: channelId, message_id: messageId, category: 'harassment'}); +} + +function reportUser(harness: ApiTestHarness, token: string, userId: string, guildId?: string) { + return createBuilder(harness, token) + .post('/reports/user') + .body({user_id: userId, category: 'harassment', ...(guildId ? {guild_id: guildId} : {})}); +} + +function reportGuild(harness: ApiTestHarness, token: string, guildId: string, inviteCode?: string) { + return createBuilder(harness, token) + .post('/reports/guild') + .body({guild_id: guildId, category: 'harassment', ...(inviteCode ? {invite_code: inviteCode} : {})}); +} + +function embedStorageKey(url: string | null | undefined): string { + const unsigned = (url ?? '').split('?')[0]!; + expect(unsigned.startsWith(`${Config.endpoints.media}/attachments/`)).toBe(true); + return unsigned.slice(`${Config.endpoints.media}/`.length); +} + +function refuseNextAllowanceSpend() { + return vi.spyOn(getRateLimitService(), 'checkLimit').mockResolvedValueOnce({ + allowed: false, + limit: 5, + remaining: 0, + resetTime: new Date(Date.now() + 1000), + resetAfterDecimal: 1, + retryAfter: 1, + retryAfterDecimal: 1, + }); +} + +function contextIds(report: Awaited>): Array { + return (report.messageContext ?? []) + .map((entry) => entry.messageId) + .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) + .map((id) => id.toString()); +} + +async function setJoinedAt(guildId: string, userId: string, joinedAt: Date): Promise { + const repository = new GuildMemberRepository(); + const member = await repository.getMember(createGuildID(BigInt(guildId)), createUserID(BigInt(userId))); + if (!member) { + throw new Error(`Member ${userId} of guild ${guildId} was not stored`); + } + await repository.upsertMember({...member.toRow(), joined_at: joinedAt}); +} + describe('Content Reporting', () => { let harness: ApiTestHarness; beforeEach(async () => { @@ -142,6 +212,43 @@ describe('Content Reporting', () => { .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) .execute(); }); + test('should answer a guild the reporter has not joined like an unknown guild', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 2); + const [targetUser, formerMember] = members; + const outsider = await createTestAccount(harness); + const unknown = await reportUser(harness, outsider.token, targetUser.userId, TEST_IDS.NONEXISTENT_GUILD) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + const notJoined = await reportUser(harness, outsider.token, targetUser.userId, guild.id) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + expect(notJoined.text).toBe(unknown.text); + await leaveGuild(harness, formerMember.token, guild.id); + const left = await reportUser(harness, formerMember.token, targetUser.userId, guild.id) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + expect(left.text).toBe(unknown.text); + expect(await countReports()).toBe(0); + await reportUser(harness, outsider.token, targetUser.userId).expect(HTTP_STATUS.OK).execute(); + const member = await reportUser(harness, owner.token, targetUser.userId, guild.id) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(member.report_id)).reportedGuildId?.toString()).toBe(guild.id); + expect(await countReports()).toBe(2); + }); + test('a repeat user report past the reporter allowance is rate limited', async () => { + const reporter = await createTestAccount(harness); + const targets = await Promise.all([0, 1, 2, 3, 4].map(() => createTestAccount(harness))); + for (const target of targets) { + await reportUser(harness, reporter.token, target.userId).expect(HTTP_STATUS.OK).execute(); + } + await reportUser(harness, reporter.token, targets[0].userId).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + await getRateLimitService().resetLimit(`report:create:user:${reporter.userId}`); + await reportUser(harness, reporter.token, targets[0].userId) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(5); + }); test('should reject report with invalid category', async () => { const reporter = await createTestAccount(harness); const targetUser = await createTestAccount(harness); @@ -492,6 +599,199 @@ describe('Content Reporting', () => { .execute(); expect(await countReports()).toBe(2); }); + describe('without Read Message History', () => { + async function setupLateJoiner() { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 2); + const [author, reporter] = members; + const channelId = (await createChannel(harness, owner.token, guild.id, 'history-floor')).id; + await createPermissionOverwrite(harness, owner.token, channelId, guild.id, { + type: 0, + allow: '0', + deny: Permissions.READ_MESSAGE_HISTORY.toString(), + }); + const earlier = await sendChannelMessage(harness, author.token, channelId, 'Sent before the reporter joined'); + const later = await sendChannelMessage(harness, author.token, channelId, 'Sent after the reporter joined'); + const latest = await sendChannelMessage(harness, author.token, channelId, 'Sent last'); + await setJoinedAt(guild.id, reporter.userId, new Date(extractTimestamp(later.id))); + return {owner, reporter, guild, channelId, earlier, later, latest}; + } + test('a message sent after the reporter joined is reportable and the context starts at the join', async () => { + const {reporter, channelId, later, latest} = await setupLateJoiner(); + const result = await reportMessage(harness, reporter.token, channelId, later.id) + .expect(HTTP_STATUS.OK) + .execute(); + expect(contextIds(await readReport(result.report_id))).toEqual([later.id, latest.id]); + }); + test('a message sent before the reporter joined is an unknown message', async () => { + const {reporter, channelId, earlier} = await setupLateJoiner(); + await reportMessage(harness, reporter.token, channelId, earlier.id) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + expect(await countReports()).toBe(0); + }); + test('a history cutoff earlier than the join makes older messages reportable', async () => { + const {owner, reporter, guild, channelId, earlier, later, latest} = await setupLateJoiner(); + const updated = await updateGuild(harness, owner.token, guild.id, { + message_history_cutoff: new Date(extractTimestamp(guild.id)).toISOString(), + }); + expect(updated.message_history_cutoff).toBeTruthy(); + const result = await reportMessage(harness, reporter.token, channelId, earlier.id) + .expect(HTTP_STATUS.OK) + .execute(); + expect(contextIds(await readReport(result.report_id))).toEqual([earlier.id, later.id, latest.id]); + }); + test('a history cutoff later than the join keeps messages since the join reportable', async () => { + const {owner, reporter, guild, channelId, earlier, later, latest} = await setupLateJoiner(); + const updated = await updateGuild(harness, owner.token, guild.id, { + message_history_cutoff: new Date(extractTimestamp(latest.id)).toISOString(), + }); + expect(updated.message_history_cutoff).toBeTruthy(); + const result = await reportMessage(harness, reporter.token, channelId, later.id) + .expect(HTTP_STATUS.OK) + .execute(); + expect(contextIds(await readReport(result.report_id))).toEqual([later.id, latest.id]); + await reportMessage(harness, reporter.token, channelId, earlier.id) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + }); + test('a channel the reporter cannot view stays forbidden', async () => { + const {owner, reporter, channelId, later} = await setupLateJoiner(); + await createPermissionOverwrite(harness, owner.token, channelId, reporter.userId, { + type: 1, + allow: '0', + deny: Permissions.VIEW_CHANNEL.toString(), + }); + await reportMessage(harness, reporter.token, channelId, later.id) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.MISSING_PERMISSIONS) + .execute(); + expect(await countReports()).toBe(0); + }); + }); + describe('Evidence gaps', () => { + test('an attachment that cannot be copied is recorded and the report is filed', async () => { + const {owner, members, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const {json: message} = await sendMessageWithAttachments( + harness, + members[0].token, + systemChannel.id, + {content: 'Evidence', attachments: [{id: 0, filename: 'evidence.png'}]}, + [{index: 0, filename: 'evidence.png', data: loadFixture('yeah.png')}], + ); + const attachment = message.attachments![0]!; + harness.storageService.configure({shouldFailCopy: true}); + const result = await reportMessage(harness, owner.token, systemChannel.id, message.id) + .expect(HTTP_STATUS.OK) + .execute(); + harness.storageService.configure({shouldFailCopy: false}); + const report = await readReport(result.report_id); + const reported = report.messageContext!.find((entry) => entry.messageId.toString() === message.id)!; + expect(reported.attachments).toEqual([]); + expect(reported.missingAttachments).toHaveLength(1); + expect(reported.missingAttachments[0]).toMatchObject({ + attachment_id: BigInt(attachment.id), + filename: 'evidence.png', + size: BigInt(attachment.size), + content_type: 'image/png', + }); + const key = `attachments/${systemChannel.id}/${attachment.id}/evidence.png`; + expect(harness.storageService.hasObject(Config.s3.buckets.cdn, key)).toBe(true); + expect(harness.storageService.hasObject(Config.s3.buckets.reports, key)).toBe(false); + }); + test('an attachment that is copied has no gap recorded', async () => { + const {owner, members, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const {json: message} = await sendMessageWithAttachments( + harness, + members[0].token, + systemChannel.id, + {content: 'Evidence', attachments: [{id: 0, filename: 'evidence.png'}]}, + [{index: 0, filename: 'evidence.png', data: loadFixture('yeah.png')}], + ); + const result = await reportMessage(harness, owner.token, systemChannel.id, message.id) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + const reported = report.messageContext!.find((entry) => entry.messageId.toString() === message.id)!; + expect(reported.attachments.map((entry) => entry.filename)).toEqual(['evidence.png']); + expect(reported.missingAttachments).toEqual([]); + const key = `attachments/${systemChannel.id}/${message.attachments![0]!.id}/evidence.png`; + expect(harness.storageService.hasObject(Config.s3.buckets.reports, key)).toBe(true); + }); + test('embed files that are gone or cannot be copied are recorded', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 2); + const channelId = (await createChannel(harness, owner.token, guild.id, 'embed-evidence')).id; + const fileData = loadFixture('yeah.png'); + const {json: message} = await sendMessageWithAttachments( + harness, + owner.token, + channelId, + { + content: 'Embed evidence', + attachments: [ + {id: 0, filename: 'image.png'}, + {id: 1, filename: 'thumb.png'}, + ], + embeds: [ + {title: 'Embed', image: {url: 'attachment://image.png'}, thumbnail: {url: 'attachment://thumb.png'}}, + ], + }, + [ + {index: 0, filename: 'image.png', data: fileData}, + {index: 1, filename: 'thumb.png', data: fileData}, + ], + ); + const embed = message.embeds![0]!; + const imageKey = embedStorageKey(embed.image?.url); + const thumbKey = embedStorageKey(embed.thumbnail?.url); + await harness.storageService.deleteObject(Config.s3.buckets.cdn, thumbKey); + const first = await reportMessage(harness, members[0].token, channelId, message.id) + .expect(HTTP_STATUS.OK) + .execute(); + const firstEntry = (await readReport(first.report_id)).messageContext!.find( + (entry) => entry.messageId.toString() === message.id, + )!; + expect(firstEntry.attachments.map((entry) => entry.filename)).toEqual(['image.png']); + expect(firstEntry.attachments[0]?.size).toBe(BigInt(fileData.length)); + expect(firstEntry.missingAttachments.map((entry) => entry.filename)).toEqual(['thumb.png']); + expect(firstEntry.missingAttachments[0]?.size).toBe(0n); + expect(harness.storageService.hasObject(Config.s3.buckets.reports, imageKey)).toBe(true); + expect(harness.storageService.hasObject(Config.s3.buckets.reports, thumbKey)).toBe(false); + await harness.storageService.deleteObject(Config.s3.buckets.reports, imageKey); + harness.storageService.configure({shouldFailCopy: true}); + const second = await reportMessage(harness, members[1].token, channelId, message.id) + .expect(HTTP_STATUS.OK) + .execute(); + harness.storageService.configure({shouldFailCopy: false}); + const secondEntry = (await readReport(second.report_id)).messageContext!.find( + (entry) => entry.messageId.toString() === message.id, + )!; + expect(secondEntry.attachments).toEqual([]); + expect(secondEntry.missingAttachments.map((entry) => entry.filename).sort()).toEqual([ + 'image.png', + 'thumb.png', + ]); + expect(harness.storageService.hasObject(Config.s3.buckets.reports, imageKey)).toBe(false); + }); + test('a context message whose author has no account row is kept as a deleted user', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 2); + const [targetUser, goneAuthor] = members; + const channelId = (await createChannel(harness, owner.token, guild.id, 'evidence')).id; + const before = await sendChannelMessage(harness, goneAuthor.token, channelId, 'Said before'); + const target = await sendChannelMessage(harness, targetUser.token, channelId, 'Reported'); + const after = await sendChannelMessage(harness, goneAuthor.token, channelId, 'Said after'); + await deleteOneOrMany(Users.deleteByPk({user_id: createUserID(BigInt(goneAuthor.userId))})); + const result = await reportMessage(harness, owner.token, channelId, target.id).expect(HTTP_STATUS.OK).execute(); + const report = await readReport(result.report_id); + expect(contextIds(report)).toEqual([before.id, target.id, after.id]); + for (const id of [before.id, after.id]) { + const entry = report.messageContext!.find((candidate) => candidate.messageId.toString() === id)!; + expect(entry.authorId?.toString()).toBe(goneAuthor.userId); + expect(entry.authorUsername).toBe(DELETED_USER_USERNAME); + expect(entry.authorDiscriminator).toBe(0); + expect(entry.authorAvatarHash).toBeNull(); + expect(entry.content).toBe(id === before.id ? 'Said before' : 'Said after'); + } + }); + }); }); describe('Report Guild', () => { async function setupMemberAndGuild(): Promise<{ @@ -626,6 +926,20 @@ describe('Content Reporting', () => { .expect(HTTP_STATUS.UNAUTHORIZED) .execute(); }); + test('a guild report past the reporter allowance is rate limited before it is a conflict', async () => { + const {reporter, guild} = await setupMemberAndGuild(); + await reportGuild(harness, reporter.token, guild.id).expect(HTTP_STATUS.OK).execute(); + const targets = await Promise.all([0, 1, 2, 3].map(() => createTestAccount(harness))); + for (const target of targets) { + await reportUser(harness, reporter.token, target.userId).expect(HTTP_STATUS.OK).execute(); + } + await reportGuild(harness, reporter.token, guild.id).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + await getRateLimitService().resetLimit(`report:create:user:${reporter.userId}`); + await reportGuild(harness, reporter.token, guild.id) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(5); + }); }); describe('Report Requires Category', () => { test('should reject user report without category', async () => { @@ -668,7 +982,7 @@ describe('Content Reporting', () => { }); }); describe('Duplicate Reports', () => { - test('should allow user to report same user multiple times', async () => { + test('should reject a second report of the same user by the same reporter', async () => { const reporter = await createTestAccount(harness); const targetUser = await createTestAccount(harness); const firstReport = await createBuilder(harness, reporter.token) @@ -680,16 +994,14 @@ describe('Content Reporting', () => { .expect(HTTP_STATUS.OK) .execute(); expect(firstReport.report_id).toBeTruthy(); - const secondReport = await createBuilder(harness, reporter.token) + await createBuilder(harness, reporter.token) .post('/reports/user') .body({ user_id: targetUser.userId, category: 'spam_account', }) - .expect(HTTP_STATUS.OK) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) .execute(); - expect(secondReport.report_id).toBeTruthy(); - expect(secondReport.report_id).not.toBe(firstReport.report_id); }); test('should reject duplicate reports for the same message by the same user', async () => { const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); @@ -744,31 +1056,79 @@ describe('Content Reporting', () => { .execute(); expect(secondReport.report_id).not.toBe(firstReport.report_id); }); - test('should allow user to report same guild multiple times', async () => { + test('should reject a second report of the same guild by the same reporter', async () => { const reporter = await createTestAccount(harness); + const otherReporter = await createTestAccount(harness); const owner = await createTestAccount(harness); const guild = await createGuild(harness, owner.token, 'Problematic Guild'); - const invite = await createChannelInvite(harness, owner.token, guild.system_channel_id!); - await acceptInvite(harness, reporter.token, invite.code); - const firstReport = await createBuilder(harness, reporter.token) - .post('/reports/guild') - .body({ - guild_id: guild.id, - category: 'harassment', - }) - .expect(HTTP_STATUS.OK) - .execute(); - expect(firstReport.report_id).toBeTruthy(); - const secondReport = await createBuilder(harness, reporter.token) + const otherGuild = await createGuild(harness, owner.token, 'Other Guild'); + for (const target of [guild, otherGuild]) { + const invite = await createChannelInvite(harness, owner.token, target.system_channel_id!); + await acceptInvite(harness, reporter.token, invite.code); + await acceptInvite(harness, otherReporter.token, invite.code); + } + const firstReport = await reportGuild(harness, reporter.token, guild.id).expect(HTTP_STATUS.OK).execute(); + await createBuilder(harness, reporter.token) .post('/reports/guild') .body({ guild_id: guild.id, category: 'extremist_community', }) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + const otherGuildReport = await reportGuild(harness, reporter.token, otherGuild.id) .expect(HTTP_STATUS.OK) .execute(); - expect(secondReport.report_id).toBeTruthy(); - expect(secondReport.report_id).not.toBe(firstReport.report_id); + const otherReporterReport = await reportGuild(harness, otherReporter.token, guild.id) + .expect(HTTP_STATUS.OK) + .execute(); + expect(new Set([firstReport.report_id, otherGuildReport.report_id, otherReporterReport.report_id]).size).toBe(3); + expect(await countReports()).toBe(3); + }); + test('parallel guild reports by one reporter file one report', async () => { + const reporter = await createTestAccount(harness); + const owner = await createTestAccount(harness); + const guild = await createGuild(harness, owner.token, 'Problematic Guild'); + const invite = await createChannelInvite(harness, owner.token, guild.system_channel_id!); + await acceptInvite(harness, reporter.token, invite.code); + const results = await Promise.all( + [0, 1, 2].map(() => reportGuild(harness, reporter.token, guild.id).executeRaw()), + ); + expect(results.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + expect(await countReports()).toBe(1); + }); + test('a duplicate guild report does not spend the reporter allowance', async () => { + const reporter = await createTestAccount(harness); + const owner = await createTestAccount(harness); + const guild = await createGuild(harness, owner.token, 'Problematic Guild'); + const invite = await createChannelInvite(harness, owner.token, guild.system_channel_id!); + await reportGuild(harness, reporter.token, guild.id, invite.code).expect(HTTP_STATUS.OK).execute(); + for (let attempt = 0; attempt < 5; attempt += 1) { + await reportGuild(harness, reporter.token, guild.id, invite.code) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + } + const targets = await Promise.all([0, 1, 2, 3, 4].map(() => createTestAccount(harness))); + for (const target of targets.slice(0, 4)) { + await reportUser(harness, reporter.token, target.userId).expect(HTTP_STATUS.OK).execute(); + } + await reportUser(harness, reporter.token, targets[4].userId).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + expect(await countReports()).toBe(5); + }); + test('reports filed by an account store the reporter id without an email address', async () => { + const {owner, members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const reporter = members[0]; + const message = await sendChannelMessage(harness, owner.token, systemChannel.id, 'Reported'); + const results = [ + await reportMessage(harness, reporter.token, systemChannel.id, message.id).expect(HTTP_STATUS.OK).execute(), + await reportUser(harness, reporter.token, owner.userId).expect(HTTP_STATUS.OK).execute(), + await reportGuild(harness, reporter.token, guild.id).expect(HTTP_STATUS.OK).execute(), + ]; + for (const result of results) { + const report = await readReport(result.report_id); + expect(report.reporterId?.toString()).toBe(reporter.userId); + expect(report.reporterEmail).toBeNull(); + } }); test('should allow different users to report same content', async () => { const reporter1 = await createTestAccount(harness); @@ -795,6 +1155,46 @@ describe('Content Reporting', () => { expect(report1.report_id).not.toBe(report2.report_id); }); }); + describe('Reservations', () => { + test('a user report refused when the allowance is spent keeps no reservation', async () => { + const reporter = await createTestAccount(harness); + const targetUser = await createTestAccount(harness); + const spend = refuseNextAllowanceSpend(); + await reportUser(harness, reporter.token, targetUser.userId).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + expect(spend).toHaveBeenCalledTimes(1); + spend.mockRestore(); + expect(await countReports()).toBe(0); + await reportUser(harness, reporter.token, targetUser.userId).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(1); + }); + test('a guild report refused when the allowance is spent keeps no reservation', async () => { + const {members, guild} = await setupTestGuildWithMembers(harness, 1); + const reporter = members[0]; + const spend = refuseNextAllowanceSpend(); + await reportGuild(harness, reporter.token, guild.id).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + expect(spend).toHaveBeenCalledTimes(1); + spend.mockRestore(); + expect(await countReports()).toBe(0); + await reportGuild(harness, reporter.token, guild.id).expect(HTTP_STATUS.OK).execute(); + await reportGuild(harness, reporter.token, guild.id) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(1); + }); + test('a message report refused when the allowance is spent keeps no reservation', async () => { + const {owner, members, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const message = await sendChannelMessage(harness, members[0].token, systemChannel.id, 'Reported'); + const spend = refuseNextAllowanceSpend(); + await reportMessage(harness, owner.token, systemChannel.id, message.id) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + expect(spend).toHaveBeenCalledTimes(1); + spend.mockRestore(); + expect(await countReports()).toBe(0); + await reportMessage(harness, owner.token, systemChannel.id, message.id).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(1); + }); + }); describe('DSA Report Flow', () => { test('should send DSA verification email', async () => { await clearTestEmails(harness); diff --git a/fluxer_api/src/api/report/tests/CrosspostReport.test.ts b/fluxer_api/src/api/report/tests/CrosspostReport.test.ts index 9873fed2b..9f5c2f0dc 100644 --- a/fluxer_api/src/api/report/tests/CrosspostReport.test.ts +++ b/fluxer_api/src/api/report/tests/CrosspostReport.test.ts @@ -104,14 +104,20 @@ async function createDsaTicket(harness: ApiTestHarness): Promise { return ticket; } -function dsaMessageReport(harness: ApiTestHarness, ticket: string, channelId: string, messageId: string) { +function dsaMessageReport( + harness: ApiTestHarness, + ticket: string, + guildId: string, + channelId: string, + messageId: string, +) { return createBuilderWithoutAuth(harness) .post('/reports/dsa') .body({ ticket, report_type: 'message', category: 'harassment', - message_link: `https://fluxer.test/channels/0/${channelId}/${messageId}`, + message_link: `https://fluxer.test/channels/${guildId}/${channelId}/${messageId}`, reporter_full_legal_name: 'Jane Doe', reporter_country_of_residence: 'DE', }); @@ -139,7 +145,7 @@ describe('Reporting published copies', () => { expect(report.reportedChannelId?.toString()).toBe(world.b.t1.id); expect(report.reportedGuildId?.toString()).toBe(world.b.guild.id); const reportedContext = report.messageContext?.find((entry) => entry.messageId.toString() === copyId); - expect(reportedContext?.authorId.toString()).toBe(world.a.member.userId); + expect(reportedContext?.authorId?.toString()).toBe(world.a.member.userId); expect(reportedContext?.content).toBe('published update'); }); @@ -163,14 +169,16 @@ describe('Reporting published copies', () => { test('the message-link report on a copy reports the source author', async () => { const {world, copyId} = await createCopyOfMemberMessage(harness); const ticket = await createDsaTicket(harness); - const result = await dsaMessageReport(harness, ticket, world.b.t1.id, copyId).expect(HTTP_STATUS.OK).execute(); + const result = await dsaMessageReport(harness, ticket, world.b.guild.id, world.b.t1.id, copyId) + .expect(HTTP_STATUS.OK) + .execute(); const report = await readReport(result.report_id); expect(report.reportedUserId?.toString()).toBe(world.a.member.userId); expect(report.reportedMessageId?.toString()).toBe(copyId); expect(report.reportedChannelId?.toString()).toBe(world.b.t1.id); }); - test('a copy of a webhook-authored source keeps the existing errors', async () => { + test('a copy of a webhook-authored source reports the source webhook', async () => { const world = await announcementWorld(harness); const sourceWebhook = await createWebhook(harness, world.a.ann.id, world.a.owner.token, 'Source hook'); const {json: source} = await executeWebhook( @@ -189,23 +197,33 @@ describe('Reporting published copies', () => { sourceMessageId: source!.id, content: 'from a webhook', }); - await reportMessage(harness, world.b.webhookManager.token, world.b.t1.id, copyId) - .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + const inApp = await reportMessage(harness, world.b.webhookManager.token, world.b.t1.id, copyId) + .expect(HTTP_STATUS.OK) .execute(); const ticket = await createDsaTicket(harness); - await dsaMessageReport(harness, ticket, world.b.t1.id, copyId) - .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_USER) + const dsa = await dsaMessageReport(harness, ticket, world.b.guild.id, world.b.t1.id, copyId) + .expect(HTTP_STATUS.OK) .execute(); + for (const result of [inApp, dsa]) { + const report = await readReport(result.report_id); + expect(report.reportedUserId).toBeNull(); + expect(report.reportedWebhookId?.toString()).toBe(sourceWebhook.id); + expect(report.reportedWebhookName).toBe('Source hook'); + expect(report.reportedMessageId?.toString()).toBe(copyId); + const reportedContext = report.messageContext?.find((entry) => entry.messageId.toString() === copyId); + expect(reportedContext?.webhookId?.toString()).toBe(sourceWebhook.id); + expect(reportedContext?.authorId).toBeNull(); + } }); - test('a source-deleted copy keeps the existing errors', async () => { + test('a source-deleted copy is reported as an unknown message', async () => { const {world, copyId} = await createCopyOfMemberMessage(harness, MessageFlags.SOURCE_MESSAGE_DELETED); await reportMessage(harness, world.b.webhookManager.token, world.b.t1.id, copyId) .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) .execute(); const ticket = await createDsaTicket(harness); - await dsaMessageReport(harness, ticket, world.b.t1.id, copyId) - .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_USER) + await dsaMessageReport(harness, ticket, world.b.guild.id, world.b.t1.id, copyId) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) .execute(); }); @@ -220,12 +238,15 @@ describe('Reporting published copies', () => { .execute(); }); - test('reports on ordinary webhook messages are unchanged', async () => { + test('reports on ordinary webhook messages report the webhook', async () => { const world = await announcementWorld(harness); const webhook = await createWebhook(harness, world.b.t1.id, world.b.owner.token, 'Plain hook'); const {json} = await executeWebhook(harness, webhook.id, webhook.token, {content: 'plain', wait: true}, 200); - await reportMessage(harness, world.b.webhookManager.token, world.b.t1.id, json!.id) - .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + const result = await reportMessage(harness, world.b.webhookManager.token, world.b.t1.id, json!.id) + .expect(HTTP_STATUS.OK) .execute(); + const report = await readReport(result.report_id); + expect(report.reportedUserId).toBeNull(); + expect(report.reportedWebhookId?.toString()).toBe(webhook.id); }); }); diff --git a/fluxer_api/src/api/report/tests/DsaReportEmailRecipientLimit.test.ts b/fluxer_api/src/api/report/tests/DsaReportEmailRecipientLimit.test.ts index 7deead420..9aaa8670a 100644 --- a/fluxer_api/src/api/report/tests/DsaReportEmailRecipientLimit.test.ts +++ b/fluxer_api/src/api/report/tests/DsaReportEmailRecipientLimit.test.ts @@ -1,6 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {clearTestEmails, createUniqueEmail, listTestEmails} from '@app/api/auth/tests/AuthTestUtils'; +import {ReportRepository} from '@app/api/report/ReportRepository'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; @@ -11,6 +12,14 @@ async function countVerificationEmailsTo(harness: ApiTestHarness, email: string) return emails.filter((sent) => sent.type === 'dsa_report_verification' && sent.to === email.toLowerCase()).length; } +async function waitOutResendCooldown(email: string): Promise { + const repository = new ReportRepository(); + const row = await repository.getDsaEmailVerification(email.toLowerCase()); + if (row) { + await repository.upsertDsaEmailVerification({...row, last_sent_at: new Date(Date.now() - 61_000)}); + } +} + describe('DSA report verification email recipient limit', () => { let harness: ApiTestHarness; beforeEach(async () => { @@ -29,6 +38,7 @@ describe('DSA report verification email recipient limit', () => { .body({email}) .expect(HTTP_STATUS.OK) .execute(); + await waitOutResendCooldown(email); } await createBuilderWithoutAuth(harness) .post('/reports/dsa/email/send') @@ -42,8 +52,18 @@ describe('DSA report verification email recipient limit', () => { await clearTestEmails(harness); const limited = createUniqueEmail('dsa-recipient'); for (let attempt = 0; attempt < 3; attempt++) { - await createBuilderWithoutAuth(harness).post('/reports/dsa/email/send').body({email: limited}).execute(); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email: limited}) + .expect(HTTP_STATUS.OK) + .execute(); + await waitOutResendCooldown(limited); } + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email: limited}) + .expect(429) + .execute(); const other = createUniqueEmail('dsa-recipient'); await createBuilderWithoutAuth(harness) .post('/reports/dsa/email/send') diff --git a/fluxer_api/src/api/report/tests/DsaReportEmailSendFailure.test.ts b/fluxer_api/src/api/report/tests/DsaReportEmailSendFailure.test.ts new file mode 100644 index 000000000..0c72c4bed --- /dev/null +++ b/fluxer_api/src/api/report/tests/DsaReportEmailSendFailure.test.ts @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {clearTestEmails, createUniqueEmail, findLastTestEmail, listTestEmails} from '@app/api/auth/tests/AuthTestUtils'; +import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; +import {setCassandraQueryExecutorForTesting} from '@app/api/database/CassandraQueryExecution'; +import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate'; +import type {IEmailDnsValidationService} from '@app/api/infrastructure/IEmailDnsValidationService'; +import type {IGatewayService} from '@app/api/infrastructure/IGatewayService'; +import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService'; +import type {IStorageService} from '@app/api/infrastructure/IStorageService'; +import type {IInviteRepository} from '@app/api/invite/IInviteRepository'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {ReportService} from '@app/api/report/ReportService'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {InMemoryCassandraQueryExecutor} from '@app/api/test/InMemoryCassandraQueryExecutor'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import type {IUserRepository} from '@app/api/user/IUserRepository'; +import type {IWebhookRepository} from '@app/api/webhook/IWebhookRepository'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; +import type {IEmailService} from '@pkgs/email/src/IEmailService'; +import {TestEmailService} from '@pkgs/email/src/TestEmailService'; +import type {IRateLimitService, RateLimitResult} from '@pkgs/rate_limit/src/IRateLimitService'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; + +interface SentCode { + email: string; + code: string; +} + +function allowedLimit(): RateLimitResult { + return {allowed: true, limit: 5, remaining: 4, resetTime: new Date(Date.now() + 1000), resetAfterDecimal: 1}; +} + +function createService(sendResult: boolean): {service: ReportService; sent: Array} { + const sent: Array = []; + const emailService = { + sendDsaReportVerificationCode: async (email: string, code: string) => { + sent.push({email, code}); + return sendResult; + }, + } as unknown as IEmailService; + const rateLimitService = { + checkLimit: async () => allowedLimit(), + peekLimit: async () => allowedLimit(), + resetLimit: async () => {}, + } as unknown as IRateLimitService; + const emailDnsValidationService: IEmailDnsValidationService = {hasValidDnsRecords: async () => true}; + const service = new ReportService( + new ReportRepository(), + {} as IChannelRepository, + {} as IGuildRepositoryAggregate, + {} as IUserRepository, + {} as IInviteRepository, + emailService, + emailDnsValidationService, + {} as ISnowflakeService, + {} as IStorageService, + {} as IGatewayService, + rateLimitService, + {} as IWebhookRepository, + ); + return {service, sent}; +} + +describe('DSA verification email delivery result in the service', () => { + let executor: InMemoryCassandraQueryExecutor; + + beforeEach(() => { + executor = new InMemoryCassandraQueryExecutor(); + setCassandraQueryExecutorForTesting(executor); + }); + + afterEach(() => { + executor.reset(); + setCassandraQueryExecutorForTesting(null); + }); + + test('an email that was not sent is answered with 503 and leaves no code behind', async () => { + const {service, sent} = createService(false); + const email = createUniqueEmail('dsa-send-failure'); + const failure = await service.sendDsaReportVerificationCode(email).catch((error: unknown) => error); + expect(failure).toBeInstanceOf(ServiceUnavailableError); + expect((failure as ServiceUnavailableError).status).toBe(503); + expect((failure as ServiceUnavailableError).code).toBe(APIErrorCodes.SERVICE_UNAVAILABLE); + expect(sent).toHaveLength(1); + expect(await new ReportRepository().getDsaEmailVerification(email.toLowerCase())).toBeNull(); + }); + + test('an email that was sent resolves and keeps its code', async () => { + const {service, sent} = createService(true); + const email = createUniqueEmail('dsa-send-failure'); + await expect(service.sendDsaReportVerificationCode(email)).resolves.toBeUndefined(); + expect(sent).toEqual([{email: email.toLowerCase(), code: expect.stringMatching(/^[A-Z0-9]{4}-[A-Z0-9]{4}$/)}]); + expect(await new ReportRepository().getDsaEmailVerification(email.toLowerCase())).not.toBeNull(); + await expect(service.verifyDsaReportEmail(email, sent[0].code)).resolves.toMatch(/^[0-9a-f]{64}$/); + }); +}); + +describe('DSA verification email delivery result on the route', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness(); + }); + + afterEach(async () => { + vi.restoreAllMocks(); + await harness?.shutdown(); + }); + + test('the route answers 503 and the next send goes through right away', async () => { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-send-failure'); + const send = vi.spyOn(TestEmailService.prototype, 'sendDsaReportVerificationCode').mockResolvedValueOnce(false); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.SERVICE_UNAVAILABLE, APIErrorCodes.SERVICE_UNAVAILABLE) + .execute(); + expect(send).toHaveBeenCalledTimes(1); + expect(await new ReportRepository().getDsaEmailVerification(email.toLowerCase())).toBeNull(); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + }); +}); diff --git a/fluxer_api/src/api/report/tests/DsaReportEmailVerifyAttemptLimit.test.ts b/fluxer_api/src/api/report/tests/DsaReportEmailVerifyAttemptLimit.test.ts new file mode 100644 index 000000000..fbda0f287 --- /dev/null +++ b/fluxer_api/src/api/report/tests/DsaReportEmailVerifyAttemptLimit.test.ts @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {clearTestEmails, createUniqueEmail, findLastTestEmail, listTestEmails} from '@app/api/auth/tests/AuthTestUtils'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; + +const WRONG_CODE = 'AAAA-AAAA'; + +async function requestCode( + harness: ApiTestHarness, + email = createUniqueEmail('dsa-attempts'), +): Promise<{ + email: string; + code: string; +}> { + await clearTestEmails(harness); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + if (typeof code !== 'string' || code === WRONG_CODE) { + throw new Error('No usable DSA verification code was sent'); + } + return {email, code}; +} + +function verify(harness: ApiTestHarness, email: string, code: string) { + return createBuilderWithoutAuth<{ticket: string}>(harness).post('/reports/dsa/email/verify').body({email, code}); +} + +async function enterWrongCode(harness: ApiTestHarness, email: string, times: number): Promise { + for (let attempt = 0; attempt < times; attempt++) { + await verify(harness, email, WRONG_CODE) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + } +} + +async function storedCode(email: string) { + return new ReportRepository().getDsaEmailVerification(email.toLowerCase()); +} + +describe('DSA verification code attempts per address', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + test('four wrong codes leave the sent code usable', async () => { + const {email, code} = await requestCode(harness); + await enterWrongCode(harness, email, 4); + expect(await storedCode(email)).not.toBeNull(); + await verify(harness, email, code).expect(HTTP_STATUS.OK).execute(); + }); + + test('after five wrong codes the sent code no longer verifies and is removed', async () => { + const {email, code} = await requestCode(harness); + await enterWrongCode(harness, email, 5); + expect(await storedCode(email)).not.toBeNull(); + const wrong = await verify(harness, email, WRONG_CODE).executeRaw(); + const {response, json} = await verify(harness, email, code).executeRaw(); + expect(response.status).toBe(HTTP_STATUS.BAD_REQUEST); + expect(json).toEqual(wrong.json); + expect((json as {code?: string}).code).toBe(APIErrorCodes.INVALID_DSA_VERIFICATION_CODE); + expect(await storedCode(email)).toBeNull(); + }); + + test('the sixth attempt removes the code even when it is the right one', async () => { + const {email, code} = await requestCode(harness); + await enterWrongCode(harness, email, 5); + await verify(harness, email, code) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + expect(await storedCode(email)).toBeNull(); + }); + + test('attempts are counted per address', async () => { + const first = await requestCode(harness); + await enterWrongCode(harness, first.email, 6); + expect(await storedCode(first.email)).toBeNull(); + const second = await requestCode(harness); + await enterWrongCode(harness, second.email, 1); + await verify(harness, second.email, second.code).expect(HTTP_STATUS.OK).execute(); + }); + + test('letter case variants of an address share one count', async () => { + const {email, code} = await requestCode(harness); + await enterWrongCode(harness, email, 3); + await enterWrongCode(harness, email.toUpperCase(), 2); + await verify(harness, email, code) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + expect(await storedCode(email)).toBeNull(); + }); + + test('a newly sent code starts a new count', async () => { + const first = await requestCode(harness); + await enterWrongCode(harness, first.email, 6); + const second = await requestCode(harness, first.email); + await enterWrongCode(harness, second.email, 4); + await verify(harness, second.email, second.code).expect(HTTP_STATUS.OK).execute(); + }); +}); diff --git a/fluxer_api/src/api/report/tests/DsaReportTicketSingleUse.test.ts b/fluxer_api/src/api/report/tests/DsaReportTicketSingleUse.test.ts new file mode 100644 index 000000000..c62288b85 --- /dev/null +++ b/fluxer_api/src/api/report/tests/DsaReportTicketSingleUse.test.ts @@ -0,0 +1,424 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createHash} from 'node:crypto'; +import {clearTestEmails, createUniqueEmail, findLastTestEmail, listTestEmails} from '@app/api/auth/tests/AuthTestUtils'; +import {getChannel, sendChannelMessage, setupTestGuildWithMembers} from '@app/api/channel/tests/ChannelTestUtils'; +import { + type CassandraQueryExecutorForTesting, + setCassandraQueryExecutorForTesting, +} from '@app/api/database/CassandraQueryExecution'; +import type {CassandraParams, KvQueryMeta, PreparedQuery} from '@app/api/database/CassandraTypes'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {InMemoryCassandraQueryExecutor} from '@app/api/test/InMemoryCassandraQueryExecutor'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; + +interface ErrorResponse { + code: string; + retry_after?: number; +} + +class RecordingExecutor implements CassandraQueryExecutorForTesting { + readonly statements: Array = []; + private readonly inner = new InMemoryCassandraQueryExecutor(); + + async executeQuery, P extends CassandraParams = CassandraParams>( + query: PreparedQuery

, + ): Promise> { + this.statements.push(query.cql); + return this.inner.executeQuery(query); + } + + async executeBatch( + queries: Array<{query: string; params: object; meta?: KvQueryMeta}>, + atomic?: boolean, + ): Promise { + this.statements.push(...queries.map((entry) => entry.query)); + await this.inner.executeBatch(queries, atomic); + } + + reset(): void { + this.inner.reset(); + } +} + +async function requestCode(harness: ApiTestHarness): Promise<{email: string; code: string}> { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-single-use'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + if (typeof code !== 'string') { + throw new Error('No DSA verification code was sent'); + } + return {email, code}; +} + +function send(harness: ApiTestHarness, email: string) { + return createBuilderWithoutAuth(harness).post('/reports/dsa/email/send').body({email}); +} + +async function lastSentCode(harness: ApiTestHarness): Promise { + return findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; +} + +async function countCodeEmails(harness: ApiTestHarness): Promise { + return (await listTestEmails(harness)).filter((sent) => sent.type === 'dsa_report_verification').length; +} + +async function moveLastSend(email: string, sentAt: Date): Promise { + const repository = new ReportRepository(); + const row = await repository.getDsaEmailVerification(email.toLowerCase()); + if (!row) { + throw new Error('No DSA verification row to move'); + } + await repository.upsertDsaEmailVerification({...row, last_sent_at: sentAt}); +} + +function verify(harness: ApiTestHarness, email: string, code: string) { + return createBuilderWithoutAuth<{ticket: string}>(harness).post('/reports/dsa/email/verify').body({email, code}); +} + +async function issueTicket(harness: ApiTestHarness): Promise { + const {email, code} = await requestCode(harness); + const {ticket} = await verify(harness, email, code).expect(HTTP_STATUS.OK).execute(); + return ticket; +} + +async function createMessageLinks(harness: ApiTestHarness, count: number): Promise> { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const channel = await getChannel(harness, owner.token, guild.system_channel_id!); + const links: Array = []; + for (let index = 0; index < count; index++) { + const message = await sendChannelMessage(harness, members[0].token, channel.id, `DSA notice target ${index}`); + links.push(`https://web.fluxer.app/channels/${guild.id}/${channel.id}/${message.id}`); + } + return links; +} + +function submitNotice(harness: ApiTestHarness, ticket: string, link: string) { + return createBuilderWithoutAuth<{report_id: string}>(harness).post('/reports/dsa').body({ + ticket, + report_type: 'message', + category: 'hate_speech', + message_link: link, + additional_info: 'This message calls for violence against a group of people.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'DE', + }); +} + +async function countReports(): Promise { + return (await new ReportRepository().listAllReportsPaginated(100)).length; +} + +function hashCode(code: string): string { + return createHash('sha256').update(code).digest('hex'); +} + +describe('DSA verification codes and tickets', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + test('a code verifies once', async () => { + const {email, code} = await requestCode(harness); + const {ticket} = await verify(harness, email, code).expect(HTTP_STATUS.OK).execute(); + expect(ticket).toMatch(/^[0-9a-f]{64}$/); + expect(await new ReportRepository().getDsaEmailVerification(email.toLowerCase())).toBeNull(); + await verify(harness, email, code) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + }); + + test('two verifications of one code at the same time issue one ticket', async () => { + const {email, code} = await requestCode(harness); + const results = await Promise.all([ + verify(harness, email, code).executeRaw(), + verify(harness, email, code).executeRaw(), + ]); + const statuses = results.map((result) => result.response.status).sort(); + expect(statuses).toEqual([HTTP_STATUS.OK, HTTP_STATUS.BAD_REQUEST]); + const rejected = results.find((result) => result.response.status === HTTP_STATUS.BAD_REQUEST); + expect((rejected?.json as ErrorResponse | undefined)?.code).toBe(APIErrorCodes.INVALID_DSA_VERIFICATION_CODE); + }); + + test('a wrong code keeps the sent code usable', async () => { + const {email, code} = await requestCode(harness); + await verify(harness, email, 'AAAA-AAAA') + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + await verify(harness, email, code).expect(HTTP_STATUS.OK).execute(); + }); + + test('a second send within a minute is refused and the first code still verifies', async () => { + const {email, code} = await requestCode(harness); + const {response, json} = await send(harness, email.toUpperCase()).executeRaw(); + expect(response.status).toBe(429); + const refusal = json as ErrorResponse; + expect(refusal.code).toBe(APIErrorCodes.RATE_LIMITED); + expect(refusal.retry_after).toBeGreaterThan(0); + expect(refusal.retry_after).toBeLessThanOrEqual(60); + const retryAfter = Number(response.headers.get('Retry-After')); + expect(retryAfter).toBeGreaterThan(0); + expect(retryAfter).toBeLessThanOrEqual(60); + expect(await countCodeEmails(harness)).toBe(1); + await verify(harness, email, code).expect(HTTP_STATUS.OK).execute(); + }); + + test('a send refused by the resend wait does not count toward the hourly limit', async () => { + const {email} = await requestCode(harness); + for (let attempt = 0; attempt < 4; attempt++) { + await send(harness, email).expect(429, APIErrorCodes.RATE_LIMITED).execute(); + } + for (let resend = 0; resend < 2; resend++) { + await moveLastSend(email, new Date(Date.now() - 61_000)); + await send(harness, email).expect(HTTP_STATUS.OK).execute(); + } + expect(await countCodeEmails(harness)).toBe(3); + }); + + test('a send after a minute replaces the code', async () => { + const {email, code} = await requestCode(harness); + await moveLastSend(email, new Date(Date.now() - 61_000)); + await send(harness, email).expect(HTTP_STATUS.OK).execute(); + const resent = await lastSentCode(harness); + expect(resent).toBeTruthy(); + expect(resent).not.toBe(code); + expect(await countCodeEmails(harness)).toBe(2); + await verify(harness, email, code) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + await verify(harness, email, resent!).expect(HTTP_STATUS.OK).execute(); + }); + + test('an expired code does not hold back a new send', async () => { + const email = createUniqueEmail('dsa-single-use'); + await clearTestEmails(harness); + await new ReportRepository().upsertDsaEmailVerification({ + email_lower: email.toLowerCase(), + code_hash: hashCode('ABCD-EFGH'), + expires_at: new Date(Date.now() - 1000), + last_sent_at: new Date(Date.now() - 5000), + }); + await send(harness, email).expect(HTTP_STATUS.OK).execute(); + const code = await lastSentCode(harness); + await verify(harness, email, code!).expect(HTTP_STATUS.OK).execute(); + }); + + test('an expired code is rejected', async () => { + const email = createUniqueEmail('dsa-single-use'); + const code = 'ABCD-EFGH'; + await new ReportRepository().upsertDsaEmailVerification({ + email_lower: email.toLowerCase(), + code_hash: hashCode(code), + expires_at: new Date(Date.now() - 1000), + last_sent_at: new Date(Date.now() - 600_000), + }); + await verify(harness, email, code) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_VERIFICATION_CODE) + .execute(); + }); + + test('a ticket files one report', async () => { + const ticket = await issueTicket(harness); + const [first, second] = await createMessageLinks(harness, 2); + const before = await countReports(); + await submitNotice(harness, ticket, first).expect(HTTP_STATUS.OK).execute(); + expect(await new ReportRepository().getDsaTicket(ticket)).toBeNull(); + await submitNotice(harness, ticket, second) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_TICKET) + .execute(); + expect(await countReports()).toBe(before + 1); + }); + + test('two notices sent at the same time with one ticket file one report', async () => { + const ticket = await issueTicket(harness); + const [first, second] = await createMessageLinks(harness, 2); + const before = await countReports(); + const results = await Promise.all([ + submitNotice(harness, ticket, first).executeRaw(), + submitNotice(harness, ticket, second).executeRaw(), + ]); + const statuses = results.map((result) => result.response.status).sort(); + expect(statuses).toEqual([HTTP_STATUS.OK, HTTP_STATUS.BAD_REQUEST]); + const rejected = results.find((result) => result.response.status === HTTP_STATUS.BAD_REQUEST); + expect((rejected?.json as ErrorResponse | undefined)?.code).toBe(APIErrorCodes.INVALID_DSA_TICKET); + expect(await countReports()).toBe(before + 1); + }); + + test('an expired ticket is rejected', async () => { + const ticket = 'e'.repeat(64); + await new ReportRepository().createDsaTicket({ + ticket, + email_lower: createUniqueEmail('dsa-single-use'), + expires_at: new Date(Date.now() - 1000), + created_at: new Date(Date.now() - 3_600_000), + }); + const [link] = await createMessageLinks(harness, 1); + const before = await countReports(); + await submitNotice(harness, ticket, link) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_TICKET) + .execute(); + expect(await countReports()).toBe(before); + }); + + test('a rejected notice keeps the ticket', async () => { + const ticket = await issueTicket(harness); + const [link] = await createMessageLinks(harness, 1); + await submitNotice(harness, ticket, 'https://web.fluxer.app/channels/1/2/3') + .expect(HTTP_STATUS.NOT_FOUND) + .execute(); + await submitNotice(harness, ticket, link).expect(HTTP_STATUS.OK).execute(); + }); +}); + +describe('DSA ticket and code consumption in the repository', () => { + let executor: RecordingExecutor; + + beforeEach(() => { + executor = new RecordingExecutor(); + setCassandraQueryExecutorForTesting(executor); + }); + + afterEach(() => { + executor.reset(); + setCassandraQueryExecutorForTesting(null); + }); + + test('ticket and code writes are conditional', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + await repository.createDsaTicket({ + ticket: 'c'.repeat(64), + email_lower: email, + expires_at: new Date(Date.now() + 3_600_000), + created_at: new Date(), + }); + for (const code of ['FRST-CODE', 'SCND-CODE']) { + await repository.upsertDsaEmailVerification({ + email_lower: email, + code_hash: hashCode(code), + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }); + } + await repository.consumeDsaEmailVerification(email, hashCode('SCND-CODE')); + await repository.consumeDsaTicket('c'.repeat(64), email); + const writes = executor.statements.filter( + (cql) => /dsa_report_(tickets|email_verifications)/.test(cql) && !/^\s*SELECT/i.test(cql), + ); + expect(writes.map((cql) => cql.trim().split(/\s+/)[0])).toEqual(['INSERT', 'INSERT', 'UPDATE', 'DELETE', 'DELETE']); + for (const cql of writes) { + expect(cql).toMatch(/\sIF\s/); + } + }); + + test('creating a ticket that already exists fails and keeps the first row', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + const row = { + ticket: 'd'.repeat(64), + email_lower: email, + expires_at: new Date(Date.now() + 3_600_000), + created_at: new Date(), + }; + await repository.createDsaTicket(row); + await expect(repository.createDsaTicket({...row, email_lower: 'other@example.com'})).rejects.toThrow(); + expect((await repository.getDsaTicket(row.ticket))?.email_lower).toBe(email); + }); + + test('a resent code replaces the stored code', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + await repository.upsertDsaEmailVerification({ + email_lower: email, + code_hash: hashCode('OLDC-ODE2'), + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(Date.now() - 60_000), + }); + const resent = { + email_lower: email, + code_hash: hashCode('NEWC-ODE2'), + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }; + await repository.upsertDsaEmailVerification(resent); + expect(await repository.getDsaEmailVerification(email)).toEqual(resent); + expect(await repository.consumeDsaEmailVerification(email, hashCode('OLDC-ODE2'))).toBe(false); + expect(await repository.consumeDsaEmailVerification(email, hashCode('NEWC-ODE2'))).toBe(true); + }); + + test('codes sent at the same time leave one usable code', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + const hashes = ['AAAA-0001', 'AAAA-0002', 'AAAA-0003'].map(hashCode); + await Promise.all( + hashes.map((codeHash) => + repository.upsertDsaEmailVerification({ + email_lower: email, + code_hash: codeHash, + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }), + ), + ); + const stored = await repository.getDsaEmailVerification(email); + expect(hashes).toContain(stored?.code_hash); + const consumed: Array = []; + for (const codeHash of hashes) { + consumed.push(await repository.consumeDsaEmailVerification(email, codeHash)); + } + expect(consumed.filter(Boolean)).toHaveLength(1); + expect(await repository.getDsaEmailVerification(email)).toBeNull(); + }); + + test('a ticket is consumed once, also under concurrent claims', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + const row = { + ticket: 'a'.repeat(64), + email_lower: email, + expires_at: new Date(Date.now() + 3_600_000), + created_at: new Date(), + }; + await repository.createDsaTicket(row); + expect(await repository.consumeDsaTicket(row.ticket, email)).toBe(true); + expect(await repository.consumeDsaTicket(row.ticket, email)).toBe(false); + await repository.createDsaTicket({...row, ticket: 'b'.repeat(64)}); + const claims = await Promise.all([ + repository.consumeDsaTicket('b'.repeat(64), email), + repository.consumeDsaTicket('b'.repeat(64), email), + ]); + expect(claims.filter(Boolean)).toHaveLength(1); + expect(await repository.getDsaTicket('b'.repeat(64))).toBeNull(); + }); + + test('a code is consumed only with its current hash', async () => { + const repository = new ReportRepository(); + const email = createUniqueEmail('dsa-single-use'); + await repository.upsertDsaEmailVerification({ + email_lower: email, + code_hash: hashCode('NEWC-ODE1'), + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }); + expect(await repository.consumeDsaEmailVerification(email, hashCode('OLDC-ODE1'))).toBe(false); + expect(await repository.getDsaEmailVerification(email)).not.toBeNull(); + expect(await repository.consumeDsaEmailVerification(email, hashCode('NEWC-ODE1'))).toBe(true); + expect(await repository.consumeDsaEmailVerification(email, hashCode('NEWC-ODE1'))).toBe(false); + expect(await repository.getDsaEmailVerification(email)).toBeNull(); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportChannelFilter.test.ts b/fluxer_api/src/api/report/tests/ReportChannelFilter.test.ts new file mode 100644 index 000000000..a89c7f423 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportChannelFilter.test.ts @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createTestAccount, setUserACLs, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createChannel, sendChannelMessage, setupTestGuildWithMembers} from '@app/api/channel/tests/ChannelTestUtils'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder} from '@app/api/test/TestRequestBuilder'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; + +interface ReportResponse { + report_id: string; +} + +interface AdminReportList { + reports: Array<{ + report_id: string; + reported_channel_id: string | null; + }>; + total: number; + offset: number; + limit: number; +} + +interface ChannelReports { + admin: TestAccount; + firstChannelId: string; + secondChannelId: string; + emptyChannelId: string; + firstReportId: string; + secondReportId: string; + userReportId: string; +} + +async function reportMessage( + harness: ApiTestHarness, + reporter: TestAccount, + author: TestAccount, + channelId: string, + category: string, +): Promise { + const message = await sendChannelMessage(harness, author.token, channelId, `Reported in ${channelId}`); + const report = await createBuilder(harness, reporter.token) + .post('/reports/message') + .body({channel_id: channelId, message_id: message.id, category}) + .expect(HTTP_STATUS.OK) + .execute(); + return report.report_id; +} + +async function setupChannelReports(harness: ApiTestHarness): Promise { + const {owner, members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const author = members[0]; + const second = await createChannel(harness, owner.token, guild.id, 'second'); + const empty = await createChannel(harness, owner.token, guild.id, 'empty'); + const firstReportId = await reportMessage(harness, owner, author, systemChannel.id, 'spam'); + const secondReportId = await reportMessage(harness, owner, author, second.id, 'harassment'); + const userReport = await createBuilder(harness, owner.token) + .post('/reports/user') + .body({user_id: author.userId, category: 'harassment'}) + .expect(HTTP_STATUS.OK) + .execute(); + const admin = await setUserACLs(harness, await createTestAccount(harness), ['admin:authenticate', 'report:view']); + return { + admin, + firstChannelId: systemChannel.id, + secondChannelId: second.id, + emptyChannelId: empty.id, + firstReportId, + secondReportId, + userReportId: userReport.report_id, + }; +} + +function listReports(harness: ApiTestHarness, admin: TestAccount, query: string): Promise { + return createBuilder(harness, admin.token) + .get(`/admin/reports?${query}`) + .expect(HTTP_STATUS.OK) + .execute(); +} + +function reportIds(list: AdminReportList): Array { + return list.reports.map((report) => report.report_id).sort(); +} + +describe('Admin report channel filter', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness({search: 'enabled'}); + }); + + afterEach(async () => { + await harness.shutdown(); + }); + + test('each channel filter returns only the report filed in that channel', async () => { + const world = await setupChannelReports(harness); + const unfiltered = await listReports(harness, world.admin, 'limit=50'); + expect(reportIds(unfiltered)).toEqual([world.firstReportId, world.secondReportId, world.userReportId].sort()); + + const first = await listReports(harness, world.admin, `reported_channel_id=${world.firstChannelId}`); + expect(reportIds(first)).toEqual([world.firstReportId]); + expect(first.total).toBe(1); + expect(first.reports[0].reported_channel_id).toBe(world.firstChannelId); + + const second = await listReports(harness, world.admin, `reported_channel_id=${world.secondChannelId}`); + expect(reportIds(second)).toEqual([world.secondReportId]); + expect(second.total).toBe(1); + expect(second.reports[0].reported_channel_id).toBe(world.secondChannelId); + }); + + test('a channel without reports returns an empty page', async () => { + const world = await setupChannelReports(harness); + const empty = await listReports(harness, world.admin, `reported_channel_id=${world.emptyChannelId}`); + expect(empty.reports).toEqual([]); + expect(empty.total).toBe(0); + }); + + test('the channel filter combines with the other filters', async () => { + const world = await setupChannelReports(harness); + const pending = await listReports( + harness, + world.admin, + `status=pending&reported_channel_id=${world.secondChannelId}`, + ); + expect(reportIds(pending)).toEqual([world.secondReportId]); + expect(pending.total).toBe(1); + + const resolved = await listReports( + harness, + world.admin, + `status=resolved&reported_channel_id=${world.secondChannelId}`, + ); + expect(resolved.reports).toEqual([]); + expect(resolved.total).toBe(0); + + const matchingCategory = await listReports( + harness, + world.admin, + `category=harassment&reported_channel_id=${world.secondChannelId}`, + ); + expect(reportIds(matchingCategory)).toEqual([world.secondReportId]); + + const otherCategory = await listReports( + harness, + world.admin, + `category=harassment&reported_channel_id=${world.firstChannelId}`, + ); + expect(otherCategory.reports).toEqual([]); + expect(otherCategory.total).toBe(0); + + const messageType = await listReports( + harness, + world.admin, + `report_type=message&reported_channel_id=${world.firstChannelId}`, + ); + expect(reportIds(messageType)).toEqual([world.firstReportId]); + + const userType = await listReports( + harness, + world.admin, + `report_type=user&reported_channel_id=${world.firstChannelId}`, + ); + expect(userType.reports).toEqual([]); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportFlowAdmin.test.ts b/fluxer_api/src/api/report/tests/ReportFlowAdmin.test.ts new file mode 100644 index 000000000..a84d7703f --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportFlowAdmin.test.ts @@ -0,0 +1,1035 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {AdminAuditReadActions} from '@app/api/admin/AdminAuditActions'; +import { + clearTestEmails, + createTestAccount, + createUniqueEmail, + findLastTestEmail, + listTestEmails, + setUserACLs, + type TestAccount, +} from '@app/api/auth/tests/AuthTestUtils'; +import {createAttachmentID, createReportID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {getChannel, sendChannelMessage, setupTestGuildWithMembers} from '@app/api/channel/tests/ChannelTestUtils'; +import type {MessageAttachment} from '@app/api/database/types/MessageTypes'; +import type {IARMessageContextRow, IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {getAdminRepository, getRateLimitService} from '@app/api/middleware/ServiceSingletons'; +import {RateLimitConfigs} from '@app/api/RateLimitConfig'; +import {getReportFlowVariant, type ReportFlowStepInput} from '@app/api/report/flows/ReportFlowRegistry'; +import {findReportReason, listReportReasons} from '@app/api/report/flows/ReportReasonCatalog'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {getReportSearchService} from '@app/api/SearchFactory'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {deleteAccount, setPendingDeletionAt} from '@app/api/user/tests/UserTestUtils'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import { + type AdminReportReasonsResponse, + ReportAdminResponseSchema, +} from '@fluxer/schema/src/domains/admin/AdminSchemas'; +import type { + ReportFlowResponse, + ReportFlowSurface, + ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import { + type ReportProfileSnapshot, + serializeReportProfileSnapshot, +} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; +import type {z} from 'zod'; + +type AdminReport = z.infer; + +interface ReportResponse { + report_id: string; +} + +interface AdminReportList { + reports: Array; + total: number; + offset: number; + limit: number; +} + +interface MessageTargets { + reporter: TestAccount; + channelId: string; + messageIds: Array; +} + +const RATE_LIMIT_HEADER = 'x-fluxer-test-enable-rate-limits'; + +const MESSAGE_CSAM_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'sexual'}, + {screen_id: 'sexual', option_id: 'minor_sexual'}, + {screen_id: 'minor_sexual', option_id: 'csam'}, +]; + +const MESSAGE_TERRORISM_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'terrorism'}, +]; + +const MESSAGE_PRIVATE_INFO_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['phone', 'email']}, +]; + +const USER_CSAM_WALK: ReadonlyArray = [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'sexual'}, + {screen_id: 'profile_sexual', option_id: 'minor_sexual'}, + {screen_id: 'profile_minor_sexual', option_id: 'csam'}, +]; + +const USER_HARASSMENT_WALK: ReadonlyArray = [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo', 'profile_text']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'harassment'}, +]; + +function currentHash(target: ReportFlowTargetType, surface: ReportFlowSurface = 'in_app'): string { + return getReportFlowVariant(target, surface).revisionHash; +} + +async function setupMessages(harness: ApiTestHarness, count: number): Promise { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const channel = await getChannel(harness, owner.token, guild.system_channel_id!); + const messageIds: Array = []; + for (let index = 0; index < count; index++) { + messageIds.push((await sendChannelMessage(harness, members[0].token, channel.id, `Reported ${index}`)).id); + } + return {reporter: owner, channelId: channel.id, messageIds}; +} + +async function submitMessageFlow( + harness: ApiTestHarness, + targets: MessageTargets, + index: number, + steps: ReadonlyArray, + locale?: string, +): Promise { + const result = await createBuilder(harness, targets.reporter.token) + .post('/reports/flows/message/submissions') + .body({ + channel_id: targets.channelId, + message_id: targets.messageIds[index], + revision_hash: currentHash('message'), + steps, + ...(locale ? {locale} : {}), + }) + .expect(HTTP_STATUS.OK) + .execute(); + return result.report_id; +} + +async function submitUserFlow( + harness: ApiTestHarness, + reporter: TestAccount, + userId: string, + steps: ReadonlyArray, + locale?: string, +): Promise { + const result = await createBuilder(harness, reporter.token) + .post('/reports/flows/user/submissions') + .body({user_id: userId, revision_hash: currentHash('user'), steps, ...(locale ? {locale} : {})}) + .expect(HTTP_STATUS.OK) + .execute(); + return result.report_id; +} + +async function submitLegacyMessage(harness: ApiTestHarness, targets: MessageTargets, index: number): Promise { + const result = await createBuilder(harness, targets.reporter.token) + .post('/reports/message') + .body({channel_id: targets.channelId, message_id: targets.messageIds[index], category: 'child_safety'}) + .expect(HTTP_STATUS.OK) + .execute(); + return result.report_id; +} + +async function submitLegacyUser(harness: ApiTestHarness, reporter: TestAccount, userId: string): Promise { + const result = await createBuilder(harness, reporter.token) + .post('/reports/user') + .body({user_id: userId, category: 'harassment'}) + .expect(HTTP_STATUS.OK) + .execute(); + return result.report_id; +} + +async function createReportAdmin(harness: ApiTestHarness, acls = ['admin:authenticate', 'report:view']) { + return setUserACLs(harness, await createTestAccount(harness), acls); +} + +function listReports(harness: ApiTestHarness, admin: TestAccount, query: string): Promise { + return createBuilder(harness, admin.token) + .get(`/admin/reports?${query}`) + .expect(HTTP_STATUS.OK) + .execute(); +} + +function getAdminReport(harness: ApiTestHarness, admin: TestAccount, reportId: string): Promise { + return createBuilder(harness, admin.token) + .get(`/admin/reports/${reportId}`) + .expect(HTTP_STATUS.OK) + .execute(); +} + +function reportIds(list: AdminReportList): Array { + return list.reports.map((report) => report.report_id).sort(); +} + +function fetchFlow(harness: ApiTestHarness, target: ReportFlowTargetType, locale: string): Promise { + return createBuilderWithoutAuth(harness) + .get(`/reports/flows/${target}?locale=${locale}`) + .expect(HTTP_STATUS.OK) + .execute(); +} + +function describeWalk(flow: ReportFlowResponse, steps: ReadonlyArray) { + const screens = new Map(flow.screens.map((screen) => [screen.id, screen])); + return steps.map((step) => { + const screen = screens.get(step.screen_id)!; + const option = step.option_id ? screen.options.find((candidate) => candidate.id === step.option_id)! : null; + return { + screen_id: step.screen_id, + screen_title: screen.title, + option_id: step.option_id ?? null, + option_label: option?.label ?? null, + items: (screen.checklist?.items ?? []) + .filter((item) => step.item_ids?.includes(item.id)) + .map((item) => ({id: item.id, label: item.label})), + }; + }); +} + +function expectNoFlowFields(report: AdminReport): void { + expect(report.reason).toBeNull(); + expect(report.reason_label).toBeNull(); + expect(report.reason_highest_priority).toBeNull(); + expect(report.flow).toBeNull(); + expect(report.reporter_good_faith_confirmed).toBeNull(); +} + +let seedSequence = 8_000_000_000_000_000_000n; + +function nextSeedId(): bigint { + seedSequence += 1n; + return seedSequence; +} + +function buildReportRow(overrides: Partial & Pick): IARSubmissionRow { + return { + reporter_id: null, + reporter_email: null, + reporter_full_legal_name: null, + reporter_country_of_residence: null, + reported_at: new Date(), + status: 0, + report_type: 0, + category: 'other', + additional_info: null, + reported_user_id: null, + reported_user_avatar_hash: null, + reported_guild_id: null, + reported_guild_name: null, + reported_guild_icon_hash: null, + reported_message_id: null, + reported_channel_id: null, + reported_channel_name: null, + message_context: null, + guild_context_id: null, + resolved_at: null, + resolved_by_admin_id: null, + public_comment: null, + audit_log_reason: null, + reported_guild_invite_code: null, + reported_guild_nsfw: null, + reported_guild_content_warning_level: null, + reported_guild_content_warning_text: null, + reported_channel_nsfw_override: null, + reported_channel_content_warning_level: null, + reported_channel_content_warning_text: null, + reported_channel_effective_nsfw: null, + reported_channel_effective_content_warning_level: null, + reported_channel_effective_content_warning_text: null, + reason: null, + flow_revision: null, + flow_steps: null, + flow_locale: null, + flow_surface: null, + reporter_good_faith_confirmed: null, + reported_webhook_id: null, + reported_webhook_name: null, + reported_webhook_avatar_hash: null, + reported_webhook_default_name: null, + reported_webhook_default_avatar_hash: null, + reported_webhook_type: null, + reported_webhook_application_id: null, + reported_webhook_channel_id: null, + reported_webhook_guild_id: null, + reported_webhook_created_at: null, + reported_webhook_creator_id: null, + reported_webhook_creator_username: null, + reported_webhook_creator_discriminator: null, + reported_webhook_creator_global_name: null, + reported_webhook_creator_avatar_hash: null, + ...overrides, + }; +} + +function buildContextRow(overrides: Partial): IARMessageContextRow { + return { + message_id: nextSeedId(), + channel_id: null, + author_id: null, + webhook_id: null, + author_username: 'context_author', + author_discriminator: 1234, + author_avatar_hash: null, + content: 'Context message', + timestamp: new Date(), + edited_timestamp: null, + type: 0, + flags: 0, + mention_everyone: false, + mention_users: null, + mention_roles: null, + mention_channels: null, + attachments: null, + embeds: null, + sticker_items: null, + ...overrides, + }; +} + +function buildAttachment(filename: string): MessageAttachment { + return { + attachment_id: createAttachmentID(nextSeedId()), + filename, + size: 2048n, + title: null, + description: null, + width: 640, + height: 480, + content_type: 'image/png', + content_hash: null, + placeholder: null, + flags: 0, + duration: null, + nsfw: false, + waveform: null, + }; +} + +async function seedReport(overrides: Partial = {}): Promise { + const row = buildReportRow({report_id: nextSeedId(), ...overrides}); + await new ReportRepository().createReport(row); + return row.report_id.toString(); +} + +async function setBotFlag(harness: ApiTestHarness, userId: string): Promise { + await createBuilderWithoutAuth(harness) + .post(`/test/users/${userId}/set-bot-flag`) + .body({is_bot: true}) + .expect(HTTP_STATUS.OK) + .execute(); +} + +async function issueDsaTicket(harness: ApiTestHarness): Promise { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-admin'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + return ticket; +} + +describe('Report flow admin', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness({search: 'enabled'}); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + describe('Search', () => { + test('the reason filter finds message and user flow reports', async () => { + const messages = await setupMessages(harness, 3); + const messageCsam = await submitMessageFlow(harness, messages, 0, MESSAGE_CSAM_WALK); + const messageTerrorism = await submitMessageFlow(harness, messages, 1, MESSAGE_TERRORISM_WALK); + const legacyChildSafety = await submitLegacyMessage(harness, messages, 2); + const reporter = await createTestAccount(harness); + const [csamTarget, harassmentTarget] = await Promise.all([ + createTestAccount(harness), + createTestAccount(harness), + ]); + const userCsam = await submitUserFlow(harness, reporter, csamTarget.userId, USER_CSAM_WALK); + const userHarassment = await submitUserFlow(harness, reporter, harassmentTarget.userId, USER_HARASSMENT_WALK); + const admin = await createReportAdmin(harness); + + const csam = await listReports(harness, admin, 'reason=csam'); + expect(reportIds(csam)).toEqual([messageCsam, userCsam].sort()); + expect(csam.total).toBe(2); + for (const report of csam.reports) { + expect(report.reason).toBe('csam'); + expect(report.reason_label).toBe('Child sexual abuse material'); + expect(report.reason_highest_priority).toBe(true); + expect(report.category).toBe('child_safety'); + } + expect(reportIds(await listReports(harness, admin, 'reason=csam&report_type=message'))).toEqual([messageCsam]); + expect(reportIds(await listReports(harness, admin, 'reason=csam&report_type=user'))).toEqual([userCsam]); + expect(reportIds(await listReports(harness, admin, 'reason=terrorism_extremism'))).toEqual([messageTerrorism]); + expect(reportIds(await listReports(harness, admin, 'reason=harassment'))).toEqual([userHarassment]); + expect(reportIds(await listReports(harness, admin, 'reason=raid'))).toEqual([]); + expect(reportIds(await listReports(harness, admin, 'category=child_safety'))).toEqual( + [messageCsam, userCsam, legacyChildSafety].sort(), + ); + + const searchService = getReportSearchService()!; + const {hits} = await searchService.searchReports('', {reason: 'csam'}); + expect(hits.map((hit) => hit.id).sort()).toEqual([messageCsam, userCsam].sort()); + expect(hits.every((hit) => hit.reason === 'csam')).toBe(true); + }); + + test('a free-text search for a reason key finds nothing', async () => { + const messages = await setupMessages(harness, 2); + const messageCsam = await submitMessageFlow(harness, messages, 0, MESSAGE_CSAM_WALK); + await submitMessageFlow(harness, messages, 1, MESSAGE_TERRORISM_WALK); + const admin = await createReportAdmin(harness); + for (const key of ['csam', 'terrorism_extremism']) { + const result = await listReports(harness, admin, `q=${key}`); + expect(result.reports).toEqual([]); + expect(result.total).toBe(0); + } + expect(reportIds(await listReports(harness, admin, 'q=child_safety'))).toEqual([messageCsam]); + }); + + test('a status filter with a reason uses the search index and records the reason', async () => { + const messages = await setupMessages(harness, 2); + const messageCsam = await submitMessageFlow(harness, messages, 0, MESSAGE_CSAM_WALK); + await submitLegacyMessage(harness, messages, 1); + const admin = await createReportAdmin(harness); + expect(reportIds(await listReports(harness, admin, 'status=pending'))).toHaveLength(2); + const before = new Set( + (await getAdminRepository().listAllAuditLogsPaginated(100000)).map((log) => log.logId.toString()), + ); + const filtered = await listReports(harness, admin, 'status=pending&reason=csam'); + expect(reportIds(filtered)).toEqual([messageCsam]); + expect(filtered.total).toBe(1); + const recorded = (await getAdminRepository().listAllAuditLogsPaginated(100000)).filter( + (log) => !before.has(log.logId.toString()), + ); + expect(recorded).toHaveLength(1); + expect(recorded[0].action).toBe(AdminAuditReadActions.SEARCH_REPORTS); + expect(Object.fromEntries(recorded[0].metadata)).toMatchObject({ + status: 'pending', + reason: 'csam', + sort_by: 'reported_at', + result_count: '1', + }); + }); + }); + + describe('Report detail', () => { + test('flow answers are described in English for a reporter who used German', async () => { + const messages = await setupMessages(harness, 1); + const reportId = await submitMessageFlow(harness, messages, 0, MESSAGE_PRIVATE_INFO_WALK, 'de'); + const admin = await createReportAdmin(harness); + const english = await fetchFlow(harness, 'message', 'en-US'); + const german = await fetchFlow(harness, 'message', 'de'); + const expectedSteps = describeWalk(english, MESSAGE_PRIVATE_INFO_WALK); + const germanSteps = describeWalk(german, MESSAGE_PRIVATE_INFO_WALK); + expect(germanSteps).not.toEqual(expectedSteps); + + const report = await getAdminReport(harness, admin, reportId); + expect(report.reason).toBe('doxxing'); + expect(report.reason_label).toBe(findReportReason('doxxing')!.label); + expect(report.reason_highest_priority).toBe(false); + expect(report.category).toBe('doxxing'); + expect(report.reporter_good_faith_confirmed).toBeNull(); + expect(report.flow).toEqual({ + revision_hash: currentHash('message'), + surface: 'in_app', + locale: 'de', + steps: expectedSteps, + }); + + const listed = await listReports(harness, admin, 'reason=doxxing'); + expect(listed.reports).toHaveLength(1); + expect(listed.reports[0].flow).toEqual(report.flow); + }); + + test('an info step is described with a null option and no items', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await submitUserFlow(harness, reporter, target.userId, USER_HARASSMENT_WALK, 'ja'); + const admin = await createReportAdmin(harness); + const english = await fetchFlow(harness, 'user', 'en-US'); + + const report = await getAdminReport(harness, admin, reportId); + expect(report.reason).toBe('harassment'); + expect(report.reason_label).toBe('Harassment or bullying'); + expect(report.category).toBe('harassment'); + expect(report.flow?.locale).toBe('ja'); + expect(report.flow?.steps).toEqual(describeWalk(english, USER_HARASSMENT_WALK)); + expect(report.flow?.steps[0]).toEqual({ + screen_id: 'profile_intro', + screen_title: english.screens.find((screen) => screen.id === 'profile_intro')!.title, + option_id: null, + option_label: null, + items: [], + }); + expect(report.flow?.steps[1].option_id).toBeNull(); + expect(report.flow?.steps[1].items.map((item) => item.id)).toEqual(['photo', 'profile_text']); + }); + + test('legacy reports return the new fields as null', async () => { + const messages = await setupMessages(harness, 1); + const legacyMessage = await submitLegacyMessage(harness, messages, 0); + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const legacyUser = await submitLegacyUser(harness, reporter, target.userId); + const admin = await createReportAdmin(harness); + + for (const reportId of [legacyMessage, legacyUser]) { + expectNoFlowFields(await getAdminReport(harness, admin, reportId)); + } + const listed = await listReports(harness, admin, 'status=pending'); + expect(reportIds(listed)).toEqual([legacyMessage, legacyUser].sort()); + for (const report of listed.reports) { + expectNoFlowFields(report); + } + const searched = await listReports(harness, admin, 'category=harassment'); + expect(reportIds(searched)).toEqual([legacyUser]); + expectNoFlowFields(searched.reports[0]); + }); + + test('unknown reason keys, screens and options fall back to raw ids', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await submitUserFlow(harness, reporter, target.userId, USER_HARASSMENT_WALK); + const repository = new ReportRepository(); + const stored = (await repository.getReport(createReportID(BigInt(reportId))))!; + await repository.createReport( + buildReportRow({ + report_id: BigInt(reportId), + reporter_id: BigInt(reporter.userId), + reported_at: stored.reportedAt, + report_type: 1, + reported_user_id: BigInt(target.userId), + reason: 'future_reason', + flow_revision: 'feedfacefeedface', + flow_steps: JSON.stringify([ + {screen_id: 'future_screen', option_id: 'future_option'}, + {screen_id: 'root_user', option_id: 'future_option'}, + {screen_id: 'profile_parts', item_ids: ['photo', 'future_item']}, + ]), + flow_surface: 'in_app', + }), + ); + const admin = await createReportAdmin(harness); + const english = await fetchFlow(harness, 'user', 'en-US'); + const screenTitle = (id: string) => english.screens.find((screen) => screen.id === id)!.title; + const photoLabel = english.screens + .find((screen) => screen.id === 'profile_parts')! + .checklist!.items.find((item) => item.id === 'photo')!.label; + + const report = await getAdminReport(harness, admin, reportId); + expect(report.reason).toBe('future_reason'); + expect(report.reason_label).toBe('future_reason'); + expect(report.reason_highest_priority).toBeNull(); + expect(report.flow).toEqual({ + revision_hash: 'feedfacefeedface', + surface: 'in_app', + locale: null, + steps: [ + { + screen_id: 'future_screen', + screen_title: 'future_screen', + option_id: 'future_option', + option_label: 'future_option', + items: [], + }, + { + screen_id: 'root_user', + screen_title: screenTitle('root_user'), + option_id: 'future_option', + option_label: 'future_option', + items: [], + }, + { + screen_id: 'profile_parts', + screen_title: screenTitle('profile_parts'), + option_id: null, + option_label: null, + items: [ + {id: 'photo', label: photoLabel}, + {id: 'future_item', label: 'future_item'}, + ], + }, + ], + }); + }); + + test('a DSA flow report shows the good-faith statement and the DSA surface', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const channel = await getChannel(harness, owner.token, guild.system_channel_id!); + const message = await sendChannelMessage(harness, members[0].token, channel.id, 'Reported on the DSA form'); + const ticket = await issueDsaTicket(harness); + const {report_id} = await createBuilderWithoutAuth(harness) + .post('/reports/dsa') + .body({ + ticket, + report_type: 'message', + message_link: `https://web.fluxer.app/channels/${guild.id}/${channel.id}/${message.id}`, + revision_hash: currentHash('message', 'dsa'), + steps: MESSAGE_CSAM_WALK, + good_faith_confirmed: true, + additional_info: 'This message shares child sexual abuse material.', + reporter_country_of_residence: 'DE', + locale: 'fr', + }) + .expect(HTTP_STATUS.OK) + .execute(); + const admin = await createReportAdmin(harness); + const report = await getAdminReport(harness, admin, report_id); + expect(report.reason).toBe('csam'); + expect(report.reason_highest_priority).toBe(true); + expect(report.reporter_good_faith_confirmed).toBe(true); + expect(report.flow?.surface).toBe('dsa'); + expect(report.flow?.locale).toBe('fr'); + expect(report.flow?.revision_hash).toBe(currentHash('message', 'dsa')); + expect(report.flow?.steps.map((step) => step.option_id)).toEqual(MESSAGE_CSAM_WALK.map((step) => step.option_id)); + }); + }); + + describe('Stored evidence', () => { + test('a context message with no channel is left out and the detail still parses', async () => { + const {owner, guild} = await setupTestGuildWithMembers(harness, 0); + const channelId = BigInt(guild.system_channel_id!); + const kept = buildContextRow({channel_id: channelId, author_id: BigInt(owner.userId)}); + const withoutChannel = buildContextRow({author_id: BigInt(owner.userId)}); + const reportId = await seedReport({ + reported_message_id: kept.message_id, + reported_user_id: BigInt(owner.userId), + message_context: [withoutChannel, kept], + }); + const admin = await createReportAdmin(harness); + + const report = await getAdminReport(harness, admin, reportId); + expect(report.reported_channel_id).toBeNull(); + expect(report.message_context?.map((message) => message.id)).toEqual([kept.message_id.toString()]); + for (const message of report.message_context ?? []) { + expect(message.channel_id).toMatch(/^(0|[1-9][0-9]*)$/); + } + expect(ReportAdminResponseSchema.safeParse(report).success).toBe(true); + }); + + test('a report whose context has no channel at all returns an empty context', async () => { + const reportId = await seedReport({message_context: [buildContextRow({}), buildContextRow({})]}); + const admin = await createReportAdmin(harness); + const report = await getAdminReport(harness, admin, reportId); + expect(report.message_context).toEqual([]); + expect(report.message_responses).toEqual([]); + expect(ReportAdminResponseSchema.safeParse(report).success).toBe(true); + }); + + test('bot flags are true for a bot, false for a person and null for a webhook', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const channelId = BigInt(guild.system_channel_id!); + const bot = members[0]; + await setBotFlag(harness, bot.userId); + const botMessage = buildContextRow({channel_id: channelId, author_id: BigInt(bot.userId)}); + const personMessage = buildContextRow({channel_id: channelId, author_id: BigInt(owner.userId)}); + const webhookMessage = buildContextRow({channel_id: channelId, webhook_id: nextSeedId()}); + const unknownMessage = buildContextRow({channel_id: channelId, author_id: nextSeedId()}); + const context = [botMessage, personMessage, webhookMessage, unknownMessage]; + const botReport = await seedReport({ + reported_user_id: BigInt(bot.userId), + reported_channel_id: channelId, + reported_message_id: botMessage.message_id, + message_context: context, + }); + const personReport = await seedReport({report_type: 1, reported_user_id: BigInt(owner.userId)}); + const guildReport = await seedReport({report_type: 2, reported_guild_id: BigInt(guild.id)}); + const unknownReport = await seedReport({report_type: 1, reported_user_id: nextSeedId()}); + const admin = await createReportAdmin(harness); + + const detail = await getAdminReport(harness, admin, botReport); + expect(detail.reported_user_bot).toBe(true); + expect(detail.message_context?.map((message) => [message.id, message.author_bot])).toEqual([ + [botMessage.message_id.toString(), true], + [personMessage.message_id.toString(), false], + [webhookMessage.message_id.toString(), null], + [unknownMessage.message_id.toString(), null], + ]); + expect(ReportAdminResponseSchema.safeParse(detail).success).toBe(true); + expect((await getAdminReport(harness, admin, personReport)).reported_user_bot).toBe(false); + expect((await getAdminReport(harness, admin, guildReport)).reported_user_bot).toBeNull(); + expect((await getAdminReport(harness, admin, unknownReport)).reported_user_bot).toBeNull(); + }); + + test('a listed report states whether the reported account is a bot', async () => { + const reporter = await createTestAccount(harness); + const [bot, person] = await Promise.all([createTestAccount(harness), createTestAccount(harness)]); + await setBotFlag(harness, bot.userId); + const botReport = await submitLegacyUser(harness, reporter, bot.userId); + const personReport = await submitLegacyUser(harness, reporter, person.userId); + const admin = await createReportAdmin(harness); + const listed = await listReports(harness, admin, 'status=pending'); + const flags = new Map(listed.reports.map((report) => [report.report_id, report.reported_user_bot])); + expect(flags.get(botReport)).toBe(true); + expect(flags.get(personReport)).toBe(false); + }); + + test('attachments that were not preserved are listed without a download URL', async () => { + const {owner, guild} = await setupTestGuildWithMembers(harness, 0); + const channelId = BigInt(guild.system_channel_id!); + const preserved = buildAttachment('kept.png'); + const missing = buildAttachment('lost.png'); + const withGap = buildContextRow({ + channel_id: channelId, + author_id: BigInt(owner.userId), + attachments: [preserved], + missing_attachments: [missing], + }); + const withoutGap = buildContextRow({channel_id: channelId, author_id: BigInt(owner.userId)}); + const reportId = await seedReport({ + reported_channel_id: channelId, + reported_message_id: withGap.message_id, + message_context: [withGap, withoutGap], + }); + const admin = await createReportAdmin(harness); + + const report = await getAdminReport(harness, admin, reportId); + const [first, second] = report.message_context ?? []; + expect(first.attachments.map((attachment) => attachment.filename)).toEqual(['kept.png']); + expect(first.attachments[0].url).toBe('https://presigned.url/test'); + expect(first.missing_attachments).toEqual([ + { + id: missing.attachment_id.toString(), + filename: 'lost.png', + nsfw: false, + content_type: 'image/png', + width: 640, + height: 480, + size: 2048, + }, + ]); + expect(second.attachments).toEqual([]); + expect(second.missing_attachments).toEqual([]); + expect(ReportAdminResponseSchema.safeParse(report).success).toBe(true); + }); + + test('a stored profile snapshot is returned with download URLs for the copied assets', async () => { + const target = await createTestAccount(harness); + const {guild} = await setupTestGuildWithMembers(harness, 0); + const reportIdValue = nextSeedId(); + const assetKey = (kind: string, hash: string) => `reports/${reportIdValue}/profile/${kind}/${hash}`; + const snapshot: ReportProfileSnapshot = { + captured_at: '2026-10-01T12:00:00.000Z', + user: { + id: target.userId, + username: 'name_at_report_time', + discriminator: 7, + global_name: 'Name At Report Time', + bio: 'Bio at report time', + pronouns: 'they/them', + avatar: {hash: 'avatarhash', key: assetKey('user_avatar', 'avatarhash')}, + banner: {hash: 'bannerhash', key: null}, + }, + member: { + guild_id: guild.id, + nick: 'Nick at report time', + bio: null, + pronouns: null, + joined_at: '2026-09-01T08:00:00.000Z', + avatar: {hash: 'memberavatar', key: assetKey('member_avatar', 'memberavatar')}, + banner: null, + }, + guild: null, + }; + const reportId = await seedReport({ + report_id: reportIdValue, + report_type: 1, + reported_user_id: BigInt(target.userId), + guild_context_id: BigInt(guild.id), + reported_profile_snapshot: serializeReportProfileSnapshot(snapshot), + }); + const admin = await createReportAdmin(harness); + harness.storageService.getPresignedDownloadURLSpy.mockClear(); + + const report = await getAdminReport(harness, admin, reportId); + expect(report.reported_profile_snapshot).toEqual({ + captured_at: '2026-10-01T12:00:00.000Z', + user: { + id: target.userId, + username: 'name_at_report_time', + discriminator: '0007', + global_name: 'Name At Report Time', + bio: 'Bio at report time', + pronouns: 'they/them', + avatar: {hash: 'avatarhash', url: 'https://presigned.url/test'}, + banner: {hash: 'bannerhash', url: null}, + }, + member: { + guild_id: guild.id, + nick: 'Nick at report time', + bio: null, + pronouns: null, + joined_at: '2026-09-01T08:00:00.000Z', + avatar: {hash: 'memberavatar', url: 'https://presigned.url/test'}, + banner: null, + }, + guild: null, + }); + expect(harness.storageService.getPresignedDownloadURLSpy.mock.calls.map(([params]) => params)).toEqual([ + {bucket: Config.s3.buckets.reports, key: assetKey('user_avatar', 'avatarhash'), expiresIn: 300}, + {bucket: Config.s3.buckets.reports, key: assetKey('member_avatar', 'memberavatar'), expiresIn: 300}, + ]); + expect(ReportAdminResponseSchema.safeParse(report).success).toBe(true); + }); + + test('a community snapshot is returned and a report without one returns null', async () => { + const {guild} = await setupTestGuildWithMembers(harness, 0); + const reportIdValue = nextSeedId(); + const iconKey = `reports/${reportIdValue}/profile/guild_icon/iconhash`; + const withSnapshot = await seedReport({ + report_id: reportIdValue, + report_type: 2, + reported_guild_id: BigInt(guild.id), + reported_profile_snapshot: serializeReportProfileSnapshot({ + captured_at: '2026-10-01T12:00:00.000Z', + user: null, + member: null, + guild: { + id: guild.id, + name: 'Name at report time', + vanity_url_code: null, + icon: {hash: 'iconhash', key: iconKey}, + banner: null, + splash: null, + }, + }), + }); + const withoutSnapshot = await seedReport({report_type: 2, reported_guild_id: BigInt(guild.id)}); + const unreadable = await seedReport({ + report_type: 2, + reported_guild_id: BigInt(guild.id), + reported_profile_snapshot: '{"captured_at":', + }); + const admin = await createReportAdmin(harness); + + expect((await getAdminReport(harness, admin, withSnapshot)).reported_profile_snapshot).toEqual({ + captured_at: '2026-10-01T12:00:00.000Z', + user: null, + member: null, + guild: { + id: guild.id, + name: 'Name at report time', + vanity_url_code: null, + icon: {hash: 'iconhash', url: 'https://presigned.url/test'}, + banner: null, + splash: null, + }, + }); + expect((await getAdminReport(harness, admin, withoutSnapshot)).reported_profile_snapshot).toBeNull(); + expect((await getAdminReport(harness, admin, unreadable)).reported_profile_snapshot).toBeNull(); + }); + + test('a listed report has no profile snapshot field', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await submitLegacyUser(harness, reporter, target.userId); + const admin = await createReportAdmin(harness); + const listed = await listReports(harness, admin, 'status=pending'); + expect(reportIds(listed)).toEqual([reportId]); + expect('reported_profile_snapshot' in listed.reports[0]).toBe(false); + expect('message_context' in listed.reports[0]).toBe(false); + }); + }); + + describe('Reporter contact details', () => { + test('the reporter email shown is the one on the reporter account', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const filed = await submitLegacyUser(harness, reporter, target.userId); + const seeded = await seedReport({ + report_type: 1, + reporter_id: BigInt(reporter.userId), + reporter_email: 'address-at-report-time@example.com', + reported_user_id: BigInt(target.userId), + }); + const admin = await createReportAdmin(harness, ['admin:authenticate', 'report:view', 'report:view:reporter_pii']); + const adminWithoutContact = await createReportAdmin(harness); + + for (const reportId of [filed, seeded]) { + expect((await getAdminReport(harness, admin, reportId)).reporter_email).toBe(reporter.email); + expect((await getAdminReport(harness, adminWithoutContact, reportId)).reporter_email).toBeNull(); + } + const listed = await listReports(harness, admin, 'status=pending'); + expect(listed.reports.map((report) => report.reporter_email)).toEqual([reporter.email]); + expect((await listReports(harness, adminWithoutContact, 'status=pending')).reports[0].reporter_email).toBeNull(); + }); + + test('a report from a deleted account shows no reporter email', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const filed = await submitLegacyUser(harness, reporter, target.userId); + const seeded = await seedReport({ + report_type: 1, + reporter_id: BigInt(reporter.userId), + reporter_email: reporter.email, + reported_user_id: BigInt(target.userId), + }); + const admin = await createReportAdmin(harness, ['admin:authenticate', 'report:view', 'report:view:reporter_pii']); + expect((await getAdminReport(harness, admin, filed)).reporter_email).toBe(reporter.email); + + await deleteAccount(harness, reporter.token, reporter.password); + await setPendingDeletionAt(harness, reporter.userId, new Date(Date.now() - 60_000)); + await createBuilderWithoutAuth(harness) + .post(`/test/worker/process-pending-deletion/${reporter.userId}`) + .expect(HTTP_STATUS.OK) + .execute(); + + for (const reportId of [filed, seeded]) { + const report = await getAdminReport(harness, admin, reportId); + expect(report.reporter_id).toBe(reporter.userId); + expect(report.reporter_email).toBeNull(); + expect(JSON.stringify(report)).not.toContain(reporter.email); + } + }); + + test('a report from an account that no longer exists shows no reporter email', async () => { + const seeded = await seedReport({ + report_type: 1, + reporter_id: nextSeedId(), + reporter_email: 'address-at-report-time@example.com', + }); + const admin = await createReportAdmin(harness, ['admin:authenticate', 'report:view', 'report:view:reporter_pii']); + expect((await getAdminReport(harness, admin, seeded)).reporter_email).toBeNull(); + }); + + test('a DSA report keeps the email the reporter verified', async () => { + const seeded = await seedReport({ + report_type: 1, + reporter_email: 'dsa-reporter@example.com', + reporter_full_legal_name: 'Dana Reporter', + reporter_country_of_residence: 'DE', + }); + const admin = await createReportAdmin(harness, ['admin:authenticate', 'report:view', 'report:view:reporter_pii']); + const adminWithoutContact = await createReportAdmin(harness); + const report = await getAdminReport(harness, admin, seeded); + expect(report.reporter_id).toBeNull(); + expect(report.reporter_email).toBe('dsa-reporter@example.com'); + expect(report.reporter_full_legal_name).toBe('Dana Reporter'); + expect((await getAdminReport(harness, adminWithoutContact, seeded)).reporter_email).toBeNull(); + }); + }); + + describe('GET /admin/report-reasons', () => { + test('requires report:view', async () => { + const admin = await createReportAdmin(harness, ['admin:authenticate']); + await createBuilder(harness, admin.token) + .get('/admin/report-reasons') + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.MISSING_ACL) + .execute(); + }); + + test('lists every reason with its English label, priority and legacy categories', async () => { + const admin = await createReportAdmin(harness); + const response = await createBuilder(harness, admin.token) + .get('/admin/report-reasons') + .expect(HTTP_STATUS.OK) + .execute(); + expect(response.reasons).toEqual( + listReportReasons().map((reason) => ({ + key: reason.key, + label: reason.label, + highest_priority: reason.highestPriority, + legacy_category_message: reason.legacyCategories.message, + legacy_category_user: reason.legacyCategories.user, + legacy_category_guild: reason.legacyCategories.guild, + })), + ); + expect(new Set(response.reasons.map((reason) => reason.key)).size).toBe(response.reasons.length); + expect(response.reasons.find((reason) => reason.key === 'csam')).toEqual({ + key: 'csam', + label: 'Child sexual abuse material', + highest_priority: true, + legacy_category_message: 'child_safety', + legacy_category_user: 'child_safety', + legacy_category_guild: 'child_safety', + }); + expect(response.reasons.find((reason) => reason.key === 'raid')).toMatchObject({ + legacy_category_message: 'harassment', + legacy_category_guild: 'raid_coordination', + }); + }); + + test('writes a list_report_reasons read audit entry', async () => { + const admin = await createReportAdmin(harness); + const before = new Set( + (await getAdminRepository().listAllAuditLogsPaginated(100000)).map((log) => log.logId.toString()), + ); + await createBuilder(harness, admin.token).get('/admin/report-reasons').expect(HTTP_STATUS.OK).execute(); + const recorded = (await getAdminRepository().listAllAuditLogsPaginated(100000)).filter( + (log) => !before.has(log.logId.toString()), + ); + expect(recorded).toHaveLength(1); + expect(recorded[0].action).toBe('list_report_reasons'); + expect(recorded[0].targetType).toBe('report'); + expect(recorded[0].adminUserId.toString()).toBe(admin.userId); + expect(Object.fromEntries(recorded[0].metadata)).toEqual({ + result_count: String(listReportReasons().length), + }); + }); + + test('shares the admin lookup rate limit bucket', async () => { + const admin = await createReportAdmin(harness); + await createBuilder(harness, admin.token) + .get('/admin/report-reasons') + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.OK) + .execute(); + const bucket = `user:${admin.userId}:session:${RateLimitConfigs.ADMIN_LOOKUP.bucket}`; + const rateLimitService = getRateLimitService(); + for (let attempt = 0; attempt < RateLimitConfigs.ADMIN_LOOKUP.config.limit * 2; attempt++) { + const result = await rateLimitService.checkBucketLimit(bucket, { + ...RateLimitConfigs.ADMIN_LOOKUP.config, + algorithm: 'leaky_bucket', + }); + if (!result.allowed) break; + } + await createBuilder(harness, admin.token) + .get('/admin/report-reasons') + .header(RATE_LIMIT_HEADER, 'true') + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + await createBuilder(harness, admin.token) + .get('/admin/reports?reason=csam') + .header(RATE_LIMIT_HEADER, 'true') + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + }); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportFlowCatalog.test.ts b/fluxer_api/src/api/report/tests/ReportFlowCatalog.test.ts new file mode 100644 index 000000000..88143eaf5 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportFlowCatalog.test.ts @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import fs from 'node:fs'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {getContentMessage} from '@app/api/content_i18n/ContentI18n'; +import {CONTENT_I18N_LOCALE_MESSAGES} from '@app/api/content_i18n/ContentI18nLocales'; +import {CONTENT_I18N_MESSAGES, type ContentI18nKey} from '@app/api/content_i18n/ContentI18nMessages'; +import {getReportFlowResponse} from '@app/api/report/flows/ReportFlowRegistry'; +import {extractMessageTemplateVariables} from '@fluxer/i18n/src/runtime/MessageCatalogTypes'; +import type { + ReportFlowResponse, + ReportFlowSurface, + ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import {describe, expect, test} from 'vitest'; + +const CONTENT_I18N_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), '../../content_i18n'); +const WEBLATE_DIR = path.join(CONTENT_I18N_DIR, 'weblate'); +const REVIEWED_UNCHANGED_PATH = path.join(CONTENT_I18N_DIR, 'locales/auto-i18n-reviewed-unchanged.json'); +const ENGLISH_VARIANT_LOCALES = new Set(['en-GB']); +const US_SPELLINGS = /behavior|organiz|labeled/i; +const PROBE_PRODUCT_NAME = 'Zyxquor'; + +const VARIANTS: ReadonlyArray<[ReportFlowTargetType, ReportFlowSurface]> = [ + ['message', 'in_app'], + ['message', 'dsa'], + ['user', 'in_app'], + ['user', 'dsa'], + ['guild', 'dsa'], +]; + +type FlatCatalog = Record; + +interface ReviewedUnchangedFile { + version: number; + locales: Record>; +} + +const SOURCE = CONTENT_I18N_MESSAGES as FlatCatalog; +const REPORT_FLOW_KEYS = Object.keys(SOURCE) + .filter((key) => key.startsWith('report_flow.')) + .sort(); +const COMPILED = CONTENT_I18N_LOCALE_MESSAGES as Record; +const LOCALES = Object.keys(COMPILED).sort(); +const NON_ENGLISH_LOCALES = LOCALES.filter((locale) => !ENGLISH_VARIANT_LOCALES.has(locale)); + +function readJson(filePath: string): T { + return JSON.parse(fs.readFileSync(filePath, 'utf8')) as T; +} + +function readReviewedUnchanged(): Set { + const file = readJson(REVIEWED_UNCHANGED_PATH); + const entries = new Set(); + for (const [locale, items] of Object.entries(file.locales)) { + for (const item of items) { + entries.add(`${locale}:${item.msgctxt}`); + } + } + return entries; +} + +function collectStrings(response: ReportFlowResponse): Array<[string, string]> { + const strings: Array<[string, string]> = []; + for (const screen of response.screens) { + strings.push([`${screen.id}.title`, screen.title]); + if (screen.subtitle !== null) { + strings.push([`${screen.id}.subtitle`, screen.subtitle]); + } + if (screen.options_heading !== null) { + strings.push([`${screen.id}.options_heading`, screen.options_heading]); + } + for (const option of screen.options) { + strings.push([`${screen.id}.${option.id}`, option.label]); + } + for (const item of screen.checklist?.items ?? []) { + strings.push([`${screen.id}.${item.id}`, item.label]); + if (item.description !== null) { + strings.push([`${screen.id}.${item.id}.description`, item.description]); + } + } + } + for (const notice of response.notices) { + strings.push([`${notice.id}.title`, notice.title], [`${notice.id}.body`, notice.body]); + } + return strings; +} + +describe('report flow menu translations', () => { + test('ships all 33 locales with the report flow keys', () => { + expect(LOCALES).toHaveLength(33); + expect(REPORT_FLOW_KEYS.length).toBeGreaterThan(150); + }); + + test('weblate/messages.json matches the English source for every report flow key', () => { + const weblate = readJson(path.join(WEBLATE_DIR, 'messages.json')); + const problems = REPORT_FLOW_KEYS.filter((key) => weblate[key] !== SOURCE[key]); + const stale = Object.keys(weblate).filter((key) => key.startsWith('report_flow.') && !(key in SOURCE)); + expect([...problems, ...stale]).toEqual([]); + }); + + test('every locale has every key in both the Weblate JSON and the compiled module, and they agree', () => { + const problems: Array = []; + for (const locale of LOCALES) { + const weblate = readJson(path.join(WEBLATE_DIR, 'locales', `${locale}.json`)); + const compiled = COMPILED[locale]; + for (const key of REPORT_FLOW_KEYS) { + const translated = weblate[key]; + const shipped = compiled[key]; + if (typeof translated !== 'string' || translated.trim() === '') { + problems.push(`${locale} / ${key}: missing or empty in weblate/locales/${locale}.json`); + } + if (typeof shipped !== 'string' || shipped.trim() === '') { + problems.push(`${locale} / ${key}: missing or empty in locales/${locale}.ts`); + } + if (translated !== shipped) { + problems.push(`${locale} / ${key}: JSON and compiled module disagree`); + } + } + } + expect(problems).toEqual([]); + }); + + test('non-English locales never ship the English source unless it was reviewed as correct', () => { + const reviewed = readReviewedUnchanged(); + const problems: Array = []; + for (const locale of NON_ENGLISH_LOCALES) { + for (const key of REPORT_FLOW_KEYS) { + if (COMPILED[locale][key] === SOURCE[key] && !reviewed.has(`${locale}:${key}`)) { + problems.push(`${locale} / ${key}: ships the English "${SOURCE[key]}"`); + } + } + } + expect(problems).toEqual([]); + }); + + test('reviewed-unchanged entries still match the English source they were reviewed against', () => { + const file = readJson(REVIEWED_UNCHANGED_PATH); + const problems: Array = []; + for (const [locale, items] of Object.entries(file.locales)) { + for (const item of items) { + if (!item.msgctxt.startsWith('report_flow.')) { + continue; + } + if (SOURCE[item.msgctxt] !== item.msgid || COMPILED[locale]?.[item.msgctxt] !== item.msgid) { + problems.push(`${locale} / ${item.msgctxt}`); + } + } + } + expect(problems).toEqual([]); + }); + + test('en-GB uses British spelling wherever the US source does not', () => { + const problems = REPORT_FLOW_KEYS.filter( + (key) => US_SPELLINGS.test(SOURCE[key]) && US_SPELLINGS.test(COMPILED['en-GB'][key]), + ); + expect(problems).toEqual([]); + }); + + test('every translation keeps the ICU variables of its source and renders the product name', () => { + const problems: Array = []; + for (const key of REPORT_FLOW_KEYS) { + const expected = [...extractMessageTemplateVariables(SOURCE[key])].sort(); + for (const locale of ['en-US', ...LOCALES]) { + const template = locale === 'en-US' ? SOURCE[key] : COMPILED[locale][key]; + const variables = [...extractMessageTemplateVariables(template)].sort(); + if (variables.join() !== expected.join()) { + problems.push(`${locale} / ${key}: variables ${variables.join()} instead of ${expected.join()}`); + continue; + } + const rendered = getContentMessage(key as ContentI18nKey, locale, {product_name: PROBE_PRODUCT_NAME} as never); + const mentionsProduct = rendered.includes(PROBE_PRODUCT_NAME); + if (rendered === key || /[{}]/.test(rendered) || mentionsProduct !== expected.includes('product_name')) { + problems.push(`${locale} / ${key}: renders as "${rendered}"`); + } + } + } + expect(problems).toEqual([]); + }); + + test('the adult content hints quote the exact minor option label in every locale', () => { + const pairs = [ + ['report_flow.screen.sexual.subtitle', 'report_flow.label.minor_sexual'], + ['report_flow.screen.sexual_guild.subtitle', 'report_flow.label.minor_sexual_guild'], + ['report_flow.screen.private_info.subtitle', 'report_flow.label.minor_sexual'], + ] as const; + const problems: Array = []; + for (const locale of ['en-US', ...LOCALES]) { + const catalog = locale === 'en-US' ? SOURCE : COMPILED[locale]; + for (const [subtitleKey, labelKey] of pairs) { + const label = catalog[labelKey].replace(/[.。]$/, '').toLowerCase(); + if (!catalog[subtitleKey].toLowerCase().includes(label)) { + problems.push(`${locale} / ${subtitleKey}`); + } + } + } + expect(problems).toEqual([]); + }); + + test('rendered menus contain no English copy in any non-English locale', () => { + const reviewed = readReviewedUnchanged(); + const reviewedTexts = new Map>(); + for (const entry of reviewed) { + const [locale, key] = entry.split(/:(.*)/s); + if (SOURCE[key] !== undefined) { + const texts = reviewedTexts.get(locale) ?? new Set(); + texts.add(SOURCE[key]); + reviewedTexts.set(locale, texts); + } + } + const problems: Array = []; + for (const [target, surface] of VARIANTS) { + const english = new Map(collectStrings(getReportFlowResponse(target, surface, 'en-US'))); + expect(english.size).toBeGreaterThan(0); + for (const locale of NON_ENGLISH_LOCALES) { + const response = getReportFlowResponse(target, surface, locale); + expect(response.locale).toBe(locale); + for (const [id, text] of collectStrings(response)) { + if (text === english.get(id) && !reviewedTexts.get(locale)?.has(text)) { + problems.push(`${target}/${surface} ${locale} ${id}: "${text}"`); + } + } + } + } + expect(problems).toEqual([]); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportFlowDsa.test.ts b/fluxer_api/src/api/report/tests/ReportFlowDsa.test.ts new file mode 100644 index 000000000..aacd479b1 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportFlowDsa.test.ts @@ -0,0 +1,764 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { + clearTestEmails, + createTestAccount, + createUniqueEmail, + findLastTestEmail, + listTestEmails, +} from '@app/api/auth/tests/AuthTestUtils'; +import {createReportID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {loadFixture, sendMessageWithAttachments} from '@app/api/channel/tests/AttachmentTestUtils'; +import { + createChannel, + createDmChannel, + createFriendship, + createGroupDmChannel, + createPermissionOverwrite, + getChannel, + sendChannelMessage, + setupTestGuildWithMembers, +} from '@app/api/channel/tests/ChannelTestUtils'; +import {resetActivityEventsForTests, startActivityEvents} from '@app/api/infrastructure/activity/ActivityEvents'; +import type {ActivityPublisher} from '@app/api/infrastructure/activity/ActivitySpool'; +import {phraseBlocklistCache} from '@app/api/middleware/PhraseBlocklistCache'; +import {urlBlocklistCache} from '@app/api/middleware/UrlBlocklistCache'; +import { + getReportFlowVariant, + type ReportFlowStepInput, + resolveReportFlowAnswers, +} from '@app/api/report/flows/ReportFlowRegistry'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {MockKVProvider} from '@app/api/test/mocks/MockKVProvider'; +import {HTTP_STATUS, TEST_IDS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {UserRepository} from '@app/api/user/repositories/UserRepository'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {Permissions} from '@fluxer/constants/src/ChannelConstants'; +import type {ReportFlowResponse, ReportFlowTargetType} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import {TestEmailService} from '@pkgs/email/src/TestEmailService'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; + +interface ReportResponse { + report_id: string; + status: string; + reported_at: string; +} + +interface ErrorResponse { + code: string; + step_index?: number; + errors?: Array<{path: string; code: string}>; +} + +interface Ticket { + email: string; + ticket: string; +} + +const HATE_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'hate'}, + {screen_id: 'hate', option_id: 'hate_incitement'}, +]; + +const HARASSMENT_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'harassment'}, + {screen_id: 'harassment', option_id: 'harassment_direct'}, +]; + +const CSAM_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'sexual'}, + {screen_id: 'sexual', option_id: 'minor_sexual'}, + {screen_id: 'minor_sexual', option_id: 'csam'}, +]; + +const COPYRIGHT_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'copyright_notice'}, +]; + +const RAID_WALK: ReadonlyArray = [ + {screen_id: 'community_parts', item_ids: ['activity']}, + {screen_id: 'root_guild', option_id: 'abuse'}, + {screen_id: 'abuse_guild', option_id: 'raid'}, +]; + +class CapturingPublisher implements ActivityPublisher { + readonly payloads: Array = []; + + async publish(_subject: string, payload: string): Promise { + this.payloads.push(payload); + } +} + +function dsaHash(target: ReportFlowTargetType): string { + return getReportFlowVariant(target, 'dsa').revisionHash; +} + +function dsaSteps(target: ReportFlowTargetType, steps: ReadonlyArray) { + return resolveReportFlowAnswers({target, surface: 'dsa', revisionHash: dsaHash(target), steps}).steps; +} + +async function readReport(reportId: string) { + const report = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + if (!report) { + throw new Error(`Report ${reportId} was not stored`); + } + return report; +} + +async function countReports(): Promise { + return (await new ReportRepository().listAllReportsPaginated(100)).length; +} + +async function issueTicket(harness: ApiTestHarness): Promise { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-flow'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + return {email, ticket}; +} + +async function setupMessageLink(harness: ApiTestHarness): Promise<{link: string; authorId: string; guildId: string}> { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const channel = await getChannel(harness, owner.token, guild.system_channel_id!); + const message = await sendChannelMessage(harness, members[0].token, channel.id, 'Reported on the DSA form'); + return { + link: `https://web.fluxer.app/channels/${guild.id}/${channel.id}/${message.id}`, + authorId: members[0].userId, + guildId: guild.id, + }; +} + +function messageFlowBody(ticket: string, link: string, steps: ReadonlyArray, extra = {}) { + return { + ticket, + report_type: 'message', + message_link: link, + revision_hash: dsaHash('message'), + steps, + good_faith_confirmed: true, + additional_info: 'This message calls for violence against a group of people.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'DE', + ...extra, + }; +} + +function submitDsa(harness: ApiTestHarness, body: unknown) { + return createBuilderWithoutAuth(harness).post('/reports/dsa').body(body); +} + +function guildFlowBody(ticket: string, guildId: string) { + return { + ticket, + report_type: 'guild', + guild_id: guildId, + revision_hash: dsaHash('guild'), + steps: RAID_WALK, + good_faith_confirmed: true, + additional_info: 'This community organizes raids on other communities.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'NL', + }; +} + +async function listReceipts(harness: ApiTestHarness) { + return (await listTestEmails(harness)).filter((sent) => sent.type === 'report_received'); +} + +async function fetchTag(harness: ApiTestHarness, token: string): Promise { + const me = await createBuilder<{username: string; discriminator: string}>(harness, token) + .get('/users/@me') + .expect(HTTP_STATUS.OK) + .execute(); + return `${me.username}#${me.discriminator}`; +} + +async function sendThree(harness: ApiTestHarness, token: string, channelId: string): Promise> { + const ids: Array = []; + for (const content of ['Before the reported message', 'The reported message', 'After the reported message']) { + ids.push((await sendChannelMessage(harness, token, channelId, content)).id); + } + return ids; +} + +async function storedContextIds(reportId: string): Promise> { + const report = await readReport(reportId); + return (report.messageContext ?? []).map((entry) => entry.messageId.toString()); +} + +describe('DSA report flow', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness({search: 'enabled'}); + }); + + afterEach(async () => { + vi.restoreAllMocks(); + resetActivityEventsForTests(); + await harness?.shutdown(); + }); + + test('a verified reporter files a message notice from the DSA flow', async () => { + const {email, ticket} = await issueTicket(harness); + const flow = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message?surface=dsa&locale=de') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.surface).toBe('dsa'); + expect(flow.revision_hash).toBe(dsaHash('message')); + const target = await setupMessageLink(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, target.link, HATE_WALK, {revision_hash: flow.revision_hash, locale: 'de'}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect(result.status).toBe('pending'); + const report = await readReport(result.report_id); + expect(report.reason).toBe('hate_incitement'); + expect(report.category).toBe('hate_speech'); + expect(report.flowSteps).toEqual(dsaSteps('message', HATE_WALK)); + expect(report.flowRevision).toBe(flow.revision_hash); + expect(report.flowLocale).toBe('de'); + expect(report.flowSurface).toBe('dsa'); + expect(report.reporterGoodFaithConfirmed).toBe(true); + expect(report.reporterFullLegalName).toBe('Jane Doe'); + expect(report.reporterEmail).toBe(email); + expect(report.reporterId).toBeNull(); + expect(report.reportedUserId?.toString()).toBe(target.authorId); + }); + + test('the locale falls back to the request locale', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK)) + .header('Accept-Language', 'fr') + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(result.report_id)).flowLocale).toBe('fr'); + }); + + test('steps need the good-faith statement and an explanation', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const valid = messageFlowBody(ticket, target.link, HATE_WALK); + const {good_faith_confirmed: _goodFaith, ...withoutGoodFaith} = valid; + const {revision_hash: _hash, ...withoutHash} = valid; + const cases: Array<[unknown, string]> = [ + [withoutGoodFaith, 'good_faith_confirmed'], + [{...valid, good_faith_confirmed: false}, 'good_faith_confirmed'], + [{...valid, additional_info: ''}, 'additional_info'], + [{...valid, additional_info: ' '}, 'additional_info'], + [withoutHash, 'revision_hash'], + ]; + for (const [body, path] of cases) { + const error = await submitDsa(harness, body) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect( + error.errors?.map((entry) => entry.path), + path, + ).toContain(path); + } + await submitDsa(harness, valid).expect(HTTP_STATUS.OK).execute(); + }); + + test('the legal name is required unless the walk is about child sexual abuse', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const error = await submitDsa( + harness, + messageFlowBody(ticket, target.link, HARASSMENT_WALK, {reporter_full_legal_name: undefined}), + ) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect(error.errors?.map((entry) => entry.path)).toEqual(['reporter_full_legal_name']); + expect(await countReports()).toBe(0); + const result = await submitDsa( + harness, + messageFlowBody(ticket, target.link, CSAM_WALK, {reporter_full_legal_name: undefined}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reporterFullLegalName).toBeNull(); + expect(report.reason).toBe('csam'); + expect(report.category).toBe('child_safety'); + }); + + test('a legacy body is stored as before', async () => { + const {ticket} = await issueTicket(harness); + const user = await createTestAccount(harness); + const result = await submitDsa(harness, { + ticket, + report_type: 'user', + category: 'harassment', + user_id: user.userId, + reporter_full_legal_name: 'John Doe', + reporter_country_of_residence: 'SE', + additional_info: 'Legacy notice', + }) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.category).toBe('harassment'); + expect(report.additionalInfo).toBe('Legacy notice'); + expect(report.reporterFullLegalName).toBe('John Doe'); + expect(report.reason).toBeNull(); + expect(report.flowRevision).toBeNull(); + expect(report.flowSteps).toBeNull(); + expect(report.flowLocale).toBeNull(); + expect(report.flowSurface).toBeNull(); + expect(report.reporterGoodFaithConfirmed).toBeNull(); + }); + + test('a legacy body still needs its category and legal name', async () => { + const {ticket} = await issueTicket(harness); + const user = await createTestAccount(harness); + const legacy = { + ticket, + report_type: 'user', + category: 'harassment', + user_id: user.userId, + reporter_full_legal_name: 'John Doe', + reporter_country_of_residence: 'SE', + }; + const {category: _category, ...withoutCategory} = legacy; + const {reporter_full_legal_name: _name, ...withoutName} = legacy; + for (const [body, path] of [ + [withoutCategory, 'category'], + [withoutName, 'reporter_full_legal_name'], + ] as const) { + const error = await submitDsa(harness, body) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect(error.errors?.map((entry) => entry.path)).toContain(path); + } + await submitDsa(harness, legacy).expect(HTTP_STATUS.OK).execute(); + }); + + test('a category sent next to the steps is ignored', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK, {category: 'spam'})) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.category).toBe('hate_speech'); + expect(report.reason).toBe('hate_incitement'); + }); + + test('a bad walk keeps the ticket', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const inAppOnly = await submitDsa( + harness, + messageFlowBody(ticket, target.link, [{screen_id: 'root_message', option_id: 'dislike'}]), + ) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + expect(inAppOnly.step_index).toBe(0); + const welfare = await submitDsa( + harness, + messageFlowBody(ticket, target.link, [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'self_harm'}, + {screen_id: 'self_harm', option_id: 'worried_self_harm'}, + ]), + ) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + expect(welfare.step_index).toBe(2); + const inAppHash = getReportFlowVariant('message', 'in_app').revisionHash; + await submitDsa( + harness, + messageFlowBody(ticket, target.link, [{screen_id: 'root_message', option_id: 'dislike'}], { + revision_hash: inAppHash, + }), + ) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.REPORT_FLOW_OUTDATED) + .execute(); + expect(await countReports()).toBe(0); + await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK)) + .expect(HTTP_STATUS.OK) + .execute(); + }); + + test('a stale hash with a valid walk is accepted', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, target.link, HATE_WALK, {revision_hash: 'ffffffffffffffff'}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(result.report_id)).flowRevision).toBe('ffffffffffffffff'); + }); + + test('a copyright notice stores the copyright reason', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa(harness, messageFlowBody(ticket, target.link, COPYRIGHT_WALK)) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reason).toBe('copyright'); + expect(report.category).toBe('other'); + }); + + test('a user notice starts at the profile parts', async () => { + const {ticket} = await issueTicket(harness); + const user = await createTestAccount(harness); + const steps: ReadonlyArray = [ + {screen_id: 'profile_parts', item_ids: ['name']}, + {screen_id: 'root_user', option_id: 'impersonation'}, + {screen_id: 'impersonation', option_id: 'impersonation_staff'}, + ]; + const result = await submitDsa(harness, { + ticket, + report_type: 'user', + user_id: user.userId, + revision_hash: dsaHash('user'), + steps, + good_faith_confirmed: true, + additional_info: 'This account pretends to be staff.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'FR', + }) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reason).toBe('impersonation_staff'); + expect(report.category).toBe('impersonation'); + expect(report.flowSteps).toEqual(dsaSteps('user', steps)); + expect(report.flowSurface).toBe('dsa'); + }); + + test('a community notice stores the raid reason', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa(harness, guildFlowBody(ticket, target.guildId)).expect(HTTP_STATUS.OK).execute(); + const report = await readReport(result.report_id); + expect(report.reason).toBe('raid'); + expect(report.category).toBe('raid_coordination'); + expect(report.flowSteps).toEqual(dsaSteps('guild', RAID_WALK)); + expect(report.reportedGuildId?.toString()).toBe(target.guildId); + }); + + test('a community notice publishes report_filed under the zero key', async () => { + const publisher = new CapturingPublisher(); + await startActivityEvents({publisher, kv: new MockKVProvider()}); + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const result = await submitDsa(harness, guildFlowBody(ticket, target.guildId)).expect(HTTP_STATUS.OK).execute(); + const filed = () => + publisher.payloads + .map((payload) => JSON.parse(payload) as {kind: string; key: string; data: Record}) + .filter((event) => event.kind === 'report_filed'); + await vi.waitFor(() => expect(filed()).toHaveLength(1)); + const [event] = filed(); + expect(event.key).toBe('0'); + expect(event.data).toEqual({ + report_id: result.report_id, + reporter_id: '0', + category: 'raid_coordination', + target_type: 'dsa', + reported_user_id: null, + guild_id: target.guildId, + message_id: null, + channel_id: null, + }); + }); + + test('a reporter username sent by an older form is ignored', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const account = await createTestAccount(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, target.link, HATE_WALK, {reporter_fluxer_tag: await fetchTag(harness, account.token)}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reporterId).toBeNull(); + expect(report.reportedUserId?.toString()).toBe(target.authorId); + }); + + test('a filed notice sends one receipt to the verified address', async () => { + const account = await createTestAccount(harness); + const target = await setupMessageLink(harness); + const bodies: Array<[string, (ticket: string) => unknown]> = [ + ['message', (ticket) => messageFlowBody(ticket, target.link, HATE_WALK)], + ['guild', (ticket) => guildFlowBody(ticket, target.guildId)], + [ + 'user', + (ticket) => ({ + ticket, + report_type: 'user', + category: 'harassment', + user_id: account.userId, + reporter_full_legal_name: 'John Doe', + reporter_country_of_residence: 'SE', + }), + ], + ]; + for (const [kind, body] of bodies) { + const {email, ticket} = await issueTicket(harness); + expect(await listReceipts(harness)).toEqual([]); + const result = await submitDsa(harness, body(ticket)).expect(HTTP_STATUS.OK).execute(); + const receipts = await listReceipts(harness); + expect(receipts).toHaveLength(1); + expect(receipts[0].to).toBe(email.toLowerCase()); + expect(receipts[0].metadata).toEqual({report_id: result.report_id, target_kind: kind}); + } + }); + + test('a refused notice sends no receipt', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + await submitDsa(harness, messageFlowBody(ticket, target.link, [{screen_id: 'root_message', option_id: 'dislike'}])) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + expect(await listReceipts(harness)).toEqual([]); + }); + + test('a notice is filed even when its receipt cannot be sent', async () => { + const target = await setupMessageLink(harness); + const send = vi.spyOn(TestEmailService.prototype, 'sendReportReceivedEmail'); + send.mockRejectedValueOnce(new Error('mail transport is down')); + const first = await issueTicket(harness); + const thrown = await submitDsa(harness, messageFlowBody(first.ticket, target.link, HATE_WALK)) + .expect(HTTP_STATUS.OK) + .execute(); + send.mockResolvedValueOnce(false); + const second = await issueTicket(harness); + const refused = await submitDsa(harness, guildFlowBody(second.ticket, target.guildId)) + .expect(HTTP_STATUS.OK) + .execute(); + expect(send).toHaveBeenCalledTimes(2); + expect((await readReport(thrown.report_id)).reporterEmail).toBe(first.email); + expect((await readReport(refused.report_id)).reporterEmail).toBe(second.email); + expect(await listReceipts(harness)).toEqual([]); + }); + + test('every message link that does not resolve gets the same answer and keeps the ticket', async () => { + const {ticket} = await issueTicket(harness); + const {owner, members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const other = await setupTestGuildWithMembers(harness, 0); + const sideChannel = await createChannel(harness, owner.token, guild.id, 'side'); + const message = await sendChannelMessage(harness, members[0].token, systemChannel.id, 'Reported on the DSA form'); + const otherMessage = await sendChannelMessage(harness, other.owner.token, other.systemChannel.id, 'Elsewhere'); + await createFriendship(harness, members[0], owner); + const dm = await createDmChannel(harness, members[0].token, owner.userId); + const dmMessage = await sendChannelMessage(harness, members[0].token, dm.id, 'A direct message'); + const link = (guildSegment: string, channelId: string, messageId: string) => + `https://web.fluxer.app/channels/${guildSegment}/${channelId}/${messageId}`; + const valid = link(guild.id, systemChannel.id, message.id); + const cases: Array<[string, Record]> = [ + ['unknown channel', {message_link: link(guild.id, TEST_IDS.NONEXISTENT_CHANNEL, message.id)}], + ['unknown message', {message_link: link(guild.id, systemChannel.id, TEST_IDS.NONEXISTENT_MESSAGE)}], + ['message of another channel', {message_link: link(guild.id, sideChannel.id, message.id)}], + ['message of another community', {message_link: link(guild.id, systemChannel.id, otherMessage.id)}], + ['another community in the link', {message_link: link(other.guild.id, systemChannel.id, message.id)}], + ['a direct message link for a community message', {message_link: link('@me', systemChannel.id, message.id)}], + ['a community link for a direct message', {message_link: link(guild.id, dm.id, dmMessage.id)}], + ['a placeholder community in the link', {message_link: link('0', systemChannel.id, message.id)}], + ['an unknown author name', {message_link: valid, reported_user_tag: 'nobody-by-this-name#0001'}], + ['another author name', {message_link: valid, reported_user_tag: await fetchTag(harness, owner.token)}], + ]; + const answers = new Set(); + for (const [name, extra] of cases) { + const {response, text} = await submitDsa(harness, messageFlowBody(ticket, valid, HATE_WALK, extra)).executeRaw(); + expect(response.status, name).toBe(HTTP_STATUS.NOT_FOUND); + expect((JSON.parse(text) as ErrorResponse).code, name).toBe(APIErrorCodes.UNKNOWN_MESSAGE); + answers.add(text); + } + expect(answers.size).toBe(1); + expect(await countReports()).toBe(0); + expect(await listReceipts(harness)).toEqual([]); + const result = await submitDsa( + harness, + messageFlowBody(ticket, valid, HATE_WALK, {reported_user_tag: await fetchTag(harness, members[0].token)}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(result.report_id)).reportedUserId?.toString()).toBe(members[0].userId); + }); + + test('a message whose author account cannot be loaded gets the same answer and keeps the ticket', async () => { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const missing = await submitDsa( + harness, + messageFlowBody(ticket, target.link.replace(/\d+$/, TEST_IDS.NONEXISTENT_MESSAGE), HATE_WALK), + ).executeRaw(); + const findUnique = vi.spyOn(UserRepository.prototype, 'findUnique').mockResolvedValueOnce(null); + const {response, text} = await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK)).executeRaw(); + expect(findUnique).toHaveBeenCalledTimes(1); + expect(response.status).toBe(HTTP_STATUS.NOT_FOUND); + expect((JSON.parse(text) as ErrorResponse).code).toBe(APIErrorCodes.UNKNOWN_MESSAGE); + expect(text).toBe(missing.text); + expect(await countReports()).toBe(0); + await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK)) + .expect(HTTP_STATUS.OK) + .execute(); + }); + + test('a notice about a public channel keeps the surrounding messages', async () => { + const {ticket} = await issueTicket(harness); + const {members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const ids = await sendThree(harness, members[0].token, systemChannel.id); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/${guild.id}/${systemChannel.id}/${ids[1]}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await storedContextIds(result.report_id)).slice(-3)).toEqual(ids); + }); + + test('a notice about a channel that is not open to every member keeps the reported message only', async () => { + const {owner, guild, systemChannel} = await setupTestGuildWithMembers(harness, 0); + const restrictions: Array<[string, bigint]> = [ + ['hidden', Permissions.VIEW_CHANNEL], + ['no-history', Permissions.READ_MESSAGE_HISTORY], + ]; + for (const [name, denied] of restrictions) { + const channel = await createChannel(harness, owner.token, guild.id, name); + await createPermissionOverwrite(harness, owner.token, channel.id, guild.id, { + type: 0, + allow: '0', + deny: denied.toString(), + }); + const [, target] = await sendThree(harness, owner.token, channel.id); + const {ticket} = await issueTicket(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/${guild.id}/${channel.id}/${target}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect(await storedContextIds(result.report_id), name).toEqual([target]); + } + const open = await sendThree(harness, owner.token, systemChannel.id); + const {ticket} = await issueTicket(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/${guild.id}/${systemChannel.id}/${open[1]}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + expect(await storedContextIds(result.report_id)).toEqual(open); + }); + + test('a notice about a direct message uses the @me link and keeps the reported message only', async () => { + const {owner, members} = await setupTestGuildWithMembers(harness, 1); + await createFriendship(harness, members[0], owner); + const dm = await createDmChannel(harness, members[0].token, owner.userId); + const [, target] = await sendThree(harness, members[0].token, dm.id); + const {ticket} = await issueTicket(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/@me/${dm.id}/${target}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reportedGuildId).toBeNull(); + expect(report.reportedChannelId?.toString()).toBe(dm.id); + expect(report.reportedUserId?.toString()).toBe(members[0].userId); + expect(report.messageContext?.map((entry) => entry.messageId.toString())).toEqual([target]); + }); + + test('a notice about a group direct message uses the @me link and keeps the reported message only', async () => { + const {owner, members} = await setupTestGuildWithMembers(harness, 2); + await createFriendship(harness, owner, members[0]); + await createFriendship(harness, owner, members[1]); + const group = await createGroupDmChannel(harness, owner.token, [members[0].userId, members[1].userId]); + const [, target] = await sendThree(harness, members[0].token, group.id); + const {ticket} = await issueTicket(harness); + await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/${group.id}/${group.id}/${target}`, HATE_WALK), + ) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/@me/${group.id}/${target}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reportedGuildId).toBeNull(); + expect(report.reportedChannelId?.toString()).toBe(group.id); + expect(report.reportedUserId?.toString()).toBe(members[0].userId); + expect(report.messageContext?.map((entry) => entry.messageId.toString())).toEqual([target]); + }); + + test('the reported message keeps its attachments when the surrounding messages are left out', async () => { + const {owner, guild} = await setupTestGuildWithMembers(harness, 0); + const channel = await createChannel(harness, owner.token, guild.id, 'hidden'); + await createPermissionOverwrite(harness, owner.token, channel.id, guild.id, { + type: 0, + allow: '0', + deny: Permissions.VIEW_CHANNEL.toString(), + }); + await sendChannelMessage(harness, owner.token, channel.id, 'Before the reported message'); + const {json: message} = await sendMessageWithAttachments( + harness, + owner.token, + channel.id, + {content: 'The reported message', attachments: [{id: 0, filename: 'evidence.png'}]}, + [{index: 0, filename: 'evidence.png', data: loadFixture('yeah.png')}], + ); + const {ticket} = await issueTicket(harness); + const result = await submitDsa( + harness, + messageFlowBody(ticket, `https://web.fluxer.app/channels/${guild.id}/${channel.id}/${message.id}`, HATE_WALK), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.messageContext).toHaveLength(1); + expect(report.messageContext![0].attachments.map((entry) => entry.filename)).toEqual(['evidence.png']); + const key = `attachments/${channel.id}/${message.attachments![0]!.id}/evidence.png`; + expect(harness.storageService.hasObject(Config.s3.buckets.reports, key)).toBe(true); + }); + + test('the notice text is not content screened', async () => { + phraseBlocklistCache.add('blockedslur'); + urlBlocklistCache.addDomain('blocked-phish.example'); + try { + const {ticket} = await issueTicket(harness); + const target = await setupMessageLink(harness); + const text = 'They wrote blockedslur and posted https://blocked-phish.example/login to steal accounts.'; + const result = await submitDsa(harness, messageFlowBody(ticket, target.link, HATE_WALK, {additional_info: text})) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(result.report_id)).additionalInfo).toBe(text); + } finally { + phraseBlocklistCache.remove('blockedslur'); + urlBlocklistCache.removeDomain('blocked-phish.example'); + } + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportFlowRegistry.test.ts b/fluxer_api/src/api/report/tests/ReportFlowRegistry.test.ts new file mode 100644 index 000000000..66c520c35 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportFlowRegistry.test.ts @@ -0,0 +1,1193 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import fs from 'node:fs'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {getConfig} from '@app/api/Config'; +import {CONTENT_I18N_MESSAGES} from '@app/api/content_i18n/ContentI18nMessages'; +import { + assertValidReportFlowLibrary, + buildReportFlowLedger, + buildReportFlowVariant, + describeReportFlowAnswers, + getReportFlowResponse, + getReportFlowVariant, + parseReportFlowSteps, + REPORT_FLOW_LIBRARY, + type ReportFlowLibrary, + type ReportFlowStepInput, + type ReportFlowVariant, + resolveReportFlowAnswers, + resolveReportFlowLocale, +} from '@app/api/report/flows/ReportFlowRegistry'; +import type {ReportFlowOptionDef, ReportFlowScreenDef} from '@app/api/report/flows/ReportFlowScreens'; +import { + findReportReason, + getLegacyCategory, + listReportReasons, + REPORT_REASONS, +} from '@app/api/report/flows/ReportReasonCatalog'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {FluxerError} from '@fluxer/errors/src/FluxerError'; +import { + ReportFlowResponse, + type ReportFlowSurface, + type ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import { + ReportGuildRequest, + ReportMessageRequest, + ReportUserRequest, +} from '@fluxer/schema/src/domains/report/ReportSchemas'; +import {afterEach, describe, expect, test} from 'vitest'; + +const THIS_DIR = path.dirname(fileURLToPath(import.meta.url)); +const LEDGER_PATH = path.join(THIS_DIR, '../flows/ReportFlowIds.snapshot.json'); + +const VARIANTS: ReadonlyArray<[ReportFlowTargetType, ReportFlowSurface]> = [ + ['message', 'in_app'], + ['message', 'dsa'], + ['user', 'in_app'], + ['user', 'dsa'], + ['guild', 'dsa'], +]; + +interface Ledger { + active: Record; + retired: Record; +} + +function readLedger(): Ledger { + return JSON.parse(fs.readFileSync(LEDGER_PATH, 'utf8')) as Ledger; +} + +function findLedgerViolations(ledger: Ledger, current: Record): Array { + const violations: Array = []; + for (const [id, value] of Object.entries(ledger.active)) { + if (!Object.hasOwn(current, id)) { + violations.push(`${id} disappeared without moving to retired`); + } else if (current[id] !== value) { + violations.push(`${id} changed from ${value} to ${current[id]}`); + } + } + for (const id of Object.keys(current)) { + if (!Object.hasOwn(ledger.active, id)) { + violations.push(`${id} is missing from active`); + } + if (Object.hasOwn(ledger.retired, id)) { + violations.push(`${id} is retired and cannot be reused`); + } + } + return violations; +} + +function editScreen( + library: ReportFlowLibrary, + screenId: string, + edit: (screen: ReportFlowScreenDef) => ReportFlowScreenDef, +): ReportFlowLibrary { + expect(library.screens.some((screen) => screen.id === screenId)).toBe(true); + return { + ...library, + screens: library.screens.map((screen) => (screen.id === screenId ? edit(screen) : screen)), + }; +} + +function addOption(library: ReportFlowLibrary, screenId: string, option: ReportFlowOptionDef): ReportFlowLibrary { + return editScreen(library, screenId, (screen) => ({...screen, options: [...(screen.options ?? []), option]})); +} + +function variantOf( + target: ReportFlowTargetType, + surface: ReportFlowSurface, + library: ReportFlowLibrary = REPORT_FLOW_LIBRARY, + selfHosted = false, +): ReportFlowVariant { + const variant = buildReportFlowVariant(library, target, surface, {selfHosted}); + if (!variant) { + throw new Error(`no variant ${target}/${surface}`); + } + return variant; +} + +function variantReasons(variant: ReportFlowVariant): Set { + const reasons = new Set(); + for (const screen of variant.screens.values()) { + for (const option of screen.options) { + if (option.outcome.type === 'submit') { + reasons.add(option.outcome.reason); + } + } + if (screen.def.checklist?.outcome.type === 'submit') { + reasons.add(screen.def.checklist.outcome.reason); + } + for (const item of screen.def.checklist?.items ?? []) { + if (item.reason) { + reasons.add(item.reason); + } + } + } + return reasons; +} + +function optionIds(variant: ReportFlowVariant, screenId: string): Array { + const screen = variant.screens.get(screenId); + expect(screen).toBeDefined(); + return screen!.options.map((option) => option.id); +} + +function resolve(target: ReportFlowTargetType, surface: ReportFlowSurface, steps: ReadonlyArray) { + return resolveReportFlowAnswers({ + target, + surface, + revisionHash: getReportFlowVariant(target, surface).revisionHash, + steps, + }); +} + +function captureError(run: () => unknown): FluxerError { + try { + run(); + } catch (error) { + if (error instanceof FluxerError) { + return error; + } + throw error; + } + throw new Error('expected an error'); +} + +function expectInvalidStep( + target: ReportFlowTargetType, + surface: ReportFlowSurface, + steps: ReadonlyArray, + stepIndex: number, +) { + const error = captureError(() => resolve(target, surface, steps)); + expect(error.code).toBe(APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS); + expect(error.status).toBe(400); + expect(error.data).toEqual({step_index: stepIndex}); +} + +const originalSelfHosted = getConfig().instance.selfHosted; + +afterEach(() => { + getConfig().instance.selfHosted = originalSelfHosted; +}); + +describe('report flow definitions', () => { + test('the shipped library passes every rule on every variant', () => { + expect(() => assertValidReportFlowLibrary(REPORT_FLOW_LIBRARY)).not.toThrow(); + for (const selfHosted of [false, true]) { + for (const [target, surface] of VARIANTS) { + const variant = variantOf(target, surface, REPORT_FLOW_LIBRARY, selfHosted); + for (const screen of variant.screens.values()) { + const hasOptions = (screen.def.options ?? []).length > 0; + if (screen.kind === 'checklist') { + expect(hasOptions || screen.def.nextScreenId !== undefined).toBe(false); + } + if (screen.kind === 'info') { + expect(screen.options.every((option) => option.outcome.type === 'link')).toBe(true); + } + if (screen.kind === 'choice') { + expect(screen.options.some((option) => option.outcome.type !== 'link')).toBe(true); + } + for (const option of screen.options) { + expect(option.id).toMatch(/^[a-z0-9_]{1,48}$/); + if (surface === 'dsa') { + expect(option.surface).not.toBe('in_app'); + expect(option.outcome.type === 'end' && option.outcome.noticeId === undefined).toBe(false); + } + } + } + expect(variant.screens.get(variant.startScreenId)?.kind === 'info').toBe( + target === 'user' && surface === 'in_app', + ); + } + } + expect(buildReportFlowVariant(REPORT_FLOW_LIBRARY, 'guild', 'in_app', {selfHosted: false})).toBeNull(); + }); + + test('every screen in the library is used by a variant', () => { + const used = new Set(); + for (const [target, surface] of VARIANTS) { + for (const screenId of variantOf(target, surface).screens.keys()) { + used.add(screenId); + } + } + expect([...used].sort()).toEqual(REPORT_FLOW_LIBRARY.screens.map((screen) => screen.id).sort()); + }); + + test('a cycle throws', () => { + const broken = addOption(REPORT_FLOW_LIBRARY, 'harassment', { + id: 'loop', + label: 'report_flow.label.abuse', + outcome: {type: 'screen', screenId: 'root_message'}, + }); + expect(() => assertValidReportFlowLibrary(broken)).toThrow(/cycle/); + }); + + test('a dangling screen reference throws', () => { + const broken = addOption(REPORT_FLOW_LIBRARY, 'abuse', { + id: 'nowhere', + label: 'report_flow.label.abuse', + outcome: {type: 'screen', screenId: 'missing_screen'}, + }); + expect(() => assertValidReportFlowLibrary(broken)).toThrow(/missing_screen is not defined/); + }); + + test('a no-report or DSA option that is not limited to the app throws', () => { + const unlimitedDislike = editScreen(REPORT_FLOW_LIBRARY, 'root_message', (screen) => ({ + ...screen, + options: screen.options?.map((option) => + option.id === 'dislike' ? {id: option.id, label: option.label, outcome: option.outcome} : option, + ), + })); + expect(() => assertValidReportFlowLibrary(unlimitedDislike)).toThrow(/limited to in_app/); + const unlimitedDsaRow = editScreen(REPORT_FLOW_LIBRARY, 'root_user', (screen) => ({ + ...screen, + options: screen.options?.map((option) => (option.id === 'dsa' ? {...option, surface: undefined} : option)), + })); + expect(() => assertValidReportFlowLibrary(unlimitedDsaRow)).toThrow(/limited to in_app/); + }); + + test('other broken definitions throw', () => { + const unreachable: ReportFlowLibrary = { + ...REPORT_FLOW_LIBRARY, + screens: [ + ...REPORT_FLOW_LIBRARY.screens, + { + id: 'orphan', + title: 'report_flow.screen.abuse.title', + options: [{id: 'spam', label: 'report_flow.label.spam', outcome: {type: 'submit', reason: 'spam'}}], + }, + ], + }; + expect(() => assertValidReportFlowLibrary(unreachable)).toThrow(/orphan: not reachable/); + const duplicateOption = addOption(REPORT_FLOW_LIBRARY, 'abuse', { + id: 'hate', + label: 'report_flow.label.hate', + outcome: {type: 'screen', screenId: 'hate'}, + }); + expect(() => assertValidReportFlowLibrary(duplicateOption)).toThrow(/duplicate option id/); + const badId = addOption(REPORT_FLOW_LIBRARY, 'abuse', { + id: 'Bad-Id', + label: 'report_flow.label.spam', + outcome: {type: 'submit', reason: 'spam'}, + }); + expect(() => assertValidReportFlowLibrary(badId)).toThrow(/does not match/); + const badMinimum = editScreen(REPORT_FLOW_LIBRARY, 'private_info', (screen) => ({ + ...screen, + checklist: screen.checklist ? {...screen.checklist, minChecked: 0} : undefined, + })); + expect(() => assertValidReportFlowLibrary(badMinimum)).toThrow(/min checked/); + const mixedKinds = editScreen(REPORT_FLOW_LIBRARY, 'crisis_support', (screen) => ({ + ...screen, + options: [{id: 'spam', label: 'report_flow.label.spam', outcome: {type: 'submit', reason: 'spam'}}], + })); + expect(() => assertValidReportFlowLibrary(mixedKinds)).toThrow(/only has link options/); + const infoStart: ReportFlowLibrary = { + ...REPORT_FLOW_LIBRARY, + flows: { + ...REPORT_FLOW_LIBRARY.flows, + message: {target: 'message', start: {in_app: 'crisis_support', dsa: 'root_message'}}, + }, + }; + expect(() => assertValidReportFlowLibrary(infoStart)).toThrow(/must not be an info screen/); + const unknownReason = addOption(REPORT_FLOW_LIBRARY, 'abuse', { + id: 'invented', + label: 'report_flow.label.spam', + outcome: {type: 'submit', reason: 'invented' as 'spam'}, + }); + expect(() => assertValidReportFlowLibrary(unknownReason)).toThrow(/unknown reason invented/); + }); +}); + +describe('report flow id ledger', () => { + test('the ledger matches the current definitions', () => { + const ledger = readLedger(); + expect(findLedgerViolations(ledger, buildReportFlowLedger(REPORT_FLOW_LIBRARY))).toEqual([]); + expect(Object.keys(ledger.active).length).toBeGreaterThan(200); + }); + + test('the ledger catches changed, removed, added and reused ids', () => { + const ledger = readLedger(); + const changed = editScreen(REPORT_FLOW_LIBRARY, 'root_message', (screen) => ({ + ...screen, + options: screen.options?.map((option) => + option.id === 'spam' ? {...option, outcome: {type: 'submit', reason: 'fake_account'}} : option, + ), + })); + expect(findLedgerViolations(ledger, buildReportFlowLedger(changed))).toContain( + 'message/root_message/spam changed from submit:spam to submit:fake_account', + ); + const removed = editScreen(REPORT_FLOW_LIBRARY, 'impersonation', (screen) => ({ + ...screen, + options: screen.options?.filter((option) => option.id !== 'fraud'), + })); + expect(findLedgerViolations(ledger, buildReportFlowLedger(removed))).toContain( + 'message/impersonation/fraud disappeared without moving to retired', + ); + const added = addOption(REPORT_FLOW_LIBRARY, 'impersonation', { + id: 'impersonation_bot', + label: 'report_flow.label.fake_account', + outcome: {type: 'submit', reason: 'fake_account'}, + }); + expect(findLedgerViolations(ledger, buildReportFlowLedger(added))).toContain( + 'message/impersonation/impersonation_bot is missing from active', + ); + const reused: Ledger = { + active: ledger.active, + retired: {'message/root_message/spam': 'submit:spam'}, + }; + expect(findLedgerViolations(reused, buildReportFlowLedger(REPORT_FLOW_LIBRARY))).toContain( + 'message/root_message/spam is retired and cannot be reused', + ); + const checklistOutcome = editScreen(REPORT_FLOW_LIBRARY, 'private_info', (screen) => ({ + ...screen, + checklist: screen.checklist ? {...screen.checklist, outcome: {type: 'submit', reason: 'other'}} : undefined, + })); + expect(findLedgerViolations(ledger, buildReportFlowLedger(checklistOutcome))).toContain( + 'message/private_info/#next changed from submit:doxxing to submit:other', + ); + }); +}); + +describe('report flow walks', () => { + const walks: ReadonlyArray<{ + name: string; + target: ReportFlowTargetType; + surface?: ReportFlowSurface; + steps: ReadonlyArray; + reason: string; + category: string; + }> = [ + { + name: 'S3 spam', + target: 'message', + steps: [{screen_id: 'root_message', option_id: 'spam'}], + reason: 'spam', + category: 'spam', + }, + { + name: 'S6 private information', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['phone', 'email']}, + ], + reason: 'doxxing', + category: 'doxxing', + }, + { + name: 'S6 intimate photo override', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['face_photo', 'intimate_photo']}, + ], + reason: 'intimate_image_abuse', + category: 'doxxing', + }, + { + name: 'S8 S9 age stated', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'too_young'}, + {screen_id: 'age_stated_message', option_id: 'age_yes'}, + ], + reason: 'underage', + category: 'underage_user', + }, + { + name: 'S11 S12 self-harm worry', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'self_harm'}, + {screen_id: 'self_harm', option_id: 'worried_self_harm'}, + ], + reason: 'wellbeing_concern', + category: 'self_harm', + }, + { + name: 'S14 harmful false claims', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'false_info'}, + {screen_id: 'false_info', option_id: 'harmful_false_claims'}, + ], + reason: 'harmful_false_claims', + category: 'other', + }, + { + name: 'S15 fraud', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'impersonation'}, + {screen_id: 'impersonation', option_id: 'fraud'}, + ], + reason: 'fraud', + category: 'illegal_activity', + }, + { + name: 'S18 to S21 csam', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'sexual'}, + {screen_id: 'sexual', option_id: 'minor_sexual'}, + {screen_id: 'minor_sexual', option_id: 'csam'}, + ], + reason: 'csam', + category: 'child_safety', + }, + { + name: 'S1 to S5 terrorism', + target: 'message', + steps: [ + {screen_id: 'root_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'terrorism'}, + ], + reason: 'terrorism_extremism', + category: 'violent_content', + }, + { + name: 'P1 to P3 harassment', + target: 'user', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo', 'profile_text']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'harassment'}, + ], + reason: 'harassment', + category: 'harassment', + }, + { + name: 'P4 self-harm worry', + target: 'user', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'self_harm'}, + {screen_id: 'crisis_support'}, + {screen_id: 'self_harm_profile', option_id: 'worried'}, + ], + reason: 'wellbeing_concern', + category: 'other', + }, + { + name: 'P5 private information', + target: 'user', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'private_info'}, + {screen_id: 'profile_private_info', item_ids: ['phone', 'address']}, + ], + reason: 'doxxing', + category: 'inappropriate_profile', + }, + { + name: 'user DSA starts at the profile parts', + target: 'user', + surface: 'dsa', + steps: [ + {screen_id: 'profile_parts', item_ids: ['name']}, + {screen_id: 'root_user', option_id: 'impersonation'}, + {screen_id: 'impersonation', option_id: 'impersonation_staff'}, + ], + reason: 'impersonation_staff', + category: 'impersonation', + }, + { + name: 'guild DSA raid', + target: 'guild', + surface: 'dsa', + steps: [ + {screen_id: 'community_parts', item_ids: ['activity']}, + {screen_id: 'root_guild', option_id: 'abuse'}, + {screen_id: 'abuse_guild', option_id: 'raid'}, + ], + reason: 'raid', + category: 'raid_coordination', + }, + { + name: 'message DSA copyright notice', + target: 'message', + surface: 'dsa', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'copyright_notice'}, + ], + reason: 'copyright', + category: 'other', + }, + ]; + + test.each(walks)('$name resolves to $reason', ({target, surface, steps, reason, category}) => { + const resolved = resolve(target, surface ?? 'in_app', steps); + expect(resolved.reason).toBe(reason); + expect(resolved.legacyCategory).toBe(category); + expect(resolved.isCurrentRevision).toBe(true); + expect(JSON.parse(resolved.stepsJson)).toEqual(resolved.steps); + expect(resolved.steps.map((step) => step.screen_id)).toEqual(steps.map((step) => step.screen_id)); + }); + + test('checklist items are stored in definition order', () => { + const resolved = resolve('message', 'in_app', [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['phone', 'email']}, + ]); + expect(resolved.steps[1]).toEqual({screen_id: 'private_info', item_ids: ['email', 'phone']}); + expect(resolved.stepsJson).toBe( + '[{"screen_id":"root_message","option_id":"private_info"},{"screen_id":"private_info","item_ids":["email","phone"]}]', + ); + }); + + test('the retired violence row on the something-else screen is rejected', () => { + for (const surface of ['in_app', 'dsa'] as const) { + expectInvalidStep( + 'message', + surface, + [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'terrorism'}, + ], + 1, + ); + } + }); + + test('no-report endings and links are rejected', () => { + expectInvalidStep('message', 'in_app', [{screen_id: 'root_message', option_id: 'dislike'}], 0); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'rude_language'}, + ], + 1, + ); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'too_young'}, + {screen_id: 'age_stated_message', option_id: 'age_no'}, + ], + 2, + ); + expectInvalidStep( + 'user', + 'in_app', + [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'too_young'}, + {screen_id: 'age_stated_profile', option_id: 'age_no'}, + ], + 4, + ); + expectInvalidStep('message', 'in_app', [{screen_id: 'root_message', option_id: 'dsa'}], 0); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'copyright'}, + ], + 1, + ); + expectInvalidStep( + 'user', + 'in_app', + [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'self_harm'}, + {screen_id: 'crisis_support', option_id: 'crisis_lines'}, + ], + 4, + ); + }); + + test('in-app-only options are rejected on the DSA form, DSA-only options in the app', () => { + expectInvalidStep( + 'message', + 'dsa', + [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'self_harm'}, + {screen_id: 'self_harm', option_id: 'worried_self_harm'}, + ], + 2, + ); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'copyright_notice'}, + ], + 1, + ); + expectInvalidStep('user', 'dsa', [{screen_id: 'profile_intro'}], 0); + }); + + test('broken walks report the first bad step', () => { + expectInvalidStep('message', 'in_app', [{screen_id: 'abuse', option_id: 'hate'}], 0); + expectInvalidStep('message', 'in_app', [{screen_id: 'nowhere', option_id: 'spam'}], 0); + expectInvalidStep('message', 'in_app', [{screen_id: 'root_message', option_id: 'nope'}], 0); + expectInvalidStep('message', 'in_app', [{screen_id: 'root_message', item_ids: ['spam']}], 0); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'sexual', option_id: 'sexual_unwanted'}, + ], + 1, + ); + expectInvalidStep('message', 'in_app', [{screen_id: 'root_message', option_id: 'abuse'}], 0); + expectInvalidStep( + 'message', + 'in_app', + [ + {screen_id: 'root_message', option_id: 'spam'}, + {screen_id: 'abuse', option_id: 'hate'}, + ], + 1, + ); + expectInvalidStep( + 'user', + 'in_app', + [ + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'harassment'}, + ], + 0, + ); + expectInvalidStep( + 'user', + 'in_app', + [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'self_harm'}, + {screen_id: 'self_harm_profile', option_id: 'worried'}, + ], + 4, + ); + expectInvalidStep( + 'user', + 'in_app', + [ + {screen_id: 'profile_intro', option_id: 'learn_more'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + ], + 0, + ); + const privateInfo = {screen_id: 'root_message', option_id: 'private_info'}; + expectInvalidStep('message', 'in_app', [privateInfo, {screen_id: 'private_info', item_ids: []}], 1); + expectInvalidStep('message', 'in_app', [privateInfo, {screen_id: 'private_info', item_ids: ['shoe_size']}], 1); + expectInvalidStep('message', 'in_app', [privateInfo, {screen_id: 'private_info', item_ids: ['email', 'email']}], 1); + expectInvalidStep('message', 'in_app', [privateInfo, {screen_id: 'private_info'}], 1); + expectInvalidStep( + 'message', + 'in_app', + [privateInfo, {screen_id: 'private_info', option_id: 'email', item_ids: ['email']}], + 1, + ); + }); + + test('the revision hash decides between a 400 and a 409', () => { + const validSteps = [{screen_id: 'root_message', option_id: 'spam'}]; + const stale = resolveReportFlowAnswers({ + target: 'message', + surface: 'in_app', + revisionHash: '0000000000000000', + steps: validSteps, + }); + expect(stale.reason).toBe('spam'); + expect(stale.isCurrentRevision).toBe(false); + expect(stale.currentRevisionHash).toBe(getReportFlowVariant('message', 'in_app').revisionHash); + const outdated = captureError(() => + resolveReportFlowAnswers({ + target: 'message', + surface: 'in_app', + revisionHash: '0000000000000000', + steps: [{screen_id: 'root_message', option_id: 'dislike'}], + }), + ); + expect(outdated.code).toBe(APIErrorCodes.REPORT_FLOW_OUTDATED); + expect(outdated.status).toBe(409); + }); + + test('a flow without a variant for the surface is a validation error on surface', () => { + const error = captureError(() => getReportFlowVariant('guild', 'in_app')); + expect(error.code).toBe(APIErrorCodes.INVALID_FORM_BODY); + expect(JSON.stringify(error.data)).toContain('"path":"surface"'); + expect(() => getReportFlowResponse('guild', 'in_app', 'en-US')).toThrow(FluxerError); + }); +}); + +describe('report reasons and legacy categories', () => { + const legacyCategories = new Set([ + ...ReportMessageRequest.shape.category.options.map((option) => option.value), + ...ReportUserRequest.shape.category.options.map((option) => option.value), + ...ReportGuildRequest.shape.category.options.map((option) => option.value), + ]); + + test('there are 18 legacy categories and 56 reasons', () => { + expect(legacyCategories.size).toBe(18); + expect(listReportReasons()).toHaveLength(56); + expect(findReportReason('csam')).toEqual({ + key: 'csam', + label: 'Child sexual abuse material', + highestPriority: true, + legacyCategories: {message: 'child_safety', user: 'child_safety', guild: 'child_safety'}, + }); + expect(findReportReason('retired_reason')).toBeNull(); + }); + + test('message and guild categories are legacy values, user categories are user values or child_safety', () => { + for (const reason of listReportReasons()) { + expect(legacyCategories.has(reason.legacyCategories.message), reason.key).toBe(true); + expect(legacyCategories.has(reason.legacyCategories.guild), reason.key).toBe(true); + const user = reason.legacyCategories.user; + expect(user === 'child_safety' || ReportUserRequest.shape.category.safeParse(user).success, reason.key).toBe( + true, + ); + } + }); + + test('child reasons are child_safety for every target', () => { + for (const key of Object.keys(REPORT_REASONS) as Array) { + if (key.startsWith('minor_') || key === 'csam') { + for (const target of ['message', 'user', 'guild'] as const) { + expect(getLegacyCategory(key, target), key).toBe('child_safety'); + } + } + } + }); + + test('every variant only submits catalog reasons and the user flow reaches all seven user values', () => { + for (const [target, surface] of VARIANTS) { + for (const reason of variantReasons(variantOf(target, surface))) { + expect(Object.hasOwn(REPORT_REASONS, reason), reason).toBe(true); + } + } + const userCategories = new Set( + [...variantReasons(variantOf('user', 'in_app'))].map((reason) => + getLegacyCategory(reason as keyof typeof REPORT_REASONS, 'user'), + ), + ); + for (const option of ReportUserRequest.shape.category.options) { + expect(userCategories.has(option.value), option.value).toBe(true); + } + expect(userCategories.has('child_safety')).toBe(true); + }); +}); + +describe('report flow revision hash', () => { + test('is stable, locale independent and per variant', () => { + const first = variantOf('message', 'in_app').revisionHash; + expect(first).toMatch(/^[0-9a-f]{16}$/); + expect(variantOf('message', 'in_app').revisionHash).toBe(first); + expect(getReportFlowResponse('message', 'in_app', 'en-US').revision_hash).toBe(first); + expect(getReportFlowResponse('message', 'in_app', 'de').revision_hash).toBe(first); + expect(getReportFlowResponse('message', 'in_app', 'ja').revision_hash).toBe(first); + expect(variantOf('message', 'dsa').revisionHash).not.toBe(first); + const hashes = new Set(VARIANTS.map(([target, surface]) => variantOf(target, surface).revisionHash)); + expect(hashes.size).toBe(VARIANTS.length); + }); + + test('changes when an option is added', () => { + const added = addOption(REPORT_FLOW_LIBRARY, 'impersonation', { + id: 'impersonation_bot', + label: 'report_flow.label.fake_account', + outcome: {type: 'submit', reason: 'fake_account'}, + }); + expect(variantOf('message', 'in_app', added).revisionHash).not.toBe(variantOf('message', 'in_app').revisionHash); + expect(variantOf('guild', 'dsa', added).revisionHash).toBe(variantOf('guild', 'dsa').revisionHash); + }); +}); + +const EXPECTED_NOTICES: Record> = { + message: ['need_more_info'], + user: ['need_more_info_profile'], + guild: [], +}; + +describe('report flow rendering', () => { + test('every variant matches the response schema and lists every reachable screen', () => { + for (const [target, surface] of VARIANTS) { + const response = getReportFlowResponse(target, surface, 'en-US'); + expect(ReportFlowResponse.parse(response)).toEqual(response); + const variant = getReportFlowVariant(target, surface); + expect(response.start_screen_id).toBe(variant.startScreenId); + expect(response.screens.map((screen) => screen.id).sort()).toEqual([...variant.screens.keys()].sort()); + expect(response.screens[0].id).toBe(response.start_screen_id); + expect(response.notices.map((notice) => notice.id)).toEqual(EXPECTED_NOTICES[target]); + expect(response.locale).toBe('en-US'); + } + expect(getReportFlowResponse('user', 'in_app', 'en-US').start_screen_id).toBe('profile_intro'); + expect(getReportFlowResponse('user', 'dsa', 'en-US').start_screen_id).toBe('profile_parts'); + expect(getReportFlowResponse('guild', 'dsa', 'en-US').start_screen_id).toBe('community_parts'); + }); + + test('the rendered response is memoized per locale', () => { + expect(getReportFlowResponse('message', 'in_app', 'en-US')).toBe( + getReportFlowResponse('message', 'in_app', 'en-US'), + ); + expect(getReportFlowResponse('message', 'in_app', 'de')).not.toBe( + getReportFlowResponse('message', 'in_app', 'en-US'), + ); + }); + + test('screens render their kind, outcomes and urls', () => { + const config = getConfig(); + const message = getReportFlowResponse('message', 'in_app', 'en-US'); + const root = message.screens.find((screen) => screen.id === 'root_message')!; + expect(root.title).toBe('Report message'); + expect(root.options.map((option) => option.id)).toEqual([ + 'abuse', + 'private_info', + 'violence_misinfo', + 'spam', + 'something_else', + 'dislike', + 'dsa', + ]); + expect(root.options[5].outcome).toEqual({type: 'end', screen_id: null, reason: null, notice_id: null, url: null}); + expect(root.options[3].outcome).toEqual({ + type: 'submit', + screen_id: null, + reason: 'spam', + notice_id: null, + url: null, + }); + expect(root.options[6].outcome.url).toBe(`${config.endpoints.webApp}/report`); + const copyright = message.screens + .find((screen) => screen.id === 'something_else_message')! + .options.find((option) => option.id === 'copyright'); + expect(copyright?.outcome).toEqual({ + type: 'link', + screen_id: null, + reason: null, + notice_id: null, + url: `${config.endpoints.webApp}/report?option=copyright_notice`, + }); + expect(root.checklist).toBeNull(); + expect(root.next_screen_id).toBeNull(); + const privateInfo = message.screens.find((screen) => screen.id === 'private_info')!; + expect(privateInfo.options).toEqual([]); + expect(privateInfo.checklist?.min_checked).toBe(1); + expect(privateInfo.checklist?.items).toHaveLength(13); + expect(privateInfo.checklist?.outcome.reason).toBe('doxxing'); + const ageNo = message.screens + .find((screen) => screen.id === 'age_stated_message')! + .options.find((option) => option.id === 'age_no'); + expect(ageNo?.outcome.notice_id).toBe('need_more_info'); + const sexual = message.screens.find((screen) => screen.id === 'sexual')!; + expect(sexual.urgent).toBe(true); + expect(sexual.options[0].id).toBe('minor_sexual'); + const user = getReportFlowResponse('user', 'in_app', 'en-US'); + expect(user.guidelines_url).toBe(`${config.endpoints.marketing}/guidelines`); + const intro = user.screens[0]; + expect(intro.next_screen_id).toBe('profile_parts'); + expect(intro.options_heading).toBe('Learn more'); + expect(intro.options).toHaveLength(1); + expect(intro.options[0].outcome.url).toBe(user.guidelines_url); + const parts = user.screens.find((screen) => screen.id === 'profile_parts')!; + expect(parts.checklist?.items[0]).toEqual({ + id: 'photo', + label: 'Pictures', + description: 'What they use as avatar and banner', + }); + for (const surface of ['in_app', 'dsa'] as const) { + const flow = getReportFlowResponse('user', surface, 'en-US'); + const userAgeNo = flow.screens + .find((screen) => screen.id === 'age_stated_profile')! + .options.find((option) => option.id === 'age_no'); + expect(userAgeNo?.outcome.notice_id).toBe('need_more_info_profile'); + const notice = flow.notices.find((entry) => entry.id === 'need_more_info_profile')!; + expect(notice.title).toBe("We can't act on this yet"); + expect(notice.body).toMatch(/message or profile/); + } + const crisis = user.screens + .find((screen) => screen.id === 'crisis_support')! + .options.find((option) => option.id === 'crisis_lines'); + expect(crisis?.outcome.url).toBe('https://befrienders.org'); + }); + + test('the DSA variants drop app-only rows and add the copyright notice', () => { + const messageDsa = variantOf('message', 'dsa'); + expect(optionIds(messageDsa, 'root_message')).toEqual([ + 'abuse', + 'private_info', + 'violence_misinfo', + 'spam', + 'something_else', + ]); + expect(optionIds(messageDsa, 'abuse')).not.toContain('rude_language'); + expect(optionIds(messageDsa, 'self_harm')).not.toContain('worried_self_harm'); + expect(optionIds(messageDsa, 'self_harm')).not.toContain('worried_suicide'); + expect(optionIds(messageDsa, 'something_else_message')).toContain('copyright_notice'); + expect(optionIds(messageDsa, 'something_else_message')).not.toContain('copyright'); + expect(optionIds(variantOf('message', 'in_app'), 'something_else_message')).not.toContain('copyright_notice'); + const userDsa = variantOf('user', 'dsa'); + expect(userDsa.screens.has('profile_intro')).toBe(false); + expect(optionIds(userDsa, 'root_user')).not.toContain('dsa'); + expect(optionIds(userDsa, 'self_harm_profile')).not.toContain('worried'); + }); + + test('the DSA self-harm screens drop the subtitle about being worried', () => { + const worried = + 'Nobody is punished for saying they are struggling. Telling us you are worried helps us offer support.'; + const screenOf = (target: ReportFlowTargetType, surface: ReportFlowSurface, screenId: string) => + getReportFlowResponse(target, surface, 'en-US').screens.find((screen) => screen.id === screenId)!; + expect(screenOf('message', 'in_app', 'self_harm').subtitle).toBe(worried); + expect(screenOf('user', 'in_app', 'self_harm_profile').subtitle).toBe(worried); + expect(screenOf('message', 'dsa', 'self_harm').subtitle).toBeNull(); + expect(screenOf('user', 'dsa', 'self_harm_profile').subtitle).toBeNull(); + expect(variantOf('message', 'dsa').screens.get('self_harm')?.subtitle).toBeNull(); + expect(variantOf('user', 'dsa').screens.get('self_harm_profile')?.subtitle).toBeNull(); + expect(variantOf('message', 'in_app').screens.get('self_harm')?.subtitle).toBe( + 'report_flow.screen.self_harm.subtitle', + ); + }); + + test('the in-app copyright rows open the DSA form on the copyright notice', () => { + const url = `${getConfig().endpoints.webApp}/report?option=copyright_notice`; + const copyrightUrl = (target: ReportFlowTargetType, screenId: string) => + getReportFlowResponse(target, 'in_app', 'en-US') + .screens.find((screen) => screen.id === screenId) + ?.options.find((option) => option.id === 'copyright')?.outcome.url; + expect(copyrightUrl('message', 'something_else_message')).toBe(url); + expect(copyrightUrl('user', 'something_else_user')).toBe(url); + getConfig().instance.selfHosted = true; + expect(copyrightUrl('message', 'something_else_message')).toBeUndefined(); + expect(copyrightUrl('user', 'something_else_user')).toBeUndefined(); + }); + + test('a copyright link row that is not limited to the app throws', () => { + const unlimited = editScreen(REPORT_FLOW_LIBRARY, 'something_else_message', (screen) => ({ + ...screen, + options: screen.options?.map((option) => (option.id === 'copyright' ? {...option, surface: undefined} : option)), + })); + expect(() => assertValidReportFlowLibrary(unlimited)).toThrow(/limited to in_app/); + }); + + test('a self-hosted instance drops the DSA sentence from the false information subtitle', () => { + const dsaNames = /Digital Services Act|digitale Dienste|デジタルサービス法|الخدمات الرقمية/; + const subtitle = (locale: string) => + getReportFlowResponse('message', 'in_app', locale).screens.find((screen) => screen.id === 'false_info')! + .subtitle!; + const hosted = Object.fromEntries(['en-US', 'de', 'ja', 'ar'].map((locale) => [locale, subtitle(locale)])); + const hostedHash = getReportFlowResponse('message', 'in_app', 'en-US').revision_hash; + for (const text of Object.values(hosted)) { + expect(text).toMatch(dsaNames); + } + getConfig().instance.selfHosted = true; + const selfHostedHash = getReportFlowResponse('message', 'in_app', 'en-US').revision_hash; + expect(selfHostedHash).not.toBe(hostedHash); + for (const locale of ['en-US', 'de', 'ja', 'ar']) { + const text = subtitle(locale); + expect(text, locale).not.toMatch(dsaNames); + expect(text.length, locale).toBeGreaterThan(0); + expect(hosted[locale].startsWith(text), locale).toBe(true); + expect(getReportFlowResponse('message', 'in_app', locale).revision_hash, locale).toBe(selfHostedHash); + } + expect(subtitle('en-US')).toBe('Opinions, satire and good-faith debate are allowed.'); + expect( + getReportFlowResponse('message', 'dsa', 'en-US').screens.find((screen) => screen.id === 'false_info')!.subtitle, + ).not.toMatch(dsaNames); + }); + + test('self-hosted instances get no guidelines, DSA or copyright link rows', () => { + const hostedUser = getReportFlowResponse('user', 'in_app', 'en-US'); + getConfig().instance.selfHosted = true; + const user = getReportFlowResponse('user', 'in_app', 'en-US'); + expect(user.guidelines_url).toBeNull(); + expect(user.revision_hash).not.toBe(hostedUser.revision_hash); + const intro = user.screens[0]; + expect(intro.options).toEqual([]); + expect(intro.options_heading).toBeNull(); + expect(intro.next_screen_id).toBe('profile_parts'); + const userScreens = new Map(user.screens.map((screen) => [screen.id, screen])); + expect(userScreens.get('root_user')?.options.map((option) => option.id)).not.toContain('dsa'); + expect(userScreens.get('something_else_user')?.options.map((option) => option.id)).not.toContain('copyright'); + const message = getReportFlowResponse('message', 'in_app', 'en-US'); + for (const screen of message.screens) { + for (const option of screen.options) { + expect(option.outcome.url === null || option.outcome.url === 'https://befrienders.org', option.id).toBe(true); + } + } + const messageScreens = new Map(message.screens.map((screen) => [screen.id, screen])); + expect(messageScreens.get('root_message')?.options.map((option) => option.id)).not.toContain('dsa'); + expect(messageScreens.get('something_else_message')?.options.map((option) => option.id)).not.toContain('copyright'); + const messageDsa = getReportFlowResponse('message', 'dsa', 'en-US'); + expect( + messageDsa.screens.find((screen) => screen.id === 'something_else_message')?.options.map((option) => option.id), + ).toContain('copyright_notice'); + resolveReportFlowAnswers({ + target: 'user', + surface: 'in_app', + revisionHash: user.revision_hash, + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'spam'}, + {screen_id: 'spam_profile', option_id: 'spam_profile'}, + ], + }); + getConfig().instance.selfHosted = false; + expect(getReportFlowResponse('user', 'in_app', 'en-US')).toBe(hostedUser); + }); + + test('English copy names the product, uses US spelling and never names another product', () => { + const productName = getConfig().instance.branding.productName || 'Fluxer'; + const rendered = VARIANTS.map(([target, surface]) => + JSON.stringify(getReportFlowResponse(target, surface, 'en-US')), + ).join('\n'); + expect(rendered).not.toMatch(/discord/i); + expect(rendered).not.toContain('{product_name}'); + expect(rendered).toContain(`They're under the minimum age to use ${productName}`); + expect(rendered).toContain(`Read the ${productName} Community Guidelines`); + expect(rendered).toContain(`${productName} staff or support`); + expect(rendered).toContain('Sexualizing'); + expect(rendered).toContain('organization'); + expect(rendered).not.toMatch(/behaviour|organisation|colour|sexualis|labelled/); + for (const [key, value] of Object.entries(CONTENT_I18N_MESSAGES)) { + if (key.startsWith('report_flow.')) { + expect(value, key).not.toMatch(/[—;]/); + expect(value, key).not.toMatch(/discord/i); + } + } + }); + + test('locale tags resolve to a supported locale', () => { + expect(resolveReportFlowLocale('nb')).toBe('no'); + expect(resolveReportFlowLocale('nb_NO')).toBe('no'); + expect(resolveReportFlowLocale('nn')).toBe('no'); + expect(resolveReportFlowLocale('zh-Hant')).toBe('zh-CN'); + expect(resolveReportFlowLocale('sv')).toBe('sv-SE'); + expect(resolveReportFlowLocale('pt')).toBe('pt-BR'); + expect(resolveReportFlowLocale('pt_BR')).toBe('pt-BR'); + expect(resolveReportFlowLocale('de')).toBe('de'); + expect(resolveReportFlowLocale('xx-YY')).toBe('en-US'); + expect(resolveReportFlowLocale(undefined)).toBe('en-US'); + expect(getReportFlowResponse('message', 'in_app', 'nb').locale).toBe('no'); + expect(getReportFlowResponse('message', 'in_app', 'xx-YY').locale).toBe('en-US'); + }); +}); + +describe('report flow answers for staff', () => { + test('describes a stored walk in English', () => { + const resolved = resolve('user', 'in_app', [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text', 'photo']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'harassment'}, + ]); + const steps = parseReportFlowSteps(resolved.stepsJson); + expect(steps).toEqual(resolved.steps); + expect( + describeReportFlowAnswers({revisionHash: 'abc', surface: 'in_app', locale: 'de', steps: steps ?? []}), + ).toEqual({ + revision_hash: 'abc', + surface: 'in_app', + locale: 'de', + steps: [ + { + screen_id: 'profile_intro', + screen_title: 'Report profile', + option_id: null, + option_label: null, + items: [], + }, + { + screen_id: 'profile_parts', + screen_title: 'Which parts of their profile are a problem?', + option_id: null, + option_label: null, + items: [ + {id: 'photo', label: 'Pictures'}, + {id: 'profile_text', label: 'Profile text'}, + ], + }, + { + screen_id: 'root_user', + screen_title: "What's wrong with their profile?", + option_id: 'abuse', + option_label: 'Abusive or harmful content', + items: [], + }, + { + screen_id: 'profile_abuse', + screen_title: "What's harmful about their profile?", + option_id: 'harassment', + option_label: 'Their profile harasses or targets me or someone else', + items: [], + }, + ], + }); + }); + + test('unknown ids are described by their raw id', () => { + expect( + describeReportFlowAnswers({ + revisionHash: 'abc', + surface: 'dsa', + locale: null, + steps: [ + {screen_id: 'retired_screen', option_id: 'gone'}, + {screen_id: 'root_message', option_id: 'gone'}, + {screen_id: 'private_info', item_ids: ['email', 'gone']}, + ], + }).steps, + ).toEqual([ + {screen_id: 'retired_screen', screen_title: 'retired_screen', option_id: 'gone', option_label: 'gone', items: []}, + {screen_id: 'root_message', screen_title: 'Report message', option_id: 'gone', option_label: 'gone', items: []}, + { + screen_id: 'private_info', + screen_title: 'Which private details are involved?', + option_id: null, + option_label: null, + items: [ + {id: 'email', label: 'Email address'}, + {id: 'gone', label: 'gone'}, + ], + }, + ]); + }); + + test('stored steps parse totally', () => { + expect(parseReportFlowSteps(null)).toBeNull(); + expect(parseReportFlowSteps('')).toBeNull(); + expect(parseReportFlowSteps('{')).toBeNull(); + expect(parseReportFlowSteps('{"screen_id":"a"}')).toBeNull(); + expect(parseReportFlowSteps('[{"option_id":"a"}]')).toBeNull(); + expect(parseReportFlowSteps('[{"screen_id":"a","item_ids":[1]}]')).toBeNull(); + expect(parseReportFlowSteps('[null]')).toBeNull(); + expect(parseReportFlowSteps('[{"screen_id":"a","extra":true},{"screen_id":"b","item_ids":["c"]}]')).toEqual([ + {screen_id: 'a'}, + {screen_id: 'b', item_ids: ['c']}, + ]); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportFlows.test.ts b/fluxer_api/src/api/report/tests/ReportFlows.test.ts new file mode 100644 index 000000000..01b3bc16f --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportFlows.test.ts @@ -0,0 +1,1311 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createTestAccount, type TestAccount, unclaimAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createReportID} from '@app/api/BrandedTypes'; +import {createTestBotAccount} from '@app/api/bot/tests/BotTestUtils'; +import {getConfig} from '@app/api/Config'; +import { + createChannel, + createDmChannel, + createFriendship, + getChannel, + leaveGuild, + sendChannelMessage, + setupTestGuildWithMembers, +} from '@app/api/channel/tests/ChannelTestUtils'; +import {resetActivityEventsForTests, startActivityEvents} from '@app/api/infrastructure/activity/ActivityEvents'; +import type {ActivityPublisher} from '@app/api/infrastructure/activity/ActivitySpool'; +import {phraseBlocklistCache} from '@app/api/middleware/PhraseBlocklistCache'; +import {getRateLimitService} from '@app/api/middleware/ServiceSingletons'; +import { + getReportFlowResponse, + getReportFlowVariant, + type ReportFlowStepInput, + resolveReportFlowAnswers, +} from '@app/api/report/flows/ReportFlowRegistry'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {MockKVProvider} from '@app/api/test/mocks/MockKVProvider'; +import {HTTP_STATUS, TEST_IDS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {UserFlags} from '@fluxer/constants/src/UserConstants'; +import { + ReportFlowResponse, + type ReportFlowSurface, + type ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; + +interface ReportResponse { + report_id: string; + status: string; + reported_at: string; +} + +interface ErrorResponse { + code: string; + step_index?: number; + errors?: Array<{path: string; code: string}>; +} + +interface MessageTarget { + reporter: TestAccount; + author: TestAccount; + guildId: string; + channelId: string; + messageId: string; +} + +interface Walk { + name: string; + steps: ReadonlyArray; + reason: string; + category: string; +} + +const HAS_SESSION_STARTED = 1n << 39n; +const RATE_LIMIT_HEADER = 'x-fluxer-test-enable-rate-limits'; + +const VARIANTS: ReadonlyArray = [ + ['message', 'in_app'], + ['user', 'in_app'], + ['message', 'dsa'], + ['user', 'dsa'], + ['guild', 'dsa'], +]; + +const MESSAGE_WALKS: ReadonlyArray = [ + {name: 'S3 spam', steps: [{screen_id: 'root_message', option_id: 'spam'}], reason: 'spam', category: 'spam'}, + { + name: 'S6 private information', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['phone', 'email']}, + ], + reason: 'doxxing', + category: 'doxxing', + }, + { + name: 'S6 intimate photo override', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['face_photo', 'intimate_photo']}, + ], + reason: 'intimate_image_abuse', + category: 'doxxing', + }, + { + name: 'S8 S9 age stated', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'too_young'}, + {screen_id: 'age_stated_message', option_id: 'age_yes'}, + ], + reason: 'underage', + category: 'underage_user', + }, + { + name: 'S11 S12 self-harm worry', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'self_harm'}, + {screen_id: 'self_harm', option_id: 'worried_self_harm'}, + ], + reason: 'wellbeing_concern', + category: 'self_harm', + }, + { + name: 'S14 harmful false claims', + steps: [ + {screen_id: 'root_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'false_info'}, + {screen_id: 'false_info', option_id: 'harmful_false_claims'}, + ], + reason: 'harmful_false_claims', + category: 'other', + }, + { + name: 'S15 fraud', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'impersonation'}, + {screen_id: 'impersonation', option_id: 'fraud'}, + ], + reason: 'fraud', + category: 'illegal_activity', + }, + { + name: 'S18 to S21 csam', + steps: [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'sexual'}, + {screen_id: 'sexual', option_id: 'minor_sexual'}, + {screen_id: 'minor_sexual', option_id: 'csam'}, + ], + reason: 'csam', + category: 'child_safety', + }, + { + name: 'S1 to S5 terrorism', + steps: [ + {screen_id: 'root_message', option_id: 'violence_misinfo'}, + {screen_id: 'violence_misinfo', option_id: 'terrorism'}, + ], + reason: 'terrorism_extremism', + category: 'violent_content', + }, +]; + +const USER_WALKS: ReadonlyArray = [ + { + name: 'P1 to P3 harassment', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo', 'profile_text']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'harassment'}, + ], + reason: 'harassment', + category: 'harassment', + }, + { + name: 'P5 private information', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'private_info'}, + {screen_id: 'profile_private_info', item_ids: ['phone', 'address']}, + ], + reason: 'doxxing', + category: 'inappropriate_profile', + }, + { + name: 'P4 self-harm worry', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'self_harm'}, + {screen_id: 'crisis_support'}, + {screen_id: 'self_harm_profile', option_id: 'worried'}, + ], + reason: 'wellbeing_concern', + category: 'other', + }, + { + name: 'P4 age stated', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'too_young'}, + {screen_id: 'age_stated_profile', option_id: 'age_yes'}, + ], + reason: 'underage', + category: 'underage_user', + }, + { + name: 'spam profile', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['name']}, + {screen_id: 'root_user', option_id: 'spam'}, + {screen_id: 'spam_profile', option_id: 'spam_profile'}, + ], + reason: 'spam', + category: 'spam_account', + }, + { + name: 'staff impersonation', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['name', 'photo']}, + {screen_id: 'root_user', option_id: 'impersonation'}, + {screen_id: 'impersonation', option_id: 'impersonation_staff'}, + ], + reason: 'impersonation_staff', + category: 'impersonation', + }, + { + name: 'hateful profile', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'hate_violence'}, + {screen_id: 'profile_hate_violence', option_id: 'hate'}, + {screen_id: 'hate', option_id: 'hate_slurs'}, + ], + reason: 'hate_slurs', + category: 'hate_speech', + }, + { + name: 'csam in a profile', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'abuse'}, + {screen_id: 'profile_abuse', option_id: 'sexual'}, + {screen_id: 'profile_sexual', option_id: 'minor_sexual'}, + {screen_id: 'profile_minor_sexual', option_id: 'csam'}, + ], + reason: 'csam', + category: 'child_safety', + }, +]; + +const SPAM_WALK: ReadonlyArray = [{screen_id: 'root_message', option_id: 'spam'}]; +const USER_SPAM_WALK: ReadonlyArray = USER_WALKS[4].steps; + +class CapturingPublisher implements ActivityPublisher { + readonly payloads: Array = []; + + async publish(_subject: string, payload: string): Promise { + this.payloads.push(payload); + } +} + +function currentHash(target: ReportFlowTargetType, surface: ReportFlowSurface = 'in_app'): string { + return getReportFlowVariant(target, surface).revisionHash; +} + +function expectedSteps(target: ReportFlowTargetType, steps: ReadonlyArray) { + return resolveReportFlowAnswers({target, surface: 'in_app', revisionHash: currentHash(target), steps}).steps; +} + +function screenKind(screen: ReportFlowResponse['screens'][number]): string { + if (screen.checklist) return 'checklist'; + if (screen.next_screen_id) return 'info'; + return 'choice'; +} + +function optionIds(flow: ReportFlowResponse): Array { + return flow.screens.flatMap((screen) => screen.options.map((option) => option.id)); +} + +async function readReport(reportId: string) { + const report = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + if (!report) { + throw new Error(`Report ${reportId} was not stored`); + } + return report; +} + +async function countReports(): Promise { + return (await new ReportRepository().listAllReportsPaginated(100)).length; +} + +async function setupMessage(harness: ApiTestHarness): Promise { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const author = members[0]; + const channel = await getChannel(harness, owner.token, guild.system_channel_id!); + const message = await sendChannelMessage(harness, author.token, channel.id, 'Reported message'); + return {reporter: owner, author, guildId: guild.id, channelId: channel.id, messageId: message.id}; +} + +async function setupDmMessages( + harness: ApiTestHarness, + reporter: TestAccount, + count: number, +): Promise<{channelId: string; messageIds: Array}> { + const author = await createTestAccount(harness); + await createFriendship(harness, reporter, author); + const channel = await createDmChannel(harness, author.token, reporter.userId); + const messageIds: Array = []; + for (let index = 0; index < count; index++) { + messageIds.push((await sendChannelMessage(harness, author.token, channel.id, `DM message ${index}`)).id); + } + return {channelId: channel.id, messageIds}; +} + +function messageBody(target: {channelId: string; messageId: string}, steps = SPAM_WALK, extra = {}) { + return { + channel_id: target.channelId, + message_id: target.messageId, + revision_hash: currentHash('message'), + steps, + ...extra, + }; +} + +function userBody(userId: string, steps = USER_SPAM_WALK, extra = {}) { + return {user_id: userId, revision_hash: currentHash('user'), steps, ...extra}; +} + +function submitMessage(harness: ApiTestHarness, token: string, body: unknown) { + return createBuilder(harness, token).post('/reports/flows/message/submissions').body(body); +} + +function submitUser(harness: ApiTestHarness, token: string, body: unknown) { + return createBuilder(harness, token).post('/reports/flows/user/submissions').body(body); +} + +function legacyMessage(harness: ApiTestHarness, token: string, target: {channelId: string; messageId: string}) { + return createBuilder(harness, token) + .post('/reports/message') + .body({channel_id: target.channelId, message_id: target.messageId, category: 'spam'}); +} + +function legacyUser(harness: ApiTestHarness, token: string, userId: string) { + return createBuilder(harness, token) + .post('/reports/user') + .body({user_id: userId, category: 'spam_account'}); +} + +async function setUserFlags(harness: ApiTestHarness, userId: string, flags: bigint): Promise { + await createBuilder(harness, '').patch(`/test/users/${userId}/flags`).body({flags: flags.toString()}).execute(); +} + +describe('Report flows', () => { + let harness: ApiTestHarness; + const originalSelfHosted = getConfig().instance.selfHosted; + const originalProductName = getConfig().instance.branding.productName; + + beforeEach(async () => { + harness = await createApiTestHarness({search: 'enabled'}); + }); + + afterEach(async () => { + getConfig().instance.selfHosted = originalSelfHosted; + getConfig().instance.branding.productName = originalProductName; + resetActivityEventsForTests(); + await harness?.shutdown(); + }); + + describe('Fetch', () => { + test.each(VARIANTS)('%s on %s serves every reachable screen', async (target, surface) => { + const account = await createTestAccount(harness); + const flow = await createBuilder(harness, account.token) + .get(`/reports/flows/${target}?surface=${surface}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(ReportFlowResponse.safeParse(flow).success).toBe(true); + const variant = getReportFlowVariant(target, surface); + expect(flow.target_type).toBe(target); + expect(flow.surface).toBe(surface); + expect(flow.start_screen_id).toBe(variant.startScreenId); + expect(flow.screens[0].id).toBe(variant.startScreenId); + expect(flow.revision_hash).toBe(variant.revisionHash); + expect(flow.screens.map((screen) => screen.id).sort()).toEqual([...variant.screens.keys()].sort()); + for (const screen of flow.screens) { + expect(screenKind(screen), screen.id).toBe(variant.screens.get(screen.id)?.kind); + } + }); + + test('the default surface is in app and the hash is locale independent', async () => { + const english = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message?locale=en-US') + .expect(HTTP_STATUS.OK) + .execute(); + const german = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message?locale=de') + .expect(HTTP_STATUS.OK) + .execute(); + expect(english.surface).toBe('in_app'); + expect(english.revision_hash).toBe(german.revision_hash); + expect(english.revision_hash).toMatch(/^[0-9a-f]{16}$/); + }); + + test('works logged out and sends no-cache headers', async () => { + const {response, json} = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user') + .expect(HTTP_STATUS.OK) + .executeWithResponse(); + expect(json.start_screen_id).toBe('profile_intro'); + expect(response.headers.get('cache-control')).toBe('private, no-cache'); + expect(response.headers.get('vary')).toContain('Accept-Language'); + }); + + test('the DSA message flow drops the app-only rows and adds the copyright notice', async () => { + const inApp = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message') + .expect(HTTP_STATUS.OK) + .execute(); + const dsa = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message?surface=dsa') + .expect(HTTP_STATUS.OK) + .execute(); + const appOnly = ['dislike', 'rude_language', 'dsa', 'copyright', 'worried_self_harm', 'worried_suicide']; + for (const id of appOnly) { + expect(optionIds(inApp), id).toContain(id); + expect(optionIds(dsa), id).not.toContain(id); + } + expect(optionIds(inApp)).not.toContain('copyright_notice'); + expect(optionIds(dsa)).toContain('copyright_notice'); + expect(dsa.revision_hash).not.toBe(inApp.revision_hash); + }); + + test('the DSA user flow starts at the profile parts', async () => { + const flow = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user?surface=dsa') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.start_screen_id).toBe('profile_parts'); + expect(flow.screens.some((screen) => screen.id === 'profile_intro')).toBe(false); + }); + + test('the guild flow exists only on the DSA surface', async () => { + for (const path of ['/reports/flows/guild', '/reports/flows/guild?surface=in_app']) { + const error = await createBuilderWithoutAuth(harness) + .get(path) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect(error.errors?.map((entry) => entry.path)).toEqual(['surface']); + } + const flow = await createBuilderWithoutAuth(harness) + .get('/reports/flows/guild?surface=dsa') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.start_screen_id).toBe('community_parts'); + }); + + test('a self-hosted instance has no guidelines link', async () => { + const hosted = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user') + .expect(HTTP_STATUS.OK) + .execute(); + expect(hosted.guidelines_url).not.toBeNull(); + expect(hosted.screens[0].options.map((option) => option.id)).toEqual(['learn_more']); + getConfig().instance.selfHosted = true; + const selfHosted = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user') + .expect(HTTP_STATUS.OK) + .execute(); + expect(selfHosted.guidelines_url).toBeNull(); + expect(selfHosted.screens[0].options).toEqual([]); + expect(selfHosted.revision_hash).not.toBe(hosted.revision_hash); + }); + }); + + describe('Locale', () => { + test('the user locale picks the catalog', async () => { + const account = await createTestAccount(harness); + await createBuilder(harness, account.token) + .patch('/users/@me/settings') + .body({locale: 'de'}) + .expect(HTTP_STATUS.OK) + .execute(); + const flow = await createBuilder(harness, account.token) + .get('/reports/flows/message') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.locale).toBe('de'); + expect(flow).toEqual(getReportFlowResponse('message', 'in_app', 'de')); + }); + + test.each([ + ['sv', 'sv-SE'], + ['nb', 'no'], + ['pt', 'pt-BR'], + ['xx-YY', 'en-US'], + ])('?locale=%s resolves to %s', async (raw, resolved) => { + const flow = await createBuilderWithoutAuth(harness) + .get(`/reports/flows/message?locale=${raw}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.locale).toBe(resolved); + expect(flow).toEqual(getReportFlowResponse('message', 'in_app', resolved)); + }); + + test('the query locale wins over the user locale', async () => { + const account = await createTestAccount(harness); + await createBuilder(harness, account.token) + .patch('/users/@me/settings') + .body({locale: 'de'}) + .expect(HTTP_STATUS.OK) + .execute(); + const flow = await createBuilder(harness, account.token) + .get('/reports/flows/message?locale=ja') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.locale).toBe('ja'); + }); + + test('Accept-Language is used when logged out', async () => { + const flow = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user') + .header('Accept-Language', 'fr-FR,fr;q=0.9') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.locale).toBe('fr'); + }); + + test('the product name comes from the instance config', async () => { + getConfig().instance.branding.productName = 'Harbor Chat'; + const flow = await createBuilderWithoutAuth(harness) + .get('/reports/flows/user?locale=en-US') + .expect(HTTP_STATUS.OK) + .execute(); + expect(flow.screens[0].options[0].label).toBe('Read the Harbor Chat Community Guidelines'); + }); + }); + + describe('Unknown', () => { + test('an unknown target type is a validation error', async () => { + const error = await createBuilderWithoutAuth(harness) + .get('/reports/flows/webhook') + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect(error.errors?.map((entry) => entry.path)).toEqual(['target_type']); + }); + + test('an unknown surface is a validation error', async () => { + const error = await createBuilderWithoutAuth(harness) + .get('/reports/flows/message?surface=nope') + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + expect(error.errors?.map((entry) => entry.path)).toEqual(['surface']); + }); + }); + + describe('Submit, message', () => { + test.each(MESSAGE_WALKS)('$name stores $reason', async ({steps, reason, category}) => { + const target = await setupMessage(harness); + const result = await submitMessage(harness, target.reporter.token, messageBody(target, steps, {locale: 'de'})) + .expect(HTTP_STATUS.OK) + .execute(); + expect(result.status).toBe('pending'); + const report = await readReport(result.report_id); + expect(report.reason).toBe(reason); + expect(report.category).toBe(category); + expect(report.flowSteps).toEqual(expectedSteps('message', steps)); + expect(report.flowRevision).toBe(currentHash('message')); + expect(report.flowLocale).toBe('de'); + expect(report.flowSurface).toBe('in_app'); + expect(report.reporterGoodFaithConfirmed).toBeNull(); + expect(report.reportedMessageId?.toString()).toBe(target.messageId); + expect(report.reportedUserId?.toString()).toBe(target.author.userId); + }); + + test('checklist items are stored in definition order', async () => { + const target = await setupMessage(harness); + const result = await submitMessage(harness, target.reporter.token, messageBody(target, MESSAGE_WALKS[1].steps)) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.flowSteps?.[1]).toEqual({screen_id: 'private_info', item_ids: ['email', 'phone']}); + }); + + test('the locale falls back to the request locale and is resolved', async () => { + const target = await setupMessage(harness); + const first = await submitMessage(harness, target.reporter.token, messageBody(target, SPAM_WALK, {locale: 'nb'})) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(first.report_id)).flowLocale).toBe('no'); + const other = await setupMessage(harness); + await createBuilder(harness, other.reporter.token) + .patch('/users/@me/settings') + .body({locale: 'ja'}) + .expect(HTTP_STATUS.OK) + .execute(); + const second = await submitMessage(harness, other.reporter.token, messageBody(other)) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(second.report_id)).flowLocale).toBe('ja'); + }); + }); + + describe('Submit, user', () => { + test.each(USER_WALKS)('$name stores $reason as $category', async ({steps, reason, category}) => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const result = await submitUser(harness, reporter.token, userBody(target.userId, steps, {locale: 'sv'})) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reason).toBe(reason); + expect(report.category).toBe(category); + expect(report.flowSteps).toEqual(expectedSteps('user', steps)); + expect(report.flowRevision).toBe(currentHash('user')); + expect(report.flowLocale).toBe('sv-SE'); + expect(report.flowSurface).toBe('in_app'); + expect(report.reportedUserId?.toString()).toBe(target.userId); + }); + + test('the guild context is kept', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const result = await submitUser( + harness, + owner.token, + userBody(members[0].userId, USER_SPAM_WALK, {guild_id: guild.id}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.reportedGuildId?.toString()).toBe(guild.id); + expect(report.reason).toBe('spam'); + }); + + test('a guild the reporter has not joined is answered like an unknown guild', async () => { + const {members, guild} = await setupTestGuildWithMembers(harness, 2); + const [target, formerMember] = members; + const outsider = await createTestAccount(harness); + const unknown = await submitUser( + harness, + outsider.token, + userBody(target.userId, USER_SPAM_WALK, {guild_id: TEST_IDS.NONEXISTENT_GUILD}), + ) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + const notJoined = await submitUser( + harness, + outsider.token, + userBody(target.userId, USER_SPAM_WALK, {guild_id: guild.id}), + ) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + expect(notJoined.text).toBe(unknown.text); + await leaveGuild(harness, formerMember.token, guild.id); + const left = await submitUser( + harness, + formerMember.token, + userBody(target.userId, USER_SPAM_WALK, {guild_id: guild.id}), + ) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .executeRaw(); + expect(left.text).toBe(unknown.text); + expect(await countReports()).toBe(0); + await submitUser(harness, outsider.token, userBody(target.userId)).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(1); + }); + }); + + describe('Invalid walks', () => { + const messageCases: ReadonlyArray<{name: string; steps: ReadonlyArray; stepIndex: number}> = [ + {name: 'wrong start', steps: [{screen_id: 'abuse', option_id: 'harassment'}], stepIndex: 0}, + { + name: 'unknown screen', + steps: [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'nope', option_id: 'harassment'}, + ], + stepIndex: 1, + }, + {name: 'option not on the screen', steps: [{screen_id: 'root_message', option_id: 'csam'}], stepIndex: 0}, + { + name: 'a DSA-only option in app', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'copyright_notice'}, + ], + stepIndex: 1, + }, + { + name: 'skipped screen', + steps: [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'harassment', option_id: 'harassment_direct'}, + ], + stepIndex: 1, + }, + {name: 'walk ending on a screen', steps: [{screen_id: 'root_message', option_id: 'abuse'}], stepIndex: 0}, + {name: 'walk through dislike', steps: [{screen_id: 'root_message', option_id: 'dislike'}], stepIndex: 0}, + { + name: 'walk through rude language', + steps: [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'rude_language'}, + ], + stepIndex: 1, + }, + { + name: 'walk through a link', + steps: [ + {screen_id: 'root_message', option_id: 'something_else'}, + {screen_id: 'something_else_message', option_id: 'dsa'}, + ], + stepIndex: 1, + }, + { + name: 'unknown item', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['nope']}, + ], + stepIndex: 1, + }, + { + name: 'duplicate items', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: ['email', 'email']}, + ], + stepIndex: 1, + }, + { + name: 'option on a checklist', + steps: [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', option_id: 'email'}, + ], + stepIndex: 1, + }, + { + name: 'step after a submit', + steps: [ + {screen_id: 'root_message', option_id: 'spam'}, + {screen_id: 'root_message', option_id: 'spam'}, + ], + stepIndex: 1, + }, + ]; + + test.each(messageCases)('message: $name fails at step $stepIndex', async ({steps, stepIndex}) => { + const target = await setupMessage(harness); + const error = await submitMessage(harness, target.reporter.token, messageBody(target, steps)) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + expect(error).toMatchObject({step_index: stepIndex}); + expect(await countReports()).toBe(0); + }); + + const userCases: ReadonlyArray<{name: string; steps: ReadonlyArray; stepIndex: number}> = [ + { + name: 'missing info step', + steps: [ + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'spam'}, + {screen_id: 'spam_profile', option_id: 'spam_profile'}, + ], + stepIndex: 0, + }, + { + name: 'option on an info step', + steps: [ + {screen_id: 'profile_intro', option_id: 'learn_more'}, + {screen_id: 'profile_parts', item_ids: ['photo']}, + {screen_id: 'root_user', option_id: 'spam'}, + {screen_id: 'spam_profile', option_id: 'spam_profile'}, + ], + stepIndex: 0, + }, + { + name: 'missing crisis support step', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'self_harm'}, + {screen_id: 'self_harm_profile', option_id: 'worried'}, + ], + stepIndex: 4, + }, + { + name: 'age not stated', + steps: [ + {screen_id: 'profile_intro'}, + {screen_id: 'profile_parts', item_ids: ['profile_text']}, + {screen_id: 'root_user', option_id: 'something_else'}, + {screen_id: 'something_else_user', option_id: 'too_young'}, + {screen_id: 'age_stated_profile', option_id: 'age_no'}, + ], + stepIndex: 4, + }, + ]; + + test.each(userCases)('user: $name fails at step $stepIndex', async ({steps, stepIndex}) => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const error = await submitUser(harness, reporter.token, userBody(target.userId, steps)) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + expect(error).toMatchObject({step_index: stepIndex}); + expect(await countReports()).toBe(0); + }); + + test('shape errors are standard validation errors', async () => { + const target = await setupMessage(harness); + const seventeen = Array.from({length: 17}, () => ({screen_id: 'root_message', option_id: 'spam'})); + const shapes = [ + messageBody(target, seventeen), + messageBody(target, []), + messageBody(target, [ + {screen_id: 'root_message', option_id: 'private_info'}, + {screen_id: 'private_info', item_ids: []}, + ]), + messageBody(target, [{screen_id: 'x'.repeat(49), option_id: 'spam'}]), + {...messageBody(target), revision_hash: undefined}, + ]; + for (const body of shapes) { + await submitMessage(harness, target.reporter.token, body) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_FORM_BODY) + .execute(); + } + expect(await countReports()).toBe(0); + }); + + test('invalid walks leave no row, spend no service allowance and leave no reservation', async () => { + const target = await setupMessage(harness); + for (let attempt = 0; attempt < 6; attempt++) { + await submitMessage( + harness, + target.reporter.token, + messageBody(target, [{screen_id: 'root_message', option_id: 'dislike'}]), + ) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + } + expect(await countReports()).toBe(0); + await submitMessage(harness, target.reporter.token, messageBody(target)).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(1); + }); + }); + + describe('Revision', () => { + test('a stale hash with a valid walk is accepted and stored', async () => { + const target = await setupMessage(harness); + const result = await submitMessage( + harness, + target.reporter.token, + messageBody(target, SPAM_WALK, {revision_hash: '0000000000000000'}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.flowRevision).toBe('0000000000000000'); + expect(report.reason).toBe('spam'); + }); + + test('a stale hash with an invalid walk is outdated', async () => { + const target = await setupMessage(harness); + await submitMessage( + harness, + target.reporter.token, + messageBody(target, [{screen_id: 'root_message', option_id: 'retired_option'}], { + revision_hash: '0000000000000000', + }), + ) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.REPORT_FLOW_OUTDATED) + .execute(); + const reporter = await createTestAccount(harness); + const user = await createTestAccount(harness); + await submitUser( + harness, + reporter.token, + userBody(user.userId, [{screen_id: 'profile_parts', item_ids: ['photo']}], { + revision_hash: '0000000000000000', + }), + ) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.REPORT_FLOW_OUTDATED) + .execute(); + expect(await countReports()).toBe(0); + }); + + test('the current hash with an invalid walk is a 400', async () => { + const target = await setupMessage(harness); + await submitMessage( + harness, + target.reporter.token, + messageBody(target, [{screen_id: 'root_message', option_id: 'retired_option'}]), + ) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + }); + }); + + describe('Legacy rules', () => { + test('the author cannot report their own message', async () => { + const target = await setupMessage(harness); + await submitMessage(harness, target.author.token, messageBody(target)) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CANNOT_REPORT_OWN_MESSAGE) + .execute(); + }); + + test('a user cannot report their own profile', async () => { + const reporter = await createTestAccount(harness); + await submitUser(harness, reporter.token, userBody(reporter.userId)) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CANNOT_REPORT_YOURSELF) + .execute(); + }); + + test('an unverified reporter is refused before the walk is checked', async () => { + const target = await setupMessage(harness); + const unverified = await createTestAccount(harness, {skipEmailVerification: true}); + await submitMessage(harness, unverified.token, messageBody(target, [{screen_id: 'nope', option_id: 'x'}])) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.REPORT_EMAIL_VERIFICATION_REQUIRED) + .execute(); + await submitUser(harness, unverified.token, userBody(target.author.userId)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.REPORT_EMAIL_VERIFICATION_REQUIRED) + .execute(); + }); + + test('an unclaimed reporter is refused', async () => { + const target = await setupMessage(harness); + await unclaimAccount(harness, target.reporter.userId); + await submitMessage(harness, target.reporter.token, messageBody(target)) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS) + .execute(); + }); + + test('a report-banned reporter is refused', async () => { + const target = await setupMessage(harness); + await setUserFlags(harness, target.reporter.userId, HAS_SESSION_STARTED | UserFlags.REPORT_BANNED); + await submitMessage(harness, target.reporter.token, messageBody(target)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.REPORT_BANNED) + .execute(); + await submitUser(harness, target.reporter.token, userBody(target.author.userId)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.REPORT_BANNED) + .execute(); + }); + + test('bots and logged out callers cannot submit', async () => { + const target = await setupMessage(harness); + const bot = await createTestBotAccount(harness); + await submitMessage(harness, `Bot ${bot.botToken}`, messageBody(target)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.ACCESS_DENIED) + .execute(); + await submitUser(harness, `Bot ${bot.botToken}`, userBody(target.author.userId)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.ACCESS_DENIED) + .execute(); + await submitMessage(harness, '', messageBody(target)).expect(HTTP_STATUS.UNAUTHORIZED).execute(); + }); + + test('channel access is checked as on the legacy route', async () => { + const target = await setupMessage(harness); + const outsider = await createTestAccount(harness); + await submitMessage(harness, outsider.token, messageBody(target)) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.ACCESS_DENIED) + .execute(); + await legacyMessage(harness, outsider.token, target) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.ACCESS_DENIED) + .execute(); + await submitMessage(harness, target.reporter.token, { + ...messageBody(target), + channel_id: TEST_IDS.NONEXISTENT_CHANNEL, + }) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_CHANNEL) + .execute(); + await submitUser(harness, target.reporter.token, userBody(TEST_IDS.NONEXISTENT_USER)) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_USER) + .execute(); + expect(await countReports()).toBe(0); + }); + }); + + describe('Dedupe', () => { + test('v2 and legacy message reports share the reservation', async () => { + const first = await setupMessage(harness); + await legacyMessage(harness, first.reporter.token, first).expect(HTTP_STATUS.OK).execute(); + await submitMessage(harness, first.reporter.token, messageBody(first)) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + const second = await setupMessage(harness); + await submitMessage(harness, second.reporter.token, messageBody(second)).expect(HTTP_STATUS.OK).execute(); + await legacyMessage(harness, second.reporter.token, second) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(2); + }); + + test('v2 and legacy user reports share a 24 hour reservation', async () => { + const reporter = await createTestAccount(harness); + const first = await createTestAccount(harness); + const second = await createTestAccount(harness); + await legacyUser(harness, reporter.token, first.userId).expect(HTTP_STATUS.OK).execute(); + await submitUser(harness, reporter.token, userBody(first.userId)) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + await submitUser(harness, reporter.token, userBody(second.userId)).expect(HTTP_STATUS.OK).execute(); + await legacyUser(harness, reporter.token, second.userId) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + const other = await createTestAccount(harness); + await submitUser(harness, other.token, userBody(first.userId)).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(3); + }); + + test('parallel message submissions file one report', async () => { + const reporter = await createTestAccount(harness); + const {channelId, messageIds} = await setupDmMessages(harness, reporter, 2); + const v2 = await Promise.all( + [0, 1, 2].map(() => + submitMessage(harness, reporter.token, messageBody({channelId, messageId: messageIds[0]})).executeRaw(), + ), + ); + expect(v2.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + const legacy = await Promise.all( + [0, 1, 2].map(() => legacyMessage(harness, reporter.token, {channelId, messageId: messageIds[1]}).executeRaw()), + ); + expect(legacy.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + expect(await countReports()).toBe(2); + }); + + test('parallel user submissions file one report', async () => { + const reporter = await createTestAccount(harness); + const first = await createTestAccount(harness); + const second = await createTestAccount(harness); + const v2 = await Promise.all( + [0, 1, 2].map(() => submitUser(harness, reporter.token, userBody(first.userId)).executeRaw()), + ); + expect(v2.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + const legacy = await Promise.all( + [0, 1, 2].map(() => legacyUser(harness, reporter.token, second.userId).executeRaw()), + ); + expect(legacy.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + expect(await countReports()).toBe(2); + }); + + test('a rate limited message report releases its reservation', async () => { + const reporter = await createTestAccount(harness); + const {channelId, messageIds} = await setupDmMessages(harness, reporter, 4); + for (const messageId of messageIds.slice(0, 3)) { + await submitMessage(harness, reporter.token, messageBody({channelId, messageId})) + .expect(HTTP_STATUS.OK) + .execute(); + } + const limited = {channelId, messageId: messageIds[3]}; + for (let attempt = 0; attempt < 2; attempt++) { + await submitMessage(harness, reporter.token, messageBody(limited)) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + } + await getRateLimitService().resetLimit(`report:message:channel:user:${reporter.userId}:${channelId}`); + await submitMessage(harness, reporter.token, messageBody(limited)).expect(HTTP_STATUS.OK).execute(); + expect(await countReports()).toBe(4); + }); + + test('a repeat user submission past the reporter allowance is rate limited', async () => { + const reporter = await createTestAccount(harness); + const users = await Promise.all([0, 1, 2, 3, 4].map(() => createTestAccount(harness))); + for (const user of users) { + await submitUser(harness, reporter.token, userBody(user.userId)).expect(HTTP_STATUS.OK).execute(); + } + await submitUser(harness, reporter.token, userBody(users[0].userId)) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + await getRateLimitService().resetLimit(`report:create:user:${reporter.userId}`); + await submitUser(harness, reporter.token, userBody(users[0].userId)) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(5); + }); + + test('a rate limited user report releases its reservation', async () => { + const reporter = await createTestAccount(harness); + for (let index = 0; index < 5; index++) { + const user = await createTestAccount(harness); + await submitUser(harness, reporter.token, userBody(user.userId)).expect(HTTP_STATUS.OK).execute(); + } + const limited = await createTestAccount(harness); + for (let attempt = 0; attempt < 2; attempt++) { + await submitUser(harness, reporter.token, userBody(limited.userId)) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + } + await getRateLimitService().resetLimit(`report:create:user:${reporter.userId}`); + await submitUser(harness, reporter.token, userBody(limited.userId)).expect(HTTP_STATUS.OK).execute(); + await submitUser(harness, reporter.token, userBody(limited.userId)) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + expect(await countReports()).toBe(6); + }); + }); + + describe('Limits', () => { + test('a message report refused by the guild limit spends no other allowance', async () => { + const {owner, members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 1); + const author = members[0]; + const second = await createChannel(harness, owner.token, guild.id, 'second-channel'); + const first: Array = []; + for (let index = 0; index < 3; index++) { + first.push((await sendChannelMessage(harness, author.token, systemChannel.id, `First ${index}`)).id); + } + const other: Array = []; + for (let index = 0; index < 2; index++) { + other.push((await sendChannelMessage(harness, author.token, second.id, `Second ${index}`)).id); + } + for (const messageId of first) { + await submitMessage(harness, owner.token, messageBody({channelId: systemChannel.id, messageId})) + .expect(HTTP_STATUS.OK) + .execute(); + } + await submitMessage(harness, owner.token, messageBody({channelId: second.id, messageId: other[0]})) + .expect(HTTP_STATUS.OK) + .execute(); + const limited = {channelId: second.id, messageId: other[1]}; + const remaining = async (identifier: string, maxAttempts: number) => + (await getRateLimitService().peekLimit({identifier, maxAttempts, windowMs: 3_600_000})).remaining; + const budgets = async () => ({ + reporter: await remaining(`report:create:user:${owner.userId}`, 5), + channel: await remaining(`report:message:channel:user:${owner.userId}:${second.id}`, 3), + target: await remaining(`report:message:target:${limited.messageId}`, 20), + guild: await remaining(`report:message:guild:user:${owner.userId}:${guild.id}`, 4), + }); + expect(await budgets()).toEqual({reporter: 1, channel: 2, target: 20, guild: 0}); + for (let attempt = 0; attempt < 2; attempt++) { + await submitMessage(harness, owner.token, messageBody(limited)) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + } + expect(await budgets()).toEqual({reporter: 1, channel: 2, target: 20, guild: 0}); + await getRateLimitService().resetLimit(`report:message:guild:user:${owner.userId}:${guild.id}`); + await submitMessage(harness, owner.token, messageBody(limited)).expect(HTTP_STATUS.OK).execute(); + expect(await budgets()).toEqual({reporter: 0, channel: 1, target: 19, guild: 3}); + expect(await countReports()).toBe(5); + }); + + test('the service limit is shared with the legacy routes', async () => { + const reporter = await createTestAccount(harness); + const dmA = await setupDmMessages(harness, reporter, 2); + const dmB = await setupDmMessages(harness, reporter, 1); + await legacyMessage(harness, reporter.token, {channelId: dmA.channelId, messageId: dmA.messageIds[0]}) + .expect(HTTP_STATUS.OK) + .execute(); + await submitMessage( + harness, + reporter.token, + messageBody({channelId: dmA.channelId, messageId: dmA.messageIds[1]}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + await submitMessage( + harness, + reporter.token, + messageBody({channelId: dmB.channelId, messageId: dmB.messageIds[0]}), + ) + .expect(HTTP_STATUS.OK) + .execute(); + const users = await Promise.all([0, 1, 2].map(() => createTestAccount(harness))); + await legacyUser(harness, reporter.token, users[0].userId).expect(HTTP_STATUS.OK).execute(); + await submitUser(harness, reporter.token, userBody(users[1].userId)).expect(HTTP_STATUS.OK).execute(); + await submitUser(harness, reporter.token, userBody(users[2].userId)) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + expect(await countReports()).toBe(5); + }); + + test('the route bucket is shared and invalid walks spend a route token but no service token', async () => { + const reporter = await createTestAccount(harness); + const dm = await setupDmMessages(harness, reporter, 3); + for (let attempt = 0; attempt < 6; attempt++) { + await submitMessage( + harness, + reporter.token, + messageBody({channelId: dm.channelId, messageId: dm.messageIds[0]}, [ + {screen_id: 'root_message', option_id: 'dislike'}, + ]), + ) + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS) + .execute(); + } + await legacyMessage(harness, reporter.token, {channelId: dm.channelId, messageId: dm.messageIds[0]}) + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.OK) + .execute(); + await submitMessage(harness, reporter.token, messageBody({channelId: dm.channelId, messageId: dm.messageIds[1]})) + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.OK) + .execute(); + const users = await Promise.all([0, 1, 2].map(() => createTestAccount(harness))); + await legacyUser(harness, reporter.token, users[0].userId) + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.OK) + .execute(); + await submitUser(harness, reporter.token, userBody(users[1].userId)) + .header(RATE_LIMIT_HEADER, 'true') + .expect(HTTP_STATUS.OK) + .execute(); + await submitUser(harness, reporter.token, userBody(users[2].userId)) + .header(RATE_LIMIT_HEADER, 'true') + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + expect(await countReports()).toBe(4); + await submitUser(harness, reporter.token, userBody(users[2].userId)).expect(HTTP_STATUS.OK).execute(); + }); + }); + + describe('Content filter', () => { + test('a blocked phrase equal to an item id does not block a submission', async () => { + const target = await setupMessage(harness); + const phrases = ['email', 'phone', 'private_info', 'root_message']; + for (const phrase of phrases) phraseBlocklistCache.add(phrase); + try { + const result = await submitMessage(harness, target.reporter.token, messageBody(target, MESSAGE_WALKS[1].steps)) + .expect(HTTP_STATUS.OK) + .execute(); + expect((await readReport(result.report_id)).reason).toBe('doxxing'); + } finally { + for (const phrase of phrases) phraseBlocklistCache.remove(phrase); + } + }); + }); + + describe('Events', () => { + test('report_filed keeps the legacy category and target type', async () => { + const publisher = new CapturingPublisher(); + await startActivityEvents({publisher, kv: new MockKVProvider()}); + const target = await setupMessage(harness); + await submitMessage(harness, target.reporter.token, messageBody(target, MESSAGE_WALKS[7].steps)) + .expect(HTTP_STATUS.OK) + .execute(); + const reporter = await createTestAccount(harness); + await submitUser(harness, reporter.token, userBody(target.author.userId, USER_WALKS[1].steps)) + .expect(HTTP_STATUS.OK) + .execute(); + const filed = () => + publisher.payloads + .map((payload) => JSON.parse(payload) as {kind: string; data: Record}) + .filter((event) => event.kind === 'report_filed'); + await vi.waitFor(() => expect(filed()).toHaveLength(2)); + const events = filed().map((event) => event.data); + expect(events).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + category: 'child_safety', + target_type: 'message', + message_id: target.messageId, + reported_user_id: target.author.userId, + }), + expect.objectContaining({ + category: 'inappropriate_profile', + target_type: 'user', + reported_user_id: target.author.userId, + }), + ]), + ); + for (const event of events) { + expect(Object.keys(event).sort()).toEqual( + [ + 'category', + 'channel_id', + 'guild_id', + 'message_id', + 'report_id', + 'reported_user_id', + 'reporter_id', + 'target_type', + ].sort(), + ); + } + }); + }); + + describe('Legacy routes', () => { + test('the legacy message, user and guild routes still file reports with empty flow fields', async () => { + const target = await setupMessage(harness); + const message = await legacyMessage(harness, target.reporter.token, target).expect(HTTP_STATUS.OK).execute(); + const user = await createBuilder(harness, target.reporter.token) + .post('/reports/user') + .body({user_id: target.author.userId, category: 'inappropriate_profile', guild_id: target.guildId}) + .expect(HTTP_STATUS.OK) + .execute(); + const guild = await createBuilder(harness, target.author.token) + .post('/reports/guild') + .body({guild_id: target.guildId, category: 'raid_coordination'}) + .expect(HTTP_STATUS.OK) + .execute(); + const reports = await Promise.all([message, user, guild].map((result) => readReport(result.report_id))); + expect(reports.map((report) => report.category)).toEqual(['spam', 'inappropriate_profile', 'raid_coordination']); + for (const report of reports) { + expect(report.reason).toBeNull(); + expect(report.flowRevision).toBeNull(); + expect(report.flowSteps).toBeNull(); + expect(report.flowLocale).toBeNull(); + expect(report.flowSurface).toBeNull(); + expect(report.reporterGoodFaithConfirmed).toBeNull(); + } + }); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportProfileSnapshot.test.ts b/fluxer_api/src/api/report/tests/ReportProfileSnapshot.test.ts new file mode 100644 index 000000000..4eeabb97f --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportProfileSnapshot.test.ts @@ -0,0 +1,408 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { + clearTestEmails, + createTestAccount, + createUniqueEmail, + findLastTestEmail, + listTestEmails, + type TestAccount, +} from '@app/api/auth/tests/AuthTestUtils'; +import {createGuildID, createReportID, createUserID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {loadFixture} from '@app/api/channel/tests/AttachmentTestUtils'; +import { + createChannel, + sendChannelMessage, + setupTestGuildWithMembers, + updateGuild, +} from '@app/api/channel/tests/ChannelTestUtils'; +import {getPngDataUrl} from '@app/api/emoji/tests/EmojiTestUtils'; +import {GuildMemberRepository} from '@app/api/guild/repositories/GuildMemberRepository'; +import {ensureSessionStarted} from '@app/api/message/tests/MessageTestUtils'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {UserRepository} from '@app/api/user/repositories/UserRepository'; +import {grantPremium} from '@app/api/user/tests/UserTestUtils'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {UserFlags} from '@fluxer/constants/src/UserConstants'; +import type {GuildMemberResponse} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas'; +import type {GuildResponse} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas'; +import {listReportProfileSnapshotAssets} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; + +interface ReportResponse { + report_id: string; +} + +interface ProfileResponse { + id: string; + username: string; + discriminator: string; + global_name: string | null; + avatar: string | null; + bio: string | null; + pronouns: string | null; +} + +const PREMIUM_TYPE_SUBSCRIPTION = 2; +const FIRST_IMAGE = getPngDataUrl(); +const SECOND_IMAGE = `data:image/png;base64,${loadFixture('yeah.png').toString('base64')}`; + +async function readReport(reportId: string) { + const report = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + if (!report) { + throw new Error(`Report ${reportId} was not stored`); + } + return report; +} + +async function readSnapshot(reportId: string) { + const snapshot = (await readReport(reportId)).reportedProfileSnapshot; + if (!snapshot) { + throw new Error(`Report ${reportId} has no profile snapshot`); + } + return snapshot; +} + +async function countReports(): Promise { + return (await new ReportRepository().listAllReportsPaginated(100)).length; +} + +function updateProfile(harness: ApiTestHarness, token: string, body: Record) { + return createBuilder(harness, token).patch('/users/@me').body(body).expect(HTTP_STATUS.OK).execute(); +} + +function updateMemberProfile(harness: ApiTestHarness, token: string, guildId: string, body: Record) { + return createBuilder(harness, token) + .patch(`/guilds/${guildId}/members/@me`) + .body(body) + .expect(HTTP_STATUS.OK) + .execute(); +} + +function reportUser(harness: ApiTestHarness, token: string, userId: string, guildId?: string) { + return createBuilder(harness, token) + .post('/reports/user') + .body({user_id: userId, category: 'inappropriate_profile', ...(guildId ? {guild_id: guildId} : {})}); +} + +function reportGuild(harness: ApiTestHarness, token: string, guildId: string) { + return createBuilder(harness, token) + .post('/reports/guild') + .body({guild_id: guildId, category: 'harassment'}); +} + +async function issueTicket(harness: ApiTestHarness): Promise { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-profile'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + return ticket; +} + +function submitDsa(harness: ApiTestHarness, ticket: string, target: Record) { + return createBuilderWithoutAuth(harness) + .post('/reports/dsa') + .body({ + ticket, + category: 'harassment', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'DE', + ...target, + }); +} + +async function setupProfile( + harness: ApiTestHarness, +): Promise<{owner: TestAccount; target: TestAccount; guild: GuildResponse; profile: ProfileResponse}> { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const target = members[0]; + await ensureSessionStarted(harness, target.token); + await grantPremium(harness, target.userId, PREMIUM_TYPE_SUBSCRIPTION); + const profile = await updateProfile(harness, target.token, { + avatar: FIRST_IMAGE, + bio: 'Original bio', + pronouns: 'they/them', + global_name: 'Original Name', + }); + await updateMemberProfile(harness, target.token, guild.id, { + nick: 'Original Nick', + bio: 'Original guild bio', + avatar: FIRST_IMAGE, + }); + return {owner, target, guild, profile}; +} + +function reportsBucketHas(harness: ApiTestHarness, key: string | null | undefined): boolean { + return key != null && harness.storageService.hasObject(Config.s3.buckets.reports, key); +} + +describe('Report profile snapshots', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + test('a user report with guild context keeps the profile as it was when reported', async () => { + const {owner, target, guild, profile} = await setupProfile(harness); + const member = await new GuildMemberRepository().getMember( + createGuildID(BigInt(guild.id)), + createUserID(BigInt(target.userId)), + ); + expect(profile.avatar).toBeTruthy(); + expect(member?.nickname).toBe('Original Nick'); + expect(member?.avatarHash).toBeTruthy(); + const result = await reportUser(harness, owner.token, target.userId, guild.id).expect(HTTP_STATUS.OK).execute(); + const expected = { + captured_at: expect.any(String), + user: { + id: target.userId, + username: profile.username, + discriminator: Number(profile.discriminator), + global_name: 'Original Name', + bio: 'Original bio', + pronouns: 'they/them', + avatar: { + hash: profile.avatar, + key: `reports/${result.report_id}/profile/user_avatar/${profile.avatar}`, + }, + banner: null, + }, + member: { + guild_id: guild.id, + nick: 'Original Nick', + bio: member!.bio, + pronouns: member!.pronouns, + joined_at: member!.joinedAt.toISOString(), + avatar: { + hash: member!.avatarHash, + key: `reports/${result.report_id}/profile/member_avatar/${member!.avatarHash}`, + }, + banner: null, + }, + guild: null, + }; + const stored = await readSnapshot(result.report_id); + expect(stored).toEqual(expected); + expect(Number.isNaN(Date.parse(stored.captured_at))).toBe(false); + const userAvatarSource = `avatars/${target.userId}/${profile.avatar}`; + const memberAvatarSource = `guilds/${guild.id}/users/${target.userId}/avatars/${member!.avatarHash}`; + expect(harness.storageService.hasObject(Config.s3.buckets.cdn, userAvatarSource)).toBe(true); + expect(harness.storageService.hasObject(Config.s3.buckets.cdn, memberAvatarSource)).toBe(true); + expect(reportsBucketHas(harness, stored.user?.avatar?.key)).toBe(true); + expect(reportsBucketHas(harness, stored.member?.avatar?.key)).toBe(true); + const changed = await updateProfile(harness, target.token, { + avatar: SECOND_IMAGE, + bio: 'Changed bio', + global_name: 'Changed Name', + }); + expect(changed.avatar).not.toBe(profile.avatar); + await updateMemberProfile(harness, target.token, guild.id, {nick: 'Changed Nick', avatar: SECOND_IMAGE}); + await harness.storageService.deleteObject(Config.s3.buckets.cdn, userAvatarSource); + await harness.storageService.deleteObject(Config.s3.buckets.cdn, memberAvatarSource); + const after = await readSnapshot(result.report_id); + expect(after).toEqual(stored); + expect(reportsBucketHas(harness, after.user?.avatar?.key)).toBe(true); + expect(reportsBucketHas(harness, after.member?.avatar?.key)).toBe(true); + }); + + test('a user report without guild context keeps no member profile', async () => { + const {target, profile} = await setupProfile(harness); + const reporter = await createTestAccount(harness); + const result = await reportUser(harness, reporter.token, target.userId).expect(HTTP_STATUS.OK).execute(); + const stored = await readSnapshot(result.report_id); + expect(stored.user?.bio).toBe('Original bio'); + expect(stored.user?.avatar?.hash).toBe(profile.avatar); + expect(stored.member).toBeNull(); + expect(stored.guild).toBeNull(); + expect(listReportProfileSnapshotAssets(stored)).toHaveLength(1); + }); + + test('a guild report keeps the guild name and icon as they were when reported', async () => { + const {owner, members, guild} = await setupTestGuildWithMembers(harness, 1); + const named = await updateGuild(harness, owner.token, guild.id, {name: 'Original Guild', icon: FIRST_IMAGE}); + expect(named.icon).toBeTruthy(); + const result = await reportGuild(harness, members[0].token, guild.id).expect(HTTP_STATUS.OK).execute(); + const stored = await readSnapshot(result.report_id); + expect(stored).toEqual({ + captured_at: expect.any(String), + user: null, + member: null, + guild: { + id: guild.id, + name: 'Original Guild', + vanity_url_code: null, + icon: {hash: named.icon, key: `reports/${result.report_id}/profile/guild_icon/${named.icon}`}, + banner: null, + splash: null, + }, + }); + expect(reportsBucketHas(harness, stored.guild?.icon?.key)).toBe(true); + const renamed = await updateGuild(harness, owner.token, guild.id, {name: 'Renamed Guild', icon: SECOND_IMAGE}); + expect(renamed.icon).not.toBe(named.icon); + await harness.storageService.deleteObject(Config.s3.buckets.cdn, `icons/${guild.id}/${named.icon}`); + expect(await readSnapshot(result.report_id)).toEqual(stored); + expect(reportsBucketHas(harness, stored.guild?.icon?.key)).toBe(true); + }); + + test('a message report keeps the profile of the author in that guild', async () => { + const {owner, target, guild, profile} = await setupProfile(harness); + const channel = await createChannel(harness, owner.token, guild.id, 'profile-evidence'); + const message = await sendChannelMessage(harness, target.token, channel.id, 'Reported message'); + const result = await createBuilder(harness, owner.token) + .post('/reports/message') + .body({channel_id: channel.id, message_id: message.id, category: 'harassment'}) + .expect(HTTP_STATUS.OK) + .execute(); + const stored = await readSnapshot(result.report_id); + expect(stored.user).toMatchObject({id: target.userId, bio: 'Original bio', avatar: {hash: profile.avatar}}); + expect(stored.member).toMatchObject({guild_id: guild.id, nick: 'Original Nick'}); + expect(stored.guild).toBeNull(); + for (const asset of listReportProfileSnapshotAssets(stored)) { + expect(asset.key?.startsWith(`reports/${result.report_id}/profile/`)).toBe(true); + expect(reportsBucketHas(harness, asset.key)).toBe(true); + } + expect(listReportProfileSnapshotAssets(stored)).toHaveLength(2); + }); + + test('a closed account is kept by id with no profile text or images', async () => { + const {owner, target, guild} = await setupProfile(harness); + const user = await new UserRepository().findUnique(createUserID(BigInt(target.userId))); + await createBuilder(harness, '') + .patch(`/test/users/${target.userId}/flags`) + .body({flags: (user!.flags | UserFlags.DELETED).toString()}) + .execute(); + const copiesBefore = harness.storageService.getCopiedObjects().length; + const result = await reportUser(harness, owner.token, target.userId, guild.id).expect(HTTP_STATUS.OK).execute(); + expect(await readSnapshot(result.report_id)).toEqual({ + captured_at: expect.any(String), + user: { + id: target.userId, + username: null, + discriminator: null, + global_name: null, + bio: null, + pronouns: null, + avatar: null, + banner: null, + }, + member: null, + guild: null, + }); + expect(harness.storageService.getCopiedObjects()).toHaveLength(copiesBefore); + }); + + test('an image that cannot be copied is kept by hash and the report is filed', async () => { + const {owner, target, guild, profile} = await setupProfile(harness); + harness.storageService.configure({shouldFailCopy: true}); + const result = await reportUser(harness, owner.token, target.userId, guild.id).expect(HTTP_STATUS.OK).execute(); + harness.storageService.configure({shouldFailCopy: false}); + const stored = await readSnapshot(result.report_id); + expect(stored.user?.avatar).toEqual({hash: profile.avatar, key: null}); + expect(stored.member?.avatar?.hash).toBeTruthy(); + expect(stored.member?.avatar?.key).toBeNull(); + expect(stored.user?.bio).toBe('Original bio'); + expect(stored.member?.nick).toBe('Original Nick'); + expect( + harness.storageService.hasObject( + Config.s3.buckets.reports, + `reports/${result.report_id}/profile/user_avatar/${profile.avatar}`, + ), + ).toBe(false); + }); + + test('a refused report copies no images', async () => { + const {owner, target, guild} = await setupProfile(harness); + await reportUser(harness, owner.token, target.userId, guild.id).expect(HTTP_STATUS.OK).execute(); + await reportGuild(harness, target.token, guild.id).expect(HTTP_STATUS.OK).execute(); + const copiesBefore = harness.storageService.getCopiedObjects().length; + await reportUser(harness, owner.token, target.userId, guild.id) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + await reportGuild(harness, target.token, guild.id).expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT).execute(); + const outsider = await createTestAccount(harness); + await reportUser(harness, outsider.token, target.userId, guild.id) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_GUILD) + .execute(); + expect(harness.storageService.getCopiedObjects()).toHaveLength(copiesBefore); + expect(await countReports()).toBe(2); + }); + + test('a notice whose ticket is claimed elsewhere copies no images', async () => { + const {target} = await setupProfile(harness); + const ticket = await issueTicket(harness); + const copiesBefore = harness.storageService.getCopiedObjects().length; + const claim = vi.spyOn(ReportRepository.prototype, 'consumeDsaTicket').mockResolvedValueOnce(false); + await submitDsa(harness, ticket, {report_type: 'user', user_id: target.userId}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.INVALID_DSA_TICKET) + .execute(); + expect(claim).toHaveBeenCalledTimes(1); + claim.mockRestore(); + expect(harness.storageService.getCopiedObjects()).toHaveLength(copiesBefore); + expect(await countReports()).toBe(0); + }); + + test('notices filed through the DSA form keep the same snapshots', async () => { + const {owner, target, guild, profile} = await setupProfile(harness); + const named = await updateGuild(harness, owner.token, guild.id, {name: 'Original Guild', icon: FIRST_IMAGE}); + const channel = await createChannel(harness, owner.token, guild.id, 'profile-evidence'); + const message = await sendChannelMessage(harness, target.token, channel.id, 'Reported message'); + const userNotice = await submitDsa(harness, await issueTicket(harness), { + report_type: 'user', + user_id: target.userId, + }) + .expect(HTTP_STATUS.OK) + .execute(); + const userSnapshot = await readSnapshot(userNotice.report_id); + expect(userSnapshot.user).toMatchObject({ + id: target.userId, + username: profile.username, + bio: 'Original bio', + avatar: {hash: profile.avatar, key: `reports/${userNotice.report_id}/profile/user_avatar/${profile.avatar}`}, + }); + expect(userSnapshot.member).toBeNull(); + expect(userSnapshot.guild).toBeNull(); + expect(reportsBucketHas(harness, userSnapshot.user?.avatar?.key)).toBe(true); + const guildNotice = await submitDsa(harness, await issueTicket(harness), { + report_type: 'guild', + guild_id: guild.id, + }) + .expect(HTTP_STATUS.OK) + .execute(); + const guildSnapshot = await readSnapshot(guildNotice.report_id); + expect(guildSnapshot.user).toBeNull(); + expect(guildSnapshot.guild).toMatchObject({ + id: guild.id, + name: 'Original Guild', + icon: {hash: named.icon, key: `reports/${guildNotice.report_id}/profile/guild_icon/${named.icon}`}, + }); + expect(reportsBucketHas(harness, guildSnapshot.guild?.icon?.key)).toBe(true); + const messageNotice = await submitDsa(harness, await issueTicket(harness), { + report_type: 'message', + message_link: `https://web.fluxer.app/channels/${guild.id}/${channel.id}/${message.id}`, + }) + .expect(HTTP_STATUS.OK) + .execute(); + const messageSnapshot = await readSnapshot(messageNotice.report_id); + expect(messageSnapshot.user).toMatchObject({id: target.userId, bio: 'Original bio'}); + expect(messageSnapshot.member).toMatchObject({guild_id: guild.id, nick: 'Original Nick'}); + expect(messageSnapshot.guild).toBeNull(); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportReporterEmailDeletion.test.ts b/fluxer_api/src/api/report/tests/ReportReporterEmailDeletion.test.ts new file mode 100644 index 000000000..a698bab67 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportReporterEmailDeletion.test.ts @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createTestAccount, setUserACLs, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createReportID, type ReportID} from '@app/api/BrandedTypes'; +import {IAR_SUBMISSION_COLUMNS, type IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {deleteAccount, setPendingDeletionAt} from '@app/api/user/tests/UserTestUtils'; +import {clearAuthenticatedReporterEmails} from '@app/api/worker/tasks/ClearAuthenticatedReporterEmails'; +import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {afterEach, beforeEach, describe, expect, test} from 'vitest'; + +const NOTIFIER_EMAIL = 'notifier@example.com'; +let sequence = 1_495_000_000_000_000_000n; + +function nextId(): bigint { + sequence += 1n; + return sequence; +} + +function serializeReport(value: unknown): string { + return JSON.stringify(value, (_key, field) => (typeof field === 'bigint' ? field.toString() : field)); +} + +describe('reporter email after account deletion', () => { + let harness: ApiTestHarness; + let admin: TestAccount; + let repository: ReportRepository; + + beforeEach(async () => { + harness = await createApiTestHarness(); + admin = await setUserACLs(harness, await createTestAccount(harness), [AdminACLs.WILDCARD]); + repository = new ReportRepository(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + async function seedRow(reporterId: bigint | null, reporterEmail: string): Promise { + const id = nextId(); + await repository.createReport({ + ...Object.fromEntries(IAR_SUBMISSION_COLUMNS.map((column) => [column, null])), + report_id: id, + reporter_id: reporterId, + reporter_email: reporterEmail, + reported_at: new Date(), + status: 0, + report_type: 1, + category: 'harassment', + reported_user_id: nextId(), + } as IARSubmissionRow); + return createReportID(id); + } + + async function adminReportText(reportId: ReportID): Promise<{reporterEmail: string | null; text: string}> { + const {response, text, json} = await createBuilder<{reporter_email: string | null}>(harness, admin.token) + .get(`/admin/reports/${reportId}`) + .executeRaw(); + expect(response.status).toBe(HTTP_STATUS.OK); + return {reporterEmail: json.reporter_email, text}; + } + + async function deleteReporterAccount(reporter: TestAccount): Promise { + await deleteAccount(harness, reporter.token, reporter.password); + await setPendingDeletionAt(harness, reporter.userId, new Date(Date.now() - 60_000)); + await createBuilderWithoutAuth(harness) + .post(`/test/worker/process-pending-deletion/${reporter.userId}`) + .expect(HTTP_STATUS.OK) + .execute(); + } + + test('no stored report keeps the address of a deleted account', async () => { + const reporter = await createTestAccount(harness); + const reported = await createTestAccount(harness); + const filed = await createBuilder<{report_id: string}>(harness, reporter.token) + .post('/reports/user') + .body({user_id: reported.userId, category: 'harassment'}) + .expect(HTTP_STATUS.OK) + .execute(); + const filedId = createReportID(BigInt(filed.report_id)); + const olderRow = await seedRow(BigInt(reporter.userId), reporter.email); + const notice = await seedRow(null, NOTIFIER_EMAIL); + + expect((await repository.getReport(filedId))?.reporterEmail).toBeNull(); + expect((await adminReportText(filedId)).reporterEmail).toBe(reporter.email); + + await deleteReporterAccount(reporter); + await clearAuthenticatedReporterEmails(repository); + + const stored = await repository.listAllReportsPaginated(100); + expect(stored.map((report) => report.reportId).sort()).toEqual([filedId, olderRow, notice].sort()); + for (const report of stored) { + if (report.reportId === notice) continue; + expect(report.reporterId?.toString()).toBe(reporter.userId); + expect(report.reporterEmail).toBeNull(); + expect(serializeReport(report)).not.toContain(reporter.email); + } + for (const reportId of [filedId, olderRow]) { + const detail = await adminReportText(reportId); + expect(detail.reporterEmail).toBeNull(); + expect(detail.text).not.toContain(reporter.email); + } + }); + + test('a notice filed without an account keeps the verified address', async () => { + const reporter = await createTestAccount(harness); + const notice = await seedRow(null, NOTIFIER_EMAIL); + await seedRow(BigInt(reporter.userId), reporter.email); + + await deleteReporterAccount(reporter); + await clearAuthenticatedReporterEmails(repository); + + expect((await repository.getReport(notice))?.reporterEmail).toBe(NOTIFIER_EMAIL); + expect((await adminReportText(notice)).reporterEmail).toBe(NOTIFIER_EMAIL); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportRepositoryPostgresKv.test.ts b/fluxer_api/src/api/report/tests/ReportRepositoryPostgresKv.test.ts new file mode 100644 index 000000000..21d7678da --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportRepositoryPostgresKv.test.ts @@ -0,0 +1,440 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {spawnSync} from 'node:child_process'; +import {createServer} from 'node:net'; +import {createAttachmentID, createReportID, createUserID} from '@app/api/BrandedTypes'; +import {setCassandraQueryExecutorForTesting} from '@app/api/database/CassandraQueryExecution'; +import {ensurePostgresKvSchema, PostgresKvQueryExecutor} from '@app/api/database/PostgresKvQueryExecutor'; +import type {MessageAttachment} from '@app/api/database/types/MessageTypes'; +import type {IARMessageContextRow, IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import { + DSAReportEmailVerifications, + DSAReportTickets, + GuildReportSubmissionsByReporter, + IARSubmissions, + MessageReportSubmissionsByReporter, +} from '@app/api/Tables'; +import {startDockerContainer} from '@app/api/test/DockerTestContainer'; +import {ReportAlreadyResolvedError} from '@fluxer/errors/src/domains/moderation/ReportAlreadyResolvedError'; +import {UnknownReportError} from '@fluxer/errors/src/domains/moderation/UnknownReportError'; +import { + type ReportProfileSnapshot, + serializeReportProfileSnapshot, +} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import { + getDefaultPostgresClient, + type IPostgresClient, + initPostgres, + shutdownPostgres, +} from '@pkgs/postgres/src/Client'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; + +const KV_TABLE = 'kv_report_repository'; +const CONTAINER = `fluxer-reportkv-${process.pid.toString(36)}-${Date.now().toString(36)}`; +const dockerAvailable = spawnSync('docker', ['version'], {stdio: 'ignore'}).status === 0; + +async function sleep(ms: number): Promise { + await new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function freePort(): Promise { + return new Promise((resolve, reject) => { + const server = createServer(); + server.on('error', reject); + server.listen(0, '127.0.0.1', () => { + const address = server.address(); + if (typeof address === 'string' || address === null) { + reject(new Error('no port')); + return; + } + const port = address.port; + server.close(() => resolve(port)); + }); + }); +} + +function attachment(id: bigint, filename: string): MessageAttachment { + return { + attachment_id: createAttachmentID(id), + filename, + size: 1234n, + title: null, + description: null, + width: 10, + height: 20, + content_type: 'image/png', + content_hash: 'hash', + placeholder: null, + flags: 0, + duration: null, + nsfw: false, + waveform: null, + }; +} + +function contextEntry(overrides: Partial = {}): IARMessageContextRow { + return { + message_id: 30n, + channel_id: 20n, + author_id: 40n, + webhook_id: null, + author_username: 'author', + author_discriminator: 1, + author_avatar_hash: null, + content: 'hello', + timestamp: new Date('2026-10-01T10:00:00.000Z'), + edited_timestamp: null, + type: 0, + flags: 0, + mention_everyone: false, + mention_users: null, + mention_roles: null, + mention_channels: null, + attachments: null, + embeds: null, + sticker_items: null, + ...overrides, + }; +} + +function reportRow(reportId: bigint, overrides: Partial = {}): IARSubmissionRow { + return { + report_id: reportId, + reporter_id: 10n, + reporter_email: 'reporter@example.com', + reporter_full_legal_name: null, + reporter_country_of_residence: null, + reported_at: new Date('2026-10-01T10:00:00.000Z'), + status: 0, + report_type: 0, + category: 'spam', + additional_info: null, + reported_user_id: 40n, + reported_user_avatar_hash: null, + reported_guild_id: null, + reported_guild_name: null, + reported_guild_icon_hash: null, + reported_message_id: 30n, + reported_channel_id: 20n, + reported_channel_name: null, + message_context: null, + guild_context_id: null, + resolved_at: null, + resolved_by_admin_id: null, + public_comment: null, + audit_log_reason: null, + reported_guild_invite_code: null, + reported_guild_nsfw: null, + reported_guild_content_warning_level: null, + reported_guild_content_warning_text: null, + reported_channel_nsfw_override: null, + reported_channel_content_warning_level: null, + reported_channel_content_warning_text: null, + reported_channel_effective_nsfw: null, + reported_channel_effective_content_warning_level: null, + reported_channel_effective_content_warning_text: null, + reason: null, + flow_revision: null, + flow_steps: null, + flow_locale: null, + flow_surface: null, + reporter_good_faith_confirmed: null, + reported_webhook_id: null, + reported_webhook_name: null, + reported_webhook_avatar_hash: null, + reported_webhook_default_name: null, + reported_webhook_default_avatar_hash: null, + reported_webhook_type: null, + reported_webhook_application_id: null, + reported_webhook_channel_id: null, + reported_webhook_guild_id: null, + reported_webhook_created_at: null, + reported_webhook_creator_id: null, + reported_webhook_creator_username: null, + reported_webhook_creator_discriminator: null, + reported_webhook_creator_global_name: null, + reported_webhook_creator_avatar_hash: null, + ...overrides, + }; +} + +const snapshot: ReportProfileSnapshot = { + captured_at: '2026-10-01T10:00:00.000Z', + user: { + id: '40', + username: 'target', + discriminator: 1, + global_name: 'Target', + bio: 'Original bio', + pronouns: null, + avatar: {hash: 'avatar', key: 'reports/100/profile/avatar/avatar'}, + banner: null, + }, + member: null, + guild: null, +}; + +describe.skipIf(!dockerAvailable)('ReportRepository on Postgres KV', () => { + let raw: IPostgresClient; + const repository = new ReportRepository(); + + async function storedRows( + table: string, + ): Promise; expires_at: Date | null}>> { + const result = await raw.query<{row_data: Record; expires_at: Date | null}>( + `SELECT row_data, expires_at FROM ${KV_TABLE} WHERE table_name = $1`, + [table], + ); + return result.rows; + } + + function expectExpiresIn(value: Date | null, ttlSeconds: number): void { + expect(value).toBeInstanceOf(Date); + const remainingSeconds = (value!.getTime() - Date.now()) / 1000; + expect(remainingSeconds).toBeGreaterThan(ttlSeconds - 60); + expect(remainingSeconds).toBeLessThanOrEqual(ttlSeconds); + } + + beforeAll(async () => { + const port = await freePort(); + startDockerContainer([ + 'run', + '-d', + '--name', + CONTAINER, + '-e', + 'POSTGRES_USER=fluxer', + '-e', + 'POSTGRES_PASSWORD=fluxer', + '-e', + 'POSTGRES_DB=fluxer', + '-p', + `127.0.0.1:${port}:5432`, + 'postgres:16-alpine', + '-c', + 'fsync=off', + ]); + let ready = false; + for (let attempt = 0; attempt < 180 && !ready; attempt += 1) { + await sleep(500); + const probe = spawnSync('docker', ['exec', CONTAINER, 'pg_isready', '-U', 'fluxer', '-d', 'fluxer'], { + stdio: 'ignore', + }); + if (probe.status !== 0) continue; + try { + await initPostgres({ + url: `postgres://fluxer:fluxer@127.0.0.1:${port}/fluxer`, + maxConnections: 8, + kvTable: KV_TABLE, + }); + await getDefaultPostgresClient().query('SELECT 1'); + ready = true; + } catch { + await shutdownPostgres().catch(() => {}); + } + } + if (!ready) throw new Error('postgres never came up'); + raw = getDefaultPostgresClient(); + await ensurePostgresKvSchema(raw); + }, 900_000); + + beforeEach(async () => { + setCassandraQueryExecutorForTesting(new PostgresKvQueryExecutor(raw)); + await raw.query(`DELETE FROM ${KV_TABLE}`); + }); + + afterAll(async () => { + setCassandraQueryExecutorForTesting(null); + await shutdownPostgres().catch(() => {}); + spawnSync('docker', ['rm', '-f', CONTAINER], {stdio: 'ignore'}); + }); + + it('round-trips the context channel, missing attachments, profile snapshot and hold columns', async () => { + const holdUntil = new Date('2027-10-01T00:00:00.000Z'); + await repository.createReport( + reportRow(100n, { + message_context: [ + contextEntry({ + attachments: [attachment(1n, 'kept.png')], + missing_attachments: [attachment(2n, 'lost.png')], + }), + ], + reported_profile_snapshot: serializeReportProfileSnapshot(snapshot), + legal_hold_until: holdUntil, + legal_hold_reason: 'Court order', + }), + ); + const report = await repository.getReport(createReportID(100n)); + expect(report?.messageContext?.[0]?.channelId).toBe(20n); + expect(report?.messageContext?.[0]?.attachments.map((entry) => entry.filename)).toEqual(['kept.png']); + expect(report?.messageContext?.[0]?.missingAttachments).toEqual([attachment(2n, 'lost.png')]); + expect(report?.reportedProfileSnapshot).toEqual(snapshot); + expect(report?.legalHoldUntil?.getTime()).toBe(holdUntil.getTime()); + expect(report?.legalHoldReason).toBe('Court order'); + }); + + it('reads rows without the new columns as empty', async () => { + await repository.createReport(reportRow(101n, {message_context: [contextEntry({channel_id: null})]})); + const report = await repository.getReport(createReportID(101n)); + expect(report?.messageContext?.[0]?.channelId).toBeNull(); + expect(report?.messageContext?.[0]?.missingAttachments).toEqual([]); + expect(report?.reportedProfileSnapshot).toBeNull(); + expect(report?.legalHoldUntil).toBeNull(); + expect(report?.legalHoldReason).toBeNull(); + }); + + it('reads an unreadable profile snapshot as null', async () => { + await repository.createReport(reportRow(102n, {reported_profile_snapshot: '{"captured_at":'})); + expect((await repository.getReport(createReportID(102n)))?.reportedProfileSnapshot).toBeNull(); + }); + + it('does not resolve a report another resolve finished after it was read', async () => { + await repository.createReport(reportRow(112n)); + const reportId = createReportID(112n); + const pending = await repository.getReport(reportId); + await repository.resolveReport(reportId, createUserID(1n), 'first', 'first reason'); + const staleRepository = new ReportRepository(); + vi.spyOn(staleRepository, 'getReport').mockResolvedValueOnce(pending); + await expect( + staleRepository.resolveReport(reportId, createUserID(2n), 'second', 'second reason'), + ).rejects.toBeInstanceOf(ReportAlreadyResolvedError); + const stored = await repository.getReport(reportId); + expect(stored?.publicComment).toBe('first'); + expect(stored?.auditLogReason).toBe('first reason'); + expect(stored?.resolvedByAdminId).toBe(1n); + }); + + it('resolves a report once when several resolves race', async () => { + await repository.createReport(reportRow(110n)); + const results = await Promise.allSettled( + ['first', 'second', 'third', 'fourth', 'fifth'].map((comment) => + repository.resolveReport(createReportID(110n), createUserID(1n), comment, null), + ), + ); + const fulfilled = results.filter((result) => result.status === 'fulfilled'); + const rejected = results.filter((result) => result.status === 'rejected'); + expect(fulfilled).toHaveLength(1); + expect(rejected).toHaveLength(4); + for (const result of rejected) { + expect((result as PromiseRejectedResult).reason).toBeInstanceOf(ReportAlreadyResolvedError); + } + const winner = (fulfilled[0] as PromiseFulfilledResult<{publicComment: string | null}>).value; + const stored = await repository.getReport(createReportID(110n)); + expect(stored?.status).toBe(1); + expect(stored?.publicComment).toBe(winner.publicComment); + await expect( + repository.resolveReport(createReportID(110n), createUserID(1n), 'again', null), + ).rejects.toBeInstanceOf(ReportAlreadyResolvedError); + await expect(repository.resolveReport(createReportID(111n), createUserID(1n), null, null)).rejects.toBeInstanceOf( + UnknownReportError, + ); + }); + + it('sets and clears a legal hold, and never creates a report', async () => { + await repository.createReport(reportRow(120n)); + const until = new Date('2027-01-01T00:00:00.000Z'); + const held = await repository.setReportLegalHold(createReportID(120n), until, 'Preserve for counsel'); + expect(held.legalHoldUntil?.getTime()).toBe(until.getTime()); + const stored = await repository.getReport(createReportID(120n)); + expect(stored?.legalHoldUntil?.getTime()).toBe(until.getTime()); + expect(stored?.legalHoldReason).toBe('Preserve for counsel'); + expect(stored?.category).toBe('spam'); + await repository.setReportLegalHold(createReportID(120n), null, null); + const cleared = await repository.getReport(createReportID(120n)); + expect(cleared?.legalHoldUntil).toBeNull(); + expect(cleared?.legalHoldReason).toBeNull(); + await expect(repository.setReportLegalHold(createReportID(121n), until, 'x')).rejects.toBeInstanceOf( + UnknownReportError, + ); + expect(await repository.getReport(createReportID(121n))).toBeNull(); + }); + + it('clears the stored reporter email only for the matching reporter', async () => { + await repository.createReport(reportRow(130n)); + await repository.createReport( + reportRow(131n, {reporter_id: null, reporter_email: 'notifier@example.com', report_type: 0}), + ); + expect(await repository.clearReporterEmail(createReportID(130n), createUserID(99n))).toBe(false); + expect((await repository.getReport(createReportID(130n)))?.reporterEmail).toBe('reporter@example.com'); + expect(await repository.clearReporterEmail(createReportID(130n), createUserID(10n))).toBe(true); + const cleared = await repository.getReport(createReportID(130n)); + expect(cleared?.reporterEmail).toBeNull(); + expect(cleared?.reporterId).toBe(10n); + expect(cleared?.category).toBe('spam'); + expect(await repository.clearReporterEmail(createReportID(131n), createUserID(10n))).toBe(false); + expect((await repository.getReport(createReportID(131n)))?.reporterEmail).toBe('notifier@example.com'); + expect(await repository.clearReporterEmail(createReportID(132n), createUserID(10n))).toBe(false); + expect(await repository.getReport(createReportID(132n))).toBeNull(); + }); + + it('deletes a report', async () => { + await repository.createReport(reportRow(140n)); + await repository.createReport(reportRow(141n)); + await repository.deleteReport(createReportID(140n)); + expect(await repository.getReport(createReportID(140n))).toBeNull(); + expect((await repository.getReport(createReportID(141n)))?.reportId).toBe(141n); + const remaining = await repository.listAllReportsPaginated(10); + expect(remaining.map((report) => report.reportId)).toEqual([141n]); + await repository.resolveReport(createReportID(141n), createUserID(1n), 'done', null); + await repository.deleteReport(createReportID(141n)); + await repository.deleteReport(createReportID(142n)); + expect(await storedRows(IARSubmissions.name)).toEqual([]); + }); + + it('reserves a guild report once per reporter and guild for a day', async () => { + const first = {reporter_id: 10n, reported_guild_id: 50n, report_id: 150n, reported_at: new Date()}; + expect(await repository.reserveGuildReportByReporter(first)).toBe(true); + expect(await repository.reserveGuildReportByReporter({...first, report_id: 151n})).toBe(false); + expect(await repository.reserveGuildReportByReporter({...first, reported_guild_id: 51n, report_id: 152n})).toBe( + true, + ); + expect(await repository.reserveGuildReportByReporter({...first, reporter_id: 11n, report_id: 153n})).toBe(true); + const rows = await storedRows(GuildReportSubmissionsByReporter.name); + expect(rows).toHaveLength(3); + for (const row of rows) { + expectExpiresIn(row.expires_at, 86400); + } + await repository.releaseGuildReportByReporter({...first, report_id: 151n}); + expect(await repository.reserveGuildReportByReporter({...first, report_id: 154n})).toBe(false); + await repository.releaseGuildReportByReporter(first); + expect(await repository.reserveGuildReportByReporter({...first, report_id: 155n})).toBe(true); + }); + + it('gives message reservations, verification codes and tickets their table TTL', async () => { + expect( + await repository.reserveMessageReportByReporter({ + reporter_id: 10n, + channel_id: 20n, + message_id: 30n, + report_id: 160n, + reported_at: new Date(), + }), + ).toBe(true); + await repository.upsertDsaEmailVerification({ + email_lower: 'ttl@example.com', + code_hash: 'first', + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }); + await repository.upsertDsaEmailVerification({ + email_lower: 'ttl@example.com', + code_hash: 'second', + expires_at: new Date(Date.now() + 600_000), + last_sent_at: new Date(), + }); + await repository.createDsaTicket({ + ticket: 't'.repeat(64), + email_lower: 'ttl@example.com', + expires_at: new Date(Date.now() + 3_600_000), + created_at: new Date(), + }); + const [message] = await storedRows(MessageReportSubmissionsByReporter.name); + expectExpiresIn(message!.expires_at, 31536000); + const [verification] = await storedRows(DSAReportEmailVerifications.name); + expect(verification!.row_data.code_hash).toBe('second'); + expectExpiresIn(verification!.expires_at, 600); + const [ticket] = await storedRows(DSAReportTickets.name); + expectExpiresIn(ticket!.expires_at, 3600); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportServiceListTotals.test.ts b/fluxer_api/src/api/report/tests/ReportServiceListTotals.test.ts new file mode 100644 index 000000000..29cd8e415 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportServiceListTotals.test.ts @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createReportID, type ReportID} from '@app/api/BrandedTypes'; +import type {IChannelRepository} from '@app/api/channel/IChannelRepository'; +import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate'; +import type {IEmailDnsValidationService} from '@app/api/infrastructure/IEmailDnsValidationService'; +import type {IGatewayService} from '@app/api/infrastructure/IGatewayService'; +import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService'; +import type {IStorageService} from '@app/api/infrastructure/IStorageService'; +import type {IInviteRepository} from '@app/api/invite/IInviteRepository'; +import {type IARSubmission, type IReportRepository, ReportStatus} from '@app/api/report/IReportRepository'; +import {ReportService} from '@app/api/report/ReportService'; +import type {IReportSearchService} from '@app/api/search/IReportSearchService'; +import type {IUserRepository} from '@app/api/user/IUserRepository'; +import type {IWebhookRepository} from '@app/api/webhook/IWebhookRepository'; +import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError'; +import type {IEmailService} from '@pkgs/email/src/IEmailService'; +import type {IRateLimitService} from '@pkgs/rate_limit/src/IRateLimitService'; +import {describe, expect, test} from 'vitest'; + +const REPORT_A = createReportID(101n); +const REPORT_B = createReportID(102n); +const ORPHAN = createReportID(999n); + +interface ListCall { + status: number; + limit: number | undefined; + offset: number | undefined; +} + +function storedReport(reportId: ReportID): IARSubmission { + return {reportId, status: ReportStatus.PENDING} as IARSubmission; +} + +function createService(options: { + hitIds: Array; + total: number; + getReport?: (reportId: ReportID) => Promise; + search?: boolean; +}): {service: ReportService; calls: Array; lookups: Array} { + const calls: Array = []; + const lookups: Array = []; + const stored = new Map([REPORT_A, REPORT_B].map((reportId) => [reportId, storedReport(reportId)])); + const getReport = options.getReport ?? (async (reportId: ReportID) => stored.get(reportId) ?? null); + const reportRepository = { + getReport: async (reportId: ReportID) => { + lookups.push(reportId); + return getReport(reportId); + }, + } as unknown as IReportRepository; + const reportSearchService = { + listReportsByStatus: async (status: number, limit?: number, offset?: number) => { + calls.push({status, limit, offset}); + return {hits: options.hitIds.map((reportId) => ({id: reportId.toString()})), total: options.total}; + }, + } as unknown as IReportSearchService; + const service = new ReportService( + reportRepository, + {} as IChannelRepository, + {} as IGuildRepositoryAggregate, + {} as IUserRepository, + {} as IInviteRepository, + {} as IEmailService, + {} as IEmailDnsValidationService, + {} as ISnowflakeService, + {} as IStorageService, + {} as IGatewayService, + {} as IRateLimitService, + {} as IWebhookRepository, + options.search === false ? null : reportSearchService, + ); + return {service, calls, lookups}; +} + +describe('Report listing totals', () => { + test('a hit with no stored report is skipped and the index total is returned as is', async () => { + const {service, calls, lookups} = createService({hitIds: [REPORT_A, ORPHAN, REPORT_B], total: 10}); + const result = await service.listReportsByStatus(ReportStatus.PENDING, 3, 6); + expect(result.reports.map((report) => report.reportId)).toEqual([REPORT_A, REPORT_B]); + expect(result.total).toBe(10); + expect(calls).toEqual([{status: ReportStatus.PENDING, limit: 3, offset: 6}]); + expect(lookups).toEqual([REPORT_A, ORPHAN, REPORT_B]); + }); + + test('the order of the index hits is kept', async () => { + const {service} = createService({hitIds: [REPORT_B, REPORT_A], total: 2}); + const result = await service.listReportsByStatus(ReportStatus.PENDING); + expect(result.reports.map((report) => report.reportId)).toEqual([REPORT_B, REPORT_A]); + expect(result.total).toBe(2); + }); + + test('a page of only missing reports is empty and keeps the index total', async () => { + const {service} = createService({hitIds: [ORPHAN], total: 7}); + expect(await service.listReportsByStatus(ReportStatus.RESOLVED, 1, 0)).toEqual({reports: [], total: 7}); + }); + + test('a failed report lookup rejects the listing', async () => { + const failure = new Error('report storage is unavailable'); + const {service} = createService({ + hitIds: [REPORT_A, ORPHAN, REPORT_B], + total: 10, + getReport: async (reportId) => { + if (reportId === ORPHAN) { + throw failure; + } + return storedReport(reportId); + }, + }); + await expect(service.listReportsByStatus(ReportStatus.PENDING)).rejects.toBe(failure); + }); + + test('the listing is unavailable without a search service', async () => { + const {service} = createService({hitIds: [], total: 0, search: false}); + await expect(service.listReportsByStatus(ReportStatus.PENDING)).rejects.toBeInstanceOf( + FeatureTemporarilyDisabledError, + ); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportTablesTtl.test.ts b/fluxer_api/src/api/report/tests/ReportTablesTtl.test.ts new file mode 100644 index 000000000..a2f213fa3 --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportTablesTtl.test.ts @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import fs from 'node:fs'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {clearTestEmails, createUniqueEmail, findLastTestEmail, listTestEmails} from '@app/api/auth/tests/AuthTestUtils'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import { + DSAReportEmailVerifications, + DSAReportTickets, + GuildReportSubmissionsByReporter, + IARSubmissions, + MessageReportSubmissionsByReporter, + UserReportSubmissionsByReporter, +} from '@app/api/Tables'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {afterEach, beforeEach, describe, expect, it} from 'vitest'; + +const THIS_DIR = path.dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = path.resolve(THIS_DIR, '../../../../..'); + +const SCHEMA = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'tools/dev/cassandra_target_schema.json'), 'utf8')) as { + tables: Array<{name: string; options: string}>; +}; + +const HOURLY_WINDOWS = + "compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_unit': 'HOURS', 'compaction_window_size': '1'}"; + +function schemaOptions(name: string): string { + const table = SCHEMA.tables.find((entry) => entry.name === name); + expect(table).toBeDefined(); + return table!.options; +} + +describe('report table TTLs', () => { + it.each([ + [DSAReportEmailVerifications, 600], + [DSAReportTickets, 3600], + [MessageReportSubmissionsByReporter, 31536000], + [UserReportSubmissionsByReporter, 86400], + [GuildReportSubmissionsByReporter, 86400], + ] as const)('$name rows expire on their own', (table, ttlSeconds) => { + expect(table.defaultTtlSeconds).toBe(ttlSeconds); + expect(schemaOptions(table.name)).toContain(`default_time_to_live = ${ttlSeconds}`); + }); + + it('uses hourly time windows for rows written once and then deleted', () => { + for (const table of [DSAReportTickets, UserReportSubmissionsByReporter, GuildReportSubmissionsByReporter]) { + expect(schemaOptions(table.name)).toContain(HOURLY_WINDOWS); + } + }); + + it('uses twelve day time windows for message reservations, which last a year', () => { + expect(schemaOptions(MessageReportSubmissionsByReporter.name)).toContain( + "compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_unit': 'DAYS', 'compaction_window_size': '12'}", + ); + }); + + it('keeps size tiered compaction for verification codes, which a resend rewrites', () => { + expect(schemaOptions(DSAReportEmailVerifications.name)).toBe('default_time_to_live = 600'); + }); + + it('keeps reports without a table TTL', () => { + expect(IARSubmissions.defaultTtlSeconds).toBeUndefined(); + expect(schemaOptions(IARSubmissions.name)).not.toContain('default_time_to_live'); + }); +}); + +describe('report table TTLs cover the service windows', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness(); + }); + + afterEach(async () => { + await harness?.shutdown(); + }); + + it('a verification code and its ticket expire in the service before their rows do', async () => { + const repository = new ReportRepository(); + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-ttl'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const verification = await repository.getDsaEmailVerification(email.toLowerCase()); + expect(verification).not.toBeNull(); + const codeWindow = verification!.expires_at.getTime() - verification!.last_sent_at.getTime(); + expect(codeWindow).toBeLessThanOrEqual(DSAReportEmailVerifications.defaultTtlSeconds! * 1000); + expect(codeWindow).toBeGreaterThan(DSAReportEmailVerifications.defaultTtlSeconds! * 1000 - 60_000); + + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + expect(typeof code).toBe('string'); + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + const ticketRow = await repository.getDsaTicket(ticket); + expect(ticketRow).not.toBeNull(); + const ticketWindow = ticketRow!.expires_at.getTime() - ticketRow!.created_at.getTime(); + expect(ticketWindow).toBeLessThanOrEqual(DSAReportTickets.defaultTtlSeconds! * 1000); + expect(ticketWindow).toBeGreaterThan(DSAReportTickets.defaultTtlSeconds! * 1000 - 60_000); + }); +}); diff --git a/fluxer_api/src/api/report/tests/ReportWebhookMessages.test.ts b/fluxer_api/src/api/report/tests/ReportWebhookMessages.test.ts new file mode 100644 index 000000000..6e4b4a41d --- /dev/null +++ b/fluxer_api/src/api/report/tests/ReportWebhookMessages.test.ts @@ -0,0 +1,794 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { + clearTestEmails, + createTestAccount, + createUniqueEmail, + findLastTestEmail, + listTestEmails, + setUserACLs, + type TestAccount, +} from '@app/api/auth/tests/AuthTestUtils'; +import {createGuildID, createReportID, createUserID} from '@app/api/BrandedTypes'; +import {authorizeBot, createTestBotAccount} from '@app/api/bot/tests/BotTestUtils'; +import {Config} from '@app/api/Config'; +import {loadFixture} from '@app/api/channel/tests/AttachmentTestUtils'; +import { + acceptInvite, + addMemberRole, + createChannelInvite, + createDmChannel, + createPermissionOverwrite, + createRole, + sendChannelMessage, + setupTestGuildWithMembers, +} from '@app/api/channel/tests/ChannelTestUtils'; +import {getPngDataUrl} from '@app/api/emoji/tests/EmojiTestUtils'; +import {GuildMemberRepository} from '@app/api/guild/repositories/GuildMemberRepository'; +import {resetActivityEventsForTests, startActivityEvents} from '@app/api/infrastructure/activity/ActivityEvents'; +import type {ActivityPublisher} from '@app/api/infrastructure/activity/ActivitySpool'; +import {getRateLimitService} from '@app/api/middleware/ServiceSingletons'; +import {getReportFlowVariant, type ReportFlowStepInput} from '@app/api/report/flows/ReportFlowRegistry'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {MockKVProvider} from '@app/api/test/mocks/MockKVProvider'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import { + deleteAccount, + setPendingDeletionAt, + triggerDeletionWorker, + waitForDeletionCompletion, +} from '@app/api/user/tests/UserTestUtils'; +import { + deleteWebhook, + deleteWebhookMessageByToken, + executeWebhook, + executeWebhookWithAttachments, +} from '@app/api/webhook/tests/WebhookTestUtils'; +import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {Permissions} from '@fluxer/constants/src/ChannelConstants'; +import {ReportAdminResponseSchema} from '@fluxer/schema/src/domains/admin/AdminSchemas'; +import type {ReportFlowSurface, ReportFlowTargetType} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; +import type {WebhookCreateResponse} from '@fluxer/schema/src/domains/webhook/WebhookSchemas'; +import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; +import type {z} from 'zod'; + +type AdminReport = z.infer; + +interface ReportResponse { + report_id: string; +} + +interface AdminReportList { + reports: Array; + total: number; +} + +type AuthorKind = 'user' | 'bot' | 'webhook'; + +interface CreatorProfile { + id: string; + username: string; + discriminator: string; + global_name: string | null; + avatar: string | null; +} + +interface World { + owner: TestAccount; + creator: CreatorProfile; + reporter: TestAccount; + author: TestAccount; + outsider: TestAccount; + guildId: string; + channelId: string; + webhook: WebhookCreateResponse; + botUserId: string; + botAppId: string; + botToken: string; + messages: Record; +} + +const WEBHOOK_NAME = 'Harbor Bulletin'; +const WEBHOOK_USERNAME = 'Night Desk'; +const CREATOR_GLOBAL_NAME = 'Harbor Keeper'; +const KINDS: ReadonlyArray = ['user', 'bot', 'webhook']; +const SPAM_WALK: ReadonlyArray = [{screen_id: 'root_message', option_id: 'spam'}]; +const CSAM_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'sexual'}, + {screen_id: 'sexual', option_id: 'minor_sexual'}, + {screen_id: 'minor_sexual', option_id: 'csam'}, +]; +const HARASSMENT_WALK: ReadonlyArray = [ + {screen_id: 'root_message', option_id: 'abuse'}, + {screen_id: 'abuse', option_id: 'harassment'}, + {screen_id: 'harassment', option_id: 'harassment_direct'}, +]; + +class CapturingPublisher implements ActivityPublisher { + readonly payloads: Array = []; + + async publish(_subject: string, payload: string): Promise { + this.payloads.push(payload); + } +} + +function currentHash(target: ReportFlowTargetType, surface: ReportFlowSurface = 'in_app'): string { + return getReportFlowVariant(target, surface).revisionHash; +} + +async function readReport(reportId: string) { + const report = await new ReportRepository().getReport(createReportID(BigInt(reportId))); + if (!report) { + throw new Error(`Report ${reportId} was not stored`); + } + return report; +} + +async function countReports(): Promise { + return (await new ReportRepository().listAllReportsPaginated(100)).length; +} + +async function setJoinedAt(guildId: string, userId: string, joinedAt: Date): Promise { + const repository = new GuildMemberRepository(); + const member = await repository.getMember(createGuildID(BigInt(guildId)), createUserID(BigInt(userId))); + if (!member) { + throw new Error(`Member ${userId} of guild ${guildId} was not stored`); + } + await repository.upsertMember({...member.toRow(), joined_at: joinedAt}); +} + +async function createWebhookWithAvatar( + harness: ApiTestHarness, + token: string, + channelId: string, +): Promise { + return createBuilder(harness, token) + .post(`/channels/${channelId}/webhooks`) + .body({name: WEBHOOK_NAME, avatar: getPngDataUrl()}) + .expect(HTTP_STATUS.OK) + .execute(); +} + +async function sendWebhookMessage(harness: ApiTestHarness, webhook: WebhookCreateResponse, content: string) { + const {json} = await executeWebhook( + harness, + webhook.id, + webhook.token, + {content, username: WEBHOOK_USERNAME, wait: true}, + 200, + ); + return json!.id; +} + +async function setupWorld(harness: ApiTestHarness): Promise { + const {owner, members, guild, systemChannel} = await setupTestGuildWithMembers(harness, 2); + const [reporter, author] = members; + const channelId = systemChannel.id; + const creator = await createBuilder(harness, owner.token) + .patch('/users/@me') + .body({avatar: getPngDataUrl(), global_name: CREATOR_GLOBAL_NAME}) + .expect(HTTP_STATUS.OK) + .execute(); + const bot = await createTestBotAccount(harness, {appName: 'Harbor Helper'}); + await authorizeBot(harness, owner.token, bot.appId, ['bot'], guild.id, '0'); + const webhook = await createWebhookWithAvatar(harness, owner.token, channelId); + const user = await sendChannelMessage(harness, author.token, channelId, 'A message from a member'); + const botMessage = await sendChannelMessage(harness, `Bot ${bot.botToken}`, channelId, 'A message from a bot'); + const webhookMessage = await sendWebhookMessage(harness, webhook, 'A message from a webhook'); + return { + owner, + creator, + reporter, + author, + outsider: await createTestAccount(harness), + guildId: guild.id, + channelId, + webhook, + botUserId: bot.botUserId, + botAppId: bot.appId, + botToken: bot.botToken, + messages: {user: user.id, bot: botMessage.id, webhook: webhookMessage}, + }; +} + +async function grantManageWebhooks(harness: ApiTestHarness, world: World, userId: string): Promise { + const role = await createRole(harness, world.owner.token, world.guildId, { + name: 'Webhook Keepers', + permissions: Permissions.MANAGE_WEBHOOKS.toString(), + }); + await addMemberRole(harness, world.owner.token, world.guildId, userId, role.id); +} + +function submitFlow( + harness: ApiTestHarness, + token: string, + channelId: string, + messageId: string, + steps: ReadonlyArray = SPAM_WALK, +) { + return createBuilder(harness, token) + .post('/reports/flows/message/submissions') + .body({channel_id: channelId, message_id: messageId, revision_hash: currentHash('message'), steps}); +} + +function submitLegacy(harness: ApiTestHarness, token: string, channelId: string, messageId: string) { + return createBuilder(harness, token) + .post('/reports/message') + .body({channel_id: channelId, message_id: messageId, category: 'spam'}); +} + +async function issueTicket(harness: ApiTestHarness): Promise { + await clearTestEmails(harness); + const email = createUniqueEmail('dsa-webhook'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness), 'dsa_report_verification')?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + return ticket; +} + +function submitDsa(harness: ApiTestHarness, ticket: string, world: World, messageId: string, extra = {}) { + return createBuilderWithoutAuth(harness) + .post('/reports/dsa') + .body({ + ticket, + report_type: 'message', + message_link: `https://web.fluxer.app/channels/${world.guildId}/${world.channelId}/${messageId}`, + revision_hash: currentHash('message', 'dsa'), + steps: HARASSMENT_WALK, + good_faith_confirmed: true, + additional_info: 'This message targets a member of the community.', + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'DE', + ...extra, + }); +} + +const NO_WEBHOOK = { + reportedWebhookId: null, + reportedWebhookName: null, + reportedWebhookAvatarHash: null, + reportedWebhookDefaultName: null, + reportedWebhookDefaultAvatarHash: null, + reportedWebhookType: null, + reportedWebhookApplicationId: null, + reportedWebhookChannelId: null, + reportedWebhookGuildId: null, + reportedWebhookCreatedAt: null, + reportedWebhookCreatorId: null, + reportedWebhookCreatorUsername: null, + reportedWebhookCreatorDiscriminator: null, + reportedWebhookCreatorGlobalName: null, + reportedWebhookCreatorAvatarHash: null, +}; + +function webhookCreatedAt(webhookId: string): string { + return snowflakeToDate(BigInt(webhookId)).toISOString(); +} + +function expectedAuthor(world: World, kind: AuthorKind) { + if (kind === 'webhook') { + return { + reportedUserId: null, + reportedWebhookId: world.webhook.id, + reportedWebhookName: WEBHOOK_USERNAME, + reportedWebhookAvatarHash: world.webhook.avatar, + reportedWebhookDefaultName: WEBHOOK_NAME, + reportedWebhookDefaultAvatarHash: world.webhook.avatar, + reportedWebhookType: 1, + reportedWebhookApplicationId: null, + reportedWebhookChannelId: world.channelId, + reportedWebhookGuildId: world.guildId, + reportedWebhookCreatedAt: webhookCreatedAt(world.webhook.id), + reportedWebhookCreatorId: world.owner.userId, + reportedWebhookCreatorUsername: world.creator.username, + reportedWebhookCreatorDiscriminator: Number(world.creator.discriminator), + reportedWebhookCreatorGlobalName: CREATOR_GLOBAL_NAME, + reportedWebhookCreatorAvatarHash: world.creator.avatar, + }; + } + return { + ...NO_WEBHOOK, + reportedUserId: kind === 'user' ? world.author.userId : world.botUserId, + }; +} + +function storedAuthor(report: Awaited>) { + return { + reportedUserId: report.reportedUserId?.toString() ?? null, + reportedWebhookId: report.reportedWebhookId?.toString() ?? null, + reportedWebhookName: report.reportedWebhookName, + reportedWebhookAvatarHash: report.reportedWebhookAvatarHash, + reportedWebhookDefaultName: report.reportedWebhookDefaultName, + reportedWebhookDefaultAvatarHash: report.reportedWebhookDefaultAvatarHash, + reportedWebhookType: report.reportedWebhookType, + reportedWebhookApplicationId: report.reportedWebhookApplicationId?.toString() ?? null, + reportedWebhookChannelId: report.reportedWebhookChannelId?.toString() ?? null, + reportedWebhookGuildId: report.reportedWebhookGuildId?.toString() ?? null, + reportedWebhookCreatedAt: report.reportedWebhookCreatedAt?.toISOString() ?? null, + reportedWebhookCreatorId: report.reportedWebhookCreatorId?.toString() ?? null, + reportedWebhookCreatorUsername: report.reportedWebhookCreatorUsername, + reportedWebhookCreatorDiscriminator: report.reportedWebhookCreatorDiscriminator, + reportedWebhookCreatorGlobalName: report.reportedWebhookCreatorGlobalName, + reportedWebhookCreatorAvatarHash: report.reportedWebhookCreatorAvatarHash, + }; +} + +async function expectStoredAuthor(reportId: string, world: World, kind: AuthorKind) { + const report = await readReport(reportId); + expect(storedAuthor(report)).toEqual(expectedAuthor(world, kind)); + expect(report.reportedMessageId?.toString()).toBe(world.messages[kind]); + expect(report.reportedChannelId?.toString()).toBe(world.channelId); + expect(report.reportedGuildId?.toString()).toBe(world.guildId); + return report; +} + +async function createAdmin(harness: ApiTestHarness): Promise { + return setUserACLs(harness, await createTestAccount(harness), [ + AdminACLs.AUTHENTICATE, + AdminACLs.REPORT_VIEW, + AdminACLs.CSAM_SUBMIT_NCMEC, + AdminACLs.MESSAGE_DELETE, + AdminACLs.USER_DELETE, + AdminACLs.ARCHIVE_TRIGGER_USER, + ]); +} + +describe('Reports of webhook and bot messages', () => { + let harness: ApiTestHarness; + + beforeEach(async () => { + harness = await createApiTestHarness({search: 'enabled'}); + }); + + afterEach(async () => { + resetActivityEventsForTests(); + await harness?.shutdown(); + }); + + test('the message flow files user, bot and webhook messages', async () => { + const world = await setupWorld(harness); + for (const kind of KINDS) { + const result = await submitFlow(harness, world.reporter.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await expectStoredAuthor(result.report_id, world, kind); + expect(report.category).toBe('spam'); + expect(report.reason).toBe('spam'); + expect(report.flowSurface).toBe('in_app'); + } + expect(await countReports()).toBe(3); + }); + + test('the legacy route files user, bot and webhook messages', async () => { + const world = await setupWorld(harness); + for (const kind of KINDS) { + const result = await submitLegacy(harness, world.reporter.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await expectStoredAuthor(result.report_id, world, kind); + expect(report.category).toBe('spam'); + expect(report.reason).toBeNull(); + } + }); + + test('the DSA form files user, bot and webhook messages from a message link', async () => { + const world = await setupWorld(harness); + for (const kind of KINDS) { + const result = await submitDsa(harness, await issueTicket(harness), world, world.messages[kind]) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await expectStoredAuthor(result.report_id, world, kind); + expect(report.reporterId).toBeNull(); + expect(report.category).toBe('harassment'); + expect(report.flowSurface).toBe('dsa'); + } + }); + + test('a DSA report naming a user tag for a webhook message is not found', async () => { + const world = await setupWorld(harness); + const ticket = await issueTicket(harness); + const {json} = await createBuilder<{username: string; discriminator: string}>(harness, world.author.token) + .get('/users/@me') + .executeWithResponse(); + await submitDsa(harness, ticket, world, world.messages.webhook, { + reported_user_tag: `${json.username}#${json.discriminator}`, + }) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + expect(await countReports()).toBe(0); + await submitDsa(harness, ticket, world, world.messages.webhook).expect(HTTP_STATUS.OK).execute(); + }); + + test('the snapshot keeps the webhook message and its neighbors', async () => { + const world = await setupWorld(harness); + const result = await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + const context = new Map(report.messageContext!.map((entry) => [entry.messageId.toString(), entry])); + const reported = context.get(world.messages.webhook)!; + expect(reported.authorId).toBeNull(); + expect(reported.webhookId?.toString()).toBe(world.webhook.id); + expect(reported.authorUsername).toBe(WEBHOOK_USERNAME); + expect(reported.authorAvatarHash).toBe(world.webhook.avatar); + expect(reported.content).toBe('A message from a webhook'); + expect(context.get(world.messages.user)?.authorId?.toString()).toBe(world.author.userId); + expect(context.get(world.messages.bot)?.authorId?.toString()).toBe(world.botUserId); + expect(context.get(world.messages.bot)?.webhookId).toBeNull(); + expect(report.reportedProfileSnapshot).toBeNull(); + }); + + test('a bot direct message can be reported', async () => { + const world = await setupWorld(harness); + const dm = await createDmChannel(harness, `Bot ${world.botToken}`, world.reporter.userId); + const message = await sendChannelMessage(harness, `Bot ${world.botToken}`, dm.id, 'Hello from a bot'); + const result = await submitFlow(harness, world.reporter.token, dm.id, message.id).expect(HTTP_STATUS.OK).execute(); + const report = await readReport(result.report_id); + expect(report.reportedUserId?.toString()).toBe(world.botUserId); + expect(report.reportedWebhookId).toBeNull(); + expect(report.reportedGuildId).toBeNull(); + }); + + test('channel access applies to webhook messages as to user messages', async () => { + const world = await setupWorld(harness); + const lateJoiner = await createTestAccount(harness); + const invite = await createChannelInvite(harness, world.owner.token, world.channelId); + await acceptInvite(harness, lateJoiner.token, invite.code); + await setJoinedAt(world.guildId, world.reporter.userId, snowflakeToDate(BigInt(world.guildId))); + await setJoinedAt(world.guildId, lateJoiner.userId, new Date(Date.now() + 60_000)); + for (const account of [world.reporter, lateJoiner]) { + await createPermissionOverwrite(harness, world.owner.token, world.channelId, account.userId, { + type: 1, + allow: '0', + deny: Permissions.READ_MESSAGE_HISTORY.toString(), + }); + } + for (const kind of ['user', 'webhook'] as const) { + await submitFlow(harness, lateJoiner.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + await submitLegacy(harness, lateJoiner.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.NOT_FOUND, APIErrorCodes.UNKNOWN_MESSAGE) + .execute(); + await submitFlow(harness, world.outsider.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.ACCESS_DENIED) + .execute(); + } + expect(await countReports()).toBe(0); + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.user) + .expect(HTTP_STATUS.OK) + .execute(); + await submitLegacy(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + await createPermissionOverwrite(harness, world.owner.token, world.channelId, world.reporter.userId, { + type: 1, + allow: '0', + deny: Permissions.VIEW_CHANNEL.toString(), + }); + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.bot) + .expect(HTTP_STATUS.FORBIDDEN, APIErrorCodes.MISSING_PERMISSIONS) + .execute(); + expect(await countReports()).toBe(2); + }); + + test('webhook reports dedupe across the flow and the legacy route', async () => { + const world = await setupWorld(harness); + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + await submitLegacy(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.CONFLICT, APIErrorCodes.CONFLICT) + .execute(); + const parallel = await Promise.all( + [0, 1, 2].map(() => + submitFlow(harness, world.author.token, world.channelId, world.messages.webhook).executeRaw(), + ), + ); + expect(parallel.map(({response}) => response.status).sort()).toEqual([200, 409, 409]); + expect(await countReports()).toBe(2); + }); + + test('a rate limited webhook report releases its reservation', async () => { + const world = await setupWorld(harness); + for (const kind of ['user', 'bot'] as const) { + await submitFlow(harness, world.reporter.token, world.channelId, world.messages[kind]) + .expect(HTTP_STATUS.OK) + .execute(); + } + const extra = await sendWebhookMessage(harness, world.webhook, 'Another webhook message'); + await submitFlow(harness, world.reporter.token, world.channelId, extra).expect(HTTP_STATUS.OK).execute(); + for (let attempt = 0; attempt < 2; attempt++) { + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(429, APIErrorCodes.RATE_LIMITED) + .execute(); + } + await getRateLimitService().resetLimit(`report:message:channel:user:${world.reporter.userId}:${world.channelId}`); + await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + expect(await countReports()).toBe(4); + }); + + test('report_filed keeps its contract with no reported user', async () => { + const publisher = new CapturingPublisher(); + await startActivityEvents({publisher, kv: new MockKVProvider()}); + const world = await setupWorld(harness); + const result = await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + const filed = () => + publisher.payloads + .map((payload) => JSON.parse(payload) as {kind: string; data: Record}) + .filter((event) => event.kind === 'report_filed'); + await vi.waitFor(() => expect(filed()).toHaveLength(1)); + const [event] = filed(); + expect(event.data).toEqual({ + report_id: result.report_id, + reporter_id: world.reporter.userId, + category: 'spam', + target_type: 'message', + reported_user_id: null, + guild_id: world.guildId, + message_id: world.messages.webhook, + channel_id: world.channelId, + }); + }); + + test('a DSA report of a webhook message publishes report_filed under the zero key', async () => { + const publisher = new CapturingPublisher(); + await startActivityEvents({publisher, kv: new MockKVProvider()}); + const world = await setupWorld(harness); + const result = await submitDsa(harness, await issueTicket(harness), world, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + const filed = () => + publisher.payloads + .map((payload) => JSON.parse(payload) as {kind: string; key: string; data: Record}) + .filter((event) => event.kind === 'report_filed'); + await vi.waitFor(() => expect(filed()).toHaveLength(1)); + const [event] = filed(); + expect(event.key).toBe('0'); + expect(event.data).toEqual({ + report_id: result.report_id, + reporter_id: '0', + category: 'harassment', + target_type: 'dsa', + reported_user_id: null, + guild_id: world.guildId, + message_id: world.messages.webhook, + channel_id: world.channelId, + }); + }); + + test('the admin API shows webhook fields and search filters by webhook', async () => { + const world = await setupWorld(harness); + const webhookReport = await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + const botReport = await submitFlow(harness, world.reporter.token, world.channelId, world.messages.bot) + .expect(HTTP_STATUS.OK) + .execute(); + await createBuilder(harness, world.owner.token) + .patch('/users/@me') + .body({global_name: 'Renamed Keeper'}) + .expect(HTTP_STATUS.OK) + .execute(); + const admin = await createAdmin(harness); + const detail = await createBuilder(harness, admin.token) + .get(`/admin/reports/${webhookReport.report_id}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(ReportAdminResponseSchema.safeParse(detail).success).toBe(true); + expect(detail).toMatchObject({ + reported_user_id: null, + reported_user_tag: null, + reported_webhook_id: world.webhook.id, + reported_webhook_name: WEBHOOK_USERNAME, + reported_webhook_avatar_hash: world.webhook.avatar, + reported_webhook_default_name: WEBHOOK_NAME, + reported_webhook_default_avatar_hash: world.webhook.avatar, + reported_webhook_type: 1, + reported_webhook_application_id: null, + reported_webhook_channel_id: world.channelId, + reported_webhook_guild_id: world.guildId, + reported_webhook_created_at: webhookCreatedAt(world.webhook.id), + reported_webhook_creator_id: world.owner.userId, + reported_webhook_creator_tag: `${world.creator.username}#${world.creator.discriminator.padStart(4, '0')}`, + reported_webhook_creator_username: world.creator.username, + reported_webhook_creator_global_name: CREATOR_GLOBAL_NAME, + reported_webhook_creator_discriminator: world.creator.discriminator.padStart(4, '0'), + reported_webhook_creator_avatar_hash: world.creator.avatar, + reported_message_id: world.messages.webhook, + reported_channel_id: world.channelId, + reported_guild_id: world.guildId, + }); + const reported = detail.message_context!.find((entry) => entry.id === world.messages.webhook)!; + expect(reported).toMatchObject({ + author_id: world.webhook.id, + author_username: WEBHOOK_USERNAME, + webhook_id: world.webhook.id, + user_prior_ncmec_report_ids: [], + }); + const neighbor = detail.message_context!.find((entry) => entry.id === world.messages.user)!; + expect(neighbor).toMatchObject({author_id: world.author.userId, webhook_id: null}); + const bot = await createBuilder(harness, admin.token) + .get(`/admin/reports/${botReport.report_id}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(bot).toMatchObject({ + reported_user_id: world.botUserId, + reported_webhook_id: null, + reported_webhook_name: null, + reported_webhook_default_name: null, + reported_webhook_type: null, + reported_webhook_created_at: null, + reported_webhook_creator_id: null, + reported_webhook_creator_tag: null, + }); + const list = await createBuilder(harness, admin.token) + .get(`/admin/reports?reported_webhook_id=${world.webhook.id}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(list.reports.map((report) => report.report_id)).toEqual([webhookReport.report_id]); + expect(list.reports[0]).toMatchObject({ + reported_webhook_id: world.webhook.id, + reported_user_id: null, + reported_webhook_creator_id: world.owner.userId, + reported_webhook_creator_global_name: CREATOR_GLOBAL_NAME, + }); + const free = await createBuilder(harness, admin.token) + .get(`/admin/reports?q=${world.webhook.id}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(free.reports.map((report) => report.report_id)).toContain(webhookReport.report_id); + }); + + test('a webhook whose creator deleted their account keeps the creator id without a profile', async () => { + const world = await setupWorld(harness); + await grantManageWebhooks(harness, world, world.author.userId); + const orphan = await createBuilder(harness, world.author.token) + .post(`/channels/${world.channelId}/webhooks`) + .body({name: 'Ghost Relay'}) + .expect(HTTP_STATUS.OK) + .execute(); + const messageId = await sendWebhookMessage(harness, orphan, 'A message from an orphaned webhook'); + await deleteAccount(harness, world.author.token, world.author.password); + await setPendingDeletionAt(harness, world.author.userId, new Date(Date.now() - 60_000)); + await triggerDeletionWorker(harness); + await waitForDeletionCompletion(harness, world.author.userId); + const flow = await submitFlow(harness, world.reporter.token, world.channelId, messageId) + .expect(HTTP_STATUS.OK) + .execute(); + const dsa = await submitDsa(harness, await issueTicket(harness), world, messageId) + .expect(HTTP_STATUS.OK) + .execute(); + const expected = { + ...NO_WEBHOOK, + reportedUserId: null, + reportedWebhookId: orphan.id, + reportedWebhookName: WEBHOOK_USERNAME, + reportedWebhookDefaultName: 'Ghost Relay', + reportedWebhookType: 1, + reportedWebhookChannelId: world.channelId, + reportedWebhookGuildId: world.guildId, + reportedWebhookCreatedAt: webhookCreatedAt(orphan.id), + reportedWebhookCreatorId: world.author.userId, + }; + for (const reportId of [flow.report_id, dsa.report_id]) { + expect(storedAuthor(await readReport(reportId))).toEqual(expected); + } + const admin = await createAdmin(harness); + const detail = await createBuilder(harness, admin.token) + .get(`/admin/reports/${flow.report_id}`) + .expect(HTTP_STATUS.OK) + .execute(); + expect(ReportAdminResponseSchema.safeParse(detail).success).toBe(true); + expect(detail).toMatchObject({ + reported_user_id: null, + reported_webhook_id: orphan.id, + reported_webhook_creator_id: world.author.userId, + reported_webhook_creator_tag: null, + reported_webhook_creator_username: null, + reported_webhook_creator_global_name: null, + reported_webhook_creator_discriminator: null, + reported_webhook_creator_avatar_hash: null, + }); + }, 120_000); + + test('a webhook created by a bot records the bot application', async () => { + const world = await setupWorld(harness); + await grantManageWebhooks(harness, world, world.botUserId); + const botWebhook = await createBuilder(harness, `Bot ${world.botToken}`) + .post(`/channels/${world.channelId}/webhooks`) + .body({name: 'Helper Relay'}) + .expect(HTTP_STATUS.OK) + .execute(); + const messageId = await sendWebhookMessage(harness, botWebhook, 'A message from a bot webhook'); + const result = await submitLegacy(harness, world.reporter.token, world.channelId, messageId) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(storedAuthor(report)).toMatchObject({ + reportedUserId: null, + reportedWebhookId: botWebhook.id, + reportedWebhookDefaultName: 'Helper Relay', + reportedWebhookCreatorId: world.botUserId, + reportedWebhookCreatorUsername: expect.any(String), + reportedWebhookApplicationId: world.botAppId, + }); + }); + + test('a deleted webhook keeps the message snapshot and drops the webhook context', async () => { + const world = await setupWorld(harness); + await deleteWebhook(harness, world.webhook.id, world.owner.token); + const result = await submitFlow(harness, world.reporter.token, world.channelId, world.messages.webhook) + .expect(HTTP_STATUS.OK) + .execute(); + expect(storedAuthor(await readReport(result.report_id))).toEqual({ + ...NO_WEBHOOK, + reportedUserId: null, + reportedWebhookId: world.webhook.id, + reportedWebhookName: WEBHOOK_USERNAME, + reportedWebhookAvatarHash: world.webhook.avatar, + reportedWebhookCreatedAt: webhookCreatedAt(world.webhook.id), + }); + }); + + test('webhook attachments are kept as evidence and can go to NCMEC through the report', async () => { + const world = await setupWorld(harness); + const {json: message} = await executeWebhookWithAttachments(harness, { + webhookId: world.webhook.id, + webhookToken: world.webhook.token, + payload: {content: 'webhook evidence', attachments: [{id: 0, filename: 'evidence.png'}]}, + files: [{index: 0, filename: 'evidence.png', data: loadFixture('yeah.png')}], + }); + const attachment = message!.attachments![0]!; + const result = await submitFlow(harness, world.reporter.token, world.channelId, message!.id, CSAM_WALK) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await readReport(result.report_id); + expect(report.category).toBe('child_safety'); + const reported = report.messageContext!.find((entry) => entry.messageId.toString() === message!.id)!; + expect(reported.attachments.map((entry) => entry.filename)).toEqual(['evidence.png']); + const key = `attachments/${world.channelId}/${attachment.id}/evidence.png`; + expect(harness.storageService.hasObject(Config.s3.buckets.reports, key)).toBe(true); + await deleteWebhookMessageByToken(harness, world.webhook.id, world.webhook.token, message!.id); + const admin = await createAdmin(harness); + await createBuilder(harness, admin.token) + .post('/admin/messages/ncmec-reports') + .body({ + channel_id: world.channelId, + message_id: message!.id, + attachment_id: attachment.id, + filename: 'evidence.png', + reporter_full_name: 'Webhook Reporter', + confirmed_viewed: true, + source_report_id: result.report_id, + }) + .expect(HTTP_STATUS.OK) + .execute(); + const detail = await createBuilder(harness, admin.token) + .get(`/admin/reports/${result.report_id}`) + .expect(HTTP_STATUS.OK) + .execute(); + const evidence = detail.message_context!.find((entry) => entry.id === message!.id)!; + expect(evidence.attachments[0]?.ncmec_status).not.toBe('not_submitted'); + }); +}); diff --git a/fluxer_api/src/api/search/IReportSearchService.ts b/fluxer_api/src/api/search/IReportSearchService.ts index 85c818571..cc9057320 100644 --- a/fluxer_api/src/api/search/IReportSearchService.ts +++ b/fluxer_api/src/api/search/IReportSearchService.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {GuildID, MessageID, ReportID, UserID} from '@app/api/BrandedTypes'; +import type {ReportID} from '@app/api/BrandedTypes'; import type {IARSubmission} from '@app/api/report/IReportRepository'; import type { ISearchAdapter as SchemaISearchAdapter, @@ -22,26 +22,5 @@ export interface IReportSearchService extends SchemaISearchAdapter>; - listReportsByReporter( - reporterId: UserID, - limit?: number, - offset?: number, - ): Promise>; listReportsByStatus(status: number, limit?: number, offset?: number): Promise>; - listReportsByType(reportType: number, limit?: number, offset?: number): Promise>; - listReportsByReportedUser( - reportedUserId: UserID, - limit?: number, - offset?: number, - ): Promise>; - listReportsByReportedGuild( - reportedGuildId: GuildID, - limit?: number, - offset?: number, - ): Promise>; - listReportsByReportedMessage( - reportedMessageId: MessageID, - limit?: number, - offset?: number, - ): Promise>; } diff --git a/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportAdapter.test.ts b/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportAdapter.test.ts new file mode 100644 index 000000000..0e81b9e15 --- /dev/null +++ b/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportAdapter.test.ts @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportSearchFilters} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes'; +import { + ElasticsearchReportAdapter, + type ElasticsearchReportAdapterOptions, +} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchReportAdapter'; +import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions'; +import {describe, expect, it} from 'vitest'; + +interface RecordedSearchRequest { + index?: unknown; + query?: { + bool?: { + filter?: unknown; + }; + }; +} + +class FakeElasticsearchClient { + readonly searches: Array = []; + + readonly indices = { + exists: async (): Promise => true, + putMapping: async (): Promise => {}, + }; + + async search(request: RecordedSearchRequest): Promise { + this.searches.push(request); + return {hits: {total: {value: 1}, hits: [{_id: 'report-1', _source: {id: 'report-1'}, sort: [1, 'report-1']}]}}; + } +} + +async function searchFilter(filters: ReportSearchFilters): Promise { + const client = new FakeElasticsearchClient(); + const adapter = new ElasticsearchReportAdapter({ + client: client as unknown as ElasticsearchReportAdapterOptions['client'], + }); + await adapter.initialize(); + await adapter.search('', filters, {limit: 10, offset: 0}); + expect(client.searches).toHaveLength(1); + expect(client.searches[0].index).toBe('reports'); + return client.searches[0].query?.bool?.filter; +} + +describe('ElasticsearchReportAdapter', () => { + it('maps the reported channel as a keyword', () => { + expect(ELASTICSEARCH_INDEX_DEFINITIONS.reports.mappings.properties['reportedChannelId']).toEqual({ + type: 'keyword', + }); + }); + + it('emits a reported channel term', async () => { + expect(await searchFilter({reportedChannelId: '1234567890'})).toEqual([{term: {reportedChannelId: '1234567890'}}]); + }); + + it('combines the reported channel term with the other report filters', async () => { + expect( + await searchFilter({ + status: 0, + reportType: 0, + reportedGuildId: '11', + reportedMessageId: '22', + reportedChannelId: '33', + guildContextId: '44', + }), + ).toEqual([ + {term: {status: 0}}, + {term: {reportType: 0}}, + {term: {reportedGuildId: '11'}}, + {term: {reportedMessageId: '22'}}, + {term: {reportedChannelId: '33'}}, + {term: {guildContextId: '44'}}, + ]); + }); + + it('omits the reported channel term when no channel is given', async () => { + expect(await searchFilter({status: 1})).toEqual([{term: {status: 1}}]); + }); +}); diff --git a/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportSearchService.ts b/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportSearchService.ts index eda9a2724..2947124a2 100644 --- a/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportSearchService.ts +++ b/fluxer_api/src/api/search/elasticsearch/ElasticsearchReportSearchService.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {GuildID, MessageID, ReportID, UserID} from '@app/api/BrandedTypes'; +import type {ReportID} from '@app/api/BrandedTypes'; import type {IARSubmission} from '@app/api/report/IReportRepository'; import type {IReportSearchService} from '@app/api/search/IReportSearchService'; import {convertToSearchableReport} from '@app/api/search/report/ReportSearchSerializer'; @@ -54,47 +54,7 @@ export class ElasticsearchReportSearchService return this.search(query, filters, options); } - listReportsByReporter( - reporterId: UserID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reporterId: reporterId.toString()}, {limit, offset}); - } - listReportsByStatus(status: number, limit?: number, offset?: number): Promise> { return this.searchReports('', {status}, {limit, offset}); } - - listReportsByType( - reportType: number, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportType}, {limit, offset}); - } - - listReportsByReportedUser( - reportedUserId: UserID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedUserId: reportedUserId.toString()}, {limit, offset}); - } - - listReportsByReportedGuild( - reportedGuildId: GuildID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedGuildId: reportedGuildId.toString()}, {limit, offset}); - } - - listReportsByReportedMessage( - reportedMessageId: MessageID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedMessageId: reportedMessageId.toString()}, {limit, offset}); - } } diff --git a/fluxer_api/src/api/search/meilisearch/MeilisearchDomainAdapters.ts b/fluxer_api/src/api/search/meilisearch/MeilisearchDomainAdapters.ts index 6cfe06e99..4a129a7f0 100644 --- a/fluxer_api/src/api/search/meilisearch/MeilisearchDomainAdapters.ts +++ b/fluxer_api/src/api/search/meilisearch/MeilisearchDomainAdapters.ts @@ -189,9 +189,12 @@ function buildReportFilters(filters: ReportSearchFilters): Array): Array { diff --git a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexDefinitions.ts b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexDefinitions.ts index 4c3a4956d..ba6f1db16 100644 --- a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexDefinitions.ts +++ b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexDefinitions.ts @@ -85,9 +85,12 @@ export const MEILISEARCH_INDEX_DEFINITIONS: Record | undefined; +} + +class FakeMeilisearchClient implements MeilisearchClient { + readonly requests: Array = []; + private nextTaskUid = 1; + + async request(method: string, path: string, body?: unknown): Promise { + this.requests.push({method, path, body}); + if (method === 'GET' && path.startsWith('/indexes/')) { + return {uid: path.slice('/indexes/'.length)} as TResponse; + } + if ((method === 'PUT' || method === 'PATCH') && path.includes('/settings/')) { + const task: MeilisearchTask = {taskUid: this.nextTaskUid++, status: 'enqueued'}; + return task as TResponse; + } + if (method === 'POST' && path.endsWith('/search')) { + return {hits: [{id: 'report-1'}], estimatedTotalHits: 1} as TResponse; + } + throw new Error(`Unhandled fake Meilisearch request: ${method} ${path}`); + } + + async waitForTask(_taskUid: number): Promise {} +} + +async function searchBody(filters: ReportSearchFilters): Promise { + const client = new FakeMeilisearchClient(); + const adapter = new MeilisearchReportAdapter({client}); + await adapter.initialize(); + await adapter.search('', filters, {limit: 10, offset: 0}); + const request = client.requests.find((candidate) => candidate.path === '/indexes/reports/search'); + return request!.body as MeilisearchSearchBody; +} + +describe('MeilisearchReportAdapter', () => { + it('declares the reported channel as a filterable attribute', async () => { + const client = new FakeMeilisearchClient(); + const adapter = new MeilisearchReportAdapter({client}); + + await adapter.initialize(); + + const settings = client.requests.find( + (request) => request.method === 'PUT' && request.path === '/indexes/reports/settings/filterable-attributes', + ); + expect(settings?.body).toContain('reportedChannelId'); + }); + + it('emits a reported channel term', async () => { + const body = await searchBody({reportedChannelId: '1234567890'}); + + expect(body.filter).toBe('(reportedChannelId = "1234567890")'); + expect(body.sort).toEqual(['reportedAt:desc', 'id:desc']); + }); + + it('combines the reported channel term with the other report filters', async () => { + const body = await searchBody({ + status: 0, + reportType: 0, + reportedGuildId: '11', + reportedMessageId: '22', + reportedChannelId: '33', + guildContextId: '44', + }); + + expect(body.filter).toBe( + '(status = 0) AND (reportType = 0) AND (reportedGuildId = "11") AND (reportedMessageId = "22") AND (reportedChannelId = "33") AND (guildContextId = "44")', + ); + }); + + it('omits the reported channel term when no channel is given', async () => { + const body = await searchBody({status: 1}); + + expect(body.filter).toBe('(status = 1)'); + }); + + it('matches resolved reports on a resolution time that is present and not null', async () => { + const body = await searchBody({isResolved: true}); + + expect(body.filter).toBe('((resolvedAt EXISTS AND resolvedAt IS NOT NULL))'); + }); + + it('matches unresolved reports on a resolution time that is absent or null', async () => { + const body = await searchBody({isResolved: false}); + + expect(body.filter).toBe('((resolvedAt NOT EXISTS OR resolvedAt IS NULL))'); + }); + + it('keeps the resolution clause grouped when combined with other filters', async () => { + const body = await searchBody({reportedChannelId: '33', isResolved: false}); + + expect(body.filter).toBe('(reportedChannelId = "33") AND ((resolvedAt NOT EXISTS OR resolvedAt IS NULL))'); + }); +}); diff --git a/fluxer_api/src/api/search/meilisearch/MeilisearchSearchServices.ts b/fluxer_api/src/api/search/meilisearch/MeilisearchSearchServices.ts index ba03922bf..e8baf3e15 100644 --- a/fluxer_api/src/api/search/meilisearch/MeilisearchSearchServices.ts +++ b/fluxer_api/src/api/search/meilisearch/MeilisearchSearchServices.ts @@ -264,49 +264,9 @@ export class MeilisearchReportSearchService return this.search(query, filters, options); } - listReportsByReporter( - reporterId: UserID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reporterId: reporterId.toString()}, {limit, offset}); - } - listReportsByStatus(status: number, limit?: number, offset?: number): Promise> { return this.searchReports('', {status}, {limit, offset}); } - - listReportsByType( - reportType: number, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportType}, {limit, offset}); - } - - listReportsByReportedUser( - reportedUserId: UserID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedUserId: reportedUserId.toString()}, {limit, offset}); - } - - listReportsByReportedGuild( - reportedGuildId: GuildID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedGuildId: reportedGuildId.toString()}, {limit, offset}); - } - - listReportsByReportedMessage( - reportedMessageId: MessageID, - limit?: number, - offset?: number, - ): Promise> { - return this.searchReports('', {reportedMessageId: reportedMessageId.toString()}, {limit, offset}); - } } export class MeilisearchAuditLogSearchService diff --git a/fluxer_api/src/api/search/report/ReportSearchSerializer.ts b/fluxer_api/src/api/search/report/ReportSearchSerializer.ts index 274cc4aba..4648419f5 100644 --- a/fluxer_api/src/api/search/report/ReportSearchSerializer.ts +++ b/fluxer_api/src/api/search/report/ReportSearchSerializer.ts @@ -15,8 +15,10 @@ export function convertToSearchableReport(report: IARSubmission): SearchableRepo status: report.status, reportType: report.reportType, category: report.category, + reason: report.reason, additionalInfo: report.additionalInfo, reportedUserId: report.reportedUserId?.toString() || null, + reportedWebhookId: report.reportedWebhookId?.toString() || null, reportedGuildId: report.reportedGuildId?.toString() || null, reportedGuildName: report.reportedGuildName, reportedMessageId: report.reportedMessageId?.toString() || null, diff --git a/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.test.ts b/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.test.ts new file mode 100644 index 000000000..0148ad838 --- /dev/null +++ b/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.test.ts @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportID} from '@app/api/BrandedTypes'; +import {setCassandraQueryExecutorForTesting} from '@app/api/database/CassandraQueryExecution'; +import {IAR_SUBMISSION_COLUMNS, type IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {GuildDataRepository} from '@app/api/guild/repositories/GuildDataRepository'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {setInjectedSearchProvider} from '@app/api/SearchFactory'; +import {warmupAdminSearchIndexes} from '@app/api/search/SearchWarmup'; +import {InMemoryCassandraQueryExecutor} from '@app/api/test/InMemoryCassandraQueryExecutor'; +import {NoopLogger} from '@app/api/test/mocks/NoopLogger'; +import {InMemorySearchProvider} from '@app/api/test/search/InMemorySearchProvider'; +import {UserRepository} from '@app/api/user/repositories/UserRepository'; +import {afterEach, beforeEach, describe, expect, it} from 'vitest'; + +const REPORT_COUNT = 250; +const PAGE_SIZE = 100; +const MAX_PAGES = 10; + +class BoundedReportRepository extends ReportRepository { + pages = 0; + + override async listAllReportsPaginated(limit: number, lastReportId?: ReportID) { + this.pages += 1; + if (this.pages > MAX_PAGES) { + throw new Error(`report scan did not end after ${MAX_PAGES} pages`); + } + return super.listAllReportsPaginated(limit, lastReportId); + } +} + +function reportRow(reportId: bigint): IARSubmissionRow { + const row: Record = Object.fromEntries(IAR_SUBMISSION_COLUMNS.map((column) => [column, null])); + return { + ...row, + report_id: reportId, + reported_at: new Date(Number(reportId % 1_000_000n) * 1000), + status: 0, + report_type: 1, + category: 'other', + } as IARSubmissionRow; +} + +function shuffledReportIds(): Array { + const ids = Array.from({length: REPORT_COUNT}, (_, index) => 1_400_000_000_000_000_000n + BigInt(index) * 7919n); + return ids.map((_, index) => ids[(index * 113) % ids.length]!); +} + +async function seedReports(ids: Array): Promise { + const repository = new ReportRepository(); + for (const id of ids) { + await repository.createReport(reportRow(id)); + } +} + +describe('InMemoryCassandraQueryExecutor', () => { + let executor: InMemoryCassandraQueryExecutor; + + beforeEach(() => { + executor = new InMemoryCassandraQueryExecutor(); + setCassandraQueryExecutorForTesting(executor); + }); + + afterEach(() => { + executor.reset(); + setCassandraQueryExecutorForTesting(new InMemoryCassandraQueryExecutor()); + }); + + it('returns rows in primary key order when a select has no ordering', async () => { + const ids = shuffledReportIds(); + expect(new Set(ids).size).toBe(REPORT_COUNT); + await seedReports(ids); + const firstPage = await new ReportRepository().listAllReportsPaginated(5); + const sorted = [...ids].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)); + expect(firstPage.map((report) => report.reportId)).toEqual(sorted.slice(0, 5)); + }); + + it('pages a token scan to the end with every row exactly once', async () => { + const ids = shuffledReportIds(); + await seedReports(ids); + const repository = new BoundedReportRepository(); + const seen: Array = []; + const pageSizes: Array = []; + let cursor: ReportID | undefined; + while (true) { + const page = await repository.listAllReportsPaginated(PAGE_SIZE, cursor); + pageSizes.push(page.length); + seen.push(...page.map((report) => report.reportId)); + if (page.length < PAGE_SIZE) break; + cursor = page[page.length - 1]!.reportId; + } + expect(pageSizes).toEqual([100, 100, 50]); + expect(seen).toHaveLength(REPORT_COUNT); + expect(new Set(seen).size).toBe(REPORT_COUNT); + expect([...seen].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))).toEqual(seen); + }); + + it('finishes the admin search warmup with more than one batch of reports', async () => { + await seedReports(shuffledReportIds()); + const provider = new InMemorySearchProvider(); + await provider.initialize(); + setInjectedSearchProvider(provider); + const reportRepository = new BoundedReportRepository(); + try { + await warmupAdminSearchIndexes({ + userRepository: new UserRepository(), + guildRepository: new GuildDataRepository(), + reportRepository, + logger: new NoopLogger(), + }); + const indexed = await provider.getReportSearchService().search('', {}, {limit: 1}); + expect(indexed.total).toBe(REPORT_COUNT); + expect(reportRepository.pages).toBe(3); + } finally { + setInjectedSearchProvider(undefined); + await provider.shutdown(); + } + }); +}); diff --git a/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.ts b/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.ts index 570223949..5ac68b54a 100644 --- a/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.ts +++ b/fluxer_api/src/api/test/InMemoryCassandraQueryExecutor.ts @@ -26,6 +26,7 @@ function compareValues(a: unknown, b: unknown): number { } const av = a instanceof Date ? a.getTime() : typeof a === 'bigint' ? Number(a) : a; const bv = b instanceof Date ? b.getTime() : typeof b === 'bigint' ? Number(b) : b; + if (Buffer.isBuffer(av) && Buffer.isBuffer(bv)) return Buffer.compare(av, bv); if (av === bv) return 0; return (av as number | string) < (bv as number | string) ? -1 : 1; } @@ -103,13 +104,12 @@ function matchesWhere(row: Row, where: ReadonlyArray> | undefined if (compareValues(row[clause.col], getParam(params, clause.param)) > 0) return false; break; case 'gt': + case 'tokenGt': if (compareValues(row[clause.col], getParam(params, clause.param)) <= 0) return false; break; case 'gte': if (compareValues(row[clause.col], getParam(params, clause.param)) < 0) return false; break; - case 'tokenGt': - break; case 'tupleGt': { const left = clause.cols.map((column) => row[column]); const right = clause.params.map((param) => getParam(params, param)); @@ -130,6 +130,23 @@ function matchesWhere(row: Row, where: ReadonlyArray> | undefined return true; } +function compareColumns(columns: ReadonlyArray, left: Row, right: Row): number { + for (const column of columns) { + const cmp = compareValues(left[column], right[column]); + if (cmp !== 0) return cmp; + } + return 0; +} + +function rowComparator(meta: KvQueryMeta): (left: Row, right: Row) => number { + const primaryKey = meta.table.primaryKey as ReadonlyArray; + if (!meta.orderBy) return (left, right) => compareColumns(primaryKey, left, right); + const column = meta.orderBy.col as string; + const columns = [column, ...primaryKey.slice(primaryKey.indexOf(column) + 1)]; + const direction = meta.orderBy.direction === 'DESC' ? -1 : 1; + return (left, right) => compareColumns(columns, left, right) * direction; +} + function projectRow(row: Row, columns: ReadonlyArray | undefined): Row { if (!columns) return cloneRow(row); const projected: Row = {}; @@ -349,20 +366,9 @@ export class InMemoryCassandraQueryExecutor implements CassandraQueryExecutorFor } private select(meta: KvQueryMeta, params: CassandraParams): Array { - let rows = [...this.table(meta).values()].filter((row) => matchesWhere(row, meta.where, params)); - if (meta.orderBy) { - const direction = meta.orderBy.direction === 'DESC' ? -1 : 1; - const column = meta.orderBy.col as string; - const primaryKey = meta.table.primaryKey as ReadonlyArray; - const columns = [column, ...primaryKey.slice(primaryKey.indexOf(column) + 1)]; - rows = rows.sort((a, b) => { - for (const c of columns) { - const cmp = compareValues(a[c], b[c]); - if (cmp !== 0) return cmp * direction; - } - return 0; - }); - } + let rows = [...this.table(meta).values()] + .filter((row) => matchesWhere(row, meta.where, params)) + .sort(rowComparator(meta)); if (typeof meta.limit === 'number') { rows = rows.slice(0, meta.limit); } diff --git a/fluxer_api/src/api/test/search/InMemorySearchProvider.ts b/fluxer_api/src/api/test/search/InMemorySearchProvider.ts index 60635fef5..99aa177ff 100644 --- a/fluxer_api/src/api/test/search/InMemorySearchProvider.ts +++ b/fluxer_api/src/api/test/search/InMemorySearchProvider.ts @@ -490,9 +490,12 @@ function matchesReportFilters(doc: SearchableReport, filters: ReportSearchFilter if (filters.status !== undefined && doc.status !== filters.status) return false; if (filters.reportType !== undefined && doc.reportType !== filters.reportType) return false; if (filters.category !== undefined && doc.category !== filters.category) return false; + if (filters.reason !== undefined && doc.reason !== filters.reason) return false; if (filters.reportedUserId !== undefined && doc.reportedUserId !== filters.reportedUserId) return false; + if (filters.reportedWebhookId !== undefined && doc.reportedWebhookId !== filters.reportedWebhookId) return false; if (filters.reportedGuildId !== undefined && doc.reportedGuildId !== filters.reportedGuildId) return false; if (filters.reportedMessageId !== undefined && doc.reportedMessageId !== filters.reportedMessageId) return false; + if (filters.reportedChannelId !== undefined && doc.reportedChannelId !== filters.reportedChannelId) return false; if (filters.guildContextId !== undefined && doc.guildContextId !== filters.guildContextId) return false; if (filters.resolvedByAdminId !== undefined && doc.resolvedByAdminId !== filters.resolvedByAdminId) return false; if (filters.isResolved !== undefined && (doc.resolvedAt !== null) !== filters.isResolved) return false; @@ -508,6 +511,7 @@ function collectReportText(doc: SearchableReport): Array { doc.reportedChannelName, doc.publicComment, doc.reportedUserId, + doc.reportedWebhookId, doc.reportedGuildId, doc.reportedMessageId, ]; @@ -549,29 +553,9 @@ class InMemoryReportSearchService return this.search(query, filters, options); } - listReportsByReporter(reporterId: UserID, limit?: number, offset?: number) { - return this.searchReports('', {reporterId: reporterId.toString()}, {limit, offset}); - } - listReportsByStatus(status: number, limit?: number, offset?: number) { return this.searchReports('', {status}, {limit, offset}); } - - listReportsByType(reportType: number, limit?: number, offset?: number) { - return this.searchReports('', {reportType}, {limit, offset}); - } - - listReportsByReportedUser(reportedUserId: UserID, limit?: number, offset?: number) { - return this.searchReports('', {reportedUserId: reportedUserId.toString()}, {limit, offset}); - } - - listReportsByReportedGuild(reportedGuildId: GuildID, limit?: number, offset?: number) { - return this.searchReports('', {reportedGuildId: reportedGuildId.toString()}, {limit, offset}); - } - - listReportsByReportedMessage(reportedMessageId: MessageID, limit?: number, offset?: number) { - return this.searchReports('', {reportedMessageId: reportedMessageId.toString()}, {limit, offset}); - } } function matchesAuditLogFilters(doc: SearchableAuditLog, filters: AuditLogSearchFilters): boolean { diff --git a/fluxer_api/src/api/worker/WorkerLaneConfig.ts b/fluxer_api/src/api/worker/WorkerLaneConfig.ts index f0c3e3698..2e7350092 100644 --- a/fluxer_api/src/api/worker/WorkerLaneConfig.ts +++ b/fluxer_api/src/api/worker/WorkerLaneConfig.ts @@ -71,6 +71,8 @@ const LANE_CONFIG = { consumerName: 'workers_batch', tasks: [ 'expireAttachments', + 'expireReportSnapshots', + 'clearAuthenticatedReporterEmails', 'expireStaleJobs', 'indexChannelMessages', 'indexGuildMembers', diff --git a/fluxer_api/src/api/worker/WorkerMain.ts b/fluxer_api/src/api/worker/WorkerMain.ts index d89fd2591..6144dd1cb 100644 --- a/fluxer_api/src/api/worker/WorkerMain.ts +++ b/fluxer_api/src/api/worker/WorkerMain.ts @@ -92,6 +92,7 @@ function registerCronJobs(cron: CronScheduler, jobsStreamMaxAgeMs: number): void } cron.upsert('processInactivityDeletions', 'processInactivityDeletions', {}, '0 0 */6 * * *', {ledger: false}); cron.upsert('expireAttachments', 'expireAttachments', {}, '0 0 */12 * * *', {ledger: false}); + cron.upsert('expireReportSnapshots', 'expireReportSnapshots', {}, '0 15 5 * * *', {ledger: false}); if (jobsStreamMaxAgeMs > 0 && jobsStreamMaxAgeMs <= JOBS_STREAM_MAX_AGE_MS) { cron.upsert('expireStaleJobs', 'expireStaleJobs', {}, '0 45 3 * * *', {ledger: false}); } else { diff --git a/fluxer_api/src/api/worker/WorkerTaskRegistry.ts b/fluxer_api/src/api/worker/WorkerTaskRegistry.ts index fd8be9de2..6830a2f1f 100644 --- a/fluxer_api/src/api/worker/WorkerTaskRegistry.ts +++ b/fluxer_api/src/api/worker/WorkerTaskRegistry.ts @@ -11,11 +11,13 @@ import batchGuildAuditLogMessageDeletes from '@app/api/worker/tasks/BatchGuildAu import bulkDeleteSelfMessagesImmediate from '@app/api/worker/tasks/BulkDeleteSelfMessagesImmediate'; import bulkDeleteUserMessages from '@app/api/worker/tasks/BulkDeleteUserMessages'; import bulkDeleteUserMessagesScoped from '@app/api/worker/tasks/BulkDeleteUserMessagesScoped'; +import clearAuthenticatedReporterEmails from '@app/api/worker/tasks/ClearAuthenticatedReporterEmails'; import crosspostMessage from '@app/api/worker/tasks/CrosspostMessage'; import crosspostMessageChunk from '@app/api/worker/tasks/CrosspostMessageChunk'; import deleteUserMessagesInGuildByTime from '@app/api/worker/tasks/DeleteUserMessagesInGuildByTime'; import drainActivitySpool from '@app/api/worker/tasks/DrainActivitySpool'; import expireAttachments from '@app/api/worker/tasks/ExpireAttachments'; +import expireReportSnapshots from '@app/api/worker/tasks/ExpireReportSnapshots'; import expireStaleJobs from '@app/api/worker/tasks/ExpireStaleJobs'; import extractEmbeds from '@app/api/worker/tasks/ExtractEmbeds'; import finalizeNcmecAttachmentReport from '@app/api/worker/tasks/FinalizeNcmecAttachmentReport'; @@ -82,11 +84,13 @@ export const workerTasks: Record = { bulkScheduleUserDeletion: bulkScheduleUserDeletion, bulkUpdateGuildFeatures: bulkUpdateGuildFeatures, bulkUpdateUserFlags: bulkUpdateUserFlags, + clearAuthenticatedReporterEmails, crosspostMessage, crosspostMessageChunk, deleteUserMessagesInGuildByTime, drainActivitySpool, expireAttachments, + expireReportSnapshots, expireStaleJobs, extractEmbeds, finalizeNcmecAttachmentReport, diff --git a/fluxer_api/src/api/worker/tasks/ClearAuthenticatedReporterEmails.ts b/fluxer_api/src/api/worker/tasks/ClearAuthenticatedReporterEmails.ts new file mode 100644 index 000000000..779a32580 --- /dev/null +++ b/fluxer_api/src/api/worker/tasks/ClearAuthenticatedReporterEmails.ts @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportID} from '@app/api/BrandedTypes'; +import {Logger} from '@app/api/Logger'; +import type {IReportRepository} from '@app/api/report/IReportRepository'; +import {getWorkerDependencies} from '@app/api/worker/WorkerContext'; +import type {WorkerTaskHandler} from '@pkgs/worker/src/contracts/WorkerTask'; + +const DEFAULT_SCAN_PAGE_SIZE = 500; + +export interface ClearAuthenticatedReporterEmailsSummary { + scanned: number; + cleared: number; + skipped: number; + failed: number; +} + +export async function clearAuthenticatedReporterEmails( + reportRepository: IReportRepository, + pageSize = DEFAULT_SCAN_PAGE_SIZE, +): Promise { + const summary: ClearAuthenticatedReporterEmailsSummary = {scanned: 0, cleared: 0, skipped: 0, failed: 0}; + let cursor: ReportID | undefined; + while (true) { + const page = await reportRepository.listAllReportsPaginated(pageSize, cursor); + for (const report of page) { + summary.scanned++; + if (!report.reporterId || report.reporterEmail === null) continue; + try { + if (await reportRepository.clearReporterEmail(report.reportId, report.reporterId)) { + summary.cleared++; + } else { + summary.skipped++; + } + } catch (error) { + summary.failed++; + Logger.error({error, reportId: report.reportId.toString()}, 'Failed to clear a stored reporter email'); + } + } + if (page.length < pageSize) break; + cursor = page[page.length - 1]!.reportId; + } + Logger.info(summary, 'Cleared stored email addresses from account reports'); + return summary; +} + +const clearAuthenticatedReporterEmailsTask: WorkerTaskHandler = async () => { + await clearAuthenticatedReporterEmails(getWorkerDependencies().reportRepository); +}; + +export default clearAuthenticatedReporterEmailsTask; diff --git a/fluxer_api/src/api/worker/tasks/ExpireReportSnapshots.ts b/fluxer_api/src/api/worker/tasks/ExpireReportSnapshots.ts new file mode 100644 index 000000000..f57880bf7 --- /dev/null +++ b/fluxer_api/src/api/worker/tasks/ExpireReportSnapshots.ts @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ReportID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {makeAttachmentCdnKey} from '@app/api/channel/services/message/MessageHelpers'; +import type {IStorageService} from '@app/api/infrastructure/IStorageService'; +import {Logger} from '@app/api/Logger'; +import type {IARSubmission, IReportRepository} from '@app/api/report/IReportRepository'; +import {getReportSearchService} from '@app/api/SearchFactory'; +import type {IReportSearchService} from '@app/api/search/IReportSearchService'; +import {readOptionalEnv} from '@app/api/utils/IntegerOptions'; +import {getWorkerDependencies} from '@app/api/worker/WorkerContext'; +import {listReportProfileSnapshotAssets} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import type {WorkerTaskHandler} from '@pkgs/worker/src/contracts/WorkerTask'; +import {ms} from 'itty-time'; + +export const REPORT_RETENTION_DAYS = 365; +const REPORT_RETENTION_MS = REPORT_RETENTION_DAYS * ms('1 day'); +const DEFAULT_SCAN_PAGE_SIZE = 500; + +export interface ReportRetentionDeps { + reportRepository: IReportRepository; + storageService: IStorageService; + reportSearchService: IReportSearchService | null; +} + +export interface ReportRetentionOptions { + now: Date; + dryRun: boolean; + pageSize?: number; +} + +export interface ReportRetentionSummary { + dryRun: boolean; + scanned: number; + expired: number; + held: number; + deleted: number; + objectsDeleted: number; + sharedObjectsKept: number; + failed: number; +} + +type ReportRetentionState = 'expired' | 'held' | 'retained'; + +export function resolveReportRetentionDryRun(raw: string | undefined): boolean { + const value = raw?.trim().toLowerCase(); + return value !== 'false' && value !== '0'; +} + +function reportRetentionState(report: IARSubmission, now: Date): ReportRetentionState { + const reportedAt = report.reportedAt instanceof Date ? report.reportedAt.getTime() : Number.NaN; + if (Number.isNaN(reportedAt) || reportedAt > now.getTime() - REPORT_RETENTION_MS) { + return 'retained'; + } + if (report.legalHoldUntil && report.legalHoldUntil.getTime() > now.getTime()) { + return 'held'; + } + return 'expired'; +} + +function reportProfilePrefix(reportId: ReportID): string { + return `reports/${reportId}/profile/`; +} + +function referencedObjectKeys(report: IARSubmission): Array { + const keys: Array = []; + for (const message of report.messageContext ?? []) { + const channelId = message.channelId ?? report.reportedChannelId; + if (!channelId) continue; + for (const attachment of message.attachments) { + if (attachment.attachment_id == null || !attachment.filename) continue; + keys.push(makeAttachmentCdnKey(channelId, attachment.attachment_id, String(attachment.filename))); + } + } + for (const asset of listReportProfileSnapshotAssets(report.reportedProfileSnapshot)) { + if (asset.key) { + keys.push(asset.key); + } + } + return keys; +} + +async function storedObjectKeys(storageService: IStorageService, report: IARSubmission): Promise> { + const keys = new Set(referencedObjectKeys(report)); + const listed = await storageService.listObjects({ + bucket: Config.s3.buckets.reports, + prefix: reportProfilePrefix(report.reportId), + }); + for (const object of listed) { + keys.add(object.key); + } + return keys; +} + +export async function processReportRetention( + deps: ReportRetentionDeps, + options: ReportRetentionOptions, +): Promise { + const {reportRepository, storageService, reportSearchService} = deps; + const {now, dryRun} = options; + const pageSize = options.pageSize ?? DEFAULT_SCAN_PAGE_SIZE; + const summary: ReportRetentionSummary = { + dryRun, + scanned: 0, + expired: 0, + held: 0, + deleted: 0, + objectsDeleted: 0, + sharedObjectsKept: 0, + failed: 0, + }; + const retainedKeys = new Set(); + const expiredIds: Array = []; + let cursor: ReportID | undefined; + while (true) { + const page = await reportRepository.listAllReportsPaginated(pageSize, cursor); + for (const report of page) { + summary.scanned++; + const state = reportRetentionState(report, now); + if (state === 'expired') { + expiredIds.push(report.reportId); + continue; + } + if (state === 'held') { + summary.held++; + } + for (const key of referencedObjectKeys(report)) { + retainedKeys.add(key); + } + } + if (page.length < pageSize) break; + cursor = page[page.length - 1]!.reportId; + } + summary.expired = expiredIds.length; + const deletedKeys = new Set(); + for (const reportId of expiredIds) { + try { + const report = await reportRepository.getReport(reportId); + if (!report) continue; + if (reportRetentionState(report, now) !== 'expired') { + for (const key of referencedObjectKeys(report)) { + retainedKeys.add(key); + } + continue; + } + for (const key of await storedObjectKeys(storageService, report)) { + if (retainedKeys.has(key)) { + summary.sharedObjectsKept++; + continue; + } + if (deletedKeys.has(key)) continue; + const metadata = await storageService.getObjectMetadata(Config.s3.buckets.reports, key); + if (metadata?.lastModified && metadata.lastModified.getTime() >= now.getTime()) { + retainedKeys.add(key); + summary.sharedObjectsKept++; + continue; + } + if (!dryRun) { + await storageService.deleteObject(Config.s3.buckets.reports, key); + } + deletedKeys.add(key); + summary.objectsDeleted++; + } + if (!dryRun) { + await reportSearchService?.deleteReport(reportId); + await reportRepository.deleteReport(reportId); + } + summary.deleted++; + } catch (error) { + summary.failed++; + Logger.error({error, reportId: reportId.toString()}, 'Failed to delete an expired report'); + } + } + Logger.info({...summary, retentionDays: REPORT_RETENTION_DAYS}, 'Processed report retention'); + return summary; +} + +const expireReportSnapshots: WorkerTaskHandler = async () => { + const {reportRepository, storageService} = getWorkerDependencies(); + await processReportRetention( + {reportRepository, storageService, reportSearchService: getReportSearchService()}, + {now: new Date(), dryRun: resolveReportRetentionDryRun(readOptionalEnv('FLUXER_REPORT_RETENTION_DRY_RUN'))}, + ); +}; + +export default expireReportSnapshots; diff --git a/fluxer_api/src/api/worker/tasks/admin_bulk/AdminBulkServices.ts b/fluxer_api/src/api/worker/tasks/admin_bulk/AdminBulkServices.ts index 3687119b1..4cfa5aac4 100644 --- a/fluxer_api/src/api/worker/tasks/admin_bulk/AdminBulkServices.ts +++ b/fluxer_api/src/api/worker/tasks/admin_bulk/AdminBulkServices.ts @@ -4,6 +4,7 @@ import {AdminAuditService} from '@app/api/admin/services/AdminAuditService'; import {AdminBanManagementService} from '@app/api/admin/services/AdminBanManagementService'; import {AdminGuildService} from '@app/api/admin/services/AdminGuildService'; import {AdminUserService} from '@app/api/admin/services/AdminUserService'; +import {ReporterResolutionNotifier} from '@app/api/admin/services/ReporterResolutionNotifier'; import {createApiContext} from '@app/api/CreateApiContext'; import {getReportServiceInstance} from '@app/api/middleware/ServiceMiddleware'; import { @@ -12,6 +13,7 @@ import { getGuildDiscoveryRepository, getInviteRepository, } from '@app/api/middleware/ServiceSingletons'; +import {UserChannelService} from '@app/api/user/services/UserChannelService'; import type {WorkerDependencies} from '@app/api/worker/WorkerDependencies'; interface AdminBulkServices { @@ -43,6 +45,22 @@ export function createAdminBulkServices(deps: WorkerDependencies): AdminBulkServ stripe: deps.stripe, reportService: getReportServiceInstance(), storeEntitlementService: deps.storeEntitlementService, + reporterResolutionNotifier: new ReporterResolutionNotifier({ + apiContext, + systemDm: { + channelService: deps.channelService, + userChannelService: new UserChannelService( + deps.userRepository, + deps.channelService, + deps.channelRepository, + deps.gatewayService, + deps.snowflakeService, + deps.userPermissionUtils, + deps.limitConfigService, + ), + userCacheService: deps.userCacheService, + }, + }), }); const guildService = new AdminGuildService({ guildRepository: deps.guildRepository, diff --git a/fluxer_api/src/api/worker/tests/BulkScheduleUserDeletion.test.ts b/fluxer_api/src/api/worker/tests/BulkScheduleUserDeletion.test.ts index 5a7989165..4bce1c7a8 100644 --- a/fluxer_api/src/api/worker/tests/BulkScheduleUserDeletion.test.ts +++ b/fluxer_api/src/api/worker/tests/BulkScheduleUserDeletion.test.ts @@ -5,13 +5,16 @@ import type {AdminAuditLog} from '@app/api/admin/IAdminRepository'; import { clearTestEmails, createTestAccount, + createUniqueEmail, + findLastTestEmail, listTestEmails, setUserACLs, type TestAccount, } from '@app/api/auth/tests/AuthTestUtils'; import {createReportID, createUserID} from '@app/api/BrandedTypes'; import {sendChannelMessage, setupTestGuildWithMembers} from '@app/api/channel/tests/ChannelTestUtils'; -import {NcmecRepository} from '@app/api/csam/NcmecRepository'; +import {createTestChannelService} from '@app/api/channel/tests/CrosspostTestUtils'; +import {getReportServiceInstance} from '@app/api/middleware/ServiceMiddleware'; import {getGatewayService, getSnowflakeService, setInjectedWorkerService} from '@app/api/middleware/ServiceRegistry'; import { createUserCacheService, @@ -20,23 +23,27 @@ import { getGuildRepository, getKVAccountDeletionQueue, getKVBulkMessageDeletionQueue, + getLimitConfigService, + getUserPermissionUtils, getUserRepository, } from '@app/api/middleware/ServiceSingletons'; import {ReportStatus} from '@app/api/report/IReportRepository'; import {ReportRepository} from '@app/api/report/ReportRepository'; +import {getReportSearchService} from '@app/api/SearchFactory'; import {drainSearchTasks} from '@app/api/search/SearchTaskTracker'; import {createTestStoreEntitlementService} from '@app/api/store_billing/tests/StoreBillingTestUtils'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; import {NoopLogger} from '@app/api/test/mocks/NoopLogger'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; -import {createBuilder} from '@app/api/test/TestRequestBuilder'; +import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; import bulkScheduleUserDeletion from '@app/api/worker/tasks/admin_bulk/BulkScheduleUserDeletion'; import {clearWorkerDependencies, setWorkerDependenciesForTest} from '@app/api/worker/WorkerContext'; import {DeletionReasons} from '@fluxer/constants/src/Core'; import {UserFlags} from '@fluxer/constants/src/UserConstants'; +import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n'; import type {WorkerTaskHelpers, WorkerTaskResult} from '@pkgs/worker/src/contracts/WorkerTask'; import type {WorkerJobPayload} from '@pkgs/worker/src/contracts/WorkerTypes'; -import {afterEach, beforeEach, describe, expect, test} from 'vitest'; +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; interface ReportResponse { report_id: string; @@ -70,6 +77,9 @@ function installWorkerDependencies(): void { guildRepository: getGuildRepository(), channelRepository: getChannelRepository(), gatewayService: getGatewayService(), + channelService: createTestChannelService(), + userPermissionUtils: getUserPermissionUtils(), + limitConfigService: getLimitConfigService(), deletionQueueService: getKVAccountDeletionQueue(), bulkMessageDeletionQueueService: getKVBulkMessageDeletionQueue(), stripe: null, @@ -141,6 +151,58 @@ async function listAuditLogs(action: string): Promise> { return logs.filter((log) => log.action === action); } +async function autoResolveSummary(targetUserId: string): Promise> { + const logs = (await listAuditLogs('auto_resolve_reports_on_deletion')).filter( + (log) => log.targetId === BigInt(targetUserId), + ); + expect(logs).toHaveLength(1); + return Object.fromEntries(logs[0]!.metadata); +} + +async function reportResolvedEmails(harness: ApiTestHarness, reporter: TestAccount) { + return (await listTestEmails(harness, {recipient: reporter.email})).filter( + (email) => email.type === 'report_resolved', + ); +} + +async function systemDmMessages(harness: ApiTestHarness, account: TestAccount): Promise> { + const channels = await createBuilder}>>(harness, account.token) + .get('/users/@me/channels') + .expect(HTTP_STATUS.OK) + .execute(); + const systemChannels = channels.filter((channel) => channel.recipients?.some((recipient) => recipient.id === '0')); + const messages = await Promise.all( + systemChannels.map((channel) => + createBuilder>(harness, account.token) + .get(`/channels/${channel.id}/messages?limit=50`) + .expect(HTTP_STATUS.OK) + .execute(), + ), + ); + return messages.flat().map((message) => message.content ?? ''); +} + +const DELETION_WORDING = /delet|\bban|suspend|terminat|remov|enforce/i; + +function renderGenericNotice(username: string, reportId: string): {subject: string; body: string} { + const rendered = getEmailTemplate('report_resolved', null, {username, reportId, publicComment: '', hasComment: 'no'}); + if (!rendered.ok) { + throw new Error('report_resolved did not render'); + } + return rendered.value; +} + +async function scheduleDeletionThroughEndpoint(harness: ApiTestHarness, target: TestAccount): Promise { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'user:delete']); + await createBuilder(harness, admin.token) + .put(`/admin/users/${target.userId}/deletion`) + .header('X-Audit-Log-Reason', AUDIT_LOG_REASON) + .body({reason_code: DeletionReasons.SPAM, days_until_deletion: 60}) + .expect(HTTP_STATUS.OK) + .execute(); +} + async function isSessionAlive(harness: ApiTestHarness, token: string): Promise { const response = await harness.requestJson({path: '/users/@me', headers: {Authorization: token}}); return response.status === HTTP_STATUS.OK; @@ -175,8 +237,13 @@ describe('bulkScheduleUserDeletion', () => { expect(targetLog!.metadata.get('days')).toBe('60'); expect(await isSessionAlive(harness, target.token)).toBe(false); expect(await new AdminRepository().isEmailBanned(target.email)).toBe(true); - const resolutionLogs = await listAuditLogs('auto_resolve_reports_on_deletion'); - expect(resolutionLogs.some((log) => log.targetId === BigInt(target.userId))).toBe(true); + expect(await autoResolveSummary(target.userId)).toEqual({ + outcome: 'completed', + found_count: '1', + resolved_count: '1', + failed_count: '0', + notified_count: '1', + }); const summaryLogs = await listAuditLogs('bulk_schedule_deletion'); expect(summaryLogs).toHaveLength(1); expect(summaryLogs[0]!.targetType).toBe('bulk_job'); @@ -208,6 +275,150 @@ describe('bulkScheduleUserDeletion', () => { expect(targetLog!.metadata.get('reason_code')).toBe(DeletionReasons.SPAM.toString()); expect(await isSessionAlive(harness, target.token)).toBe(false); expect(await new AdminRepository().isEmailBanned(target.email)).toBe(true); + expect((await autoResolveSummary(target.userId)).notified_count).toBe('1'); + }); + test('an auto-resolved report sends the reporter the generic notice through the bulk job', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await reportUser(harness, reporter, target.userId); + await clearTestEmails(harness); + await runBulkJob([target.userId], admin.userId); + const sent = await reportResolvedEmails(harness, reporter); + expect(sent.map((email) => email.metadata)).toEqual([{report_id: reportId, public_comment: ''}]); + const notice = renderGenericNotice('reporter', reportId); + expect(notice.body).toContain(reportId); + expect(`${notice.subject}\n${notice.body}`).not.toMatch(DELETION_WORDING); + const me = await createBuilder<{username: string}>(harness, reporter.token) + .get('/users/@me') + .expect(HTTP_STATUS.OK) + .execute(); + expect(await systemDmMessages(harness, reporter)).toEqual([renderGenericNotice(me.username, reportId).body]); + }); + test('an auto-resolved report sends the reporter a DM and an email with no deletion wording', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await reportUser(harness, reporter, target.userId); + await clearTestEmails(harness); + await scheduleDeletionThroughEndpoint(harness, target); + const sent = await reportResolvedEmails(harness, reporter); + expect(sent.map((email) => email.metadata)).toEqual([{report_id: reportId, public_comment: ''}]); + const me = await createBuilder<{username: string}>(harness, reporter.token) + .get('/users/@me') + .expect(HTTP_STATUS.OK) + .execute(); + const dms = await systemDmMessages(harness, reporter); + expect(dms).toEqual([renderGenericNotice(me.username, reportId).body]); + expect(await listTestEmails(harness, {recipient: reporter.email})).toHaveLength(1); + }); + test('an auto-resolved DSA notice sends the notifier the decision email', async () => { + const target = await createTestAccount(harness); + const email = createUniqueEmail('dsa-auto-resolve'); + await createBuilderWithoutAuth(harness) + .post('/reports/dsa/email/send') + .body({email}) + .expect(HTTP_STATUS.OK) + .execute(); + const code = findLastTestEmail(await listTestEmails(harness, {recipient: email}), 'dsa_report_verification') + ?.metadata.code; + const {ticket} = await createBuilderWithoutAuth<{ticket: string}>(harness) + .post('/reports/dsa/email/verify') + .body({email, code}) + .expect(HTTP_STATUS.OK) + .execute(); + const report = await createBuilderWithoutAuth(harness) + .post('/reports/dsa') + .body({ + ticket, + report_type: 'user', + category: 'harassment', + user_id: target.userId, + reporter_full_legal_name: 'Jane Doe', + reporter_country_of_residence: 'NL', + }) + .expect(HTTP_STATUS.OK) + .execute(); + await drainSearchTasks(); + await clearTestEmails(harness); + await scheduleDeletionThroughEndpoint(harness, target); + expect(await getReportStatus(report.report_id)).toBe(ReportStatus.RESOLVED); + const sent = (await listTestEmails(harness)).filter((entry) => entry.to === email); + expect(sent.map((entry) => [entry.type, entry.metadata])).toEqual([ + ['dsa_report_resolved', {report_id: report.report_id, public_comment: ''}], + ]); + expect((await autoResolveSummary(target.userId)).notified_count).toBe('1'); + }); + test('a deletion with no pending reports records a completed run with zero counts', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); + const target = await createTestAccount(harness); + await runBulkJob([target.userId], admin.userId); + expect(await autoResolveSummary(target.userId)).toEqual({ + outcome: 'completed', + found_count: '0', + resolved_count: '0', + failed_count: '0', + notified_count: '0', + }); + }); + test('a report search failure leaves reports pending and is recorded', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const reportId = await reportUser(harness, reporter, target.userId); + const search = getReportSearchService()!; + const spy = vi.spyOn(search, 'searchReports').mockRejectedValue(new Error('search cluster unreachable')); + try { + const result = await runBulkJob([target.userId], admin.userId); + expect(result.successful_count).toBe(1); + } finally { + spy.mockRestore(); + } + expect(await getReportStatus(reportId)).toBe(ReportStatus.PENDING); + expect(await autoResolveSummary(target.userId)).toEqual({ + outcome: 'enumeration_failed', + found_count: '0', + resolved_count: '0', + failed_count: '0', + notified_count: '0', + }); + }); + test('a report that fails to resolve is counted and the others still resolve', async () => { + const admin = await createTestAccount(harness); + await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); + const firstReporter = await createTestAccount(harness); + const secondReporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const firstReportId = await reportUser(harness, firstReporter, target.userId); + const secondReportId = await reportUser(harness, secondReporter, target.userId); + const reportService = getReportServiceInstance(); + const resolveReport = reportService.resolveReport.bind(reportService); + const spy = vi.spyOn(reportService, 'resolveReport').mockImplementation(async (reportId, ...rest) => { + if (reportId.toString() === firstReportId) { + throw new Error('storage write timed out'); + } + return resolveReport(reportId, ...rest); + }); + await clearTestEmails(harness); + try { + const result = await runBulkJob([target.userId], admin.userId); + expect(result.successful_count).toBe(1); + } finally { + spy.mockRestore(); + } + expect(await getReportStatus(firstReportId)).toBe(ReportStatus.PENDING); + expect(await getReportStatus(secondReportId)).toBe(ReportStatus.RESOLVED); + expect(await reportResolvedEmails(harness, firstReporter)).toEqual([]); + expect(await reportResolvedEmails(harness, secondReporter)).toHaveLength(1); + expect(await autoResolveSummary(target.userId)).toEqual({ + outcome: 'completed', + found_count: '2', + resolved_count: '1', + failed_count: '1', + notified_count: '1', + }); }); test('keeps deleting the remaining users after one of them fails and reports the failure', async () => { const admin = await createTestAccount(harness); @@ -290,33 +501,6 @@ describe('bulkScheduleUserDeletion', () => { const resolutionLogs = await listAuditLogs('auto_resolve_reports_on_deletion'); expect(resolutionLogs.some((log) => log.targetId === BigInt(target.userId))).toBe(false); }); - test('an abuse deletion leaves reports open for a user with an NCMEC workflow', async () => { - const admin = await createTestAccount(harness); - await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); - const reporter = await createTestAccount(harness); - const target = await createTestAccount(harness); - const reportId = await reportUser(harness, reporter, target.userId); - const now = new Date(); - await new NcmecRepository().upsertUserWorkflow({ - user_id: BigInt(target.userId), - deleted_at: null, - deleted_by_admin_id: null, - deletion_private_reason: null, - deletion_ncmec_report_id: null, - archive_id: null, - archive_requested_at: null, - archive_requested_by_admin_id: null, - archive_audit_log_reason: null, - archive_completed_at: null, - deletion_job_queued_at: null, - previous_report_ids: null, - created_at: now, - updated_at: now, - }); - const result = await runBulkJob([target.userId], admin.userId, DeletionReasons.SPAM); - expect(result.successful_count).toBe(1); - expect(await getReportStatus(reportId)).toBe(ReportStatus.PENDING); - }); test('a payload with notify_user false emails nobody and records it in the summary', async () => { const admin = await createTestAccount(harness); await setUserACLs(harness, admin, ['admin:authenticate', 'bulk:delete:users']); @@ -397,3 +581,34 @@ describe('bulkScheduleUserDeletion', () => { expect(after?.deletionScheduledBy?.toString()).toBe(scheduler.userId); }); }); + +describe('auto-resolve on scheduled deletion without report search', () => { + let harness: ApiTestHarness; + beforeEach(async () => { + harness = await createApiTestHarness({search: 'disabled'}); + }); + afterEach(async () => { + await harness.shutdown(); + }); + test('leaves the report pending and records that search was unavailable', async () => { + const reporter = await createTestAccount(harness); + const target = await createTestAccount(harness); + const report = await createBuilder(harness, reporter.token) + .post('/reports/user') + .body({user_id: target.userId, category: 'spam_account'}) + .expect(HTTP_STATUS.OK) + .execute(); + expect(getReportSearchService()).toBeNull(); + await clearTestEmails(harness); + await scheduleDeletionThroughEndpoint(harness, target); + expect(await getReportStatus(report.report_id)).toBe(ReportStatus.PENDING); + expect(await reportResolvedEmails(harness, reporter)).toEqual([]); + expect(await autoResolveSummary(target.userId)).toEqual({ + outcome: 'search_unavailable', + found_count: '0', + resolved_count: '0', + failed_count: '0', + notified_count: '0', + }); + }); +}); diff --git a/fluxer_api/src/api/worker/tests/ClearAuthenticatedReporterEmails.test.ts b/fluxer_api/src/api/worker/tests/ClearAuthenticatedReporterEmails.test.ts new file mode 100644 index 000000000..c843cca60 --- /dev/null +++ b/fluxer_api/src/api/worker/tests/ClearAuthenticatedReporterEmails.test.ts @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createReportID, type ReportID, type UserID} from '@app/api/BrandedTypes'; +import {IAR_SUBMISSION_COLUMNS, type IARSubmissionRow} from '@app/api/database/types/ReportTypes'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import {clearAuthenticatedReporterEmails} from '@app/api/worker/tasks/ClearAuthenticatedReporterEmails'; +import {beforeEach, describe, expect, it} from 'vitest'; + +let sequence = 1_490_000_000_000_000_000n; + +function nextId(): bigint { + sequence += 1n; + return sequence; +} + +describe('clearAuthenticatedReporterEmails', () => { + let repository: ReportRepository; + + beforeEach(() => { + repository = new ReportRepository(); + }); + + async function seed(reporterId: bigint | null, reporterEmail: string | null): Promise { + const id = nextId(); + await repository.createReport({ + ...Object.fromEntries(IAR_SUBMISSION_COLUMNS.map((column) => [column, null])), + report_id: id, + reporter_id: reporterId, + reporter_email: reporterEmail, + reporter_full_legal_name: reporterId === null ? 'Notifier Name' : null, + reported_at: new Date(), + status: 0, + report_type: 1, + category: 'harassment', + } as IARSubmissionRow); + return createReportID(id); + } + + async function storedEmail(reportId: ReportID): Promise { + return (await repository.getReport(reportId))?.reporterEmail; + } + + it('clears the stored address on account reports and keeps it on notices filed without an account', async () => { + const reporterId = nextId(); + const accountReports = []; + for (let index = 0; index < 5; index++) { + accountReports.push(await seed(reporterId, `reporter${index}@example.com`)); + } + const withoutEmail = await seed(nextId(), null); + const notices = [await seed(null, 'notifier@example.com'), await seed(null, 'other-notifier@example.com')]; + + const summary = await clearAuthenticatedReporterEmails(repository, 2); + + expect(summary).toEqual({scanned: 8, cleared: 5, skipped: 0, failed: 0}); + for (const reportId of accountReports) { + expect(await storedEmail(reportId)).toBeNull(); + } + expect(await storedEmail(withoutEmail)).toBeNull(); + expect(await storedEmail(notices[0]!)).toBe('notifier@example.com'); + expect(await storedEmail(notices[1]!)).toBe('other-notifier@example.com'); + const notice = await repository.getReport(notices[0]!); + expect(notice?.reporterFullLegalName).toBe('Notifier Name'); + }); + + it('changes nothing on a second run', async () => { + await seed(nextId(), 'reporter@example.com'); + await seed(null, 'notifier@example.com'); + await clearAuthenticatedReporterEmails(repository); + + const summary = await clearAuthenticatedReporterEmails(repository); + + expect(summary).toEqual({scanned: 2, cleared: 0, skipped: 0, failed: 0}); + }); + + it('keeps the other fields of the report', async () => { + const reporterId = nextId(); + const reportId = await seed(reporterId, 'reporter@example.com'); + const before = await repository.getReport(reportId); + + await clearAuthenticatedReporterEmails(repository); + + expect(await repository.getReport(reportId)).toEqual({...before, reporterEmail: null}); + }); + + it('counts a report that could not be updated and moves on to the next', async () => { + const failing = await seed(nextId(), 'first@example.com'); + const other = await seed(nextId(), 'second@example.com'); + const failingRepository = Object.create(repository) as ReportRepository; + failingRepository.clearReporterEmail = async (reportId: ReportID, reporterId: UserID) => { + if (reportId === failing) throw new Error('write timeout'); + return repository.clearReporterEmail(reportId, reporterId); + }; + + const summary = await clearAuthenticatedReporterEmails(failingRepository); + + expect(summary).toEqual({scanned: 2, cleared: 1, skipped: 0, failed: 1}); + expect(await storedEmail(failing)).toBe('first@example.com'); + expect(await storedEmail(other)).toBeNull(); + }); + + it('counts a report deleted while the backfill ran as skipped', async () => { + const deleted = await seed(nextId(), 'gone@example.com'); + const racingRepository = Object.create(repository) as ReportRepository; + racingRepository.clearReporterEmail = async (reportId: ReportID, reporterId: UserID) => { + await repository.deleteReport(reportId); + return repository.clearReporterEmail(reportId, reporterId); + }; + + const summary = await clearAuthenticatedReporterEmails(racingRepository); + + expect(summary).toEqual({scanned: 1, cleared: 0, skipped: 1, failed: 0}); + expect(await repository.getReport(deleted)).toBeNull(); + }); +}); diff --git a/fluxer_api/src/api/worker/tests/ExpireReportSnapshots.test.ts b/fluxer_api/src/api/worker/tests/ExpireReportSnapshots.test.ts new file mode 100644 index 000000000..dab6b8602 --- /dev/null +++ b/fluxer_api/src/api/worker/tests/ExpireReportSnapshots.test.ts @@ -0,0 +1,449 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {createAttachmentID, createChannelID, createReportID, type ReportID} from '@app/api/BrandedTypes'; +import {Config} from '@app/api/Config'; +import {makeAttachmentCdnKey} from '@app/api/channel/services/message/MessageHelpers'; +import type {MessageAttachment} from '@app/api/database/types/MessageTypes'; +import { + IAR_SUBMISSION_COLUMNS, + type IARMessageContextRow, + type IARSubmissionRow, +} from '@app/api/database/types/ReportTypes'; +import type {IARSubmission} from '@app/api/report/IReportRepository'; +import {ReportRepository} from '@app/api/report/ReportRepository'; +import type {IReportSearchService} from '@app/api/search/IReportSearchService'; +import {MockStorageService} from '@app/api/test/mocks/MockStorageService'; +import {InMemorySearchProvider} from '@app/api/test/search/InMemorySearchProvider'; +import { + processReportRetention, + type ReportRetentionDeps, + resolveReportRetentionDryRun, +} from '@app/api/worker/tasks/ExpireReportSnapshots'; +import {serializeReportProfileSnapshot} from '@fluxer/schema/src/domains/report/ReportProfileSnapshotSchemas'; +import {ms} from 'itty-time'; +import {beforeEach, describe, expect, it} from 'vitest'; + +const NOW = new Date('2027-06-01T12:00:00.000Z'); +const DAY_MS = ms('1 day'); +const REPORTS_BUCKET = Config.s3.buckets.reports; +let sequence = 1_480_000_000_000_000_000n; + +function nextId(): bigint { + sequence += 1n; + return sequence; +} + +function daysAgo(days: number): Date { + return new Date(NOW.getTime() - days * DAY_MS); +} + +function attachmentRow(attachmentId: bigint, filename: string): MessageAttachment { + return { + attachment_id: createAttachmentID(attachmentId), + filename, + size: 1024n, + title: null, + description: null, + width: 64, + height: 64, + content_type: 'image/png', + content_hash: null, + placeholder: null, + flags: 0, + duration: null, + nsfw: false, + waveform: null, + }; +} + +function contextRow(channelId: bigint, attachments: Array): IARMessageContextRow { + return { + message_id: nextId(), + channel_id: channelId, + author_id: nextId(), + webhook_id: null, + author_username: 'context_author', + author_discriminator: 1, + author_avatar_hash: null, + content: 'context', + timestamp: NOW, + edited_timestamp: null, + type: 0, + flags: 0, + mention_everyone: false, + mention_users: null, + mention_roles: null, + mention_channels: null, + attachments, + embeds: null, + sticker_items: null, + }; +} + +interface SharedAttachment { + channelId: bigint; + attachmentId: bigint; + filename: string; +} + +interface SeedOptions { + ageDays: number; + attachment?: SharedAttachment; + profile?: boolean; + legalHoldUntil?: Date | null; + status?: number; + snapshotJson?: string; +} + +interface SeededReport { + reportId: ReportID; + attachmentKey: string | null; + profileKey: string | null; +} + +function newAttachment(): SharedAttachment { + return {channelId: nextId(), attachmentId: nextId(), filename: 'evidence.png'}; +} + +function attachmentKey(attachment: SharedAttachment): string { + return makeAttachmentCdnKey(createChannelID(attachment.channelId), attachment.attachmentId, attachment.filename); +} + +describe('report retention', () => { + let repository: ReportRepository; + let storage: MockStorageService; + let search: IReportSearchService; + let deps: ReportRetentionDeps; + + beforeEach(() => { + repository = new ReportRepository(); + storage = new MockStorageService(); + search = new InMemorySearchProvider().getReportSearchService(); + deps = {reportRepository: repository, storageService: storage, reportSearchService: search}; + }); + + async function seed(options: SeedOptions): Promise { + const id = nextId(); + const reportId = createReportID(id); + let storedAttachmentKey: string | null = null; + let profileKey: string | null = null; + let messageContext: Array | null = null; + if (options.attachment) { + const {channelId, attachmentId, filename} = options.attachment; + storedAttachmentKey = attachmentKey(options.attachment); + messageContext = [contextRow(channelId, [attachmentRow(attachmentId, filename)])]; + await storage.uploadObject({bucket: REPORTS_BUCKET, key: storedAttachmentKey, body: new Uint8Array([1])}); + } + let snapshot: string | null = options.snapshotJson ?? null; + if (options.profile) { + profileKey = `reports/${reportId}/profile/user_avatar/abc${id}`; + await storage.uploadObject({bucket: REPORTS_BUCKET, key: profileKey, body: new Uint8Array([2])}); + snapshot ??= serializeReportProfileSnapshot({ + captured_at: NOW.toISOString(), + user: { + id: nextId().toString(), + username: 'reported', + discriminator: 1, + global_name: null, + bio: 'bio at report time', + pronouns: null, + avatar: {hash: `abc${id}`, key: profileKey}, + banner: null, + }, + member: null, + guild: null, + }); + } + const row = { + ...Object.fromEntries(IAR_SUBMISSION_COLUMNS.map((column) => [column, null])), + report_id: id, + reported_at: daysAgo(options.ageDays), + status: options.status ?? 0, + report_type: 0, + category: 'other', + reported_channel_id: options.attachment?.channelId ?? null, + message_context: messageContext, + reported_profile_snapshot: snapshot, + legal_hold_until: options.legalHoldUntil ?? null, + legal_hold_reason: options.legalHoldUntil ? 'Preservation request' : null, + } as IARSubmissionRow; + const report = await repository.createReport(row); + await search.indexReport(report); + return {reportId, attachmentKey: storedAttachmentKey, profileKey}; + } + + async function indexedIds(): Promise> { + const result = await search.searchReports('', {}, {limit: 1000}); + return result.hits.map((hit) => hit.id).sort(); + } + + async function expectKept(seeded: SeededReport): Promise { + expect(await repository.getReport(seeded.reportId)).not.toBeNull(); + expect(await indexedIds()).toContain(seeded.reportId.toString()); + for (const key of [seeded.attachmentKey, seeded.profileKey]) { + if (key) expect(storage.hasObject(REPORTS_BUCKET, key)).toBe(true); + } + } + + async function expectGone(seeded: SeededReport): Promise { + expect(await repository.getReport(seeded.reportId)).toBeNull(); + expect(await indexedIds()).not.toContain(seeded.reportId.toString()); + if (seeded.profileKey) expect(storage.hasObject(REPORTS_BUCKET, seeded.profileKey)).toBe(false); + } + + it('deletes a report 365 days after it was filed with its objects, search document and row', async () => { + const expired = await seed({ageDays: 365, attachment: newAttachment(), profile: true}); + const kept = await seed({ageDays: 364, attachment: newAttachment(), profile: true}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false}); + + await expectGone(expired); + expect(storage.hasObject(REPORTS_BUCKET, expired.attachmentKey!)).toBe(false); + await expectKept(kept); + expect(summary).toEqual({ + dryRun: false, + scanned: 2, + expired: 1, + held: 0, + deleted: 1, + objectsDeleted: 2, + sharedObjectsKept: 0, + failed: 0, + }); + }); + + it('deletes expired reports whatever their status', async () => { + const pending = await seed({ageDays: 400, status: 0}); + const resolved = await seed({ageDays: 400, status: 1}); + + await processReportRetention(deps, {now: NOW, dryRun: false}); + + await expectGone(pending); + await expectGone(resolved); + }); + + it('keeps an object that a retained report still uses', async () => { + const shared = newAttachment(); + const expired = await seed({ageDays: 500, attachment: shared}); + const retained = await seed({ageDays: 10, attachment: shared}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false}); + + await expectGone(expired); + await expectKept(retained); + expect(storage.hasObject(REPORTS_BUCKET, attachmentKey(shared))).toBe(true); + expect(summary.sharedObjectsKept).toBe(1); + expect(summary.objectsDeleted).toBe(0); + }); + + it('deletes an object shared by two expired reports once', async () => { + const shared = newAttachment(); + const first = await seed({ageDays: 500, attachment: shared}); + const second = await seed({ageDays: 450, attachment: shared}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false}); + + await expectGone(first); + await expectGone(second); + expect(storage.hasObject(REPORTS_BUCKET, attachmentKey(shared))).toBe(false); + expect(summary.objectsDeleted).toBe(1); + expect(storage.deleteObjectSpy.mock.calls.filter(([, key]) => key === attachmentKey(shared))).toHaveLength(1); + }); + + it('keeps a report under a legal hold that ends later and deletes one whose hold has ended', async () => { + const shared = newAttachment(); + const held = await seed({ + ageDays: 500, + attachment: shared, + profile: true, + legalHoldUntil: new Date(NOW.getTime() + DAY_MS), + }); + const holdEnded = await seed({ageDays: 500, profile: true, legalHoldUntil: daysAgo(1)}); + const sharingWithHeld = await seed({ageDays: 500, attachment: shared}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false}); + + await expectKept(held); + expect((await repository.getReport(held.reportId))?.legalHoldReason).toBe('Preservation request'); + await expectGone(holdEnded); + await expectGone(sharingWithHeld); + expect(storage.hasObject(REPORTS_BUCKET, attachmentKey(shared))).toBe(true); + expect(summary).toMatchObject({scanned: 3, expired: 2, held: 1, deleted: 2, sharedObjectsKept: 1}); + }); + + it('changes nothing in a dry run and reports what it would delete', async () => { + const expired = await seed({ageDays: 366, attachment: newAttachment(), profile: true}); + const kept = await seed({ageDays: 1, profile: true}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: true}); + + await expectKept(expired); + await expectKept(kept); + expect(storage.deleteObjectSpy).not.toHaveBeenCalled(); + expect(summary).toEqual({ + dryRun: true, + scanned: 2, + expired: 1, + held: 0, + deleted: 1, + objectsDeleted: 2, + sharedObjectsKept: 0, + failed: 0, + }); + }); + + it('deletes nothing when the scan cannot finish', async () => { + const expired = await seed({ageDays: 400, attachment: newAttachment(), profile: true}); + await seed({ageDays: 400}); + await seed({ageDays: 400}); + let pages = 0; + const failingRepository = Object.create(repository) as ReportRepository; + failingRepository.listAllReportsPaginated = async (limit: number, lastReportId?: ReportID) => { + pages += 1; + if (pages > 1) throw new Error('read timeout'); + return repository.listAllReportsPaginated(limit, lastReportId); + }; + + await expect( + processReportRetention({...deps, reportRepository: failingRepository}, {now: NOW, dryRun: false, pageSize: 2}), + ).rejects.toThrow('read timeout'); + + await expectKept(expired); + expect(storage.deleteObjectSpy).not.toHaveBeenCalled(); + expect(await repository.listAllReportsPaginated(10)).toHaveLength(3); + }); + + it('pages through every report', async () => { + const expired: Array = []; + const kept: Array = []; + for (let index = 0; index < 7; index++) { + expired.push(await seed({ageDays: 400 + index, profile: true})); + kept.push(await seed({ageDays: index, profile: true})); + } + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false, pageSize: 3}); + + expect(summary).toMatchObject({scanned: 14, expired: 7, deleted: 7, objectsDeleted: 7, failed: 0}); + for (const report of expired) await expectGone(report); + for (const report of kept) await expectKept(report); + }); + + it('keeps the row and search document when an object cannot be deleted, then deletes them on the next run', async () => { + const expired = await seed({ageDays: 400, attachment: newAttachment(), profile: true}); + storage.configure({shouldFailDelete: true}); + + const failed = await processReportRetention(deps, {now: NOW, dryRun: false}); + + expect(failed).toMatchObject({expired: 1, deleted: 0, failed: 1}); + expect(await repository.getReport(expired.reportId)).not.toBeNull(); + expect(await indexedIds()).toContain(expired.reportId.toString()); + + storage.configure({shouldFailDelete: false}); + const retried = await processReportRetention(deps, {now: NOW, dryRun: false}); + + expect(retried).toMatchObject({expired: 1, deleted: 1, failed: 0}); + await expectGone(expired); + expect(storage.hasObject(REPORTS_BUCKET, expired.attachmentKey!)).toBe(false); + }); + + it('keeps the row when the search document cannot be deleted', async () => { + const expired = await seed({ageDays: 400}); + const failingSearch = Object.create(search) as IReportSearchService; + failingSearch.deleteReport = async () => { + throw new Error('search unavailable'); + }; + + const summary = await processReportRetention( + {...deps, reportSearchService: failingSearch}, + {now: NOW, dryRun: false}, + ); + + expect(summary).toMatchObject({deleted: 0, failed: 1}); + expect(await repository.getReport(expired.reportId)).not.toBeNull(); + }); + + it('deletes rows when search is not configured', async () => { + const expired = await seed({ageDays: 400, profile: true}); + + const summary = await processReportRetention({...deps, reportSearchService: null}, {now: NOW, dryRun: false}); + + expect(summary).toMatchObject({deleted: 1, failed: 0}); + expect(await repository.getReport(expired.reportId)).toBeNull(); + expect(storage.hasObject(REPORTS_BUCKET, expired.profileKey!)).toBe(false); + }); + + it('skips a report that was put on hold after the scan', async () => { + const shared = newAttachment(); + const seeded = [ + await seed({ageDays: 400, attachment: shared, profile: true}), + await seed({ageDays: 400, attachment: shared}), + ]; + const scanOrder = (await repository.listAllReportsPaginated(10)).map((report) => report.reportId); + const [first, second] = seeded.sort((a, b) => scanOrder.indexOf(a.reportId) - scanOrder.indexOf(b.reportId)) as [ + SeededReport, + SeededReport, + ]; + const holdingRepository = Object.create(repository) as ReportRepository; + holdingRepository.getReport = async (reportId: ReportID): Promise => { + const report = await repository.getReport(reportId); + if (report && reportId === first.reportId) { + return {...report, legalHoldUntil: new Date(NOW.getTime() + DAY_MS), legalHoldReason: 'Late request'}; + } + return report; + }; + + const summary = await processReportRetention( + {...deps, reportRepository: holdingRepository}, + {now: NOW, dryRun: false}, + ); + + await expectKept(first); + await expectGone(second); + expect(storage.hasObject(REPORTS_BUCKET, attachmentKey(shared))).toBe(true); + expect(summary).toMatchObject({expired: 2, deleted: 1, failed: 0}); + }); + + it('keeps an object that a report filed during the run stored again', async () => { + const shared = newAttachment(); + const expired = await seed({ageDays: 400, attachment: shared, profile: true}); + const rewritingStorage = Object.create(storage) as MockStorageService; + rewritingStorage.getObjectMetadata = async (bucket: string, key: string) => { + const metadata = await storage.getObjectMetadata(bucket, key); + if (metadata && key === attachmentKey(shared)) { + return {...metadata, lastModified: new Date(NOW.getTime() + ms('1 second'))}; + } + return metadata; + }; + + const summary = await processReportRetention( + {...deps, storageService: rewritingStorage}, + {now: NOW, dryRun: false}, + ); + + await expectGone(expired); + expect(storage.hasObject(REPORTS_BUCKET, attachmentKey(shared))).toBe(true); + expect(summary).toMatchObject({deleted: 1, objectsDeleted: 1, sharedObjectsKept: 1, failed: 0}); + }); + + it('deletes profile images stored for a report whose snapshot cannot be read', async () => { + const expired = await seed({ageDays: 400, profile: true, snapshotJson: '{"not":"a snapshot"'}); + + const summary = await processReportRetention(deps, {now: NOW, dryRun: false}); + + expect(summary).toMatchObject({deleted: 1, objectsDeleted: 1}); + await expectGone(expired); + }); + + it.each([ + [undefined, true], + ['', true], + ['true', true], + ['1', true], + ['yes', true], + ['false', false], + ['FALSE', false], + [' 0 ', false], + ])('FLUXER_REPORT_RETENTION_DRY_RUN=%j gives a dry run of %s', (raw, expected) => { + expect(resolveReportRetentionDryRun(raw)).toBe(expected); + }); +}); diff --git a/fluxer_app/src/features/app/components/layout/GuildsLayout.tsx b/fluxer_app/src/features/app/components/layout/GuildsLayout.tsx index ceeaff9b9..e774168b1 100644 --- a/fluxer_app/src/features/app/components/layout/GuildsLayout.tsx +++ b/fluxer_app/src/features/app/components/layout/GuildsLayout.tsx @@ -212,7 +212,7 @@ function useGuildNavigationVisibility(): GuildNavigationVisibility { const fluxerVisible = !RuntimeConfig.directMessagesDisabled; const favoritesVisible = Accessibility.showFavorites; const downloadVisible = !Platform.isElectron && !Platform.isPWA && !HiddenGuildListButtons.downloadButtonHidden; - const helpVisible = !HiddenGuildListButtons.helpButtonHidden; + const helpVisible = !HiddenGuildListButtons.helpButtonHidden && Routes.help() != null; return useMemo( () => Object.freeze({ diff --git a/fluxer_app/src/features/app/constants/Endpoints.ts b/fluxer_app/src/features/app/constants/Endpoints.ts index b9a24cdb8..1199fd023 100644 --- a/fluxer_app/src/features/app/constants/Endpoints.ts +++ b/fluxer_app/src/features/app/constants/Endpoints.ts @@ -256,9 +256,8 @@ export const Endpoints = { USER_PUSH_SUBSCRIPTIONS: '/users/@me/push/subscriptions', USER_PUSH_SUBSCRIPTION: (subscriptionId: string) => `/users/@me/push/subscriptions/${subscriptionId}`, WEBHOOK: (webhookId: string) => `/webhooks/${webhookId}`, - REPORT_MESSAGE: '/reports/message', - REPORT_USER: '/reports/user', - REPORT_GUILD: '/reports/guild', + REPORT_FLOW: (targetType: string) => `/reports/flows/${targetType}`, + REPORT_FLOW_SUBMISSIONS: (targetType: string) => `/reports/flows/${targetType}/submissions`, DISCOVERY_GUILDS: '/discovery/guilds', DISCOVERY_CATEGORIES: '/discovery/categories', DISCOVERY_JOIN: (guildId: string) => `/discovery/guilds/${guildId}/join`, diff --git a/fluxer_app/src/features/app/state/RuntimeConfig.ts b/fluxer_app/src/features/app/state/RuntimeConfig.ts index aedeeef5a..c33090631 100644 --- a/fluxer_app/src/features/app/state/RuntimeConfig.ts +++ b/fluxer_app/src/features/app/state/RuntimeConfig.ts @@ -162,6 +162,10 @@ export function describeAPIEndpoint(endpoint: string): string { return withoutScheme; } +const DISCOVERY_REVALIDATION_TIMEOUT_MS = 5000; + +let pendingDiscoveryRevalidation: Promise | null = null; + class RuntimeConfig { private lifecycleGeneration = 0; private activeRuntime: ActiveRuntime | null = null; @@ -659,13 +663,29 @@ class RuntimeConfig { }); } - async refreshDiscovery(): Promise { + async refreshDiscovery(signal?: AbortSignal): Promise { const current = this.requireActiveSnapshot(); - const resolution = await InstanceSnapshotStore.refresh({input: current.apiEndpoint, signal: null}); + const resolution = await InstanceSnapshotStore.refresh({input: current.apiEndpoint, signal: signal ?? null}); if (runtimeInstanceKey(resolution.snapshot) !== runtimeInstanceKey(this.requireActiveSnapshot())) { return; } - this.replaceActiveFeatures(resolution.snapshot.features); + const runtime = this.requireActiveRuntime(); + const usable = this.requireUsableSnapshot({ + ...runtime.snapshot, + features: resolution.snapshot.features, + appPublic: resolution.snapshot.appPublic, + }); + this.activeRuntime = {...runtime, snapshot: usable}; + this.lifecycleGeneration = nextLifecycleGeneration(this.lifecycleGeneration); + } + + revalidateDiscovery(): Promise { + if (pendingDiscoveryRevalidation !== null) return pendingDiscoveryRevalidation; + const request = this.refreshDiscovery(AbortSignal.timeout(DISCOVERY_REVALIDATION_TIMEOUT_MS)).finally(() => { + if (pendingDiscoveryRevalidation === request) pendingDiscoveryRevalidation = null; + }); + pendingDiscoveryRevalidation = request; + return request; } private replaceActiveFeatures(features: InstanceFeatures): void { diff --git a/fluxer_app/src/features/channel/components/InviteEmbed.tsx b/fluxer_app/src/features/channel/components/InviteEmbed.tsx index 3ef07b645..82bd73c29 100644 --- a/fluxer_app/src/features/channel/components/InviteEmbed.tsx +++ b/fluxer_app/src/features/channel/components/InviteEmbed.tsx @@ -391,7 +391,6 @@ const InviteEmbedInner = observer(function InviteEmbedInner({ const handleContextMenu = (event: React.MouseEvent) => { const channelId = invite && (isGuildInvite(invite) || isGroupDmInvite(invite)) ? invite.channel.id : null; const guildForMenu = guild ? {id: guild.id, name: guild.name} : null; - const inviteCodeForMenu = guildForMenu && invite ? invite.code : null; if (!message && !guildForMenu && !channelId) return; event.preventDefault(); event.stopPropagation(); @@ -402,7 +401,6 @@ const InviteEmbedInner = observer(function InviteEmbedInner({ linkUrl={`${RuntimeConfig.inviteEndpoint}/${code}`} guild={guildForMenu} channelId={channelId} - inviteCode={inviteCodeForMenu} onDelete={onDelete} onClose={props.onClose} data-flx="channel.invite-embed.handle-context-menu.invite-embed-context-menu" diff --git a/fluxer_app/src/features/channel/components/MessageActionUtils.tsx b/fluxer_app/src/features/channel/components/MessageActionUtils.tsx index bc8da4c19..9e966000c 100644 --- a/fluxer_app/src/features/channel/components/MessageActionUtils.tsx +++ b/fluxer_app/src/features/channel/components/MessageActionUtils.tsx @@ -121,6 +121,9 @@ export function canReportMessage(message: Message): boolean { if (message.author.system) { return false; } + if (message.isCrosspostSourceDeleted) { + return false; + } return message.type === MessageTypes.DEFAULT || message.type === MessageTypes.REPLY; } diff --git a/fluxer_app/src/features/gateway/transport/GatewaySessionPool.test.ts b/fluxer_app/src/features/gateway/transport/GatewaySessionPool.test.ts index db1caf2c8..7738d869c 100644 --- a/fluxer_app/src/features/gateway/transport/GatewaySessionPool.test.ts +++ b/fluxer_app/src/features/gateway/transport/GatewaySessionPool.test.ts @@ -133,6 +133,8 @@ vi.mock('@app/features/expressions/state/FavoriteMemes', () => ({default: {reset vi.mock('@app/features/member/state/MemberSearch', () => ({default: {handleLogout: vi.fn()}})); +vi.mock('@app/features/moderation/state/ReportFlows', () => ({default: {reset: vi.fn()}})); + vi.mock('@app/features/messaging/state/MessagingMessages', () => ({ default: {handleSessionInvalidated: vi.fn(), handleConnectionClosed: vi.fn()}, })); diff --git a/fluxer_app/src/features/gateway/transport/PooledGatewayConnection.ts b/fluxer_app/src/features/gateway/transport/PooledGatewayConnection.ts index 459b672a7..2f8b6ae1c 100644 --- a/fluxer_app/src/features/gateway/transport/PooledGatewayConnection.ts +++ b/fluxer_app/src/features/gateway/transport/PooledGatewayConnection.ts @@ -47,6 +47,7 @@ import {selectGuildActivationTarget} from '@app/features/gateway/transport/Guild import MemberSearch from '@app/features/member/state/MemberSearch'; import AttachmentUrlRefresher from '@app/features/messaging/state/AttachmentUrlRefresher'; import Messages from '@app/features/messaging/state/MessagingMessages'; +import ReportFlows from '@app/features/moderation/state/ReportFlows'; import Navigation from '@app/features/navigation/state/Navigation'; import SelectedGuild from '@app/features/navigation/state/SelectedGuild'; import SessionManager from '@app/features/platform/state/AuthSession'; @@ -958,6 +959,7 @@ export class PooledGatewayConnection { AttachmentUrlRefresher.reset(); ChannelFrecency.handleLogout(); MemberSearch.handleLogout(); + ReportFlows.reset(); ThreadPanel.closeCreate(); ThreadGuilds.reset(); ChannelThreads.handleGatewayReady([]); diff --git a/fluxer_app/src/features/gateway/transport/PooledGatewayConnectionDispatch.test.ts b/fluxer_app/src/features/gateway/transport/PooledGatewayConnectionDispatch.test.ts index 1ea4dafa8..02120e914 100644 --- a/fluxer_app/src/features/gateway/transport/PooledGatewayConnectionDispatch.test.ts +++ b/fluxer_app/src/features/gateway/transport/PooledGatewayConnectionDispatch.test.ts @@ -103,6 +103,8 @@ vi.mock('@app/features/expressions/state/FavoriteMemes', () => ({default: {reset vi.mock('@app/features/member/state/MemberSearch', () => ({default: {handleLogout: vi.fn()}})); +vi.mock('@app/features/moderation/state/ReportFlows', () => ({default: {reset: vi.fn()}})); + vi.mock('@app/features/messaging/state/MessagingMessages', () => ({ default: {handleSessionInvalidated: vi.fn(), handleConnectionClosed: vi.fn()}, })); diff --git a/fluxer_app/src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx b/fluxer_app/src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx index 990bf8e63..8ded7d43f 100644 --- a/fluxer_app/src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx +++ b/fluxer_app/src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx @@ -32,10 +32,9 @@ import { BAN_ACTION_DESCRIPTOR, BLOCK_DESCRIPTOR, REMOVE_TIMEOUT_DESCRIPTOR, - REPORT_USER_DESCRIPTOR, TIMEOUT_DESCRIPTOR, } from '@app/features/moderation/utils/ModerationMessageDescriptors'; -import {openReportMessageModal, openReportUserModal} from '@app/features/moderation/utils/ReportActionUtils'; +import {openReportMessageModal} from '@app/features/moderation/utils/ReportActionUtils'; import {useRoleHierarchy} from '@app/features/permissions/hooks/useRoleHierarchy'; import Permission from '@app/features/permissions/state/Permission'; import * as PermissionUtils from '@app/features/permissions/utils/PermissionUtils'; @@ -270,9 +269,6 @@ export const GuildMemberActionsSheet: FC = observe )), ); }; - const handleReportUser = () => { - ModalCommands.runAfterBottomSheetClose(onClose, () => openReportUserModal({i18n, user, guildId, message})); - }; const handleReportMessage = () => { if (!message || !canReportMessage(message)) { return; @@ -468,12 +464,6 @@ export const GuildMemberActionsSheet: FC = observe }, ] : []), - { - icon: , - label: i18n._(REPORT_USER_DESCRIPTOR), - onClick: handleReportUser, - danger: true, - }, ]; if (relationshipType === RelationshipTypes.BLOCKED) { reportBlockItems.push({ diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index 383940f62..649116f91 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} متبقية" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, zero {عضو} one {عضو} two {أعضاء} few {أعضاء} many {عضوًا} other {عضو}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, zero {تنتهي صلاحية رابط الدعوة خلال # ثانية.} one {تنتهي صلاحية رابط الدعوة خلال ثانية واحدة.} two {تنتهي صلاحية رابط الدعوة خلال ثانيتين.} few {تنتهي صلاحية رابط الدعوة خلال # ثوانٍ.} many {تنتهي صلاحية رابط الدعوة خلال # ثانية.} other {تنتهي صلاحية رابط الدعوة خلال # ثانية.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "تم تحديد {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "بيانات الحساب" msgid "Account details unavailable" msgstr "تفاصيل الحساب غير متوفرة" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "الحساب موجود لإرسال الرسائل المزعجة أو الاحتيال أو إساءة استخدام المنصة." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "تاريخ الإضافة: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "تاريخ الإضافة: {createdDate} • آخر استخدام: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "تعليقات إضافية (اختياري)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "تم الاسترداد بالفعل" msgid "Already set to cancel" msgstr "الإلغاء مجدول بالفعل" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "الإبلاغ عن هذه الرسالة إلى فريق السلامة في {productName} أيضًا" @@ -4576,11 +4566,6 @@ msgstr "سنوي" msgid "Another checkbox" msgstr "مربع اختيار آخر" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "انتهاك آخر واضح للقواعد" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "مربع اختيار دائري آخر" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "تحميل ملف صوتي" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "النمسا" @@ -5620,6 +5605,7 @@ msgstr "غير متواجد حاليًا" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "غير متواجد حاليًا" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "رجوع" @@ -5788,9 +5775,7 @@ msgstr "تم تجديد الرموز الاحتياطية" msgid "Badge" msgstr "شارة" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "حظر" @@ -5819,7 +5804,7 @@ msgstr "مدة الحظر" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "حظر الأعضاء من المجتمع، مع خيار حذف رسا msgid "Ban reason" msgstr "سبب الحظر" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "حظر هذا المستخدم" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "النطاق الترددي" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "محظور" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "تم حظر {targetUserTag} من المجتمع" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "قبل التاريخ" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "بلجيكا" @@ -6031,7 +6006,7 @@ msgstr "معدل البت" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "حظر" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "حجب" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "حظر {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "حظر لجميع المجتمعات" msgid "Block spoiler" msgstr "كتلة محتوى مخفي" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "حظر هذا المستخدم" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "حظر المستخدم" msgid "Blocked" msgstr "محظور" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "محظور" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "أدوات الترجمة المضمّنة" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "بلغاريا" @@ -6519,16 +6500,6 @@ msgstr "البلغارية" msgid "Bulk delete" msgstr "حذف جماعي" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "التنمّر، أو التواصل المتكرر غير المرغوب فيه، أو المطاردة، أو الإساءة الموجهة." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "التنمّر أو التهديدات أو الكراهية أو العنف أو الهجمات المنظّمة أو المحتوى الذي يشجع على إيذاء النفس." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "كاليفورنيا" msgid "Call" msgstr "مكالمة" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "إعدادات المكالمات والمحادثات الجماعية" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "تغيير اللافتة" msgid "Change chat embed background" msgstr "تغيير خلفية تضمين الدردشة" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "تغيير البريد الإلكتروني" @@ -7150,8 +7116,8 @@ msgstr "تغيير الاسم المستعار للصديق" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "تغيير الاسم المستعار في المجموعة" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "تغيير اللغة" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "تغيير اسمي المستعار في المجموعة" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "تغيير الاسم المستعار الشخصي" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "تغيير المالك" @@ -7283,16 +7249,6 @@ msgstr "تغيير منطقة الصوت التي تستخدمها قناة صو msgid "Change which voice region this channel uses." msgstr "تغيير منطقة الصوت التي تستخدمها هذه القناة." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "غيّر من يمكنه الاتصال بك أو إضافتك." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "غيّر من يمكنه الوصول إليك." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "تحقق من بريدك الوارد في {emailAddress} للعثور msgid "Check your inbox for a verification email." msgstr "تحقق من بريدك الوارد بحثًا عن رسالة التحقق." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "راجع بلاغك" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "مربعات الاختيار" @@ -7901,21 +7862,6 @@ msgstr "عملية الدفع محظورة لهذا الحساب. تواصل م msgid "Checkout unavailable" msgstr "الدفع غير متاح" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "مخاوف تتعلق بسلامة الأطفال" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "سلامة الأطفال أو استغلال القُصّر" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "سلامة الأطفال أو محتوى للبالغين" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "الخيارات" msgid "Choices: {choiceList}" msgstr "الاختيارات: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "اختيار" @@ -8122,6 +8068,11 @@ msgstr "اختر الفئة التي تصف مجتمعك بشكل أفضل. يم msgid "Choose the premium model" msgstr "اختر نموذج Premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "اختر السبب مرة أخرى" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "استلام الهدية" msgid "Claim your account" msgstr "المطالبة بحسابك" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "طالب بحسابك وتحقق من بريدك الإلكتروني لإرسال البلاغات." @@ -8352,12 +8303,12 @@ msgstr "طالب بحسابك لاسترداد هذه الهدية." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "طالب بحسابك لإرسال طلبات الصداقة." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "طالب بحسابك لإرسال البلاغات." @@ -8378,11 +8329,6 @@ msgstr "طالب بحسابك لبدء مكالمات فردية أو الانض msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "استلم هديتك لتفعيل اشتراكك في {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "انتحال شخصية شخص آخر أو علامة تجارية أو مؤسسة." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "مسح حقل البحث" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "إغلاق النافذة" msgid "Close popout" msgstr "إغلاق النافذة المنبثقة" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "إغلاق هذه الرسالة المباشرة" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "الإغلاق إلى علبة النظام" msgid "Close window" msgstr "إغلاق النافذة" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "أغلق رسالتك المباشرة الحالية مع {dmDisplayName}. لن يؤدي هذا إلى حظر المستخدم، ويمكنك إعادة فتح الرسالة المباشرة لاحقًا." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "هل تريد إغلاق رسالتك المباشرة مع {displayName}؟ يمكنك إعادة فتحها في أي وقت." @@ -8837,7 +8773,7 @@ msgstr "سمة الفحم" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "الرمز" @@ -8868,7 +8804,7 @@ msgstr "رمز من تطبيق {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "أُعيد إرسال الرمز" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "المجتمعات التي يمكنك الانضمام إليها" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "المجتمع" @@ -9131,7 +9065,7 @@ msgstr "تعطيل سمع العضو في المجتمع" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "تصحيح أخطاء المجتمع" @@ -9150,16 +9084,6 @@ msgstr "تم حذف المجتمع" msgid "Community DM" msgstr "رسائل المجتمع المباشرة" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "مجتمع أُنشئ لإرسال الرسائل المزعجة أو الاحتيال أو إساءة استخدام المنصة." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "مجتمع يسهّل الهجمات الجماعية أو الإساءة الموجّهة." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "أيقونة المجتمع" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "معرف المجتمع" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "معرف المجتمع مطلوب." @@ -9526,6 +9450,11 @@ msgstr "تأكيد كلمة المرور الجديدة" msgid "Confirm password" msgstr "تأكيد كلمة المرور" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "أكّد البيان لإرسال البلاغ." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "متابعة في متصفحك" msgid "Continue to checkout" msgstr "متابعة إلى الدفع" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "متابعة الإبلاغ عن المجتمع" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "متابعة الإبلاغ عن المستخدم" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "تحويل هذه القناة إلى قناة نصية سيؤدي إل msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "يحوّل المحتوى الوارد إلى كلام، بغض النظر عما إذا كان قد أتى من /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "ينسّق الاقتحامات الجماعية أو الهجمات المنظمة أو المضايقات ضد أشخاص أو مجتمعات." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "تم نسخ الرابط إلى الحافظة" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "تم نسخ الرابط إلى الحافظة" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "نسخ معرف الرسالة" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "نسخ رابط الرسالة" @@ -10643,6 +10553,11 @@ msgstr "تعذر تحميل المشاركات. حاول مرة أخرى لاح msgid "Couldn't load settings" msgstr "تعذر تحميل الإعدادات" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "تعذّر تحميل نموذج البلاغ." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "تعذر تحميل هذا التطبيق" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "تعذر معالجة الصورة" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "تعذر نشر هذه الرسالة" @@ -10825,11 +10740,6 @@ msgstr "تعذّر إرسال الدعوة" msgid "Couldn't send invite. Try again." msgstr "تعذّر إرسال الدعوة. حاول مرة أخرى." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "تعذر الإرسال. حاول مرة أخرى." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "مؤقت العد التنازلي" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "بلد الإقامة" @@ -11301,13 +11211,8 @@ msgstr "تم الإنشاء:" msgid "Credentials" msgstr "بيانات الاعتماد" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "التهديدات الجدية أو مشاهد العنف الصادمة أو تمجيد العنف." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "كرواتيا" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "يقطع الصوت الأخفض من عتبة شدة محددة بأقل استهلاك للمعالج." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "قبرص" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "التشيكية" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "جمهورية التشيك" @@ -11965,7 +11870,7 @@ msgstr "تصحيح أخطاء القناة" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "تصحيح أخطاء المجتمع" @@ -12151,7 +12056,6 @@ msgstr "ديلاوير" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "ديلاوير" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "حذف السمة؟" msgid "Delete this invite? Can't be undone." msgstr "هل تريد حذف هذه الدعوة؟ لا يمكن التراجع عن هذا الإجراء." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "حذف هذه الرسالة" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "هل تريد حذف هذه الرسالة؟ لا يمكن التراجع عن هذا الإجراء." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "حذف هذه الرسالة؟ لا يمكن التراجع عن هذا الإجراء. ستتم إزالة هذه الرسالة أيضًا من كل مجتمع يتابع هذه القناة." @@ -12461,11 +12359,6 @@ msgstr "هل تريد حذف رسائلك في هذا المجتمع؟" msgid "Delete your messages in this conversation?" msgstr "هل تريد حذف رسائلك في هذه المحادثة؟" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "تم الحذف" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "تم رفض {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "الدنمارك" @@ -12554,11 +12447,6 @@ msgstr "صف الملصق" msgid "Describe this media for screen readers" msgstr "صف هذه الوسائط لقارئات الشاشة" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "صف ما يجعل المحتوى غير قانوني" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "لافتة منفصلة" msgid "Detail" msgstr "التفاصيل" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "التفاصيل" @@ -13315,11 +13203,6 @@ msgstr "اسم العرض (اختياري)" msgid "Display scaling" msgstr "حجم العرض" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "يوزّع برامج ضارة أو أدوات لسرقة بيانات الاعتماد أو ملفات ضارة أخرى." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "ر.م" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "إعدادات الرسائل المباشرة وطلبات الصداقة" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "الوثائق" msgid "Doesn't allow being added to group DMs" msgstr "لا يسمح بإضافته إلى المحادثات الجماعية" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "لا يحظر المستخدم. يمكنك إعادة فتح المحادثة لاحقًا." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "تبرع بدلاً من ذلك" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "قم بتنزيل خرائط المصدر حتى تشير تتبعات msgid "Download video" msgstr "تنزيل الفيديو" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "كشف هوية الأشخاص ونشر بياناتهم، أو كشف معلومات خاصة، أو الملاحقة." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "كشف هوية الأشخاص ونشر بياناتهم، أو الملاحقة، أو انتحال الشخصية، أو ملف شخصي غير لائق." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "تعديل لون {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "تعديل الملف الشخصي في المجتمع" @@ -14043,7 +13908,7 @@ msgstr "تعديل تجاوزات الأذونات للأدوار والأعضا #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "تعديل الملف الشخصي" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "تعديل التوقيت المحلي للملف الشخصي" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "تعديل الرسالة المنشورة؟" @@ -14191,13 +14056,13 @@ msgstr "مؤهل لاسترداد المبلغ حتى {windowEndsOn}. سيؤدي #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "البريد الإلكتروني" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "عنوان البريد الإلكتروني" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "عنوان البريد الإلكتروني مطلوب." @@ -14721,16 +14586,6 @@ msgstr "تفضيل المُرمِّز لعمليات مشاركة الشاشة msgid "Encoder, SVC, and bitrate presets" msgstr "المُرمّز، SVC، وإعدادات البت المسبقة" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "يشجع على إيذاء النفس" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "يشجع على الانتحار أو إيذاء النفس أو اضطرابات الأكل." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "التشفير التام بين الطرفين غير متاح لوجو msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "التشفير التام بين الطرفين غير متاح لوجود مشارك غير مدعوم في هذه القناة الصوتية." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "يعرض القاصرين للخطر أو يستضيف محتوى استغلال الأطفال." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "أدخل رمزًا بالصيغة ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "أدخل عنوان URL أو رمز قالب {theOtherPlatform} صالحًا." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "أدخل عنوان بريد إلكتروني صالحًا." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "أدخل رابط رسالة صالحًا." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "أدخل الرمز المكون من {digitCount} أرقام من تطبيق المصادقة الخاص بك." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "أدخل الرمز قبل المتابعة." @@ -15008,7 +14858,7 @@ msgstr "اضغط Enter <0><1>للحفظ" msgid "Enter username" msgstr "أدخل اسم المستخدم" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "أدخل رمز التحقق" @@ -15017,6 +14867,11 @@ msgstr "أدخل رمز التحقق" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "أدخل عنوان بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "أدخل اسمك القانوني الكامل لإرسال البلاغ." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "اضغط Escape <0><1>للإلغاء" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "إستونيا" @@ -15412,6 +15267,16 @@ msgstr "تنتهي صلاحيته في {earliest}" msgid "Expires:" msgstr "تنتهي الصلاحية:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "اشرح المشكلة" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "اشرح المشكلة لإرسال البلاغ." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "قد تكون الروابط الخارجية خطيرة. كن حذرً msgid "Extra large" msgstr "كبير جدًا" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "مجتمع متطرف" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "تعذّر إزالة عنوان URL المخصص. حاول مرة أخرى." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "تعذّر إعادة إرسال الرمز. حاول مرة أخرى." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "تعذّر إعادة تعيين حالة Premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "تعذّر إرسال الرمز. حاول مرة أخرى." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "تعذّر إرسال الرسالة. اضغط مطولًا لعرض الخيارات." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "تعذّر إرسال البلاغ. حاول مرة أخرى." @@ -15840,11 +15700,6 @@ msgstr "تعذّر تحميل الرموز التعبيرية بدءًا من {s msgid "Failed to upload emojis. Try again." msgstr "تعذّر تحميل الرموز التعبيرية. حاول مرة أخرى." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "ادعاءات كاذبة من المحتمل أن تسبب ضررًا في العالم الحقيقي." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "ابحث عن الملصق المثالي" msgid "Fingerprint" msgstr "بصمة الإصبع" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "إنهاء إعداد الحساب" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "أكمل إعداد الحساب أولاً" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "أكمل التسجيل لإرسال طلبات الصداقة." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "فنلندا" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "الفنلندية" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "الاسم الأول واسم العائلة" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "تتطلب معدلات الإطارات التي تزيد عن 30 إطارًا في الثانية {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "فرنسا" @@ -16834,10 +16689,10 @@ msgstr "كامل" msgid "Full dynamic range" msgstr "نطاق ديناميكي كامل" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "الاسم القانوني الكامل" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "الاسم القانوني الكامل (اختياري في بلاغات الاعتداء الجنسي على الأطفال)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "الألمانية" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "ألمانيا" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "رجوع" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "ارجع وأدخل بريدًا إلكترونيًا صالحًا." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "سعداء برؤيتك يا {username}! أهلًا بك." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "اليونان" @@ -17572,11 +17427,6 @@ msgstr "اليونانية" msgid "Grid view" msgstr "عرض شبكي" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "محتوى استدراج الأطفال أو استغلالهم." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "اسم المستخدم" msgid "Hang out with voice, video and screen share" msgstr "استمتع بالصوت والفيديو ومشاركة الشاشة" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "مضايقة" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "مضايقة تتضمن محتوى للبالغين" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "مضايقة أو تنمر" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "مضايقة أو مطاردة" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "مضايقة أو إساءة موجّهة" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "مضايقة أو تهديدات" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "مفتاح أمان مادي" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "يعمل بتسريع الأجهزة على معظم أنظمة Windows وmacOS. خيار موثوق للأجهزة القديمة." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "معلومات مضللة ضارة" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "سبق له الشراء" msgid "Has ever purchased override" msgstr "تجاوز الشراء السابق" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "خطاب الكراهية" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "إخفاء مشاركة شاشتك؟" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "يخفي أزرار التنزيل، الفتح في المتصفح، والنسخ على الصور ومقاطع الفيديو في هذه القناة." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "يخفي رسائلهم ويمنعهم من إرسال رسائل إليك" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "المجرية" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "المجر" @@ -18399,6 +18212,11 @@ msgstr "أنا تلميح" msgid "I changed my mind" msgstr "غيرت رأيي" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "أؤكد بحسن نية أن المعلومات والادعاءات الواردة في هذا الإشعار دقيقة وكاملة." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "إعدادات الخمول" msgid "Idle timeout" msgstr "مهلة الخمول" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "إذا كان هناك قاصر متورط، فاستخدم \"{childSafetyReasonName}\" بدلاً من ذلك." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "إذا كان حساب ما يستخدم هذا العنوان، فقد msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "إذا طلب نظام macOS إعادة تشغيل {productName}، فاختر لاحقًا." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "إذا كان شخص ما في خطر وشيك، فاتصل بخدمات الطوارئ المحلية إذا كان بإمكانك القيام بذلك بأمان." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "إذا كان شخص ما في خطر وشيك، فاتصل بخدمات الطوارئ المحلية أولًا." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "إذا طلب منك أحد لصق شيء ما هنا، فهذه عملية احتيال يمكن أن تمنحهم حق الوصول إلى حسابك في {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "إذا كان هذا يتضمن مواد اعتداء جنسي على الأطفال أو استغلال قاصر، فأرسل البلاغ الآن ولا تُعد مشاركة المحتوى." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "إذا كان هذا تهديدًا وشيكًا وذا مصداقية، فاتصل بخدمات الطوارئ المحلية أيضًا." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "إذا كان هذا تهديدًا إرهابيًا وشيكًا، فاتصل بخدمات الطوارئ المحلية أيضًا." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "إذا كان هذا البلاغ يتعلق برسالة معينة في هذا المجتمع، فبلّغ عن تلك الرسالة بدلاً من ذلك. بلاغات الرسائل تمنح فريق السلامة لدينا أوضح سياق، وإضافة التفاصيل في التعليقات يمكن أن تساعدنا في مراجعتها بشكل أسرع. لا تتابع الإبلاغ عن المجتمع ككل إلا إذا كان الإبلاغ عن رسالة لا يكفي لتوضيح المشكلة الأوسع." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "إذا كان هذا البلاغ يتعلق برسالة معينة، فبلّغ عن تلك الرسالة بدلاً من ذلك. بلاغات الرسائل تمنح فريق السلامة لدينا أوضح سياق، وإضافة التفاصيل في التعليقات يمكن أن تساعدنا في مراجعتها بشكل أسرع. لا تتابع الإبلاغ عن المستخدم ككل إلا إذا كانت تلك الرسالة لا تعبر عن المشكلة الأوسع." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "إذا كان هذا البلاغ يتعلق برسائل محددة، فبلّغ عن الرسالة الأكثر صلة بدلاً من ذلك. بلاغات الرسائل تمنح فريق السلامة لدينا أوضح سياق، وإضافة التفاصيل في التعليقات يمكن أن تساعدنا في مراجعتها بشكل أسرع. لا تتابع الإبلاغ عن المستخدم ككل إلا إذا كان الإبلاغ عن رسالة لا يكفي لتوضيح المشكلة الأوسع." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "إذا كنت تعتقد أنه غير قانوني، فاذكر القانون والسبب." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "تجاهل فترة انتظار الوضع البطيء في هذه ا msgid "Ignore virtual" msgstr "تجاهل الأجهزة الافتراضية" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "نشاط غير قانوني" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "نشاط غير قانوني أو شيء آخر" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "مبيعات غير قانونية، أو تسهيل أعمال إجرامية، أو انتهاك واضح للقواعد لا يندرج تحت الفئات المذكورة أعلاه." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "مبيعات غير قانونية، أو تسهيل أعمال إجرامية، أو نشاط غير مشروع." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "الصور" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "يتم إرسال الصور الملصقة من حافظتك كمرفقات، وليس لديك إذن بإرفاق ملفات في هذه القناة." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "انتحال شخصية" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "انتحال شخصية أو وسائط خادعة" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "غير نشط" msgid "Inactive timeout" msgstr "مهلة عدم النشاط" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "ملف شخصي غير لائق" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "ضم رموز النسخ الاحتياطي للمصادقة الثنائية الخاصة بي في ملف PDF والطباعة" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "أدخل معرف المجتمع." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "خلفية الدعوة" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "رمز الدعوة (اختياري)" @@ -19471,7 +19220,7 @@ msgstr "إخفاء الدعوات" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "دعوة أعضاء" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "تم التصريح بعنوان IP" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "أيرلندا" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "مائل" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "إيطاليا" @@ -20120,7 +19869,7 @@ msgstr "المفاتيح" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "لاحقًا" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "لاتفيا" @@ -20291,11 +20040,6 @@ msgstr "معرفة المزيد" msgid "Learn more about Visionary" msgstr "اعرف المزيد عن Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "مغادرة" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "مغادرة المحادثة الخاصة" msgid "Leave silently" msgstr "المغادرة بصمت" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "مغادرة المجتمع" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "يعرض الأعضاء الذين لديهم هذا الدور في قسم خاص بهم ضمن قائمة الأعضاء." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "ليتوانيا" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "جارٍ التحميل..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "جارٍ التحميل…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "منخفض" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "لوكسمبورغ" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "الصيانة مجدولة في {localizedTime}. المدة المتوقعة: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "هل تريد جعل {userName} مالك المجموعة؟ ستفقد امتيازات المالك." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "نقل ملكية المجموعة" @@ -21091,38 +20830,21 @@ msgstr "نقل ملكية المجموعة" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "تأكد من تطابق هذا الرمز مع الرمز الموجود في تطبيق {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "تأكد من أن هذا يبدو صحيحًا قبل إرساله." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "خصّص المثيل على طريقتك" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "روابط ضارة" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "مالطا" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "توزيع البرامج الضارة" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "برامج ضارة أو روابط خطيرة" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "برامج ضارة، أو سرقة بيانات اعتماد، أو ملفات مؤذية." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "إخفاء التفاصيل الخاصة قبل مشاركة شاشتك msgid "Mask Visionary as subscription" msgstr "إظهار Visionary كاشتراك" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "رسائل مزعجة جماعية أو احتيال أو سحوبات جوائز مزيفة أو إساءة استخدام الحسابات." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "بوابة وسائط المحتوى للبالغين" msgid "Mature content not allowed" msgstr "المحتوى للبالغين غير مسموح به" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "محتوى للبالغين أو مضايقة" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "محتوى للبالغين أو تقييد وصول غير آمن" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "تجاوز المحتوى للبالغين" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "انتهاك سياسة المحتوى للبالغين" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "محتوى للبالغين بدون تقييد وصول مناسب." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "رسالة" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "رابط الرسالة" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "رابط الرسالة" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "معاينات الرسائل في قائمة الرسائل المباشرة" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "تم نشر الرسالة" @@ -22211,6 +21908,11 @@ msgstr "وقت الرسالة" msgid "Message unpinned" msgstr "تم إلغاء تثبيت الرسالة" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "الرسالة التي تبلغ عنها" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "مينيسوتا" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "قُصَّر معرضون للخطر، أو محتوى للبالغين في غير مكانه، أو سلوك غير مرغوب فيه." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "المزيد" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "المزيد من الإجراءات" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "متداخل" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "هولندا" @@ -24099,7 +23796,7 @@ msgstr "لا توجد نتائج" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "لم يتم العثور على نتائج" @@ -24858,6 +24555,16 @@ msgstr "يمكن فقط للأشخاص الذين تدعوهم والمشرفي msgid "Only places I can't access anymore" msgstr "الأماكن التي لم يعد بإمكاني الوصول إليها فقط" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "لا تُبلغ إلا عما تعتقد بصدق أنه يخالف القواعد، ويرجى عدم إرسال البلاغ نفسه مرتين." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "لا تُبلغ إلا عما تعتقد بصدق أنه يخالف القواعد. إساءة استخدام البلاغات تتعارض مع <0>إرشادات المجتمع." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "العتامة" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "افتح على {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "فتح القائمة المنسدلة" @@ -25379,11 +25084,6 @@ msgstr "افتح \"إعدادات النظام\" ← \"الخصوصية والأ msgid "Open template JSON" msgstr "فتح قالب JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "افتح مربع حوار الحظر لهذا المجتمع." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "فتح إعداداتك" msgid "Opened the thread again" msgstr "تمت إعادة فتح المحادثة" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "يُفتح في علامة تبويب جديدة" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "تم حظر العضو أصلاً في {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "أخرى" @@ -25654,11 +25357,6 @@ msgstr "تفاعل آخر…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "يراجع فريق السلامة لدينا بلاغك. سنرسل لك رسالة مباشرة وبريدًا إلكترونيًا فور التوصل إلى قرار." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "تعذر نقل الملكية إلى <0>{username} في هذا الوقت." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "تم نقل الملكية" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "الصق استجابة JSON هنا" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "الصق رابط الرسالة." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "التصيّد الاحتيالي أو الاحتيال أو الروابط الضارة أو الادعاءات الكاذبة التي يُحتمل أن تسبب ضررًا في العالم الحقيقي." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "اختر مزود البحث على الويب" msgid "Pick an emoji" msgstr "اختر رمز تعبيري" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "اختر خيارًا للمتابعة." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "اختر الرقم المكون من 4 أرقام بعد اسم الم msgid "Pick the appearance this administrator account should start with." msgstr "اختر المظهر الذي يجب أن يبدأ به حساب المسؤول هذا." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "اختر القاعدة المراد مراجعتها." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "الرجاء الانتظار لحظة ثم حاول إعادة التسمية مرة أخرى." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "بولندا" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "المنفذ" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "البرتغال" @@ -26872,11 +26555,6 @@ msgstr "اضغط لإضافة رد فعل" msgid "press to remove reaction" msgstr "اضغط لإزالة رد الفعل" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "انتحال شخصية شخص آخر، بما في ذلك المحتوى الخادع الذي تم إنشاؤه بواسطة الذكاء الاصطناعي." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "منع <0>{targetUserTag} من إرسال الرسائل وإضافة ردود الفعل والاتصال بالقنوات الصوتية طوال المدة المحددة." @@ -27078,11 +26756,6 @@ msgstr "متحدث ذو أولوية" msgid "Privacy" msgstr "الخصوصية" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "الخصوصية أو انتحال الشخصية" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "إعدادات الخصوصية" msgid "Privacy URL" msgstr "رابط سياسة الخصوصية" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "انتهاك الخصوصية" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "انتهاك الخصوصية أو نشر المعلومات الشخصية" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "انتهاك الخصوصية أو الملاحقة" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "نوع الملف الشخصي" msgid "Profile updated" msgstr "تم تحديث الملف الشخصي" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "مخالفة في الملف الشخصي أو اسم المستخدم أو الصورة الرمزية" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "يروج للكراهية ضد الفئات المحمية." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "يروج للنشاط المتطرف العنيف أو يجند له أو ينسقه." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "الترويج لإيذاء النفس أو اضطرابات الأكل أو التعليمات التي تشجع عليهما." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "الملف الشخصي الذي تبلّغ عنه" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "الضمائر: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "احمِ حساب Visionary الخاص بك بتفعيل المصادقة الثنائية. شكرًا لدعمك {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "يُرجى إدخال معرف مستخدم أو علامة مستخدم على الأقل." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "أدخل معرف المستخدم أو اسم المستخدم للشخص الذي تبلّغ عنه." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "يرجى تقديم اسمك القانوني الكامل للإقرار." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "تتيح أزرار الاختيار تحديد خيار واحد من msgid "Radio group" msgstr "مجموعة أزرار اختيار" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "تنسيق الهجمات الجماعية" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "هل أنت مستعد لشراء هدية؟" msgid "Ready to upgrade?" msgstr "هل أنت مستعد للترقية؟" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "السبب" @@ -28291,8 +27924,8 @@ msgstr "تذكر حجم النافذة وموضعها" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "إزالة {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "هل تريد إزالة {userName} من المجموعة؟" @@ -28419,8 +28052,8 @@ msgstr "إزالة من المفضلة" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "إزالة من المجموعة" @@ -28458,11 +28091,6 @@ msgstr "إزالة من صور GIF المفضلة (بالرابط فقط)" msgid "Remove icon" msgstr "إزالة الأيقونة" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "إزالة الرسالة من القناة لدى الجميع." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "أُزيل من المفضلة" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "تمت إزالته من المجموعة" @@ -28919,28 +28547,18 @@ msgstr "الإبلاغ عن مجتمع" msgid "Report a message" msgstr "الإبلاغ عن رسالة" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "أبلغ عن مخالفة للقواعد، أو اعثر على أدوات للتحكم في التواصل والتفضيلات." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "الإبلاغ عن ملف شخصي لمستخدم" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "الإبلاغ عن المجتمع" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "تفاصيل البلاغ" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "الإبلاغ عن محتوى غير قانوني" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "الإبلاغ عن مشكلة" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "الإبلاغ عن الرسالة" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "الإبلاغ عن الملف الشخصي" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "تم إرسال البلاغ" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "نوع البلاغ" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "الإبلاغ عن المستخدم" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "علامة المستخدم المُبلّغ عنه (اختياري)" @@ -29100,6 +28716,10 @@ msgstr "يتطلب كل ما في المستوى المتوسط، بالإضاف msgid "Resend" msgstr "إعادة الإرسال" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "إعادة الإرسال ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "إعادة الإرسال ({newSecondsRemaining}ث)" @@ -29108,7 +28728,7 @@ msgstr "إعادة الإرسال ({newSecondsRemaining}ث)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "إعادة الإرسال ({originalSecondsRemaining}ث)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "إعادة الإرسال ({resendCooldownSeconds}ث)" @@ -29122,7 +28742,7 @@ msgstr "إعادة الإرسال ({resendSecondsRemaining}ث)" msgid "Resend ({secondsRemaining}s)" msgstr "إعادة الإرسال ({secondsRemaining}ث)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "إعادة إرسال الرمز" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "تم تحديث الأدوار بنجاح" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "رومانيا" @@ -29947,7 +29567,7 @@ msgstr "التشبع" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "ألقِ التحية على <0>{displayName}. تبدأ رسائلك msgid "Scale" msgstr "مقياس" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "عمليات الاحتيال أو البرامج الضارة أو المعلومات المضللة" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "امسح رمز الاستجابة السريعة باستخدام تطبيق المصادقة الخاص بك." @@ -30855,11 +30470,6 @@ msgstr "تحديد" msgid "Select {accessibleName}" msgstr "تحديد {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "اختر فئة" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "اختر مجتمعًا لديك فيه إذن {permissionName}، أو محادثة جماعية أنت عضو فيها." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "اختر بلدًا" @@ -30911,11 +30521,6 @@ msgstr "اختر عنوان URI لإعادة التوجيه" msgid "Select a scenario to apply..." msgstr "حدد سيناريو لتطبيقه..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "اختر فئة انتهاك." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "اختر الحساب الذي تريد تسجيل الدخول به ع msgid "Select voice processing mode" msgstr "تحديد وضع معالجة الصوت" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "اختر ما تريد الإبلاغ عنه." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "اختر بلد إقامتك." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "اختر…" @@ -31037,13 +30642,6 @@ msgstr "التحديد: {0} (الحد الأقصى {1})" msgid "Selections" msgstr "عناصر الاختيار" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "إيذاء النفس أو الانتحار" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "إرسال رسالة إجراء (تظهر بخط مائل)." msgid "Send animation" msgstr "إرسال رسوم متحركة" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "إرسال بلاغ آخر" @@ -31138,7 +30736,7 @@ msgstr "زر الإرسال" msgid "Send code" msgstr "إرسال الرمز" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "إرسال بلاغ DSA" @@ -31158,9 +30756,9 @@ msgstr "إرسال ملفات بحجم يصل إلى {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "إرسال طلب صداقة" @@ -31220,8 +30818,8 @@ msgstr "إرسال الرسائل في المواضيع" msgid "Send messages, images, GIFs and emoji" msgstr "إرسال الرسائل والصور وصور GIF والرموز التعبيرية" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "إرسال البلاغ" @@ -31255,7 +30853,7 @@ msgstr "هل تريد إعادة هذه الرسالة المثبتة إلى ا msgid "Send TTS messages" msgstr "إرسال رسائل تحويل النص إلى كلام" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "إرسال رمز التحقق" @@ -31273,11 +30871,6 @@ msgstr "إرسال رسالة صوتية" msgid "Send:" msgstr "الإرسال:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "إرسال برامج ضارة أو روابط خطيرة" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "مشاركة السمة" msgid "Share voice activity with all friends?" msgstr "مشاركة النشاط الصوتي مع جميع الأصدقاء؟" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "شارك ما يحتاجه فريقنا لتقييم هذا الأمر." @@ -31709,11 +31302,6 @@ msgstr "شارك ما يحتاجه فريقنا لتقييم هذا الأمر." msgid "Share with a friend" msgstr "مشاركة مع صديق" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "مشاركة مع مشرفي المجتمع." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "النافذة المشتركة" msgid "Shared window audio" msgstr "صوت النافذة المشتركة" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "يشارك معلومات شخصية، أو يلاحق المستخدمين، أو ينسّق انتهاكات الخصوصية." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "مشاركة معلومات شخصية" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "أشرطة التمرير" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "سلوفاكيا" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "سلوفينيا" @@ -32889,11 +32467,6 @@ msgstr "محاكاة الوضع البطيء" msgid "Slowmode time remaining" msgstr "الوقت المتبقي للوضع البطيء" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "الألفاظ المسيئة أو اللغة المجرِّدة من الإنسانية أو الهجمات على الفئات المحمية." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "حدث خطأ أثناء إعداد هذا الملصق. جرّب ملفًا آخر أو أعد المحاولة بعد قليل." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "حدث خطأ أثناء النشر. حاول مرة أخرى بعد لحظة." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "تخطيط واسع مع فصل بصري واضح بين الرسائل." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "إسبانيا" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "حساب رسائل مزعجة" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "تصنيف الرسائل المزعجة" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "رسائل مزعجة أو احتيال" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "مجتمع رسائل مزعجة أو احتيال" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "حساب رسائل مزعجة أو احتيال أو تصيّد" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "رسائل مزعجة أو احتيال أو تصيّد" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "بدء مصغر" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "البدء من جديد" @@ -33752,22 +33302,26 @@ msgstr "البقاء مسجّلًا للدخول" msgid "Step {current} of {total}" msgstr "خطوة {current} من {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "الخطوة 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "الخطوة 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "الخطوة 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "الخطوة 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "الخطوة 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "إيقاف القناة كقناة إعلانات؟" msgid "Stop hiding muted channels by default?" msgstr "إيقاف إخفاء القنوات المكتومة افتراضيًا؟" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "إيقاف الرسائل وطلبات الصداقة." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "إيقاف اختبار الميكروفون" @@ -33959,11 +33508,6 @@ msgstr "إيقاف تعديل insertBefore وremoveChild في Node.prototype. س msgid "Stop ringing" msgstr "إيقاف الرنين" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "إيقاف عرض محتواه وأعضائه." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "استبدال الوجوه النصية الشائعة مثل :) و <3 برموز تعبيرية عند إرسال الرسائل" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "السويد" @@ -34804,11 +34348,6 @@ msgstr "اضغط لإضافة ملاحظة" msgid "tar.gz archive" msgstr "أرشيف tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "يستهدف الأشخاص بناءً على خصائص محمية." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "شروط الخدمة" msgid "Terms URL" msgstr "رابط الشروط" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "الإرهاب أو التطرف العنيف" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "التايلاندية" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "شكرًا لمساعدتك في الحفاظ على أمان {productName}. سنراجع بلاغك في أقرب وقت ممكن." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "شكرًا لك على الإبلاغ عن هذا" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "شكرًا لإخبارنا. هذا لا يخالف قواعدنا بمفرده، لذلك لم نرسل بلاغًا." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "شكرًا لإخبارنا. هذا لا يخالف قواعدنا بمفرده، لذلك لم نرسل بلاغًا. إذا كان يستهدف شخصًا ما أو يستخدم ألفاظًا مهينة، فأبلغ عنه مرة أخرى واختر «محتوى مسيء أو ضار»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "لم ينجح ذلك. حاول مرة أخرى أو ألغِ." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "لا يبدو هذا لونًا صالحًا. جرّب hex أو rgb() أو hsl() أو اسم لون CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "لا يبدو هذا رابطًا صالحًا." @@ -35104,6 +34653,11 @@ msgstr "يُظهر تطبيق {PRODUCT_NAME} على جهازك الآخر ذلك msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "لم يتم تسجيل الدخول إلى تطبيق {PRODUCT_NAME}. يمكنك إغلاق هذه النافذة." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "سيراجع فريق السلامة في {productName} بلاغك. لن نكشف أن البلاغ جاء منك." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "عنوان redirect_uri المقدّم غير مسجّل لهذا الت msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "يجب أن يستخدم عنوان redirect_uri المقدّم بروتوكول HTTP أو HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "تغير نموذج البلاغ. يرجى البدء من جديد." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "تم تعيين علامات اسم المستخدم على هذه النسخة بالفعل. لا يمكن تغييرها بعد الآن." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "رمز التحقق غير صالح أو انتهت صلاحيته." @@ -36115,13 +35674,8 @@ msgstr "لم يعد هذا العضو متصلًا بالقناة الصوتية msgid "This message can only be forwarded to age-restricted channels" msgstr "لا يمكن إعادة توجيه هذه الرسالة إلا إلى القنوات المخصصة للبالغين" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "تم حذف هذه الرسالة بالفعل." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "تم نشر هذه الرسالة بالفعل" @@ -36279,11 +35833,6 @@ msgstr "هذا الموضوع مغلق. إرسال رسالة سيفتح الم msgid "This thread is locked. Only moderators can send messages." msgstr "تم قفل هذا الموضوع. يمكن للمشرفين فقط إرسال الرسائل." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "هذا المستخدم" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "قام هذا المستخدم بتقييد ملفه الشخصي. بعض التفاصيل مخفية عن الأشخاص الذين ليسوا أصدقاءه." @@ -36292,11 +35841,6 @@ msgstr "قام هذا المستخدم بتقييد ملفه الشخصي. بع msgid "This user has no roles in this community." msgstr "ليس لدى هذا المستخدم أي أدوار في هذا المجتمع." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "هذا المستخدم محظور بالفعل من المجتمع." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "لم يعد هذا المستخدم متاحًا." @@ -36465,16 +36009,6 @@ msgstr "تم تحديث الموضوع" msgid "Threads" msgstr "المواضيع" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "التهديدات أو الملاحقة عبر المساحات أو التواصل غير المرغوب فيه." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "التهديدات أو المضايقات أو الأذى" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "تم فرض مهلة على {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "مهلة" @@ -36787,6 +36321,11 @@ msgstr "درجات اللون" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "تحويل درجات ألوان صور HDR إلى النطاق القياسي لتقليل ذروة السطوع." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "تم إرسال عدد كبير جدًا من الرموز. انتظر {duration} ثم حاول مرة أخرى." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "نقل ملكية المجتمع" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "هل تريد نقل ملكية المجموعة إلى {userName}؟" @@ -37561,7 +37100,7 @@ msgstr "ألغِ حظر هذا المستخدم أولًا لإرسال طلب #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "إلغاء حظر المستخدم" @@ -37607,16 +37146,6 @@ msgstr "إلغاء تعطيل السمع على جميع الأجهزة" msgid "Undeafen yourself" msgstr "إلغاء تعطيل سمعك" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "مخاوف تتعلق بسلامة القاصرين أو الأطفال" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "مستخدم قاصر" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "حتى أُلغي الكتم" msgid "Unverified email" msgstr "بريد إلكتروني غير مُتحقَّق منه" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "سلوك غير مرغوب فيه أو محتوى للبالغين في المكان الخطأ." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "سلوك أو تعليقات أو طلبات للبالغين غير مرغوب فيها." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "تساعد الوسوم الناس في العثور على مجتمعك، ويمكنك إضافة ما يصل إلى {DISCOVERY_MAX_TAGS}. تظهر الوسوم في بحث الاكتشاف." @@ -38840,11 +38359,6 @@ msgstr "استخدام السمة الفاتحة" msgid "Use native title bar" msgstr "استخدام شريط العنوان الأصلي" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "استخدم هذا الخيار فقط إذا كان يخالف قواعد {productName} بوضوح ولا يندرج تحت الفئات المذكورة أعلاه." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "يُستخدم في هذا المجتمع فقط." msgid "User" msgstr "المستخدم" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "يبدو أن المستخدم قاصر، أو متورط في استدراج الأطفال أو استغلالهم." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "تصحيح أخطاء المستخدم" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "معرف المستخدم (اختياري)" @@ -39061,12 +38570,12 @@ msgstr "المستخدم غير موجود" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "الملف الشخصي للمستخدم" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "الملف الشخصي للمستخدم: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "إعدادات المستخدم" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "علامة المستخدم (اختياري)" @@ -39339,7 +38848,7 @@ msgstr "مجتمع موثّق" msgid "Verify" msgstr "تحقق" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "التحقق من الرمز" @@ -39368,7 +38877,7 @@ msgstr "تأكيد هويتك" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "تحقق من بريدك الإلكتروني" @@ -39718,7 +39227,7 @@ msgstr "عرض الرموز" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "عرض الملف الشخصي في المجتمع" @@ -39751,7 +39260,7 @@ msgstr "عرض الهدايا" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "عرض الملف الشخصي العام" @@ -39847,26 +39356,6 @@ msgstr "انضمام مشاهد إلى البث" msgid "Viewer leaves stream" msgstr "مغادرة مشاهد للبث" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "فئة الانتهاك" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "المخالفة في ملف المستخدم الشخصي، وليست في رسالة محددة." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "العنف أو التهديدات العنيفة" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "محتوى عنيف أو صادم" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "لقد غيّرنا حجم هذا الرمز التعبيري وضغطن msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "لقد غيّرنا حجم هذا الملصق وضغطناه إلى 320x320 بكسل، لكنه لا يزال {fileSize}. الحد الأقصى هو {maxSize}. جرّب صورة أبسط أو ألوانًا أقل أو ملف مصدر أصغر." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "أرسلنا رمزًا إلى {email}." @@ -40472,7 +39961,7 @@ msgstr "سنعالج هذا في أقرب وقت ممكن. ستتلقى رسال msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "سنستعيد بريدك الإلكتروني السابق، وسجّل الخروج من الجلسات القديمة، ونعطّل المصادقة متعددة العوامل، ونؤمّن حسابك بكلمة مرور جديدة." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "سنرسل رمزًا قصيرًا لتأكيد إمكانية تلقيك تحديثات حول هذا البلاغ." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "فرجينيا الغربية" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "ما نوع القاعدة التي تم خرقها؟" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "ماذا يحدث؟" msgid "What's new" msgstr "ما الجديد" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "ما سبب بلاغك؟" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "عندما لا يتم تعيين تاريخ حد مخصص، لا يمكن للأعضاء الذين ليس لديهم إذن <0>{readMessageHistoryPermissionLabel} عرض أي رسائل سابقة. سيرون الرسائل في الوقت الفعلي فقط عند وصولها، وستختفي عند إعادة تشغيل تطبيقاتهم." @@ -40832,11 +40321,6 @@ msgstr "أي المجتمعات" msgid "Which conversations" msgstr "أي المحادثات" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "ما القاعدة التي تم خرقها؟" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "عند تشغيل الضغط للتحدث، يتحكم اختصارك في الميكروفون، لذلك يكون زر كتم الصوت معطّلًا." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "لا يمكنك إرفاق ملفات في هذه القناة." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "لا يمكنك إضافة نفسك كصديق" @@ -41341,7 +40825,7 @@ msgstr "لا يمكنك مراسلة هذا المستخدم" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "يجب الموافقة على شروط الخدمة لإنشاء حساب" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "يجب عليك التحقق من بريدك الإلكتروني قبل إرسال بلاغ." @@ -41891,6 +41375,11 @@ msgstr "أنت مشترك بسعر قديم. السعر الحالي لهذه ا msgid "You're sending messages too quickly" msgstr "أنت ترسل الرسائل بسرعة كبيرة" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "ترسل البلاغات بسرعة كبيرة. حاول مرة أخرى لاحقًا." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "أنت تشاهد رسائل أقدم" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "لقد أضفت أشخاصًا أكثر مما تسمح به المحادثة الجماعية. أزل بعضهم وحاول مرة أخرى." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "لقد أبلغت عن هذه الرسالة بالفعل." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "لقد أبلغت عن هذا الملف الشخصي بالفعل اليوم." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "لم يتم تغيير أو حذف حساباتك وإعداداتك." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "تعذّر إكمال الإجراء الذي طلبته لأن أنظمة الأمان لدينا وضعت عليه علامة. إذا كنت تعتقد أن هذا خطأ، فيُرجى التواصل مع الدعم." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "إجاباتك" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "طلبك قيد المراجعة. لا يزال بإمكانك تحديث تفاصيل الإدراج أو سحب الطلب." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "يتطلب متصفحك تفاعلًا من المستخدم قبل تشغيل الصوت. انقر على الزر أدناه لتمكين الدردشة الصوتية." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "تصل تغييراتك إلى كل مجتمع يتابع هذه القناة، وقد يستغرق ذلك دقيقة. تسمح كل رسالة منشورة بإجراء 3 تعديلات سريعة، ثم تعديل واحد كل 20 دقيقة." @@ -42311,6 +41815,11 @@ msgstr "اسمك المستعار الجديد، أو اتركه فارغًا ل msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "لم تعد مجموعة الاسترداد القديمة الخاصة بك تعمل. قم بتخزين هذه المجموعة الجديدة في مكان آمن." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "خياراتك" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "منطقتك" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "فشل دفع تجديد اشتراكك، لكن <0/> ستظل نشطة حتى <1>{graceDate}. حدّث طريقة الدفع قبل ذلك التاريخ للاحتفاظ باشتراكك." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "لم يتم إرسال بلاغك. حاول مرة أخرى." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "سيتحول اشتراكك إلى الفوترة السنوية عند msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "ملف CSS الخاص بالمظهر كبير جدًا بحيث لا يمكن مشاركته. قلّل حجمه وحاول مرة أخرى." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "اسم المستخدم الخاص بك (اختياري)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 0012dc255..1f922bd5e 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -35,9 +35,6 @@ { "msgid": "HEVC" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -68,9 +65,6 @@ { "msgid": "Win" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -80,12 +74,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -112,9 +100,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -139,9 +124,6 @@ { "msgid": "Markdown" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -175,9 +157,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -187,12 +166,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -208,9 +181,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -249,15 +219,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -282,9 +243,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -321,9 +279,6 @@ { "msgid": "Instance" }, - { - "msgid": "Limit" - }, { "msgid": "Logo" }, @@ -333,12 +288,6 @@ { "msgid": "Markdown" }, - { - "msgid": "Metadata" - }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -360,9 +309,6 @@ { "msgid": "Ping" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -378,9 +324,6 @@ { "msgid": "Shift" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, @@ -402,9 +345,6 @@ { "msgid": "Token" }, - { - "msgid": "Uploader" - }, { "msgid": "Video" }, @@ -435,9 +375,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -450,15 +387,9 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -474,9 +405,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -702,24 +630,12 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, { "msgid": "Acceleration" }, - { - "msgid": "Admin" - }, { "msgid": "Administrator" }, @@ -774,9 +690,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Codec" }, @@ -831,9 +744,6 @@ { "msgid": "Gaming" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -843,9 +753,6 @@ { "msgid": "Hardware" }, - { - "msgid": "Hashing" - }, { "msgid": "Hindi" }, @@ -858,15 +765,6 @@ { "msgid": "Jitter" }, - { - "msgid": "Job {jobId}: {jobStatus}" - }, - { - "msgid": "Jobs" - }, - { - "msgid": "Lane" - }, { "msgid": "Layout" }, @@ -891,30 +789,15 @@ { "msgid": "Markdown" }, - { - "msgid": "Metadata" - }, { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Navigation" }, { "msgid": "Neko" }, - { - "msgid": "Net" - }, - { - "msgid": "Node" - }, - { - "msgid": "Normal" - }, { "msgid": "Note" }, @@ -924,9 +807,6 @@ { "msgid": "Offline" }, - { - "msgid": "Offset {offset}" - }, { "msgid": "Online" }, @@ -948,9 +828,6 @@ { "msgid": "Platform" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -966,9 +843,6 @@ { "msgid": "Prompt" }, - { - "msgid": "Region: {regionName}" - }, { "msgid": "Relevant" }, @@ -996,12 +870,6 @@ { "msgid": "Stack traces" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Start" }, @@ -1062,12 +930,6 @@ { "msgid": "Top" }, - { - "msgid": "Type" - }, - { - "msgid": "Type {premiumType}" - }, { "msgid": "Upload" }, @@ -1077,9 +939,6 @@ { "msgid": "Upload emoji" }, - { - "msgid": "Uploader" - }, { "msgid": "Version" }, @@ -1134,15 +993,9 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, - { - "msgid": "repost" - }, { "msgid": "slash {commandName}" }, @@ -1152,21 +1005,12 @@ { "msgid": "sticker" }, - { - "msgid": "video" - }, - { - "msgid": "{actor} banned {target}." - }, { "msgid": "{actor} stopped following an announcement channel in {channel}" }, { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# emoji} other {# emojis}}" - }, { "msgid": "{desktopChannel} Desktop {desktopVersion}" }, @@ -1182,12 +1026,6 @@ { "msgid": "{length, plural, one {# app} other {# apps}}" }, - { - "msgid": "{length} apps" - }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -1262,10 +1100,6 @@ "msgctxt": "keyboard-key-name", "msgid": "Pause / Break" }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Standard" - }, { "msgctxt": "us-state", "msgid": "Alabama" @@ -1479,24 +1313,9 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, - { - "msgid": "ACLs" - }, { "msgid": "AV1" }, - { - "msgid": "Admin" - }, { "msgid": "Administrator" }, @@ -1545,9 +1364,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Client" }, @@ -1674,33 +1490,21 @@ { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Name" }, - { - "msgid": "Name: {0}." - }, { "msgid": "Navigation" }, { "msgid": "Neko" }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, { "msgid": "Offline" }, - { - "msgid": "Offset {offset}" - }, { "msgid": "Okay" }, @@ -1716,9 +1520,6 @@ { "msgid": "Pause" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -1731,12 +1532,6 @@ { "msgid": "Premium" }, - { - "msgid": "Region" - }, - { - "msgid": "Region: {regionName}" - }, { "msgid": "Reposts: <0>{countLabel}" }, @@ -1749,18 +1544,9 @@ { "msgid": "Sourcemaps" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Status" }, @@ -1815,9 +1601,6 @@ { "msgid": "Tracking" }, - { - "msgid": "Uploader" - }, { "msgid": "Version" }, @@ -1866,9 +1649,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, @@ -1890,9 +1670,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -1905,9 +1682,6 @@ { "msgid": "{productName} Bug Hunter" }, - { - "msgid": "{productName} Desktop" - }, { "msgid": "{productName} Visionary" }, @@ -1955,10 +1729,6 @@ "msgctxt": "keyboard-key-name", "msgid": "Kana" }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Standard" - }, { "msgctxt": "us-state", "msgid": "Alabama" @@ -2172,15 +1942,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -2199,9 +1960,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cisco" - }, { "msgid": "Coal" }, @@ -2235,9 +1993,6 @@ { "msgid": "Markdown" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -2268,9 +2023,6 @@ { "msgid": "Shift" }, - { - "msgid": "Spam" - }, { "msgid": "Tab" }, @@ -2304,9 +2056,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -2316,12 +2065,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -2334,9 +2077,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -2389,21 +2129,9 @@ { "msgid": "+{count}" }, - { - "msgid": "128 kbps voice quality" - }, { "msgid": "24 hours" }, - { - "msgid": "256 kbps voice quality" - }, - { - "msgid": "3 Days" - }, - { - "msgid": "384 kbps voice quality" - }, { "msgid": "<0/> followed {sourceComponent} into this channel. Messages published there will appear here." }, @@ -2437,9 +2165,6 @@ { "msgid": "A separate profile for each community" }, - { - "msgid": "A viewer cannot play {pinnedCodec}, so your stream uses {codec}." - }, { "msgid": "AV1" }, @@ -2488,57 +2213,15 @@ { "msgid": "Add tags" }, - { - "msgid": "Added a chat embed background." - }, - { - "msgid": "Added a community banner." - }, - { - "msgid": "Added a community icon." - }, - { - "msgid": "Added a content warning with the text {text}." - }, - { - "msgid": "Added a content warning." - }, - { - "msgid": "Added an avatar." - }, - { - "msgid": "Added an invite background." - }, - { - "msgid": "Added the member's community profile avatar." - }, - { - "msgid": "Added the member's community profile banner." - }, - { - "msgid": "Added the role {role}." - }, { "msgid": "Added the tag {name}" }, - { - "msgid": "Adds a manual audio source picker to the stream settings menu. Without it, a shared window already captures that app and a shared screen captures your desktop." - }, - { - "msgid": "Advertise a capped decode codec to force publisher migration" - }, - { - "msgid": "All Messages" - }, { "msgid": "Allow AV1 for screen sharing" }, { "msgid": "Allow H.265 (HEVC) for screen sharing" }, - { - "msgid": "Allow access on your Mac" - }, { "msgid": "Allow anyone to invite" }, @@ -2551,33 +2234,9 @@ { "msgid": "Allow {productName} under Screen Recording in System Settings. If it is already allowed, relaunch {productName2} so macOS applies it." }, - { - "msgid": "Allow {productName} under {macosScreenRecordingPermissionName} in {macosSystemSettingsName}. If it is already allowed, relaunch {productName2} so macOS applies it." - }, { "msgid": "Allowed" }, - { - "msgid": "Allowed all members to mention this role." - }, - { - "msgid": "Allowed anyone to mention this role." - }, - { - "msgid": "Allowed flexible text channel names." - }, - { - "msgid": "Allowed others to clone this community's emojis." - }, - { - "msgid": "Allowed others to clone this community's stickers." - }, - { - "msgid": "Allowed up to {count, plural, one {# connection} other {# connections}} per member." - }, - { - "msgid": "Allowed {permissions}." - }, { "msgid": "Allows members to create posts in this channel." }, @@ -2629,24 +2288,6 @@ { "msgid": "App audio isn't available right now on Windows." }, - { - "msgid": "Application audio" - }, - { - "msgid": "Application audio for video device shares" - }, - { - "msgid": "Applied a community deafen." - }, - { - "msgid": "Applied a community mute." - }, - { - "msgid": "Applied a server deafen." - }, - { - "msgid": "Applied a server mute." - }, { "msgid": "Apply to these communities too" }, @@ -2674,9 +2315,6 @@ { "msgid": "Audio muted" }, - { - "msgid": "Audio sources" - }, { "msgid": "Automatic ({codec})" }, @@ -2711,7 +2349,7 @@ "msgid": "Be the first to start a conversation here." }, { - "msgid": "Blocked the member from sending messages, reacting and joining voice until {date}." + "msgid": "Block {name}" }, { "msgid": "Bluesky connections" @@ -2737,18 +2375,12 @@ { "msgid": "By purchasing, you agree to our <0>Terms of service." }, - { - "msgid": "By purchasing, you agree to our {legalDocument}." - }, { "msgid": "By purchasing, you agreed to our <0>Privacy policy." }, { "msgid": "By purchasing, you agreed to our <0>Terms of service." }, - { - "msgid": "By purchasing, you agreed to our {legalDocument}." - }, { "msgid": "CSS files" }, @@ -2767,9 +2399,6 @@ { "msgid": "Cancel the scheduled change to move to the current price instead." }, - { - "msgid": "Capture card" - }, { "msgid": "Capture devices use the Gaming preset." }, @@ -2791,141 +2420,33 @@ { "msgid": "Change which voice region this channel uses." }, - { - "msgid": "Changed slowmode from {oldDuration} to {newDuration}." - }, { "msgid": "Changed slowmode to {duration}" }, - { - "msgid": "Changed the AFK channel from {oldChannel} to {newChannel}." - }, - { - "msgid": "Changed the AFK timeout from {oldDuration} to {newDuration}." - }, - { - "msgid": "Changed the audio quality from {oldKbps} kbps to {newKbps} kbps." - }, - { - "msgid": "Changed the avatar." - }, - { - "msgid": "Changed the block on sending messages, reacting and joining voice to end at {date}." - }, - { - "msgid": "Changed the chat embed background." - }, - { - "msgid": "Changed the community avatar." - }, - { - "msgid": "Changed the community banner." - }, - { - "msgid": "Changed the community bio to {text}." - }, - { - "msgid": "Changed the community icon." - }, - { - "msgid": "Changed the community profile avatar." - }, - { - "msgid": "Changed the community profile bio to {text}." - }, - { - "msgid": "Changed the connections per member from {oldCount} to {newCount}." - }, - { - "msgid": "Changed the content warning text from {oldText} to {newText}." - }, - { - "msgid": "Changed the custom role icon." - }, - { - "msgid": "Changed the custom warning text from {oldText} to {newText}." - }, { "msgid": "Changed the default hide after inactivity time to {duration}" }, { "msgid": "Changed the default layout to {layout}" }, - { - "msgid": "Changed the default notification setting from {oldSetting} to {newSetting}." - }, { "msgid": "Changed the default slowmode in threads to {duration}" }, { "msgid": "Changed the default sort order to {order}" }, - { - "msgid": "Changed the description from {oldText} to {newText}." - }, - { - "msgid": "Changed the explicit content filter from {oldFilter} to {newFilter}." - }, { "msgid": "Changed the hide after inactivity time to {duration}" }, - { - "msgid": "Changed the invite background alignment from {oldAlignment} to {newAlignment}." - }, - { - "msgid": "Changed the invite background." - }, - { - "msgid": "Changed the link from {oldUrl} to {newUrl}." - }, - { - "msgid": "Changed the member's community profile avatar." - }, - { - "msgid": "Changed the member's community profile bio to {text}." - }, - { - "msgid": "Changed the message history threshold from {oldDate} to {newDate}." - }, - { - "msgid": "Changed the name from {oldName} to {newName}." - }, - { - "msgid": "Changed the nickname from {oldNick} to {newNick}." - }, - { - "msgid": "Changed the role icon from {oldEmoji} to {newEmoji}." - }, - { - "msgid": "Changed the system channel from {oldChannel} to {newChannel}." - }, - { - "msgid": "Changed the timeout end date to {date}." - }, - { - "msgid": "Changed the timeout to end on {date}." - }, - { - "msgid": "Changed the topic from {oldText} to {newText}." - }, - { - "msgid": "Changed the user limit from {oldCount} to {newCount}." - }, - { - "msgid": "Changed the vanity URL from {oldCode} to {newCode}." - }, - { - "msgid": "Changed the verification level from {oldLevel} to {newLevel}." - }, - { - "msgid": "Changed the voice region from {oldRegion} to {newRegion}." - }, { "msgid": "Characters in a single message" }, { "msgid": "Check again" }, + { + "msgid": "Check your report" + }, { "msgid": "Checking the sign-in request…" }, @@ -2956,6 +2477,9 @@ { "msgid": "Choose the premium model" }, + { + "msgid": "Choose the reason again" + }, { "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." }, @@ -2992,9 +2516,6 @@ { "msgid": "Clearer text" }, - { - "msgid": "Clearing the text of a message with attachments asks to delete the message unless this is on" - }, { "msgid": "Click to learn more" }, @@ -3022,9 +2543,6 @@ { "msgid": "Code from the {productName} app" }, - { - "msgid": "Codec negotiation testing" - }, { "msgid": "Combobox" }, @@ -3037,9 +2555,6 @@ { "msgid": "Communities you can join" }, - { - "msgid": "Community model" - }, { "msgid": "Community overrides" }, @@ -3050,10 +2565,10 @@ "msgid": "Compressing" }, { - "msgid": "Compressing {percent}%" + "msgid": "Confirm it's you before you view your backup codes." }, { - "msgid": "Confirm it's you before you view your backup codes." + "msgid": "Confirm the statement to send the report." }, { "msgid": "Connect a camera and try again." @@ -3151,6 +2666,9 @@ { "msgid": "Couldn't load settings" }, + { + "msgid": "Couldn't load the report form." + }, { "msgid": "Couldn't load this community. Try again in a moment." }, @@ -3241,9 +2759,6 @@ { "msgid": "Custom themes for the app" }, - { - "msgid": "Cuts audio below a loudness threshold, lowest CPU cost." - }, { "msgid": "Date posted" }, @@ -3256,9 +2771,6 @@ { "msgid": "Decide how premium limits apply to people on this instance." }, - { - "msgid": "Default Hide After Inactivity" - }, { "msgid": "Default hide after inactivity" }, @@ -3289,21 +2801,9 @@ { "msgid": "Delete user" }, - { - "msgid": "Deleted their messages from the last {duration}." - }, - { - "msgid": "Deleted {duration} of the member's recent message history." - }, { "msgid": "Delivered to #{targetChannelName}" }, - { - "msgid": "Denied" - }, - { - "msgid": "Denied {permissions}." - }, { "msgid": "Desktop audio isn't available right now on Linux." }, @@ -3334,9 +2834,6 @@ { "msgid": "Discard post" }, - { - "msgid": "Displayed members with this role separately." - }, { "msgid": "Do you want to join {communityName}?" }, @@ -3385,12 +2882,6 @@ { "msgid": "Each published message allows 3 quick edits, then 1 every 20 minutes. Try again later." }, - { - "msgid": "Edit Tag" - }, - { - "msgid": "Edit Tags" - }, { "msgid": "Edit published message?" }, @@ -3424,15 +2915,9 @@ { "msgid": "Emoji and sticker cloning shortcuts" }, - { - "msgid": "Emoji cloning enabled" - }, { "msgid": "Empty edit" }, - { - "msgid": "Emulate decode codec (testing)" - }, { "msgid": "Enable camera access to preview cameras and capture devices before choosing one to stream." }, @@ -3487,6 +2972,9 @@ { "msgid": "Enter this code in your old {PRODUCT_NAME} app to complete sign-in." }, + { + "msgid": "Enter your full legal name to send the report." + }, { "msgid": "Enter your username and the recovery key from your recovery kit, then choose a new password." }, @@ -3503,10 +2991,13 @@ "msgid": "Every community that follows this channel gets a copy. If you edit or delete it later, the copies change too." }, { - "msgid": "Excluded search filter: {filter}" + "msgid": "Expires in {remainingSeconds}s" }, { - "msgid": "Expires in {remainingSeconds}s" + "msgid": "Explain the problem" + }, + { + "msgid": "Explain the problem to send the report." }, { "msgid": "Failed to remove instance from recent instances" @@ -3523,9 +3014,6 @@ { "msgid": "Filtering by {language}" }, - { - "msgid": "Finish" - }, { "msgid": "Finish in the new tab. If you closed it, press Continue with passkey again." }, @@ -3547,9 +3035,6 @@ { "msgid": "Follow channel" }, - { - "msgid": "Follow limit reached" - }, { "msgid": "Follow this channel" }, @@ -3583,12 +3068,6 @@ { "msgid": "Forum" }, - { - "msgid": "Forum Channel" - }, - { - "msgid": "Forum channel" - }, { "msgid": "Friends can always send you direct messages. Choose whether people who share a community with you can message you without sending a friend request first." }, @@ -3599,10 +3078,10 @@ "msgid": "From {sourceGuildName} #{sourceChannelName}" }, { - "msgid": "Full user tag: {tag}" + "msgid": "Full legal name (optional for child sexual abuse reports)" }, { - "msgid": "Fully quit and restart {productName} so macOS applies this permission." + "msgid": "Full user tag: {tag}" }, { "msgid": "Gallery" @@ -3661,27 +3140,12 @@ { "msgid": "Got it!" }, - { - "msgid": "Grant" - }, - { - "msgid": "Granted" - }, - { - "msgid": "Granted {permissions}." - }, { "msgid": "H.265 (requires opt-in)" }, { "msgid": "HEVC" }, - { - "msgid": "Hang out together with voice, video and screen share" - }, - { - "msgid": "Hang out together with voice, video, and screen share" - }, { "msgid": "Hang out with voice, video and screen share" }, @@ -3700,15 +3164,9 @@ { "msgid": "Hey {displayName}, we can't deliver email to your address. Add a working email to verify your account." }, - { - "msgid": "Hid join messages in the system channel." - }, { "msgid": "Hid media download options" }, - { - "msgid": "Hid the community owner crown." - }, { "msgid": "Hide after inactivity" }, @@ -3721,6 +3179,9 @@ { "msgid": "Hides the download, open in browser and copy buttons on images and videos in this channel." }, + { + "msgid": "Hides their messages and stops them messaging you" + }, { "msgid": "Holding Shift, Ctrl or Alt blocks this shortcut. Add alternates in your system settings." }, @@ -3736,6 +3197,9 @@ { "msgid": "Hyprland has no shortcut dialog. Bind the keys in your Hyprland config." }, + { + "msgid": "I confirm in good faith that the information and allegations in this notice are accurate and complete." + }, { "msgid": "I've stored my recovery kit somewhere safe" }, @@ -3745,6 +3209,12 @@ { "msgid": "If macOS asks to quit and reopen {productName}, choose Later." }, + { + "msgid": "If someone is in immediate danger, contact local emergency services first." + }, + { + "msgid": "If you believe it is illegal, say which law and why." + }, { "msgid": "If you forget your password, a recovery kit is the only way back into your account." }, @@ -3877,9 +3347,6 @@ { "msgid": "Let people search and send GIFs powered by Klipy." }, - { - "msgid": "Let the member hear others in this community again." - }, { "msgid": "Lets other communities follow this channel and get copies of what you publish." }, @@ -3892,9 +3359,6 @@ { "msgid": "Lets push-to-talk and shortcuts work in other apps." }, - { - "msgid": "Lets push-to-talk and shortcuts work while {productName} is in the background." - }, { "msgid": "Lets you reset your password if you forget it." }, @@ -3907,21 +3371,9 @@ { "msgid": "Lets {productName} read your keyboard directly. Your system already allows this." }, - { - "msgid": "Lightweight classic filter, works on any device." - }, - { - "msgid": "Limited mentions of this role to members with permission to mention any role." - }, - { - "msgid": "Limited the channel to {count, plural, one {# user} other {# users}}." - }, { "msgid": "Link a new device" }, - { - "msgid": "Link channel" - }, { "msgid": "Link file" }, @@ -3961,60 +3413,30 @@ { "msgid": "Logo" }, - { - "msgid": "Made the channel follow the mature content setting of its category or the community." - }, - { - "msgid": "Made the channel inherit its mature content setting." - }, { "msgid": "Make sure this code matches the one in the {PRODUCT_NAME} app." }, + { + "msgid": "Make sure this looks right before you send it." + }, { "msgid": "Make the instance yours" }, - { - "msgid": "Manage Posts" - }, - { - "msgid": "Manage Threads" - }, { "msgid": "Manage posts" }, { "msgid": "Manage threads" }, - { - "msgid": "Marked the channel as containing mature content." - }, - { - "msgid": "Marked the channel as mature." - }, - { - "msgid": "Marked the channel as not containing mature content." - }, - { - "msgid": "Marked the channel as not mature." - }, { "msgid": "May cause compatibility issues for viewers. We’re working on improving this." }, - { - "msgid": "Media Channel" - }, - { - "msgid": "Media channel" - }, { "msgid": "Media items you can save for later" }, { "msgid": "Members who can manage posts can add or remove it." }, - { - "msgid": "Members with Manage Posts can add or remove it." - }, { "msgid": "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)." }, @@ -4024,6 +3446,9 @@ { "msgid": "Message published" }, + { + "msgid": "Message you're reporting" + }, { "msgid": "Messages published in #{sourceName} will now appear in #{targetName}." }, @@ -4051,36 +3476,6 @@ { "msgid": "Mirror tiers" }, - { - "msgid": "Moved from {oldCategory} to {newCategory}." - }, - { - "msgid": "Moved from {oldChannel} to {newChannel}." - }, - { - "msgid": "Moved into {category}." - }, - { - "msgid": "Moved out of {category}." - }, - { - "msgid": "Moved the channel from the category {oldCategory} to the category {newCategory}." - }, - { - "msgid": "Moved the channel into the category {category}." - }, - { - "msgid": "Moved the role down in the member list." - }, - { - "msgid": "Moved the role down in the role list." - }, - { - "msgid": "Moved the role up in the member list." - }, - { - "msgid": "Moved the role up in the role list." - }, { "msgid": "Mute other members in this voice channel for everyone." }, @@ -4213,15 +3608,18 @@ { "msgid": "Only people you invite and moderators can see this thread." }, + { + "msgid": "Only report what you honestly believe breaks the rules, and please don't send the same report twice." + }, + { + "msgid": "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." + }, { "msgid": "Only selected members and roles will be able to view this channel." }, { "msgid": "Only the members and roles you pick, plus admins, can view this channel." }, - { - "msgid": "Open Settings" - }, { "msgid": "Open System Settings" }, @@ -4258,9 +3656,6 @@ { "msgid": "Open with {accountName} on {instanceName}" }, - { - "msgid": "Open your browser to finish signing in." - }, { "msgid": "Open your old {PRODUCT_NAME} app and choose Link a new device, then enter the code below." }, @@ -4276,15 +3671,15 @@ { "msgid": "Open {labelText}" }, - { - "msgid": "Open {macosSystemSettingsName} → {macosPrivacyAndSecuritySettingsName} → {macosScreenRecordingPermissionName}, then allow {productName}." - }, { "msgid": "Open {premiumProductFullName}" }, { "msgid": "Open {productName} in your browser" }, + { + "msgid": "Opens in a new tab" + }, { "msgid": "Opens the Members page. Press Space or Enter to open." }, @@ -4300,18 +3695,6 @@ { "msgid": "Original message was deleted." }, - { - "msgid": "Originally banned by {user} on {date}." - }, - { - "msgid": "Originally banned by {user}." - }, - { - "msgid": "Originally banned on {date}." - }, - { - "msgid": "Other Active Threads" - }, { "msgid": "Other active threads" }, @@ -4363,21 +3746,12 @@ { "msgid": "Pick an emoji" }, - { - "msgid": "Pick application audio while sharing a video device on Linux" - }, { "msgid": "Pick at least one tag for this post." }, { "msgid": "Pick the 4-digit number after your username" }, - { - "msgid": "Pick the apps to capture audio from" - }, - { - "msgid": "Pin Neko to the top-right of the chat input instead of following your cursor" - }, { "msgid": "Pin or unpin any message in this channel." }, @@ -4420,12 +3794,6 @@ { "msgid": "Post updates other communities can follow" }, - { - "msgid": "Post updates that other communities can follow" - }, - { - "msgid": "Post updates that other communities can follow into their own channels" - }, { "msgid": "Posts built around images and videos" }, @@ -4447,21 +3815,9 @@ { "msgid": "Prevent <0>{targetUserTag} from sending messages, reacting, and joining voice channels for the specified duration." }, - { - "msgid": "Previous 2 days" - }, { "msgid": "Previous 3 days" }, - { - "msgid": "Previous 4 days" - }, - { - "msgid": "Previous 5 days" - }, - { - "msgid": "Previous 6 days" - }, { "msgid": "Previous channels" }, @@ -4471,9 +3827,6 @@ { "msgid": "Privacy setup nagbar" }, - { - "msgid": "Private" - }, { "msgid": "Private channel" }, @@ -4487,7 +3840,7 @@ "msgid": "Profile banners are not enabled on this instance." }, { - "msgid": "Public" + "msgid": "Profile you're reporting" }, { "msgid": "Public registration is closed." @@ -4501,9 +3854,6 @@ { "msgid": "Published" }, - { - "msgid": "Published to following communities" - }, { "msgid": "Publishing limit reached" }, @@ -4543,9 +3893,6 @@ { "msgid": "Push-to-talk works outside {productName} only after you bind it in your Hyprland config. Add the line for your Hyprland version and replace KEY with the key you want." }, - { - "msgid": "Quick access to an external website or resource" - }, { "msgid": "Quit {appName}, make sure no other copy is running, and open it again." }, @@ -4555,21 +3902,12 @@ { "msgid": "React to post" }, - { - "msgid": "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open." - }, - { - "msgid": "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open." - }, { "msgid": "Read the supplemental privacy notice" }, { "msgid": "Reason (optional)." }, - { - "msgid": "Recently Active" - }, { "msgid": "Recently active" }, @@ -4597,9 +3935,6 @@ { "msgid": "Relaunch to apply" }, - { - "msgid": "Reload {productName} to use the updated modules" - }, { "msgid": "Remove from recent instances" }, @@ -4612,123 +3947,18 @@ { "msgid": "Remove {accountTag}" }, - { - "msgid": "Removed the AFK channel." - }, - { - "msgid": "Removed the avatar." - }, - { - "msgid": "Removed the channel from the category {category}." - }, - { - "msgid": "Removed the chat embed background." - }, - { - "msgid": "Removed the community avatar." - }, - { - "msgid": "Removed the community banner." - }, - { - "msgid": "Removed the community bio." - }, - { - "msgid": "Removed the community deafen." - }, - { - "msgid": "Removed the community icon." - }, - { - "msgid": "Removed the community mute." - }, - { - "msgid": "Removed the community profile avatar." - }, - { - "msgid": "Removed the community profile bio." - }, - { - "msgid": "Removed the community profile pronouns." - }, - { - "msgid": "Removed the community pronouns." - }, - { - "msgid": "Removed the content warning text." - }, - { - "msgid": "Removed the content warning." - }, - { - "msgid": "Removed the custom role icon." - }, - { - "msgid": "Removed the custom warning text." - }, { "msgid": "Removed the default reaction" }, - { - "msgid": "Removed the description {text}." - }, - { - "msgid": "Removed the invite background." - }, - { - "msgid": "Removed the link." - }, - { - "msgid": "Removed the member's community profile avatar." - }, - { - "msgid": "Removed the member's community profile bio." - }, - { - "msgid": "Removed the member's community profile pronouns." - }, - { - "msgid": "Removed the message history threshold." - }, - { - "msgid": "Removed the nickname {nick}." - }, - { - "msgid": "Removed the override for {permissions}." - }, - { - "msgid": "Removed the role icon." - }, - { - "msgid": "Removed the role {role}." - }, - { - "msgid": "Removed the server deafen." - }, - { - "msgid": "Removed the server mute." - }, { "msgid": "Removed the tag {name}" }, - { - "msgid": "Removed the timeout." - }, - { - "msgid": "Removed the topic {text}." - }, - { - "msgid": "Removed the vanity URL {code}." - }, { "msgid": "Removed timeout from {targetUserTag}" }, { "msgid": "Removing the timeout will allow <0>{targetUserTag} to send messages, react, and join voice channels again." }, - { - "msgid": "Renamed the community from {oldName} to {newName}." - }, { "msgid": "Reply to message above" }, @@ -4738,6 +3968,9 @@ { "msgid": "Reply to messages above or below" }, + { + "msgid": "Report profile" + }, { "msgid": "Require a passkey as your second factor" }, @@ -4747,9 +3980,6 @@ { "msgid": "Require people to select tags when posting" }, - { - "msgid": "Required 2FA for moderation actions." - }, { "msgid": "Required a tag on new posts" }, @@ -4760,13 +3990,7 @@ "msgid": "Requires a claimed account." }, { - "msgid": "Requires an account with a username and password that's at least 5 minutes old." - }, - { - "msgid": "Requires an account with a username and password." - }, - { - "msgid": "Reset the member list position for the role." + "msgid": "Resend ({duration})" }, { "msgid": "Resize expression picker from bottom left" @@ -4840,30 +4064,15 @@ { "msgid": "Resize sidebar" }, - { - "msgid": "Resumed invites." - }, { "msgid": "Retry" }, - { - "msgid": "Review" - }, - { - "msgid": "Review microphone, camera, screen recording, and Input Monitoring access." - }, { "msgid": "Review privacy settings" }, { "msgid": "Review the permissions {productName} uses for voice, video, screen sharing, and shortcuts." }, - { - "msgid": "Review your choices below, then finish. This saves the configuration, opens the instance, and reloads the app." - }, - { - "msgid": "Revoked {permissions}." - }, { "msgid": "Run the instance as one community instead of many. This can only be enabled now, during setup." }, @@ -4897,18 +4106,6 @@ { "msgid": "Screen share privacy" }, - { - "msgid": "Screen sharing failed, but Fluxer could not confirm that every capture path stopped. Use Stop Sharing or disconnect from the call before continuing." - }, - { - "msgid": "Screenshare" - }, - { - "msgid": "Search filter: {filter}" - }, - { - "msgid": "Search for {query}" - }, { "msgid": "Search is getting ready for this community. Trying again shortly..." }, @@ -4985,20 +4182,11 @@ "msgid": "Send messages, images, GIFs and emoji" }, { - "msgid": "Send messages, images, GIFs, and emoji" - }, - { - "msgid": "Sending {resolution} at {frameRate} FPS with {codec}" - }, - { - "msgid": "Sends both channels of a stereo microphone. Needs all processing off and a channel at 128 kbps or higher." + "msgid": "Send report" }, { "msgid": "Sends both channels of a stereo microphone. Needs all processing off and a channel at 64 kbps or higher." }, - { - "msgid": "Sends both channels of a stereo microphone. Works only with no suppression or standard suppression." - }, { "msgid": "Sends your microphone audio with no suppression." }, @@ -5014,123 +4202,24 @@ { "msgid": "Session expired" }, - { - "msgid": "Set a community avatar." - }, - { - "msgid": "Set a community banner." - }, - { - "msgid": "Set a community profile avatar." - }, - { - "msgid": "Set a community profile banner." - }, - { - "msgid": "Set a custom role icon." - }, - { - "msgid": "Set a member list position for the role." - }, { "msgid": "Set by the {preset} preset. Picking a value here switches to Custom." }, - { - "msgid": "Set mature content to follow the community setting." - }, - { - "msgid": "Set slowmode to {duration}." - }, - { - "msgid": "Set the AFK channel to {channel}." - }, - { - "msgid": "Set the audio quality to {kbps} kbps." - }, - { - "msgid": "Set the community bio to {text}." - }, - { - "msgid": "Set the community profile bio to {text}." - }, - { - "msgid": "Set the community profile pronouns to {text}." - }, - { - "msgid": "Set the community pronouns to {text}." - }, - { - "msgid": "Set the content warning text to {text}." - }, - { - "msgid": "Set the custom warning text to {text}." - }, { "msgid": "Set the default reaction to {emoji}" }, - { - "msgid": "Set the description to {text}." - }, - { - "msgid": "Set the link to {url}." - }, - { - "msgid": "Set the member's community profile bio to {text}." - }, - { - "msgid": "Set the member's community profile pronouns to {text}." - }, - { - "msgid": "Set the message history threshold to {date}." - }, - { - "msgid": "Set the nickname to {nick}." - }, - { - "msgid": "Set the role icon to {emoji}." - }, - { - "msgid": "Set the system channel to {channel}." - }, - { - "msgid": "Set the topic to {text}." - }, - { - "msgid": "Set the vanity URL to {code}." - }, - { - "msgid": "Set the voice region to automatic." - }, - { - "msgid": "Set the voice region to {region}." - }, - { - "msgid": "Set to send {resolution} at {frameRate} FPS with {codec}" - }, { "msgid": "Set up" }, - { - "msgid": "Set up later in User Settings" - }, { "msgid": "Set up {productName}" }, - { - "msgid": "Shape the social model" - }, { "msgid": "Share full-length videos and big files without shrinking them first. Free accounts can send up to {freeSize}." }, - { - "msgid": "Share images and videos as posts with their own discussions" - }, { "msgid": "Share screen" }, - { - "msgid": "Share screens and windows." - }, { "msgid": "Share stream audio" }, @@ -5152,9 +4241,6 @@ { "msgid": "Sharp text at up to 4K, up to 15 FPS" }, - { - "msgid": "Sharper text at 720p, 30 FPS" - }, { "msgid": "Shortcut to an external website" }, @@ -5164,21 +4250,9 @@ { "msgid": "Show a one-click shortcut for copying custom emojis and stickers from communities that allow it" }, - { - "msgid": "Show code" - }, { "msgid": "Show connection volume controls" }, - { - "msgid": "Show embedded previews for links they send in this channel." - }, - { - "msgid": "Show embedded previews for links they send." - }, - { - "msgid": "Show fewer filters" - }, { "msgid": "Show guidelines" }, @@ -5197,15 +4271,9 @@ { "msgid": "Show store folder" }, - { - "msgid": "Show {count, plural, one {# more filter} other {# more filters}}" - }, { "msgid": "Showed media download options" }, - { - "msgid": "Showed members with this role in their own section in the member list." - }, { "msgid": "Shown on every post so people can react with one click." }, @@ -5299,15 +4367,9 @@ { "msgid": "Smoother video" }, - { - "msgid": "Some stream settings could not be applied to your live stream." - }, { "msgid": "Someone gifted you {premiumProductName}. Your perks stay active until {date}." }, - { - "msgid": "Something is limiting this stream, so viewers are getting fewer frames than you asked for." - }, { "msgid": "Something went wrong while changing your price. Please try again in a moment." }, @@ -5317,9 +4379,6 @@ { "msgid": "Something went wrong: {detail}" }, - { - "msgid": "Sort & View" - }, { "msgid": "Sort & view" }, @@ -5341,30 +4400,24 @@ { "msgid": "Started by {name}" }, - { - "msgid": "Started displaying members with this role separately." - }, { "msgid": "Static Neko" }, { "msgid": "Stay focused on a conversation with a thread, a temporary text channel." }, + { + "msgid": "Step 5" + }, { "msgid": "Step {current} of {total}" }, { "msgid": "Stereo microphone" }, - { - "msgid": "Sticker cloning enabled" - }, { "msgid": "Still Neko" }, - { - "msgid": "Still not applied after you turned it on?" - }, { "msgid": "Still waiting for screen recording access" }, @@ -5383,54 +4436,15 @@ { "msgid": "Stop using passkeys for two-factor authentication?" }, - { - "msgid": "Stopped allowing anyone to mention this role." - }, - { - "msgid": "Stopped allowing flexible text channel names." - }, - { - "msgid": "Stopped allowing others to clone this community's emojis." - }, - { - "msgid": "Stopped allowing others to clone this community's stickers." - }, - { - "msgid": "Stopped displaying members with this role separately." - }, - { - "msgid": "Stopped hiding join messages in the system channel." - }, - { - "msgid": "Stopped hiding the community owner crown." - }, - { - "msgid": "Stopped overriding {permissions}." - }, - { - "msgid": "Stopped requiring 2FA for moderation actions." - }, { "msgid": "Stopped requiring a tag on new posts" }, - { - "msgid": "Stopped the member from hearing others in this community." - }, { "msgid": "Stream in 4K at 60 FPS" }, - { - "msgid": "Stream is not keeping up" - }, { "msgid": "Stream quality" }, - { - "msgid": "Stream settings were adjusted" - }, - { - "msgid": "Strongest neural filter for speech, limits audio to the speech range." - }, { "msgid": "Subscribe" }, @@ -5464,9 +4478,6 @@ { "msgid": "System-wide shortcuts could not be set up." }, - { - "msgid": "System-wide: Not assigned" - }, { "msgid": "System-wide: not assigned" }, @@ -5479,15 +4490,21 @@ { "msgid": "Tags help people find posts. You can add up to {count} tags." }, - { - "msgid": "Talk in calls and test your input." - }, { "msgid": "Tap Share, then Add to Home Screen." }, { "msgid": "Text is rendered with grayscale antialiasing instead of ClearType while transparency is enabled, so it will look softer." }, + { + "msgid": "Thanks for flagging this" + }, + { + "msgid": "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." + }, + { + "msgid": "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." + }, { "msgid": "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." }, @@ -5497,57 +4514,9 @@ { "msgid": "That image could not be used. Try a different file." }, - { - "msgid": "The ban had already expired on {date}." - }, - { - "msgid": "The ban was scheduled to expire on {date}." - }, - { - "msgid": "The ban was set to expire on {date}." - }, - { - "msgid": "The browser is sending {deliveredResolution} instead of {resolution}." - }, { "msgid": "The camera preview is still stopping. Try streaming again in a moment." }, - { - "msgid": "The emoji was uploaded by {user}." - }, - { - "msgid": "The invite was created by {user} on {date}." - }, - { - "msgid": "The invite was created by {user}." - }, - { - "msgid": "The invite was created on {date}." - }, - { - "msgid": "The invite was never used." - }, - { - "msgid": "The invite was scheduled to expire on {date}." - }, - { - "msgid": "The invite was set to allow unlimited uses." - }, - { - "msgid": "The invite was set to expire after {duration}." - }, - { - "msgid": "The invite was set to expire on {date}." - }, - { - "msgid": "The invite was set to grant temporary membership." - }, - { - "msgid": "The invite was set to never expire." - }, - { - "msgid": "The member is no longer temporary." - }, { "msgid": "The member to target." }, @@ -5561,13 +4530,7 @@ "msgid": "The official Fluxer mobile apps receive notifications through Fluxer's push relay, which hands them to Apple and Google. Self-hosted UnifiedPush and ntfy endpoints never reach the relay and need no agreement." }, { - "msgid": "The override allowed {permissions}." - }, - { - "msgid": "The override denied {permissions}." - }, - { - "msgid": "The role granted {permissions}." + "msgid": "The report form changed. Please start again." }, { "msgid": "The sign-in request expired before your browser approved it." @@ -5575,18 +4538,6 @@ { "msgid": "The sign-in was cancelled in your browser." }, - { - "msgid": "The sticker was uploaded by {user}." - }, - { - "msgid": "The system gave {target} the role {role}." - }, - { - "msgid": "The system removed the role {role} from {target}." - }, - { - "msgid": "The webhook was created by {user}." - }, { "msgid": "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." }, @@ -5596,6 +4547,9 @@ { "msgid": "The {PRODUCT_NAME} app was not signed in. You can close this tab." }, + { + "msgid": "The {productName} safety team will review your report. We won't reveal that it came from you." + }, { "msgid": "There are no posts yet" }, @@ -5605,9 +4559,6 @@ { "msgid": "There are no threads" }, - { - "msgid": "There are no threads." - }, { "msgid": "These options change how people use the instance. Some can only be chosen during setup." }, @@ -5617,9 +4568,6 @@ { "msgid": "This animation is too long or too large to crop. Try a shorter or smaller file." }, - { - "msgid": "This browser can't crop animated {AVIF_FORMAT_LABEL} files. Upload a GIF or WebP instead." - }, { "msgid": "This browser can't crop animated {avifFormatLabel} files. Upload a GIF or WebP instead." }, @@ -5635,18 +4583,9 @@ { "msgid": "This channel has a content warning. Updates can only go to channels with a content warning or an age restriction." }, - { - "msgid": "This community has published a lot of messages recently. Try again in a few minutes." - }, - { - "msgid": "This community has published a lot of messages recently. Try again in {duration}." - }, { "msgid": "This desktop doesn't offer system-wide shortcuts. Shortcuts still work while {productName} is focused." }, - { - "msgid": "This device could not keep up with {targetResolution} at {targetFrameRate} FPS last time, so your stream started at {resolution} at {frameRate} FPS." - }, { "msgid": "This emoji is from" }, @@ -5662,24 +4601,12 @@ { "msgid": "This instance already uses usernames to sign in. This can no longer change." }, - { - "msgid": "This instance currently allows screen share up to 720p at 30 FPS." - }, - { - "msgid": "This instance has no accounts yet. The first account you create automatically becomes the administrator. Create it now, then return here to finish setup." - }, { "msgid": "This invite is on {instanceName}, where you also have an account." }, - { - "msgid": "This is a custom emoji from" - }, { "msgid": "This is a custom sticker from a community." }, - { - "msgid": "This is a custom sticker from a community. Ask the author for an invite to use this sticker." - }, { "msgid": "This is an age-restricted channel. Updates can only go to age-restricted channels." }, @@ -5692,9 +4619,6 @@ { "msgid": "This is your last passkey and passkeys are your second factor. Deleting it turns off two-factor authentication for your account, and your current backup codes will stop working." }, - { - "msgid": "This is your last passkey and passkeys are your second factor. Once it's gone you'll need a backup code to sign in, and you'll lose two-factor authentication on this account." - }, { "msgid": "This is your last passkey. Once it's gone you won't be able to use a passkey as your second factor." }, @@ -5737,9 +4661,6 @@ { "msgid": "Thread" }, - { - "msgid": "Thread Members" - }, { "msgid": "Thread created" }, @@ -5764,12 +4685,6 @@ { "msgid": "Threads" }, - { - "msgid": "Timed out the member until {date}." - }, - { - "msgid": "Timed out until {date}." - }, { "msgid": "Timed out {targetUserTag}" }, @@ -5783,7 +4698,7 @@ "msgid": "To change the keys, open your desktop's keyboard shortcut settings." }, { - "msgid": "Transferred community ownership to {user}." + "msgid": "Too many codes sent. Wait {duration} and try again." }, { "msgid": "Try a different name or check the other tab." @@ -5791,9 +4706,6 @@ { "msgid": "Try different words or clear the tag filter." }, - { - "msgid": "Try full quality again" - }, { "msgid": "Turn off audio sharing for this source or try again in a moment." }, @@ -5803,30 +4715,6 @@ { "msgid": "Turn on a camera or share a screen in this voice channel." }, - { - "msgid": "Turned off mature content." - }, - { - "msgid": "Turned off slowmode." - }, - { - "msgid": "Turned off the content warning." - }, - { - "msgid": "Turned off the detached banner." - }, - { - "msgid": "Turned off the member's microphone in this community." - }, - { - "msgid": "Turned on mature content." - }, - { - "msgid": "Turned on the content warning." - }, - { - "msgid": "Turned the member's microphone back on in this community." - }, { "msgid": "Two-factor backup codes" }, @@ -5836,9 +4724,6 @@ { "msgid": "Unable to send verification code" }, - { - "msgid": "Unavailable" - }, { "msgid": "Unfollow" }, @@ -5929,18 +4814,12 @@ { "msgid": "Use stickers from other communities." }, - { - "msgid": "Use system-wide push-to-talk and shortcuts." - }, { "msgid": "Use the Up and Down arrow keys to move between items and Space or Enter to open one. Where a tab has sections, the Right arrow expands it and the Left arrow collapses it." }, { "msgid": "Use the official Fluxer instance" }, - { - "msgid": "Use video and camera previews." - }, { "msgid": "Use your operating system's spellchecker when available. Otherwise, use {productName}'s in-app dictionaries." }, @@ -5992,18 +4871,12 @@ { "msgid": "View as" }, - { - "msgid": "Virtual microphone" - }, { "msgid": "Voice uses your system output device in this browser. Change it in your system settings." }, { "msgid": "Volume sliders" }, - { - "msgid": "Waiting for browser approval." - }, { "msgid": "Waiting for your desktop…" }, @@ -6034,9 +4907,6 @@ { "msgid": "We'll send a verification code to your email before you can view your backup codes." }, - { - "msgid": "Welcome" - }, { "msgid": "Welcome to {productName}" }, @@ -6046,6 +4916,9 @@ { "msgid": "What you're sharing isn't updating" }, + { + "msgid": "What's the reason for your report?" + }, { "msgid": "When launched at login, start in the menu bar instead of opening the window" }, @@ -6073,9 +4946,6 @@ { "msgid": "Works while {productName} is focused" }, - { - "msgid": "You asked for {resolution} at {frameRate} FPS" - }, { "msgid": "You can close this tab" }, @@ -6088,9 +4958,6 @@ { "msgid": "You can start another thread in {seconds, plural, one {# second} other {# seconds}}." }, - { - "msgid": "You can turn these on later in User Settings under {settingsTabLabel}." - }, { "msgid": "You can't manage webhooks in any community. Ask an admin to follow this channel." }, @@ -6109,9 +4976,18 @@ { "msgid": "You're a {premiumProductName} member. Thanks for supporting an independent communication platform." }, + { + "msgid": "You're sending reports too quickly. Try again later." + }, { "msgid": "You're signed in" }, + { + "msgid": "You've already reported this message." + }, + { + "msgid": "You've already reported this profile today." + }, { "msgid": "YouTube enrichment" }, @@ -6128,17 +5004,11 @@ "msgid": "Your accounts and settings have not been changed or deleted." }, { - "msgid": "Your capture device is sending {deliveredResolution} instead of {resolution}." + "msgid": "Your answers" }, { "msgid": "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." }, - { - "msgid": "Your connection cannot keep up. Viewers get about {deliveredFrameRate} of {frameRate} FPS at {resolution}." - }, - { - "msgid": "Your connection cannot keep up. Your stream is set to {frameRate} FPS at {resolution} and viewers are getting about {deliveredFrameRate} FPS." - }, { "msgid": "Your current kit stops working as soon as the new one is created." }, @@ -6154,18 +5024,6 @@ { "msgid": "Your desktop runs these shortcuts even while {productName} is not focused." }, - { - "msgid": "Your device cannot keep up. Viewers get about {deliveredFrameRate} of {frameRate} FPS at {resolution}." - }, - { - "msgid": "Your device cannot keep up. Your stream is set to {frameRate} FPS at {resolution} and viewers are getting about {deliveredFrameRate} FPS." - }, - { - "msgid": "Your device could not keep up, so your stream now sends {frameRate} FPS to keep {resolution} sharp." - }, - { - "msgid": "Your device could not keep up, so your stream now sends {resolution} to keep {frameRate} FPS smooth." - }, { "msgid": "Your device will ask you to save an updated passkey for {name}. It replaces the old one." }, @@ -6205,6 +5063,9 @@ { "msgid": "Your old recovery kit no longer works. Store this new one somewhere safe." }, + { + "msgid": "Your options" + }, { "msgid": "Your recovery kit" }, @@ -6212,10 +5073,10 @@ "msgid": "Your recovery kit is ready. You can continue." }, { - "msgid": "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." + "msgid": "Your report didn't go through. Try again." }, { - "msgid": "Your source is producing about {sourceFrameRate} FPS" + "msgid": "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." }, { "msgid": "Your subscription" @@ -6229,9 +5090,6 @@ { "msgid": "Your subscription still ends on <0>{cancelDate}. The current price is now {listPriceNewLabel}. If you reactivate, you can switch to it from here." }, - { - "msgid": "Your video encoder stopped, so your stream switched to {codec}." - }, { "msgid": "Your {premiumProductName} perks have ended. Subscribe again to bring them back." }, @@ -6247,30 +5105,18 @@ { "msgid": "deleted-role" }, - { - "msgid": "farewell" - }, - { - "msgid": "greeting" - }, { "msgid": "hyprland.conf (before Hyprland 0.55)" }, { "msgid": "hyprland.lua (Hyprland 0.55 and later)" }, - { - "msgid": "macOS" - }, { "msgid": "macOS permissions" }, { "msgid": "members" }, - { - "msgid": "not" - }, { "msgid": "online" }, @@ -6289,534 +5135,75 @@ { "msgid": "{PRODUCT_NAME} needs to restart for the title bar change to take effect." }, - { - "msgid": "{actor} added a permission override for @everyone in {channel}." - }, - { - "msgid": "{actor} added a permission override for the role {role} in {channel}." - }, - { - "msgid": "{actor} added a permission override for {user} in {channel}." - }, - { - "msgid": "{actor} added a sticker." - }, - { - "msgid": "{actor} added an emoji." - }, - { - "msgid": "{actor} added the bot {target} as a temporary member." - }, - { - "msgid": "{actor} added the bot {target}." - }, - { - "msgid": "{actor} added the emoji {emoji}." - }, - { - "msgid": "{actor} added the sticker {name}." - }, - { - "msgid": "{actor} applied a community deafen to {target}." - }, - { - "msgid": "{actor} applied a community mute to {target}." - }, - { - "msgid": "{actor} banned {target} for {duration}." - }, - { - "msgid": "{actor} banned {target}." - }, { "msgid": "{actor} changed the permission overrides of the announcement channel {channel}" }, - { - "msgid": "{actor} changed the permission overrides of the category {channel}." - }, - { - "msgid": "{actor} changed the permission overrides of the channel {channel}." - }, { "msgid": "{actor} changed the permission overrides of the forum channel {channel}" }, - { - "msgid": "{actor} changed the permission overrides of the link channel {channel}." - }, { "msgid": "{actor} changed the permission overrides of the media channel {channel}" }, - { - "msgid": "{actor} changed the permission overrides of the text channel {channel}." - }, - { - "msgid": "{actor} changed the permission overrides of the voice channel {channel}." - }, - { - "msgid": "{actor} changed the timeout end date for {target} to {date}." - }, - { - "msgid": "{actor} changed the timeout for {target} to end on {date}." - }, - { - "msgid": "{actor} changed the vanity URL from {oldCode} to {newCode}." - }, - { - "msgid": "{actor} changed their community avatar." - }, - { - "msgid": "{actor} changed their community banner." - }, - { - "msgid": "{actor} changed their community bio to {text}." - }, - { - "msgid": "{actor} changed their community profile avatar." - }, - { - "msgid": "{actor} changed their community profile banner." - }, - { - "msgid": "{actor} changed their community profile bio to {text}." - }, - { - "msgid": "{actor} changed {target}'s block on sending messages, reacting and joining voice to end at {date}." - }, - { - "msgid": "{actor} created a webhook." - }, { "msgid": "{actor} created the announcement channel {channel}" }, { "msgid": "{actor} created the announcement channel {channel} in {category}" }, - { - "msgid": "{actor} created the category {channel}." - }, - { - "msgid": "{actor} created the channel {channel} in {category}." - }, - { - "msgid": "{actor} created the channel {channel}." - }, { "msgid": "{actor} created the forum channel {channel}" }, { "msgid": "{actor} created the forum channel {channel} in {category}" }, - { - "msgid": "{actor} created the invite {code} for {channel}." - }, - { - "msgid": "{actor} created the invite {code}." - }, - { - "msgid": "{actor} created the link channel {channel} in {category}." - }, - { - "msgid": "{actor} created the link channel {channel}." - }, { "msgid": "{actor} created the media channel {channel}" }, { "msgid": "{actor} created the media channel {channel} in {category}" }, - { - "msgid": "{actor} created the role {role}." - }, - { - "msgid": "{actor} created the text channel {channel} in {category}." - }, - { - "msgid": "{actor} created the text channel {channel}." - }, - { - "msgid": "{actor} created the voice channel {channel} in {category}." - }, - { - "msgid": "{actor} created the voice channel {channel}." - }, - { - "msgid": "{actor} created the webhook {name} in {channel}." - }, - { - "msgid": "{actor} created the webhook {name}." - }, - { - "msgid": "{actor} deleted a message in {channel}." - }, - { - "msgid": "{actor} deleted a message." - }, - { - "msgid": "{actor} deleted a sticker." - }, - { - "msgid": "{actor} deleted a webhook." - }, - { - "msgid": "{actor} deleted an emoji." - }, - { - "msgid": "{actor} deleted some messages in {channel}." - }, - { - "msgid": "{actor} deleted some messages." - }, { "msgid": "{actor} deleted the announcement channel {channel}" }, - { - "msgid": "{actor} deleted the category {channel}." - }, - { - "msgid": "{actor} deleted the channel {channel}." - }, - { - "msgid": "{actor} deleted the emoji {emoji}." - }, { "msgid": "{actor} deleted the forum channel {channel}" }, - { - "msgid": "{actor} deleted the invite {code} for {channel}." - }, - { - "msgid": "{actor} deleted the invite {code}." - }, - { - "msgid": "{actor} deleted the link channel {channel}." - }, { "msgid": "{actor} deleted the media channel {channel}" }, - { - "msgid": "{actor} deleted the role {role}." - }, - { - "msgid": "{actor} deleted the sticker {name}." - }, - { - "msgid": "{actor} deleted the text channel {channel}." - }, { "msgid": "{actor} deleted the thread {channel}" }, - { - "msgid": "{actor} deleted the voice channel {channel}." - }, - { - "msgid": "{actor} deleted the webhook {name}." - }, - { - "msgid": "{actor} deleted {count, plural, one {# message} other {# messages}} in {channel}." - }, - { - "msgid": "{actor} deleted {count, plural, one {# message} other {# messages}}." - }, - { - "msgid": "{actor} disconnected from voice." - }, - { - "msgid": "{actor} disconnected from {channel}." - }, - { - "msgid": "{actor} disconnected {target} from voice." - }, - { - "msgid": "{actor} disconnected {target} from {channel}." - }, { "msgid": "{actor} followed an announcement channel into {channel}" }, - { - "msgid": "{actor} gave {target} the role {role}." - }, - { - "msgid": "{actor} kicked {target}." - }, - { - "msgid": "{actor} let {target} hear others in this community again." - }, - { - "msgid": "{actor} made a change that this version of the app cannot show." - }, - { - "msgid": "{actor} moved from {oldChannel} to {newChannel}." - }, - { - "msgid": "{actor} moved the role {role} down in the member list." - }, - { - "msgid": "{actor} moved the role {role} down in the role list." - }, - { - "msgid": "{actor} moved the role {role} up in the member list." - }, - { - "msgid": "{actor} moved the role {role} up in the role list." - }, - { - "msgid": "{actor} moved to a different voice channel." - }, - { - "msgid": "{actor} moved to {channel}." - }, - { - "msgid": "{actor} moved {target} from {oldChannel} to {newChannel}." - }, - { - "msgid": "{actor} moved {target} to a different voice channel." - }, - { - "msgid": "{actor} moved {target} to {channel}." - }, - { - "msgid": "{actor} paused invites." - }, - { - "msgid": "{actor} pinned a message in {channel}." - }, - { - "msgid": "{actor} pinned a message." - }, - { - "msgid": "{actor} removed the community deafen from {target}." - }, - { - "msgid": "{actor} removed the community mute from {target}." - }, - { - "msgid": "{actor} removed the nickname {nick} from {target}." - }, - { - "msgid": "{actor} removed the permission override for @everyone from {channel}." - }, - { - "msgid": "{actor} removed the permission override for the role {role} from {channel}." - }, - { - "msgid": "{actor} removed the permission override for {user} from {channel}." - }, - { - "msgid": "{actor} removed the role {role} from {target}." - }, - { - "msgid": "{actor} removed the server deafen from {target}." - }, - { - "msgid": "{actor} removed the server mute from {target}." - }, - { - "msgid": "{actor} removed the timeout for {target}." - }, - { - "msgid": "{actor} removed the vanity URL {code}." - }, - { - "msgid": "{actor} removed their community avatar." - }, - { - "msgid": "{actor} removed their community banner." - }, - { - "msgid": "{actor} removed their community bio." - }, - { - "msgid": "{actor} removed their community profile avatar." - }, - { - "msgid": "{actor} removed their community profile banner." - }, - { - "msgid": "{actor} removed their community profile bio." - }, - { - "msgid": "{actor} removed their community profile pronouns." - }, - { - "msgid": "{actor} removed their community pronouns." - }, - { - "msgid": "{actor} removed their nickname {nick}." - }, { "msgid": "{actor} renamed the announcement channel {oldName} to {newName}" }, - { - "msgid": "{actor} renamed the community from {oldName} to {newName}." - }, - { - "msgid": "{actor} renamed the emoji {oldEmoji} to {newEmoji}." - }, { "msgid": "{actor} renamed the forum channel {oldName} to {newName}" }, { "msgid": "{actor} renamed the media channel {oldName} to {newName}" }, - { - "msgid": "{actor} renamed the role {oldName} to {newName}." - }, - { - "msgid": "{actor} renamed the sticker {oldName} to {newName}." - }, - { - "msgid": "{actor} renamed the webhook {oldName} to {newName}." - }, - { - "msgid": "{actor} reset the member list position for the role {role}." - }, - { - "msgid": "{actor} resumed invites." - }, - { - "msgid": "{actor} server deafened {target}." - }, - { - "msgid": "{actor} server muted {target}." - }, - { - "msgid": "{actor} set a community avatar." - }, - { - "msgid": "{actor} set a community banner." - }, - { - "msgid": "{actor} set a community profile avatar." - }, - { - "msgid": "{actor} set a community profile banner." - }, - { - "msgid": "{actor} set a member list position for the role {role}." - }, - { - "msgid": "{actor} set the nickname of {target} to {nick}." - }, - { - "msgid": "{actor} set the vanity URL to {code}." - }, - { - "msgid": "{actor} set their community bio to {text}." - }, - { - "msgid": "{actor} set their community profile avatar." - }, - { - "msgid": "{actor} set their community profile banner." - }, - { - "msgid": "{actor} set their community profile bio to {text}." - }, - { - "msgid": "{actor} set their community profile pronouns to {text}." - }, - { - "msgid": "{actor} set their community pronouns to {text}." - }, { "msgid": "{actor} started the thread {channel}" }, { "msgid": "{actor} stopped following an announcement channel in {channel}" }, - { - "msgid": "{actor} stopped {target} from hearing others in this community." - }, - { - "msgid": "{actor} timed out {target} until {date}." - }, - { - "msgid": "{actor} transferred community ownership to {user}." - }, - { - "msgid": "{actor} turned off {target}'s microphone in this community." - }, - { - "msgid": "{actor} turned {target}'s microphone back on in this community." - }, - { - "msgid": "{actor} unbanned {target}." - }, - { - "msgid": "{actor} unpinned a message in {channel}." - }, - { - "msgid": "{actor} unpinned a message." - }, - { - "msgid": "{actor} updated a sticker." - }, - { - "msgid": "{actor} updated a webhook." - }, - { - "msgid": "{actor} updated an emoji." - }, { "msgid": "{actor} updated the announcement channel {channel}" }, - { - "msgid": "{actor} updated the category {channel}." - }, - { - "msgid": "{actor} updated the channel {channel}." - }, - { - "msgid": "{actor} updated the emoji {emoji}." - }, { "msgid": "{actor} updated the forum channel {channel}" }, - { - "msgid": "{actor} updated the invite {code}." - }, - { - "msgid": "{actor} updated the link channel {channel}." - }, { "msgid": "{actor} updated the media channel {channel}" }, - { - "msgid": "{actor} updated the permission override for @everyone in {channel}." - }, - { - "msgid": "{actor} updated the permission override for the role {role} in {channel}." - }, - { - "msgid": "{actor} updated the permission override for {user} in {channel}." - }, - { - "msgid": "{actor} updated the role {role}." - }, - { - "msgid": "{actor} updated the roles of {target}." - }, - { - "msgid": "{actor} updated the sticker {name}." - }, - { - "msgid": "{actor} updated the text channel {channel}." - }, { "msgid": "{actor} updated the thread {channel}" }, - { - "msgid": "{actor} updated the voice channel {channel}." - }, - { - "msgid": "{actor} updated the webhook {name}." - }, - { - "msgid": "{actor} updated their community profile." - }, - { - "msgid": "{actor} updated {target}." - }, { "msgid": "{appName} can't reach its servers. It will keep trying in the background." }, @@ -6835,18 +5222,12 @@ { "msgid": "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}" }, - { - "msgid": "{codec} cannot keep up on this device. Set the codec to Automatic in Advanced settings to allow a faster one." - }, { "msgid": "{context} · {accountName}" }, { "msgid": "{count, plural, =0 {∞ No limit} one {# participant} other {# participants}}" }, - { - "msgid": "{count, plural, one {# Message} other {# Messages}}" - }, { "msgid": "{count, plural, one {# channel follows} other {# channels follow}} this channel. Converting it to a text channel removes those follows." }, @@ -6865,9 +5246,6 @@ { "msgid": "{count, plural, one {# message} other {# messages}}" }, - { - "msgid": "{count, plural, one {# minute} other {# minutes}}" - }, { "msgid": "{count, plural, one {# more permission} other {# more permissions}}" }, @@ -6877,12 +5255,6 @@ { "msgid": "{count, plural, one {# video} other {# videos}}" }, - { - "msgid": "{count, plural, one {The invite was limited to # use.} other {The invite was limited to # uses.}}" - }, - { - "msgid": "{count, plural, one {The invite was used # time.} other {The invite was used # times.}}" - }, { "msgid": "{domain} runs a newer version of Fluxer than this app. Update Fluxer, then try again." }, @@ -6907,9 +5279,6 @@ { "msgid": "{name} copy" }, - { - "msgid": "{pinnedCodec} is not available on this device, so your stream uses {codec}." - }, { "msgid": "{premiumProductName} costs less now. Switch from {currentPrice} to {newPrice} a month starting {effectiveDate}, and nothing is charged today." }, @@ -6973,9 +5342,6 @@ { "msgid": "{productName} registered its shortcuts with Hyprland. Bind them in your Hyprland config to use them while {productName} is not focused." }, - { - "msgid": "{productName} uses these for voice, video, screen sharing, and shortcuts. Grant all four to continue." - }, { "msgid": "{productName} wordmark" }, @@ -6997,42 +5363,6 @@ { "msgid": "{yearlyPrice}/yr" }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Changed the community banner." - }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Changed the community profile banner." - }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Changed the member's community profile banner." - }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Removed the community banner." - }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Removed the community profile banner." - }, - { - "msgctxt": "audit-log-member-profile", - "msgid": "Removed the member's community profile banner." - }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Balanced" - }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Classic" - }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Focused" - }, { "msgctxt": "noise-suppression-option", "msgid": "Noise gate" @@ -7056,25 +5386,12 @@ { "msgctxt": "voice-connection-status", "msgid": "Dismiss" - }, - { - "msgctxt": "voice-connection-status", - "msgid": "Retry" } ], "es-419": [ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -7108,9 +5425,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Color" }, @@ -7177,18 +5491,12 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, { "msgid": "No" }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -7210,18 +5518,12 @@ { "msgid": "Roles" }, - { - "msgid": "Roles ({roleCount})" - }, { "msgid": "Searching..." }, { "msgid": "Social" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, @@ -7288,9 +5590,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -7303,27 +5602,15 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, { "msgid": "spoiler" }, { "msgid": "sticker" }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# emoji} other {# emojis}}" - }, { "msgid": "{count, plural, one {# video} other {# videos}}" }, @@ -7336,12 +5623,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{length} stickers" - }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -7354,9 +5635,6 @@ { "msgid": "{tokenCount, plural, one {# token} other {# tokens}}" }, - { - "msgid": "{totalCount} total" - }, { "msgid": "{zoomPercent}%" }, @@ -7533,15 +5811,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -7572,9 +5841,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Color" }, @@ -7605,9 +5871,6 @@ { "msgid": "Fluxer" }, - { - "msgid": "Gateway" - }, { "msgid": "General" }, @@ -7635,9 +5898,6 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -7665,9 +5925,6 @@ { "msgid": "Roles" }, - { - "msgid": "Roles ({roleCount})" - }, { "msgid": "Searching..." }, @@ -7722,9 +5979,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -7737,18 +5991,12 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, { "msgid": "spoiler" }, { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# emoji} other {# emojis}}" - }, { "msgid": "{fps} FPS" }, @@ -7758,9 +6006,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -7948,15 +6193,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -7975,9 +6211,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -8020,9 +6253,6 @@ { "msgid": "Media" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -8041,9 +6271,6 @@ { "msgid": "Ping" }, - { - "msgid": "Plutonium" - }, { "msgid": "Premium" }, @@ -8089,9 +6316,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -8104,12 +6328,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -8125,9 +6343,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -8369,9 +6584,6 @@ { "msgid": "Actions" }, - { - "msgid": "Admin" - }, { "msgid": "Alt" }, @@ -8384,9 +6596,6 @@ { "msgid": "Applications" }, - { - "msgid": "Archives" - }, { "msgid": "Audio" }, @@ -8417,9 +6626,6 @@ { "msgid": "Capture" }, - { - "msgid": "Cisco" - }, { "msgid": "Client" }, @@ -8438,9 +6644,6 @@ { "msgid": "Compact" }, - { - "msgid": "Compact (400x300)" - }, { "msgid": "Composer" }, @@ -8471,9 +6674,6 @@ { "msgid": "Documentation" }, - { - "msgid": "Expiration" - }, { "msgid": "Expressions" }, @@ -8516,36 +6716,21 @@ { "msgid": "Inviter" }, - { - "msgid": "Latitude" - }, - { - "msgid": "Local {localizedCurrencyLabel}" - }, { "msgid": "Logo" }, - { - "msgid": "Longitude" - }, { "msgid": "Luxembourg" }, { "msgid": "Markdown" }, - { - "msgid": "Mature" - }, { "msgid": "Mentions" }, { "msgid": "Message" }, - { - "msgid": "Message @" - }, { "msgid": "Messages" }, @@ -8555,9 +6740,6 @@ { "msgid": "Microphone ({deviceLabel})" }, - { - "msgid": "Minutes" - }, { "msgid": "Narration" }, @@ -8570,9 +6752,6 @@ { "msgid": "Neko" }, - { - "msgid": "Normal" - }, { "msgid": "Note" }, @@ -8588,9 +6767,6 @@ { "msgid": "Options" }, - { - "msgid": "Page {pageNumber}" - }, { "msgid": "Participants" }, @@ -8603,18 +6779,12 @@ { "msgid": "Photo" }, - { - "msgid": "Phrase" - }, { "msgid": "PiP" }, { "msgid": "Ping" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -8627,9 +6797,6 @@ { "msgid": "Premium" }, - { - "msgid": "Public" - }, { "msgid": "Saturation" }, @@ -8639,9 +6806,6 @@ { "msgid": "Secret" }, - { - "msgid": "Secrets" - }, { "msgid": "Session" }, @@ -8657,21 +6821,12 @@ { "msgid": "Source" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, { "msgid": "Spoilers" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Sticker" }, @@ -8702,15 +6857,6 @@ { "msgid": "Toast" }, - { - "msgid": "Traits" - }, - { - "msgid": "Type" - }, - { - "msgid": "Type {premiumType}" - }, { "msgid": "Version" }, @@ -8750,9 +6896,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -8762,12 +6905,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "image" - }, - { - "msgid": "macOS" - }, { "msgid": "message" }, @@ -8780,9 +6917,6 @@ { "msgid": "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}" }, - { - "msgid": "{channelHeading}, {mentionCount} mentions" - }, { "msgid": "{context} · {accountName}" }, @@ -8792,12 +6926,6 @@ { "msgid": "{count, plural, one {# message} other {# messages}}" }, - { - "msgid": "{count, plural, one {# minute} other {# minutes}}" - }, - { - "msgid": "{countLabel} minutes" - }, { "msgid": "{desktopChannel} Desktop {desktopVersion}" }, @@ -8813,27 +6941,12 @@ { "msgid": "{length, plural, one {# sticker} other {# stickers}}" }, - { - "msgid": "{length} types" - }, - { - "msgid": "{megabits} Mbps" - }, - { - "msgid": "{mentionCount} mentions" - }, - { - "msgid": "{messageCount} messages" - }, { "msgid": "{messageGroupSpacing}px" }, { "msgid": "{minutes, plural, one {# minute} other {# minutes}}" }, - { - "msgid": "{minutes} minutes" - }, { "msgid": "{oneMinute} minute" }, @@ -8843,12 +6956,6 @@ { "msgid": "{thirtyMinutes} minutes" }, - { - "msgid": "{totalCount} total" - }, - { - "msgid": "{totalMentionCount} mentions" - }, { "msgctxt": "accessibility-settings-section", "msgid": "Animation" @@ -8885,10 +6992,6 @@ "msgctxt": "keyboard-key-name", "msgid": "Menu" }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Standard" - }, { "msgctxt": "privacy-settings-section", "msgid": "Communication" @@ -9091,9 +7194,6 @@ { "msgid": "HEVC" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -9136,9 +7236,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -9148,15 +7245,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -9207,9 +7295,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, { "msgid": "AV1" }, @@ -9237,9 +7322,6 @@ { "msgid": "HEVC" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -9273,15 +7355,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -9291,9 +7364,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -9308,15 +7378,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -9341,9 +7402,6 @@ { "msgid": "Bot" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -9371,9 +7429,6 @@ { "msgid": "Forum" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -9398,9 +7453,6 @@ { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -9446,9 +7498,6 @@ { "msgid": "Sourcemaps" }, - { - "msgid": "Spam" - }, { "msgid": "Status" }, @@ -9485,9 +7534,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -9500,12 +7546,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -9521,9 +7561,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -9729,24 +7766,12 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, { "msgid": "Alt" }, - { - "msgid": "Avatar hash" - }, { "msgid": "Backspace" }, @@ -9765,9 +7790,6 @@ { "msgid": "Bot DM" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -9789,18 +7811,12 @@ { "msgid": "Fluxer" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, { "msgid": "HEVC" }, - { - "msgid": "JWKS URL" - }, { "msgid": "Jitter" }, @@ -9813,9 +7829,6 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -9882,9 +7895,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -9897,18 +7907,12 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, { "msgid": "spoiler" }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -9921,9 +7925,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -10149,21 +8150,9 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, - { - "msgid": "Admin" - }, { "msgid": "Administrator" }, @@ -10215,9 +8204,6 @@ { "msgid": "Checkout" }, - { - "msgid": "Cisco" - }, { "msgid": "Codec" }, @@ -10254,12 +8240,6 @@ { "msgid": "Edit \"{0}\"" }, - { - "msgid": "Edit Tag" - }, - { - "msgid": "Edit Thread" - }, { "msgid": "Edit media" }, @@ -10344,36 +8324,21 @@ { "msgid": "Media" }, - { - "msgid": "Metadata" - }, { "msgid": "Mod" }, { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Node" - }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, { "msgid": "Offline" }, - { - "msgid": "Offset {offset}" - }, { "msgid": "Online" }, @@ -10398,9 +8363,6 @@ { "msgid": "Platform" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -10413,9 +8375,6 @@ { "msgid": "Prompt" }, - { - "msgid": "SHA-256 Hash" - }, { "msgid": "Searching..." }, @@ -10425,9 +8384,6 @@ { "msgid": "Slovenia" }, - { - "msgid": "Spam" - }, { "msgid": "Speaker" }, @@ -10440,30 +8396,18 @@ { "msgid": "Submenu" }, - { - "msgid": "Substring" - }, { "msgid": "Tab" }, { "msgid": "Tag" }, - { - "msgid": "Target" - }, { "msgid": "Template" }, { "msgid": "Token" }, - { - "msgid": "Total RAM" - }, - { - "msgid": "Unit" - }, { "msgid": "Video" }, @@ -10506,9 +8450,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -10521,21 +8462,12 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, { "msgid": "spoiler" }, - { - "msgid": "user@example.com" - }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -10554,9 +8486,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -10566,9 +8495,6 @@ { "msgid": "{presenceCount} online" }, - { - "msgid": "{productName} Desktop" - }, { "msgid": "{productName} Visionary" }, @@ -10584,9 +8510,6 @@ { "msgid": "{resolution} {fps} FPS" }, - { - "msgid": "{totalCount} total" - }, { "msgid": "{zoomPercent}%" }, @@ -10835,15 +8758,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -10889,9 +8803,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Client" }, @@ -10952,9 +8863,6 @@ { "msgid": "Forum" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -10964,9 +8872,6 @@ { "msgid": "Hardware" }, - { - "msgid": "Hashing" - }, { "msgid": "Hindi" }, @@ -11009,9 +8914,6 @@ { "msgid": "Nickname" }, - { - "msgid": "Nickname: {nickname}" - }, { "msgid": "No" }, @@ -11030,9 +8932,6 @@ { "msgid": "Password" }, - { - "msgid": "Payload" - }, { "msgid": "PiP" }, @@ -11051,9 +8950,6 @@ { "msgid": "Privacy" }, - { - "msgid": "Provider" - }, { "msgid": "Romania" }, @@ -11063,18 +8959,9 @@ { "msgid": "Slovenia" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Static Neko" }, @@ -11138,12 +9025,6 @@ { "msgid": "Zoom" }, - { - "msgid": "community" - }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -11159,9 +9040,6 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, @@ -11171,12 +9049,6 @@ { "msgid": "sticker" }, - { - "msgid": "user@example.com" - }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -11195,9 +9067,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -11207,9 +9076,6 @@ { "msgid": "{presenceCount} online" }, - { - "msgid": "{productName} Desktop" - }, { "msgid": "{productName} Visionary" }, @@ -11248,14 +9114,6 @@ "msgctxt": "keyboard-key-name", "msgid": "Menu" }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Standard" - }, - { - "msgctxt": "security-settings-section", - "msgid": "Account" - }, { "msgctxt": "us-state", "msgid": "Alabama" @@ -11445,15 +9303,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -11469,9 +9318,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -11487,12 +9333,6 @@ { "msgid": "HEVC" }, - { - "msgid": "JWKS URL" - }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -11544,9 +9384,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -11556,12 +9393,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -11574,9 +9405,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -11614,15 +9442,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -11647,12 +9466,6 @@ { "msgid": "HEVC" }, - { - "msgid": "JWKS URL" - }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -11683,9 +9496,6 @@ { "msgid": "Win" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -11695,15 +9505,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -11750,9 +9551,6 @@ { "msgid": "+{count}" }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -11765,9 +9563,6 @@ { "msgid": "Bluesky" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -11798,9 +9593,6 @@ { "msgid": "Instance URL" }, - { - "msgid": "JWKS URL" - }, { "msgid": "Malta" }, @@ -11810,9 +9602,6 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -11861,9 +9650,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -11885,9 +9671,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{resolution} {fps} FPS" }, @@ -11959,9 +9742,6 @@ { "msgid": "1 week" }, - { - "msgid": "15 FPS" - }, { "msgid": "AV1" }, @@ -11983,9 +9763,6 @@ { "msgid": "Authenticator" }, - { - "msgid": "Authenticators" - }, { "msgid": "Avatar" }, @@ -12025,9 +9802,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Client" }, @@ -12046,9 +9820,6 @@ { "msgid": "Compact" }, - { - "msgid": "Compact (400x300)" - }, { "msgid": "Contact" }, @@ -12118,9 +9889,6 @@ { "msgid": "Gaming" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -12163,12 +9931,6 @@ { "msgid": "Jitter" }, - { - "msgid": "Jobs" - }, - { - "msgid": "Lane" - }, { "msgid": "Later" }, @@ -12193,33 +9955,18 @@ { "msgid": "Media" }, - { - "msgid": "Metadata" - }, { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Node" - }, - { - "msgid": "Nodes" - }, { "msgid": "OP" }, { "msgid": "Offline" }, - { - "msgid": "Offset {offset}" - }, { "msgid": "Online" }, @@ -12253,9 +10000,6 @@ { "msgid": "Open {landmarkName}" }, - { - "msgid": "Open {macosSystemSettingsName}" - }, { "msgid": "Open {premiumProductFullName}" }, @@ -12268,9 +10012,6 @@ { "msgid": "Passkeys" }, - { - "msgid": "Payload" - }, { "msgid": "Permanent" }, @@ -12289,9 +10030,6 @@ { "msgid": "Platform" }, - { - "msgid": "Plutonium" - }, { "msgid": "Portugal" }, @@ -12304,15 +10042,6 @@ { "msgid": "Privacy" }, - { - "msgid": "Provider" - }, - { - "msgid": "Realtime" - }, - { - "msgid": "Recent" - }, { "msgid": "Relevant" }, @@ -12328,9 +10057,6 @@ { "msgid": "Sourcemaps" }, - { - "msgid": "Spam" - }, { "msgid": "Spelling" }, @@ -12364,9 +10090,6 @@ { "msgid": "Submenu" }, - { - "msgid": "Substring" - }, { "msgid": "Tab" }, @@ -12403,15 +10126,6 @@ { "msgid": "Tracking" }, - { - "msgid": "Type" - }, - { - "msgid": "Type {premiumType}" - }, - { - "msgid": "Uploader" - }, { "msgid": "Video" }, @@ -12421,9 +10135,6 @@ { "msgid": "Visionary ({visionaryLifetimeBadgeLabel})" }, - { - "msgid": "Voice servers: {regionName}" - }, { "msgid": "Volume" }, @@ -12454,9 +10165,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -12472,15 +10180,9 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, - { - "msgid": "reposts" - }, { "msgid": "slash {commandName}" }, @@ -12490,15 +10192,9 @@ { "msgid": "sticker" }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# item} other {# items}}" - }, { "msgid": "{formattedPresenceCount} online" }, @@ -12517,15 +10213,6 @@ { "msgid": "{length, plural, one {# sticker} other {# stickers}}" }, - { - "msgid": "{length} apps" - }, - { - "msgid": "{length} stickers" - }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{onlineCount} online" }, @@ -12800,21 +10487,9 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, - { - "msgid": "Admin" - }, { "msgid": "Administrator" }, @@ -12854,9 +10529,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -12890,9 +10562,6 @@ { "msgid": "Full" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -12908,12 +10577,6 @@ { "msgid": "Jitter" }, - { - "msgid": "Lane" - }, - { - "msgid": "Latitude" - }, { "msgid": "Latvia" }, @@ -12929,24 +10592,12 @@ { "msgid": "Markdown" }, - { - "msgid": "Metadata" - }, { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Node" - }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -12965,9 +10616,6 @@ { "msgid": "Ping" }, - { - "msgid": "Plutonium" - }, { "msgid": "Port" }, @@ -12977,12 +10625,6 @@ { "msgid": "Premium" }, - { - "msgid": "Region" - }, - { - "msgid": "Region: {regionName}" - }, { "msgid": "Ring" }, @@ -13007,18 +10649,9 @@ { "msgid": "Slovenia" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Start" }, @@ -13049,15 +10682,6 @@ { "msgid": "Tone" }, - { - "msgid": "Total RAM" - }, - { - "msgid": "Type" - }, - { - "msgid": "Type {premiumType}" - }, { "msgid": "Video" }, @@ -13085,9 +10709,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -13100,21 +10721,9 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, - { - "msgid": "repost" - }, - { - "msgid": "sendSystemDm" - }, { "msgid": "spoiler" }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -13124,9 +10733,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{productName} Visionary" }, @@ -13379,9 +10985,6 @@ { "msgid": "Bot" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -13427,9 +11030,6 @@ { "msgid": "Jitter" }, - { - "msgid": "Limit" - }, { "msgid": "Link" }, @@ -13445,9 +11045,6 @@ { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -13478,21 +11075,12 @@ { "msgid": "Premium" }, - { - "msgid": "Region" - }, - { - "msgid": "Region: {regionName}" - }, { "msgid": "Searching..." }, { "msgid": "Shift" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, @@ -13541,9 +11129,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -13556,9 +11141,6 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, @@ -13764,24 +11346,9 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, - { - "msgid": "ACLs" - }, { "msgid": "AV1" }, - { - "msgid": "Admin" - }, { "msgid": "Alt" }, @@ -13803,9 +11370,6 @@ { "msgid": "Bots" }, - { - "msgid": "Cisco" - }, { "msgid": "Codec" }, @@ -13842,9 +11406,6 @@ { "msgid": "GIFs" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -13863,9 +11424,6 @@ { "msgid": "Interface" }, - { - "msgid": "Latitude" - }, { "msgid": "Layout" }, @@ -13881,24 +11439,15 @@ { "msgid": "Logo" }, - { - "msgid": "Longitude" - }, { "msgid": "Malta" }, { "msgid": "Markdown" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -13944,9 +11493,6 @@ { "msgid": "Social" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, @@ -13959,9 +11505,6 @@ { "msgid": "Submenu" }, - { - "msgid": "Substring" - }, { "msgid": "Tab" }, @@ -14025,9 +11568,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -14043,9 +11583,6 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, @@ -14055,9 +11592,6 @@ { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# emoji} other {# emojis}}" - }, { "msgid": "{desktopChannel} Desktop {desktopVersion}" }, @@ -14073,12 +11607,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{length} apps" - }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -14103,9 +11631,6 @@ { "msgid": "{tokenCount, plural, one {# token} other {# tokens}}" }, - { - "msgid": "{totalCount} total" - }, { "msgid": "{zoomPercent}%" }, @@ -14294,24 +11819,12 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, { "msgid": "Accent" }, - { - "msgid": "Admin" - }, { "msgid": "Administrator" }, @@ -14351,9 +11864,6 @@ { "msgid": "Chat" }, - { - "msgid": "Cisco" - }, { "msgid": "Client" }, @@ -14366,9 +11876,6 @@ { "msgid": "Compact" }, - { - "msgid": "Compact (400x300)" - }, { "msgid": "Contact" }, @@ -14420,9 +11927,6 @@ { "msgid": "Forum" }, - { - "msgid": "Gateway" - }, { "msgid": "General" }, @@ -14444,21 +11948,12 @@ { "msgid": "Indicator" }, - { - "msgid": "Invalid" - }, { "msgid": "Jitter" }, - { - "msgid": "Job {jobId}: {jobStatus}" - }, { "msgid": "Link" }, - { - "msgid": "Local {localizedCurrencyLabel}" - }, { "msgid": "Logo" }, @@ -14477,18 +11972,9 @@ { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Net" - }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -14513,21 +11999,12 @@ { "msgid": "Premium" }, - { - "msgid": "Public" - }, { "msgid": "Searching..." }, { "msgid": "Secret" }, - { - "msgid": "Set the message history threshold to {date}." - }, - { - "msgid": "Set the role color to {color}." - }, { "msgid": "Shift" }, @@ -14537,21 +12014,9 @@ { "msgid": "Social" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, - { - "msgid": "Static" - }, { "msgid": "Static Neko" }, @@ -14609,9 +12074,6 @@ { "msgid": "Zoom" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -14630,9 +12092,6 @@ { "msgid": "link" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, @@ -14645,12 +12104,6 @@ { "msgid": "sticker" }, - { - "msgid": "user@example.com" - }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -14669,9 +12122,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -14693,9 +12143,6 @@ { "msgid": "{resolution} {fps} FPS" }, - { - "msgid": "{totalCount} total" - }, { "msgid": "{zoomPercent}%" }, @@ -14731,10 +12178,6 @@ "msgctxt": "keyboard-key-name", "msgid": "Pause / Break" }, - { - "msgctxt": "noise-suppression-option", - "msgid": "Standard" - }, { "msgctxt": "us-state", "msgid": "Alabama" @@ -14940,9 +12383,6 @@ { "msgid": "Bluesky" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -14961,9 +12401,6 @@ { "msgid": "HEVC" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -15000,9 +12437,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -15012,15 +12446,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -15061,24 +12486,12 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, { "msgid": "Acceleration" }, - { - "msgid": "Admin" - }, { "msgid": "Alt" }, @@ -15100,9 +12513,6 @@ { "msgid": "Bot" }, - { - "msgid": "Cisco" - }, { "msgid": "Codec" }, @@ -15142,9 +12552,6 @@ { "msgid": "Forum" }, - { - "msgid": "Gateway" - }, { "msgid": "Google Lens" }, @@ -15157,9 +12564,6 @@ { "msgid": "Jitter" }, - { - "msgid": "Lane" - }, { "msgid": "Layout" }, @@ -15178,21 +12582,12 @@ { "msgid": "Media" }, - { - "msgid": "Metadata" - }, { "msgid": "Moderator" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -15217,9 +12612,6 @@ { "msgid": "Plan" }, - { - "msgid": "Plutonium" - }, { "msgid": "Popup" }, @@ -15235,12 +12627,6 @@ { "msgid": "Premium" }, - { - "msgid": "Region" - }, - { - "msgid": "Region: {regionName}" - }, { "msgid": "Relevant" }, @@ -15262,12 +12648,6 @@ { "msgid": "Spoilers" }, - { - "msgid": "Standard" - }, - { - "msgid": "Standard {baseCurrencyLabel}" - }, { "msgid": "Status" }, @@ -15322,12 +12702,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "community" - }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -15340,27 +12714,18 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "macOS" - }, { "msgid": "online" }, { "msgid": "spoiler" }, - { - "msgid": "video" - }, { "msgid": "{categoryLabel}, {count, plural, one {# community} other {# communities}}" }, { "msgid": "{context} · {accountName}" }, - { - "msgid": "{count, plural, one {# emoji} other {# emojis}}" - }, { "msgid": "{desktopChannel} Desktop {desktopVersion}" }, @@ -15373,9 +12738,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{onlineCount} online" }, @@ -15644,15 +13006,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -15665,9 +13018,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cisco" - }, { "msgid": "Client secret" }, @@ -15689,9 +13039,6 @@ { "msgid": "HEVC" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -15740,9 +13087,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -15752,12 +13096,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -15767,9 +13105,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -15807,15 +13142,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -15840,9 +13166,6 @@ { "msgid": "Bot" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -15885,18 +13208,9 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, - { - "msgid": "Net" - }, - { - "msgid": "Normal" - }, { "msgid": "OP" }, @@ -15936,9 +13250,6 @@ { "msgid": "Shift" }, - { - "msgid": "Spam" - }, { "msgid": "Spoiler" }, @@ -15972,9 +13283,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -15984,15 +13292,9 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, { "msgid": "spoiler" }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -16005,9 +13307,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -16233,9 +13532,6 @@ { "msgid": "Bluesky" }, - { - "msgid": "Cisco" - }, { "msgid": "Ctrl" }, @@ -16260,9 +13556,6 @@ { "msgid": "Markdown" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -16302,9 +13595,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -16314,12 +13604,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -16366,15 +13650,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -16399,9 +13674,6 @@ { "msgid": "Camera" }, - { - "msgid": "Cisco" - }, { "msgid": "Codec" }, @@ -16462,9 +13734,6 @@ { "msgid": "Mod" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "Neko" }, @@ -16480,9 +13749,6 @@ { "msgid": "Ping" }, - { - "msgid": "Plutonium" - }, { "msgid": "Romania" }, @@ -16498,9 +13764,6 @@ { "msgid": "Slovenia" }, - { - "msgid": "Spam" - }, { "msgid": "Tab" }, @@ -16537,9 +13800,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -16549,15 +13809,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "user@example.com" - }, - { - "msgid": "video" - }, { "msgid": "{context} · {accountName}" }, @@ -16570,9 +13821,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{messageGroupSpacing}px" }, @@ -16826,9 +14074,6 @@ { "msgid": "HEVC" }, - { - "msgid": "JWKS URL" - }, { "msgid": "Logo" }, @@ -16838,9 +14083,6 @@ { "msgid": "Markdown" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -16877,9 +14119,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -16889,15 +14128,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -16907,9 +14137,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{productName} Visionary" }, @@ -16943,15 +14170,6 @@ { "msgid": "+{count}" }, - { - "msgid": "15 FPS" - }, - { - "msgid": "30 FPS" - }, - { - "msgid": "60 FPS" - }, { "msgid": "AV1" }, @@ -16991,9 +14209,6 @@ { "msgid": "Mute thread" }, - { - "msgid": "NCMEC {ncmecReportId}" - }, { "msgid": "OP" }, @@ -17030,9 +14245,6 @@ { "msgid": "YubiKey" }, - { - "msgid": "cron" - }, { "msgid": "deleted-category" }, @@ -17042,15 +14254,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "macOS" - }, - { - "msgid": "sendSystemDm" - }, - { - "msgid": "user@example.com" - }, { "msgid": "{context} · {accountName}" }, @@ -17063,9 +14266,6 @@ { "msgid": "{kilobits} kbps" }, - { - "msgid": "{megabits} Mbps" - }, { "msgid": "{resolution} {fps} FPS" }, diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index 3c9bba3f1..dd5783c6f 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -2081,7 +2081,7 @@ msgstr "Остават {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {член} other {членове}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Линкът ти за покана изтича след # секунда.} other {Линкът ти за покана изтича след # секунди.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Избрани: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Данни за акаунта" msgid "Account details unavailable" msgstr "Данните за акаунта не са налични" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Акаунтът съществува за спам, измами или злоупотреба с платформата." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Добавен: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Добавен: {createdDate} • последно използван: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Допълнителни коментари (по избор)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Вече е осребрен" msgid "Already set to cancel" msgstr "Анулирането вече е насрочено" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Докладвай това съобщение и на екипа за безопасност на {productName}" @@ -4576,11 +4566,6 @@ msgstr "Годишно" msgid "Another checkbox" msgstr "Друго квадратче за отметка" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Друго явно нарушение на правилата" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Друго кръгло поле за отметка" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Качване на аудио" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Австрия" @@ -5620,6 +5605,7 @@ msgstr "В момента ме няма" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "В момента ме няма" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Назад" @@ -5788,9 +5775,7 @@ msgstr "Кодовете за възстановяване са генерира msgid "Badge" msgstr "Значка" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Забраняване" @@ -5819,7 +5804,7 @@ msgstr "Продължителност на забраната" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Забраняване на достъп на членове до общ msgid "Ban reason" msgstr "Причина за забрана" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Забраняване на този потребител" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Честотна лента" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Наложена забрана" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Достъпът на {targetUserTag} до общността е забранен" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Преди дата" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Белгия" @@ -6031,7 +6006,7 @@ msgstr "Битрейт" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Блокиране" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Блокиране" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Блокиране на {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Блокиране за всички общности" msgid "Block spoiler" msgstr "Блоков спойлер" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Блокиране на този потребител" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Блокиране на потребител" msgid "Blocked" msgstr "Блокирани" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Блокирано" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Вградени преводачи" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "България" @@ -6519,16 +6500,6 @@ msgstr "Български" msgid "Bulk delete" msgstr "Групово изтриване" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Тормоз, повтарящ се нежелан контакт, преследване или целенасочени нападки." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Тормоз, заплахи, омраза, насилие, рейдове или съдържание, което подтиква към самонараняване." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Калифорния" msgid "Call" msgstr "Обаждане" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Настройки за обаждания и групов чат" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Смяна на банера" msgid "Change chat embed background" msgstr "Смяна на фона за вградени елементи в чата" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Промяна на имейл" @@ -7150,8 +7116,8 @@ msgstr "Промяна на прякор на приятел" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Промяна на прякор в групата" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Смяна на езика" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Промяна на прякора ми в групата" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Промяна на собствения прякор" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Смяна на собственик" @@ -7283,16 +7249,6 @@ msgstr "Промяна на гласовия регион, който изпол msgid "Change which voice region this channel uses." msgstr "Промяна на гласовия регион, който използва този канал." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Промени кой може да ти се обажда или да те добавя." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Промени кой може да се свързва с теб." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Провери входящата си поща на {emailAddress} за msgid "Check your inbox for a verification email." msgstr "Провери входящата си поща за имейл за потвърждение." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Провери сигнала си" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Квадратчета за отметка" @@ -7901,21 +7862,6 @@ msgstr "Плащането е блокирано за този акаунт. С msgid "Checkout unavailable" msgstr "Плащането е недостъпно" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Опасения за безопасността на децата" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Безопасност на децата или експлоатация на непълнолетни" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Безопасност на децата или съдържание за възрастни" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Опции" msgid "Choices: {choiceList}" msgstr "Опции: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Избор" @@ -8122,6 +8068,11 @@ msgstr "Избери категорията, която най-добре опи msgid "Choose the premium model" msgstr "Избери премиум модела" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Избери причината отново" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Вземи подарък" msgid "Claim your account" msgstr "Заяви акаунта си" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Заяви акаунта си и потвърди имейла си, за да изпращаш сигнали." @@ -8352,12 +8303,12 @@ msgstr "Заяви акаунта си, за да осребриш този по #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Заяви акаунта си, за да изпращаш покани за приятелство." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Потърсете своя акаунт, за да изпращате сигнали." @@ -8378,11 +8329,6 @@ msgstr "Заяви акаунта си, за да започваш или да msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Вземи подаръка си, за да активираш абонамента си за {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Представяне за друго лице, марка или организация." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Изчистване на полето за търсене" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Затваряне на прозореца" msgid "Close popout" msgstr "Затвори изскачащия прозорец" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Затваряне на това DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Затваряне в системния трей" msgid "Close window" msgstr "Затваряне на прозореца" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Затвори текущото си DM с {dmDisplayName}. Това не блокира потребителя и можеш да го отвориш отново по-късно." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Да се затвори ли DM с {displayName}? Можеш да го отвориш отново по всяко време." @@ -8837,7 +8773,7 @@ msgstr "Въгленова тема" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Код" @@ -8868,7 +8804,7 @@ msgstr "Код от приложението {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Кодът е изпратен отново" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Общности, към които можете да се присъедините" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Общност" @@ -9131,7 +9065,7 @@ msgstr "Изключване на целия звук в общността" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Отстраняване на грешки в общността" @@ -9150,16 +9084,6 @@ msgstr "Общността е изтрита" msgid "Community DM" msgstr "DM от общност" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Общността съществува за спам, измами или злоупотреба с платформата." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Общността улеснява груповите атаки или целенасочената злоупотреба." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Икона на общността" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID на общността" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Изисква се ID на общността." @@ -9526,6 +9450,11 @@ msgstr "Потвърди новата парола" msgid "Confirm password" msgstr "Потвърди паролата" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Потвърди изявлението, за да изпратиш сигнала." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Продължи в браузъра си" msgid "Continue to checkout" msgstr "Продължи към плащане" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Продължи с докладването на общността" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Продължи с докладването на потребителя" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Преобразуването на този канал в тексто msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Преобразува входящото съдържание в говор, независимо дали идва от /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Координира атаки, групови нападки или тормоз срещу хора или общности." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL адресът е копиран в клипборда" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL адресът е копиран в клипборда" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Копирай ID на съобщението" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Копирай линка към съобщението" @@ -10643,6 +10553,11 @@ msgstr "Не успяхме да заредим публикациите. Опи msgid "Couldn't load settings" msgstr "Не успях да зареда настройките" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Не успяхме да заредим формуляра за подаване на сигнал." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Приложението не можа да бъде заредено" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Неуспешна обработка на изображението" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Не успях да публикувам това съобщение" @@ -10825,11 +10740,6 @@ msgstr "Поканата не можа да бъде изпратена" msgid "Couldn't send invite. Try again." msgstr "Поканата не можа да бъде изпратена. Опитай отново." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Неуспешно изпращане. Опитай отново." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Таймер за обратно броене" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Държава на пребиваване" @@ -11301,13 +11211,8 @@ msgstr "Създадена:" msgid "Credentials" msgstr "Данни за вход" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Достоверни заплахи, графично насилие или възхвала на насилието." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Хърватия" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Отрязва звука под зададен праг на сила с минимално натоварване на процесора." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Кипър" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Чешки" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Чехия" @@ -11965,7 +11870,7 @@ msgstr "Отстраняване на грешки в канала" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Отстраняване на грешки в общността" @@ -12151,7 +12056,6 @@ msgstr "Делауер" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Делауер" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Изтриване на тема?" msgid "Delete this invite? Can't be undone." msgstr "Изтриване на тази покана? Това действие не може да бъде отменено." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Изтриване на това съобщение" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Изтриване на това съобщение? Това действие не може да бъде отменено." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Искате ли да изтриете това съобщение? Не може да бъде отменено. То ще бъде премахнато и от всяка общност, която следва този канал." @@ -12461,11 +12359,6 @@ msgstr "Да изтриеш ли съобщенията си в тази общ msgid "Delete your messages in this conversation?" msgstr "Да изтриеш ли съобщенията си в този разговор?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Изтрито" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Отказани {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Дания" @@ -12554,11 +12447,6 @@ msgstr "Опиши стикера" msgid "Describe this media for screen readers" msgstr "Опиши тази медия за екранни четци" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Опиши какво прави съдържанието незаконно" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Разкачен банер" msgid "Detail" msgstr "Детайл" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Подробности" @@ -13315,11 +13203,6 @@ msgstr "Показвано име (по избор)" msgid "Display scaling" msgstr "Мащабиране на дисплея" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Разпространява зловреден софтуер, инструменти за кражба на данни за достъп или други вредоносни файлове." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Настройки за DM и покани за приятелство" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Документация" msgid "Doesn't allow being added to group DMs" msgstr "Не разрешава добавяне в групови DM" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Не блокира. Можеш да го отвориш отново по-късно." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Дари вместо това" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Изтегляне на изходни карти, така че про msgid "Download video" msgstr "Изтегляне на видео" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Доксинг, разкрита лична информация или преследване." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Доксинг, преследване, представяне за друго лице или неподходящ профил." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Редактиране на цвят за {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Редактиране на профила в общността" @@ -14043,7 +13908,7 @@ msgstr "Редактиране на презаписванията за роли #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Редактиране на профил" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Редактиране на местно време в профила" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Редактиране на публикувано съобщение?" @@ -14191,13 +14056,13 @@ msgstr "Отговаряш на условията за възстановява #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Имейл" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Имейл адрес" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Изисква се имейл адрес." @@ -14721,16 +14586,6 @@ msgstr "Предпочитан енкодер за нови споделяния msgid "Encoder, SVC, and bitrate presets" msgstr "Кодер, SVC и битрейт предварителни настройки" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Насърчава самонараняване" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Насърчава самоубийство, самонараняване или хранителни разстройства." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Криптирането от край до край не е налич msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Криптирането от край до край не е налично, защото в този гласов канал има неподдържан участник." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Застрашава непълнолетни или съдържа материали с експлоатация на деца." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Въведи код във формат ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Въведи валиден URL адрес или код на шаблон за {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Въведи валиден имейл адрес." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Въведи валиден линк към съобщение." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Въведи {digitCount}-цифрения код от приложението за удостоверяване." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Въведи кода, преди да продължиш." @@ -15008,7 +14858,7 @@ msgstr "Enter, за да <0><1>запазиш" msgid "Enter username" msgstr "Въведи потребителско име" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Въведи кода за потвърждение" @@ -15017,6 +14867,11 @@ msgstr "Въведи кода за потвърждение" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Въведи имейл адреса си и ще ти изпратим линк за нулиране на паролата." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Въведи пълното си име по лична карта, за да изпратиш сигнала." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc, за да <0><1>отмениш" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Естония" @@ -15412,6 +15267,16 @@ msgstr "Изтича на {earliest}" msgid "Expires:" msgstr "Изтича:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Обясни проблема" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Обясни проблема, за да изпратиш сигнала." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Външните линкове може да са опасни. Вни msgid "Extra large" msgstr "Много голям" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Екстремистка общност" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Неуспешно премахване на персонализирания URL адрес. Опитай отново." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Неуспешно повторно изпращане на кода. Опитай отново." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Неуспешно нулиране на премиум състоянието." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Неуспешно изпращане на кода. Опитай отново." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Неуспешно изпращане на съобщението. Задръж за опции." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Неуспешно изпращане на сигнала. Опитай отново." @@ -15840,11 +15700,6 @@ msgstr "Неуспешно качване на емоджита, започва msgid "Failed to upload emojis. Try again." msgstr "Неуспешно качване на емоджита. Опитай отново." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Неверни твърдения, които вероятно ще причинят реална вреда." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Намери идеалния стикер" msgid "Fingerprint" msgstr "Пръстов отпечатък" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Завърши настройката на акаунта" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Първо завърши настройката на акаунта" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Завърши регистрацията, за да изпращаш покани за приятелство." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Финландия" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Фински" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Име и фамилия" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Кадрова честота над 30 FPS изисква {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Франция" @@ -16834,10 +16689,10 @@ msgstr "Пълна дата/час" msgid "Full dynamic range" msgstr "Пълен динамичен обхват" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Пълно име (по лична карта)" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Пълно име по лична карта (по избор при сигнали за сексуално насилие над деца)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Немски" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Германия" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Назад" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Върни се и въведи валиден имейл." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Приятно ни е да те видим, {username}! Заповядай." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Гърция" @@ -17572,11 +17427,6 @@ msgstr "Гръцки" msgid "Grid view" msgstr "Мрежов изглед" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Съдържание, свързано с груминг или експлоатация на деца." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Потребителско име" msgid "Hang out with voice, video and screen share" msgstr "Забавлявайте се с глас, видео и споделяне на екран" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Тормоз" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Тормоз, включващ съдържание за възрастни" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Тормоз или булинг" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Тормоз или преследване" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Тормоз или целенасочени нападки" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Тормоз или заплахи" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Хардуерен ключ" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Хардуерно ускорен на повечето системи с Windows и macOS. Надежден за по-стари устройства." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Вредна дезинформация" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Купувал е преди" msgid "Has ever purchased override" msgstr "Заместване на „Купувал е преди“" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Език на омразата" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Да скриеш ли собствения си споделен екр msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Скрива бутоните за изтегляне, отваряне в браузър и копиране на изображения и видеоклипове в този канал." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Скрива съобщенията им и им пречи да ти пишат" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Унгарски" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Унгария" @@ -18399,6 +18212,11 @@ msgstr "Аз съм подсказка" msgid "I changed my mind" msgstr "Размислих" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Потвърждавам добросъвестно, че информацията и твърденията в това уведомление са точни и пълни." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Настройки за неактивност" msgid "Idle timeout" msgstr "Таймаут при неактивност" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Ако е замесено непълнолетно лице, използвай „{childSafetyReasonName}“ вместо това." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Ако акаунт използва този имейл адрес, и msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Ако macOS поиска да затворите и отворите отново {productName}, изберете По-късно." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Ако някой е в непосредствена опасност, свържи се с местните служби за спешна помощ, ако можеш да го направиш безопасно." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Ако някой е в непосредствена опасност, първо се свържи с местните служби за спешна помощ." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Ако някой ти е казал да поставиш нещо тук, това е измама, която може да му даде достъп до акаунта ти в {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Ако това включва CSAM или експлоатация на непълнолетно лице, изпрати сигнала сега и не споделяй материала повторно." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Ако това е достоверна непосредствена заплаха, свържи се и с местните служби за спешна помощ." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Ако това е непосредствена терористична заплаха, свържи се и с местните служби за спешна помощ." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Ако този сигнал е за конкретно съобщение в тази общност, докладвай това съобщение. Сигналите за съобщения дават на екипа ни за безопасност най-ясен контекст, а добавянето на подробности в коментарите може да ни помогне да го прегледаме по-бързо. Продължи с докладването на общността като цяло само ако докладването на съобщение не би обхванало по-широкия проблем." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Ако този сигнал е за конкретно съобщение, докладвай самото съобщение. Сигналите за съобщения дават на екипа ни за безопасност най-ясен контекст, а добавянето на подробности в коментарите може да ни помогне да го прегледаме по-бързо. Продължи с докладването на потребителя като цяло само ако това съобщение не обхваща по-широкия проблем." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Ако този сигнал е за конкретни съобщения, докладвай най-подходящото съобщение. Сигналите за съобщения дават на екипа ни за безопасност най-ясен контекст, а добавянето на подробности в коментарите може да ни помогне да го прегледаме по-бързо. Продължи с докладването на потребителя като цяло само ако докладването на съобщение не би обхванало по-широкия проблем." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Ако смяташ, че е незаконно, посочи кой закон и защо." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Игнориране на бавния режим в този канал msgid "Ignore virtual" msgstr "Игнориране на виртуални" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Незаконна дейност" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Незаконна дейност или нещо друго" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Незаконни продажби, подпомагане на престъпления или явно нарушение на правилата, което не попада в горните категории." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Незаконни продажби, подпомагане на престъпления или незаконна дейност." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Изображения" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Изображенията, поставени от клипборда ти, се изпращат като прикачени файлове, а ти нямаш разрешение да прикачваш файлове в този канал." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Представяне за друго лице" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Представяне за друго лице или подвеждащо съдържание" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Неактивен" msgid "Inactive timeout" msgstr "Таймаут за неактивност" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Неподходящ профил" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Включи моите двуфакторни резервни кодове в PDF и разпечатка" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Въведи ID на общността." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Фон на поканата" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Код за покана (по избор)" @@ -19471,7 +19220,7 @@ msgstr "Маскиране на покани" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Покани членове" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP адресът е оторизиран" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ирландия" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Курсив" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Италия" @@ -20120,7 +19869,7 @@ msgstr "Клавиши" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "По-късно" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Латвия" @@ -20291,11 +20040,6 @@ msgstr "Научи повече" msgid "Learn more about Visionary" msgstr "Научете повече за Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Напускане" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Напусни личната нишка" msgid "Leave silently" msgstr "Напускане без известие" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Напускане на общността" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Показва членовете с тази роля в отделна секция в списъка с членове." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Литва" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Зареждане..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Зареждане…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Ниско" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Люксембург" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Планирана е поддръжка за {localizedTime}. Очаквана продължителност: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Да направиш ли {userName} собственик на групата? Ще загубиш правата си на собственик." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Направи собственик на групата" @@ -21091,38 +20830,21 @@ msgstr "Направи собственик на групата" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Уверете се, че този код съвпада с този в приложението {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Увери се, че всичко изглежда правилно, преди да го изпратиш." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Персонализирай инстанцията си" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Злонамерени линкове" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Малта" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Разпространение на злонамерен софтуер" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Злонамерен софтуер или опасни линкове" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Злонамерен софтуер, кражба на идентификационни данни или опасни файлове." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Маскиране на лични данни преди споделя msgid "Mask Visionary as subscription" msgstr "Маскирай Visionary като абонамент" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Масов спам, измами, фалшиви игри с награди или злоупотреба с акаунти." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Ограничаване на медия заради съдържани msgid "Mature content not allowed" msgstr "Съдържанието за възрастни не е позволено" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Съдържание за възрастни или тормоз" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Съдържание за възрастни или неправилно ограничаване на достъпа" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Изключение за съдържание за възрастни" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Нарушение на правилата за съдържание за възрастни" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Съдържание за възрастни без подходящо ограничаване на достъпа." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Съобщение" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "линк към съобщение" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Линк към съобщението" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Визуализация на съобщенията в списъка с DM" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Съобщението е публикувано" @@ -22211,6 +21908,11 @@ msgstr "Час на съобщението" msgid "Message unpinned" msgstr "Съобщението е откачено" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Съобщение, което докладваш" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Минесота" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Непълнолетни в риск, съдържание за възрастни на неподходящо място или нежелано поведение." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Още" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Още действия" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Вложени" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Нидерландия" @@ -24099,7 +23796,7 @@ msgstr "Няма резултати" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Няма намерени резултати" @@ -24858,6 +24555,16 @@ msgstr "Само поканените от вас хора и модератор msgid "Only places I can't access anymore" msgstr "Само места, до които вече нямам достъп" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Докладвай само онова, което искрено смяташ, че нарушава правилата, и моля те, не изпращай един и същ сигнал два пъти." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Докладвай само онова, което искрено смяташ, че нарушава правилата. Злоупотребата със сигнали противоречи на <0>насоките на общността ни." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Непрозрачност" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Отвори в {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Отваряне на изскачащия прозорец" @@ -25379,11 +25084,6 @@ msgstr "Отворете „Системни настройки“ → „Пов msgid "Open template JSON" msgstr "Отваряне на JSON на шаблона" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Отваряне на диалоговия прозорец за забрана за тази общност." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Отваряне на настройките" msgid "Opened the thread again" msgstr "Отворих отново темата" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Отваря се в нов раздел" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Първоначалната забрана е наложена на {da #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Друго" @@ -25654,11 +25357,6 @@ msgstr "Друга реакция…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Екипът ни за безопасност преглежда сигнала. Ще ти изпратим DM и имейл, след като вземем решение." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Собствеността не можа да бъде прехвърлена на <0>{username} в този момент." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Собствеността е прехвърлена" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Постави JSON отговора тук" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Постави линка към съобщението." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Фишинг, измами, злонамерени линкове или неверни твърдения, които е вероятно да причинят реална вреда." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Избор на доставчик на уеб търсене" msgid "Pick an emoji" msgstr "Избери емотикон" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Избери опция, за да продължиш." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Избери 4-цифреното число след потребите msgid "Pick the appearance this administrator account should start with." msgstr "Избери външния вид, с който да започне този администраторски акаунт." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Избери правилото за преглед." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Изчакай малко и опитай да преименуваш отново." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Полша" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Порт" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Португалия" @@ -26872,11 +26555,6 @@ msgstr "натисни, за да добавиш реакция" msgid "press to remove reaction" msgstr "натисни, за да премахнеш реакцията" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Представяне за друго лице, включително подвеждащо съдържание, генерирано от AI." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Не позволява на <0>{targetUserTag} да изпраща съобщения, да реагира и да се свързва с гласови канали за посочения период." @@ -27078,11 +26756,6 @@ msgstr "Приоритетен говорител" msgid "Privacy" msgstr "Поверителност" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Поверителност или представяне под чужда самоличност" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Настройка за поверителност" msgid "Privacy URL" msgstr "URL адрес за поверителност" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Нарушаване на поверителността" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Нарушаване на поверителността или доксинг" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Нарушаване на поверителността или преследване" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Тип на профила" msgid "Profile updated" msgstr "Профилът е актуализиран" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Нарушение в профила, потребителското име или аватара" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Насърчава омраза срещу защитени групи." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Насърчава, набира или координира насилствена екстремистка дейност." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Популяризиране или инструкции, насърчаващи самонараняване или хранителни разстройства." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Профил, който докладваш" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Местоимения: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Защити своя Visionary акаунт, като активираш двуфакторно удостоверяване. Благодарим ти, че подкрепяш {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Въведи поне ID на потребител или потребителски таг." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Въведи ID на потребител или потребителско име на човека, когото докладваш." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Посочи пълното си име по лична карта за декларацията." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Радиобутоните позволяват да избереш ед msgid "Radio group" msgstr "Радиогрупа" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Координиране на атаки" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Готов ли си да купиш подарък?" msgid "Ready to upgrade?" msgstr "Готов ли си за надграждане?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Причина" @@ -28291,8 +27924,8 @@ msgstr "Запомняне на размера и позицията на про #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Премахване на {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Да се премахне ли {userName} от групата?" @@ -28419,8 +28052,8 @@ msgstr "Премахване от любими" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Премахване от групата" @@ -28458,11 +28091,6 @@ msgstr "Премахване от любимите GIF файлове, запа msgid "Remove icon" msgstr "Премахване на икона" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Премахване от канала за всички." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Премахнато от любими" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Премахнат от групата" @@ -28919,28 +28547,18 @@ msgstr "Подаване на сигнал за общност" msgid "Report a message" msgstr "Подаване на сигнал за съобщение" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Подай сигнал за нарушение на правилата или намери инструменти за управление на контактите и предпочитанията." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Подаване на сигнал за потребителски профил" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Докладване на общността" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Подробности за сигнала" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Подаване на сигнал за незаконно съдържание" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Докладване на проблем" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Докладване на съобщение" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Докладване на профил" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Сигналът е изпратен" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Тип на сигнала" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Докладване на потребител" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Таг на докладвания потребител (по избор)" @@ -29100,6 +28716,10 @@ msgstr "Изисква всичко от средно ниво, плюс чле msgid "Resend" msgstr "Изпрати отново" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Изпрати отново ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Изпрати отново ({newSecondsRemaining}с)" @@ -29108,7 +28728,7 @@ msgstr "Изпрати отново ({newSecondsRemaining}с)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Изпрати отново ({originalSecondsRemaining}с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Изпрати отново ({resendCooldownSeconds}с)" @@ -29122,7 +28742,7 @@ msgstr "Изпрати отново ({resendSecondsRemaining}с)" msgid "Resend ({secondsRemaining}s)" msgstr "Изпрати отново ({secondsRemaining}с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Изпрати кода отново" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Ролите са актуализирани успешно" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Румъния" @@ -29947,7 +29567,7 @@ msgstr "Наситеност" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Поздрави <0>{displayName}. Тук започва вашет msgid "Scale" msgstr "Мащаб" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Измами, злонамерен софтуер или дезинформация" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Сканирай QR кода с приложението си за удостоверяване." @@ -30855,11 +30470,6 @@ msgstr "Избери" msgid "Select {accessibleName}" msgstr "Избери {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Избери категория" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Избери общност, в която имаш разрешение „{permissionName}“, или групово DM, в което участваш." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Избери държава" @@ -30911,11 +30521,6 @@ msgstr "Избери URI за пренасочване" msgid "Select a scenario to apply..." msgstr "Избери сценарий за прилагане..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Избери категория на нарушението." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Избери акаунта, с който искаш да влезеш msgid "Select voice processing mode" msgstr "Избери режим за обработка на глас" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Избери какво искаш да докладваш." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Избери държавата си на пребиваване." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Избери…" @@ -31037,13 +30642,6 @@ msgstr "Избрано: {0} (макс. {1})" msgid "Selections" msgstr "Елементи за избор" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Самонараняване или самоубийство" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Изпращане на съобщение за действие (пок msgid "Send animation" msgstr "Изпращане на анимация" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Изпращане на друг сигнал" @@ -31138,7 +30736,7 @@ msgstr "Бутон за изпращане" msgid "Send code" msgstr "Изпращане на код" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Изпращане на сигнал по DSA" @@ -31158,9 +30756,9 @@ msgstr "Изпращайте файлове до {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Изпращане на покана за приятелство" @@ -31220,8 +30818,8 @@ msgstr "Изпращане на съобщения в нишки" msgid "Send messages, images, GIFs and emoji" msgstr "Изпращайте съобщения, изображения, GIF файлове и емотикони" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Изпращане на сигнал" @@ -31255,7 +30853,7 @@ msgstr "Да върнем ли това закачено съобщение на msgid "Send TTS messages" msgstr "Изпращане на TTS съобщения" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Изпращане на код за потвърждение" @@ -31273,11 +30871,6 @@ msgstr "Изпращане на гласово съобщение" msgid "Send:" msgstr "Изпращане:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Изпращане на злонамерен софтуер или опасни линкове" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Споделяне на тема" msgid "Share voice activity with all friends?" msgstr "Да споделяш ли гласова активност с всички приятели?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Сподели какво е необходимо на екипа ни, за да прецени това." @@ -31709,11 +31302,6 @@ msgstr "Сподели какво е необходимо на екипа ни, msgid "Share with a friend" msgstr "Сподели с приятел" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Споделяне с модератори на общността." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Споделен прозорец" msgid "Shared window audio" msgstr "Звук от споделения прозорец" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Споделя лична информация, дебне потребители или координира злоупотреба с лични данни." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Споделяне на лична информация" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Плъзгачи" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Словакия" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Словения" @@ -32889,11 +32467,6 @@ msgstr "Симулация на бавен режим" msgid "Slowmode time remaining" msgstr "Оставащо време за бавен режим" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Обидни квалификации, дехуманизиращ език или нападки срещу защитени групи." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Нещо се обърка при подготовката на този стикер. Опитай друг файл или опитай отново след малко." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Възникна грешка при публикуването. Опитайте отново след малко." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Просторно оформление с ясно визуално разделение между съобщенията." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Испания" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Спам акаунт" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Класификация на спам" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Спам или измама" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Общност за спам или измами" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Акаунт за спам, измами или фишинг" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Спам, измами или фишинг" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Стартирай свит" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Започване отначало" @@ -33752,22 +33302,26 @@ msgstr "Оставане в акаунта" msgid "Step {current} of {total}" msgstr "Стъпка {current} от {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Стъпка 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Стъпка 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Стъпка 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Стъпка 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Стъпка 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Да спре да бъде канал за съобщения?" msgid "Stop hiding muted channels by default?" msgstr "Да се спре ли скриването на заглушени канали по подразбиране?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Спира съобщенията и поканите за приятелство." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Спиране на теста на микрофона" @@ -33959,11 +33508,6 @@ msgstr "Спри да пачваш Node.prototype insertBefore и removeChild. msgid "Stop ringing" msgstr "Спиране на звъненето" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Няма да виждаш съдържанието и членовете ѝ." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Заместване на често използвани емотикони като :) и <3 с емоджита при изпращане на съобщения" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Швеция" @@ -34804,11 +34348,6 @@ msgstr "Докосни, за да добавиш бележка" msgid "tar.gz archive" msgstr "tar.gz архив" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Насочва хора по защитени характеристики." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Общи условия" msgid "Terms URL" msgstr "URL на условията" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Тероризъм или насилствен екстремизъм" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Тайландски" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Благодарим ти, че помагаш за безопасността на {productName}. Ще прегледаме сигнала ти възможно най-скоро." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Благодарим, че сигнализира за това" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Благодарим, че ни каза. Само по себе си това не нарушава правилата ни, затова не изпратихме сигнал." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Благодарим, че ни каза. Само по себе си това не нарушава правилата ни, затова не изпратихме сигнал. Ако е насочено към някого или съдържа обидни думи, докладвай отново и избери „Обидно или вредно съдържание“." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Не се получи. Опитай отново или откажи." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Това не прилича на валиден цвят. Опитай с шестнадесетичен код, rgb(), hsl() или име на CSS цвят." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Това не изглежда като валиден URL адрес." @@ -35104,6 +34653,11 @@ msgstr "Приложението {PRODUCT_NAME} на другото ви уст msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Приложението {PRODUCT_NAME} не беше вписано. Можете да затворите този раздел." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Екипът за безопасност на {productName} ще прегледа сигнала ти. Няма да разкриваме, че идва от теб." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Предоставеният redirect_uri не е регистриран msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Предоставеният redirect_uri трябва да използва HTTP или HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Формулярът за подаване на сигнал се промени. Моля, започни отначало." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Етикетите за потребителско име в този екземпляр вече са зададени. Те вече не могат да се променят." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Кодът за потвърждение е невалиден или е изтекъл." @@ -36115,13 +35674,8 @@ msgstr "Този член вече не е свързан с гласов кан msgid "This message can only be forwarded to age-restricted channels" msgstr "Това съобщение може да бъде препратено само към канали с ограничена възраст" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Това съобщение вече е изтрито." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Това съобщение вече е публикувано" @@ -36279,11 +35833,6 @@ msgstr "Тази нишка е затворена. Изпращането на msgid "This thread is locked. Only moderators can send messages." msgstr "Тази тема е заключена. Само модератори могат да изпращат съобщения." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "този потребител" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Този потребител е ограничил профила си. Някои подробности са скрити от хора, които не са му приятели." @@ -36292,11 +35841,6 @@ msgstr "Този потребител е ограничил профила си. msgid "This user has no roles in this community." msgstr "Този потребител няма роли в тази общност." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Този потребител вече е с наложена забрана в общността." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Този потребител вече не е наличен." @@ -36465,16 +36009,6 @@ msgstr "Нишката е актуализирана" msgid "Threads" msgstr "Теми" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Заплахи, следене в различни пространства или нежелан контакт." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Заплахи, тормоз или вреда" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Наложено време за изчакване на {targetUserTag} #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Време за изчакване" @@ -36787,6 +36321,11 @@ msgstr "Тон" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Преобразуване на HDR изображения в стандартен диапазон, намалявайки пиковата яркост." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Изпратени са твърде много кодове. Изчакай {duration} и опитай отново." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Прехвърляне на собствеността на общността" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Да се прехвърли ли собствеността на групата на {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Първо го отблокирай, за да изпратиш пок #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Отблокиране на потребител" @@ -37607,16 +37146,6 @@ msgstr "Включване на звука на всички устройств msgid "Undeafen yourself" msgstr "Включване на звука" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Опасения за непълнолетни или за безопасността на децата" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Непълнолетен потребител" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Докато не го включа отново" msgid "Unverified email" msgstr "Непотвърден имейл" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Нежелано поведение или съдържание за възрастни на неподходящо място." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Нежелано поведение, коментари или искания със съдържание за възрастни." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "До {DISCOVERY_MAX_TAGS} етикета помагат на хората да открият общността ти. Те се показват при търсене в Откриване." @@ -38840,11 +38359,6 @@ msgstr "Използване на светла тема" msgid "Use native title bar" msgstr "Използване на системната заглавна лента" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Използвай само ако явно нарушава правилата на {productName} и не попада в горните категории." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Използва се само в тази общност." msgid "User" msgstr "Потребител" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Потребителят изглежда непълнолетен или е замесен в груминг или експлоатация на деца." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Отстраняване на грешки за потребител" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID на потребителя (по избор)" @@ -39061,12 +38570,12 @@ msgstr "Потребителят не е намерен" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Потребителски профил" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Потребителски профил: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Потребителски настройки" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Потребителски таг (по избор)" @@ -39339,7 +38848,7 @@ msgstr "Верифицирана общност" msgid "Verify" msgstr "Потвърди" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Потвърди кода" @@ -39368,7 +38877,7 @@ msgstr "Потвърди самоличността си" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Потвърди имейла си" @@ -39718,7 +39227,7 @@ msgstr "Преглед на кодовете" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Преглед на профила в общността" @@ -39751,7 +39260,7 @@ msgstr "Преглед на подаръците" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Преглед на глобалния профил" @@ -39847,26 +39356,6 @@ msgstr "Зрител се присъединява към потока" msgid "Viewer leaves stream" msgstr "Зрител напуска потока" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Категория на нарушението" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Нарушението е в потребителския профил, а не в конкретно съобщение." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Насилие или заплахи с насилие" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Насилствено или шокиращо съдържание" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Преоразмерихме и компресирахме това ем msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Преоразмерихме и компресирахме този стикер до 320x320 пиксела, но той все още е {fileSize}. Лимитът е {maxSize}. Опитай с по-опростено изображение, по-малко цветове или по-малък изходен файл." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Изпратихме код на {email}." @@ -40472,7 +39961,7 @@ msgstr "Ще обработим заявката възможно най-ско msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Ще възстановим предишния ви имейл, ще излезем от стари сесии, ще деактивираме MFA и ще защитим акаунта ви с нова парола." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Ще изпратим кратък код, за да потвърдим, че можеш да получаваш актуализации за този сигнал." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Западна Вирджиния" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Какъв вид правило беше нарушено?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Какво става?" msgid "What's new" msgstr "Какво ново" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Каква е причината за сигнала ти?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Когато не е зададена персонализирана гранична дата, членовете без разрешението <0>{readMessageHistoryPermissionLabel} не могат да виждат стари съобщения. Ще виждат само съобщенията в реално време, докато пристигат, и те ще изчезват при рестартиране на клиента." @@ -40832,11 +40321,6 @@ msgstr "Кои общности" msgid "Which conversations" msgstr "Кои разговори" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Кое правило беше нарушено?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Докато „Натисни и говори“ е включено, микрофонът ти се управлява от клавишната комбинация, така че бутонът за изключване на микрофона е неактивен." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Не можеш да прикачваш файлове в този канал." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Не можеш да си приятел със себе си" @@ -41341,7 +40825,7 @@ msgstr "Не можеш да изпратиш съобщение на този #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Трябва да приемеш общите условия, за да създадеш акаунт" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Трябва да потвърдиш имейла си, преди да изпратиш сигнал." @@ -41891,6 +41375,11 @@ msgstr "Ползваш стара цена. Текущата цена за то msgid "You're sending messages too quickly" msgstr "Изпращаш съобщения твърде бързо" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Изпращаш сигнали твърде бързо. Опитай отново по-късно." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Преглеждаш по-стари съобщения" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Добави повече хора, отколкото позволява едно групово DM. Премахни няколко и опитай отново." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "За това съобщение вече има подаден от теб сигнал." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "За този профил днес вече има подаден от теб сигнал." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Вашите акаунти и настройки не са промен msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Действието ти не можа да бъде извършено, защото беше отбелязано от системите ни за безопасност. Ако смяташ, че това е грешка, свържи се с поддръжката." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Отговорите ти" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Заявлението ти е в процес на преглед. Все още можеш да актуализираш данните за обявата си или да оттеглиш заявлението." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Браузърът ти изисква взаимодействие с потребителя, преди да пусне звук. Натисни бутона по-долу, за да включиш гласовия чат." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Промените ви ще достигнат до всяка общност, която следва този канал, което може да отнеме минута. Всяко публикувано съобщение позволява 3 бързи редакции, след което по 1 на всеки 20 минути." @@ -42311,6 +41815,11 @@ msgstr "Новият ти прякор или остави празно, за д msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Старият ви комплект за възстановяване вече не работи. Съхранявайте този нов на сигурно място." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Възможностите ти" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "твоя регион" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Плащането за подновяване не успя, но <0/> остават активни до <1>{graceDate}. Обнови начина си на плащане преди тази дата, за да запазиш абонамента си." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Сигналът ти не беше изпратен. Опитай отново." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Абонаментът ти ще премине към годишно т msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS кодът на темата ти е твърде голям за споделяне. Намали го и опитай отново." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Потребителското ти име (по избор)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index 88c9d2c85..7f2e900f2 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -2081,7 +2081,7 @@ msgstr "Zbývá: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {člen} few {členové} many {člena} other {členů}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Váš odkaz na pozvánku vyprší za # sekundu.} few {Váš odkaz na pozvánku vyprší za # sekundy.} many {Váš odkaz na pozvánku vyprší za # sekundy.} other {Váš odkaz na pozvánku vyprší za # sekund.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Vybráno: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Údaje o účtu" msgid "Account details unavailable" msgstr "Podrobnosti o účtu nejsou k dispozici" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Účet slouží k rozesílání spamu, podvodům nebo zneužívání platformy." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Přidáno: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Přidáno: {createdDate} • naposledy použito: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Další komentáře (volitelné)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Již uplatněno" msgid "Already set to cancel" msgstr "Zrušení je již naplánováno" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Nahlásit tuto zprávu také týmu bezpečnosti {productName}" @@ -4576,11 +4566,6 @@ msgstr "Roční" msgid "Another checkbox" msgstr "Další zaškrtávací políčko" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Jiné zjevné porušení pravidel" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Další kulaté zaškrtávací políčko" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Nahrávání zvuku" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Rakousko" @@ -5620,6 +5605,7 @@ msgstr "Momentálně pryč" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Momentálně pryč" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Zpět" @@ -5788,9 +5775,7 @@ msgstr "Záložní kódy byly vygenerovány znovu" msgid "Badge" msgstr "Odznak" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Zabanovat" @@ -5819,7 +5804,7 @@ msgstr "Doba trvání banu" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banovat členy komunity s možností smazat jejich nedávné zprávy." msgid "Ban reason" msgstr "Důvod zabanování" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Zabanovat tohoto uživatele" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Šířka pásma" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Zabanováno" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Uživatel {targetUserTag} byl v komunitě zabanován" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Před datem" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgie" @@ -6031,7 +6006,7 @@ msgstr "Přenosová rychlost" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokovat" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokovat" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blokovat uživatele {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokovat ve všech komunitách" msgid "Block spoiler" msgstr "Blok se spoilerem" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blokovat tohoto uživatele" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blokovat uživatele" msgid "Blocked" msgstr "Blokováno" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blokováno" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Vestavěné překladače" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulharsko" @@ -6519,16 +6500,6 @@ msgstr "Bulharština" msgid "Bulk delete" msgstr "Hromadné smazání" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Šikana, opakovaný nevyžádaný kontakt, pronásledování nebo cílené obtěžování." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Šikana, výhrůžky, nenávist, násilí, nájezdy nebo obsah nabádající k sebepoškozování." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornie" msgid "Call" msgstr "Volání" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Nastavení hovorů a skupinových konverzací" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Změnit banner" msgid "Change chat embed background" msgstr "Změnit pozadí vložené pozvánky v chatu" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Změnit e-mail" @@ -7150,8 +7116,8 @@ msgstr "Změnit přezdívku přítele" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Změnit přezdívku skupiny" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Změnit jazyk" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Změnit mou přezdívku ve skupině" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Změnit vlastní přezdívku" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Změnit vlastníka" @@ -7283,16 +7249,6 @@ msgstr "Změnit hlasový region, který používá hlasový kanál." msgid "Change which voice region this channel uses." msgstr "Změnit hlasový region, který používá tento kanál." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Změňte, kdo vám může volat nebo vás přidat." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Změňte, kdo vás může kontaktovat." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Zkontrolujte si doručenou poštu na adrese {emailAddress}, kde najdete msgid "Check your inbox for a verification email." msgstr "Zkontrolujte si doručenou poštu, zda vám nepřišel ověřovací e-mail." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Zkontrolujte své nahlášení" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Zaškrtávací políčka" @@ -7901,21 +7862,6 @@ msgstr "Nákupy jsou pro tento účet zablokovány. Pokud potřebujete pomoc, na msgid "Checkout unavailable" msgstr "Dokončení nákupu není k dispozici" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Obavy o bezpečnost dětí" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Bezpečnost dětí nebo zneužívání nezletilých" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Bezpečnost dětí nebo obsah pro dospělé" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Volby" msgid "Choices: {choiceList}" msgstr "Volby: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Vybrat" @@ -8122,6 +8068,11 @@ msgstr "Vyberte kategorii, která nejlépe popisuje vaši komunitu. Můžete to msgid "Choose the premium model" msgstr "Vyberte prémiový model" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Zvolte důvod znovu" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Převzít dárek" msgid "Claim your account" msgstr "Dokončit registraci účtu" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Dokončete registraci účtu a ověřte svůj e-mail, abyste mohli odesílat nahlášení." @@ -8352,12 +8303,12 @@ msgstr "Pro uplatnění tohoto dárku dokončete registraci účtu." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Pro odesílání žádostí o přátelství dokončete registraci účtu." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Uplatněte svůj účet pro odesílání nahlášení." @@ -8378,11 +8329,6 @@ msgstr "Dokončete registraci účtu, abyste mohli zahajovat hovory mezi dvěma msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Převezměte dárek a aktivujte si předplatné {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Vydávání se za jinou osobu, značku nebo organizaci." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Vymazat vyhledávací pole" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Zavřít dialog" msgid "Close popout" msgstr "Zavřít vyskakovací okno" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Zavřít tuto soukromou konverzaci" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Zavřít do oznamovací oblasti" msgid "Close window" msgstr "Zavřít okno" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Zavřít aktuální soukromou konverzaci s uživatelem {dmDisplayName}. Tímto uživatele nezablokujete a konverzaci můžete později znovu otevřít." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Zavřít soukromou konverzaci s uživatelem {displayName}? Můžete ji kdykoli znovu otevřít." @@ -8837,7 +8773,7 @@ msgstr "Uhelný motiv" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kód" @@ -8868,7 +8804,7 @@ msgstr "Kód z aplikace {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kód znovu odeslán" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Komunity, ke kterým se můžete připojit" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Komunita" @@ -9131,7 +9065,7 @@ msgstr "Vypnout zvuk v komunitě" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Ladění komunity" @@ -9150,16 +9084,6 @@ msgstr "Komunita smazána" msgid "Community DM" msgstr "Přímé zprávy od členů komunity" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Komunita existuje za účelem spamování, podvodů nebo zneužívání platformy." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Komunita umožňuje hromadné útoky nebo cílené obtěžování." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ikona komunity" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID komunity" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Je vyžadováno ID komunity." @@ -9526,6 +9450,11 @@ msgstr "Potvrďte nové heslo" msgid "Confirm password" msgstr "Potvrďte heslo" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Potvrďte prohlášení pro odeslání nahlášení." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Pokračovat v prohlížeči" msgid "Continue to checkout" msgstr "Pokračovat k platbě" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Pokračovat v nahlášení komunity" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Pokračovat v nahlášení uživatele" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Převodem tohoto kanálu na textový kanál se odstraní všechny kanál msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Převede příchozí obsah na řeč, bez ohledu na to, zda pochází z /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinuje nájezdy, hromadné útoky nebo obtěžování lidí či komunit." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Adresa URL zkopírována do schránky" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Adresa URL zkopírována do schránky" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopírovat ID zprávy" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopírovat odkaz na zprávu" @@ -10643,6 +10553,11 @@ msgstr "Nepodařilo se načíst příspěvky. Zkuste to později." msgid "Couldn't load settings" msgstr "Nastavení se nepodařilo načíst" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nepodařilo se načíst formulář nahlášení." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nepodařilo se načíst tuto aplikaci" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nepodařilo se zpracovat obrázek" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nepodařilo se publikovat tuto zprávu" @@ -10825,11 +10740,6 @@ msgstr "Nepodařilo se odeslat pozvánku" msgid "Couldn't send invite. Try again." msgstr "Nepodařilo se odeslat pozvánku. Zkuste to znovu." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nepodařilo se odeslat. Zkuste to znovu." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Odpočítávání" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Země bydliště" @@ -11301,13 +11211,8 @@ msgstr "Vytvořeno:" msgid "Credentials" msgstr "Přihlašovací údaje" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Věrohodné hrozby, explicitní násilí nebo oslavování násilí." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Chorvatsko" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Potlačuje zvuk pod zvolenou úrovní hlasitosti s minimální zátěží procesoru." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Kypr" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Čeština" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Česká republika" @@ -11965,7 +11870,7 @@ msgstr "Ladit kanál" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Ladit komunitu" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Smazat motiv?" msgid "Delete this invite? Can't be undone." msgstr "Smazat tuto pozvánku? Nelze vrátit zpět." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Smazat tuto zprávu" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Smazat tuto zprávu? Nelze vrátit zpět." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Smazat tuto zprávu? Nelze vrátit zpět. Tato zpráva bude také odebrána z každé komunity, která tento kanál sleduje." @@ -12461,11 +12359,6 @@ msgstr "Smazat vaše zprávy v této komunitě?" msgid "Delete your messages in this conversation?" msgstr "Smazat vaše zprávy v této konverzaci?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Smazáno" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Odepřena oprávnění {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dánsko" @@ -12554,11 +12447,6 @@ msgstr "Popište samolepku" msgid "Describe this media for screen readers" msgstr "Popište tento mediální soubor pro čtečky obrazovky" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Popište, proč je obsah nezákonný" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Odpojený banner" msgid "Detail" msgstr "Detail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Podrobnosti" @@ -13315,11 +13203,6 @@ msgstr "Zobrazované jméno (volitelné)" msgid "Display scaling" msgstr "Měřítko zobrazení" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Šíří malware, nástroje pro krádež přihlašovacích údajů nebo jiné škodlivé soubory." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "SZ" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Nastavení přímých zpráv a žádostí o přátelství" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentace" msgid "Doesn't allow being added to group DMs" msgstr "Nepovoluje přidání do skupinových konverzací" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Neblokuje. Můžete znovu otevřít později." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Darovat místo toho" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Stáhnout zdrojové mapy, aby se zásobníkové výpisy a vývojářské msgid "Download video" msgstr "Stáhnout video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, zveřejnění soukromých informací nebo stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, vydávání se za někoho nebo nevhodný profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Upravit barvu pro {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Upravit profil v komunitě" @@ -14043,7 +13908,7 @@ msgstr "Upravovat vlastní oprávnění rolí a členů v tomto kanálu." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Upravit profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Upravit místní čas profilu" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Upravit publikovanou zprávu?" @@ -14191,13 +14056,13 @@ msgstr "Nárok na vrácení peněz do {windowEndsOn}. Tím se také okamžitě z #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-mailová adresa" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Je vyžadována e-mailová adresa." @@ -14721,16 +14586,6 @@ msgstr "Preferovaný enkodér pro nová sdílení obrazovky." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodér, SVC a předvolby přenosové rychlosti" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Podněcuje sebepoškozování" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Podněcuje k sebevraždě, sebepoškozování nebo poruchám příjmu potravy." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Koncové šifrování není k dispozici, protože ho některý z účast msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Koncové šifrování není k dispozici, protože ho některý z účastníků tohoto hlasového kanálu nepodporuje." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Ohrožuje nezletilé nebo hostuje obsah zobrazující zneužívání dětí." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Zadejte kód ve formátu ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Zadejte platnou URL nebo kód šablony platformy {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Zadejte platnou e-mailovou adresu." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Zadejte platný odkaz na zprávu." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Zadejte {digitCount}místný kód ze své ověřovací aplikace." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Před pokračováním zadejte kód." @@ -15008,7 +14858,7 @@ msgstr "Enter pro <0><1>uložení" msgid "Enter username" msgstr "Zadejte uživatelské jméno" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Zadejte ověřovací kód" @@ -15017,6 +14867,11 @@ msgstr "Zadejte ověřovací kód" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Zadejte svou e-mailovou adresu a my vám pošleme odkaz pro resetování hesla." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Zadejte své celé jméno a příjmení pro odeslání nahlášení." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape pro <0><1>zrušení" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonsko" @@ -15412,6 +15267,16 @@ msgstr "Platí do {earliest}" msgid "Expires:" msgstr "Vyprší:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Popište problém" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Popište problém pro odeslání nahlášení." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Externí odkazy mohou být nebezpečné. Buďte opatrní." msgid "Extra large" msgstr "Extra velké" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremistická komunita" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Nepodařilo se odebrat vlastní odkaz na pozvánku. Zkuste to znovu." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Kód se nepodařilo odeslat znovu. Zkuste to prosím znovu." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Nepodařilo se resetovat stav prémiového účtu." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Nepodařilo se odeslat kód. Zkuste to znovu." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Zprávu se nepodařilo odeslat. Podržením zobrazíte možnosti." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Nepodařilo se odeslat nahlášení. Zkuste to znovu." @@ -15840,11 +15700,6 @@ msgstr "Nahrání emoji počínaje {startLabel} se nezdařilo: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Nepodařilo se nahrát emoji. Zkuste to znovu." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Nepravdivá tvrzení, která pravděpodobně způsobí skutečnou újmu." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Najděte perfektní samolepku" msgid "Fingerprint" msgstr "Otisk prstu" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Dokončit nastavení účtu" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Nejprve dokončete nastavení účtu" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Dokončete registraci a poté můžete posílat žádosti o přátelství." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finsko" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finština" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Jméno a příjmení" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Snímková frekvence nad 30 FPS vyžaduje {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francie" @@ -16834,10 +16689,10 @@ msgstr "Celá" msgid "Full dynamic range" msgstr "Plný dynamický rozsah" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Celé jméno a příjmení" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Celé jméno a příjmení (volitelné u nahlášení sexuálního zneužívání dětí)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Němčina" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Německo" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Zpět" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Vraťte se a zadejte platný e-mail." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Rádi vás vidíme, {username}! Vítejte." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Řecko" @@ -17572,11 +17427,6 @@ msgstr "Řečtina" msgid "Grid view" msgstr "Zobrazení mřížky" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Navazování kontaktu s dětmi za účelem zneužití nebo obsah zobrazující zneužívání dětí." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Uživatelské jméno" msgid "Hang out with voice, video and screen share" msgstr "Popovídejte si hlasem, videem a sdílením obrazovky" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Obtěžování" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Obtěžování zahrnující obsah pro dospělé" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Obtěžování nebo šikana" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Obtěžování nebo pronásledování" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Obtěžování nebo cílené útoky" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Obtěžování nebo hrozby" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardwarový klíč" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardwarově akcelerováno na většině systémů Windows a macOS. Spolehlivé pro starší zařízení." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Škodlivé dezinformace" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Má historii nákupů" msgid "Has ever purchased override" msgstr "Přepsání příznaku historie nákupů" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Nenávistné projevy" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Skrýt vlastní sdílení obrazovky?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Skryje tlačítka pro stažení, otevření v prohlížeči a kopírování u obrázků a videí v tomto kanálu." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Skryje zprávy od této osoby a zabrání jí posílat vám zprávy" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Maďarština" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Maďarsko" @@ -18399,6 +18212,11 @@ msgstr "Jsem popisek" msgid "I changed my mind" msgstr "Rozmyslel(a) jsem si to" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Potvrzuji v dobré víře, že informace a tvrzení uvedená v tomto nahlášení jsou přesná a úplná." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Nastavení neaktivity" msgid "Idle timeout" msgstr "Časový limit neaktivity" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Pokud se jedná o nezletilou osobu, použijte místo toho důvod „{childSafetyReasonName}“." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Pokud účet s touto adresou existuje, odeslali jsme na ni pokyny k rese msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Pokud vás macOS vyzve k ukončení a znovuotevření aplikace {productName}, zvolte Později." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Pokud někomu může hrozit bezprostřední nebezpečí, kontaktujte místní záchranné složky, pokud to můžete udělat bezpečně." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Pokud je někdo v bezprostředním nebezpečí, nejprve kontaktujte místní záchranné složky." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Pokud vám někdo řekl, abyste sem něco vložili, je to podvod, který by mu mohl dát přístup k vašemu účtu {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Pokud se jedná o CSAM nebo zneužívání nezletilých, odešlete nahlášení hned a materiál dál nesdílejte." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Pokud jde o věrohodnou bezprostřední hrozbu, kontaktujte také místní záchranné složky." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Pokud se jedná o bezprostřední teroristickou hrozbu, kontaktujte také místní záchranné složky." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Pokud se toto nahlášení týká konkrétní zprávy v této komunitě, nahlaste místo toho tuto zprávu. Nahlášení zpráv poskytuje našemu bezpečnostnímu týmu nejjasnější kontext a přidání podrobností do komentářů nám může pomoci s rychlejším posouzením. Pokračujte v nahlášení komunity jako celku pouze v případě, že nahlášení zprávy by nevystihovalo širší problém." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Pokud se toto nahlášení týká konkrétní zprávy, nahlaste místo toho tuto zprávu. Nahlášení zpráv poskytuje našemu bezpečnostnímu týmu nejjasnější kontext a přidání podrobností do komentářů nám může pomoci s rychlejším posouzením. Pokračujte v nahlášení uživatele jako celku pouze v případě, že tato zpráva nezachycuje širší problém." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Pokud se toto nahlášení týká konkrétních zpráv, nahlaste místo toho tu nejrelevantnější. Nahlášení zpráv poskytuje našemu bezpečnostnímu týmu nejjasnější kontext a přidání podrobností do komentářů nám může pomoci s rychlejším posouzením. Pokračujte v nahlášení uživatele jako celku pouze v případě, že nahlášení zprávy by nevystihovalo širší problém." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Pokud se domníváte, že je to nelegální, uveďte, o jaký zákon se jedná a proč." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorovat čekací dobu pomalého režimu v tomto kanálu." msgid "Ignore virtual" msgstr "Ignorovat virtuální" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Nezákonná aktivita" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Nezákonná činnost nebo něco jiného" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Nezákonný prodej, napomáhání trestné činnosti nebo jasné porušení pravidel, které nespadá do výše uvedených kategorií." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Nezákonný prodej, napomáhání trestné činnosti nebo nezákonná činnost." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Obrázky" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Obrázky vložené ze schránky se odesílají jako přílohy a vy nemáte oprávnění připojovat soubory v tomto kanálu." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Vydávání se za někoho jiného" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Vydávání se za někoho jiného nebo klamavá média" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Neaktivní" msgid "Inactive timeout" msgstr "Časový limit neaktivity" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Nevhodný profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Zahrnout mé dvoufaktorové záložní kódy do PDF a tisku" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Zadejte ID komunity." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Pozadí pozvánky" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kód pozvánky (volitelné)" @@ -19471,7 +19220,7 @@ msgstr "Maskování pozvánek" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Pozvat členy" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP adresa autorizována" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irsko" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kurzíva" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Itálie" @@ -20120,7 +19869,7 @@ msgstr "Klávesy" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Později" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lotyšsko" @@ -20291,11 +20040,6 @@ msgstr "Zjistit více" msgid "Learn more about Visionary" msgstr "Další informace o Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Opustit" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Opustit soukromé vlákno" msgid "Leave silently" msgstr "Opustit potichu" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Opustit komunitu" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Zobrazuje členy s touto rolí v samostatné sekci v seznamu členů." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litva" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Načítání..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Načítání…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Nízká" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Lucembursko" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Údržba je naplánována na {localizedTime}. Předpokládaná doba trvání: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Chcete, aby se uživatel {userName} stal vlastníkem skupiny? Ztratíte oprávnění vlastníka." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Nastavit jako vlastníka skupiny" @@ -21091,38 +20830,21 @@ msgstr "Nastavit jako vlastníka skupiny" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Ujistěte se, že se tento kód shoduje s kódem v aplikaci {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Ujistěte se, že to před odesláním vypadá správně." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Přizpůsobte si instanci" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Škodlivé odkazy" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Šíření malwaru" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware nebo nebezpečné odkazy" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, krádež přihlašovacích údajů nebo škodlivé soubory." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskujte soukromé údaje před sdílením obrazovky nebo streamu." msgid "Mask Visionary as subscription" msgstr "Maskovat Visionary jako předplatné" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Hromadný spam, podvody, falešné soutěže nebo zneužití účtu." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Omezení přístupu k médiím pro dospělé" msgid "Mature content not allowed" msgstr "Obsah pro dospělé není povolen" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Obsah pro dospělé nebo obtěžování" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Obsah pro dospělé nebo nedostatečné omezení přístupu" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Vlastní nastavení obsahu pro dospělé" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Porušení zásad pro obsah pro dospělé" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Obsah pro dospělé bez řádného omezení přístupu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Zpráva" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "odkaz na zprávu" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Odkaz na zprávu" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Náhledy zpráv v seznamu přímých zpráv" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Zpráva publikována" @@ -22211,6 +21908,11 @@ msgstr "Čas zprávy" msgid "Message unpinned" msgstr "Zpráva odepnuta" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Zpráva, kterou nahlašujete" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Ohrožení nezletilých, obsah pro dospělé na nevhodném místě nebo nežádoucí chování." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Více" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Další akce" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Vnořené" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nizozemsko" @@ -24099,7 +23796,7 @@ msgstr "Žádné výsledky" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nebyly nalezeny žádné výsledky" @@ -24858,6 +24555,16 @@ msgstr "Tuto konverzaci uvidí pouze lidé, které pozvete, a moderátoři." msgid "Only places I can't access anymore" msgstr "Pouze místa, ke kterým už nemám přístup" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Nahlašujte jen to, o čem jste upřímně přesvědčeni, že porušuje pravidla, a prosím, neodesílejte stejné nahlášení dvakrát." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Nahlašujte jen to, o čem jste upřímně přesvědčeni, že porušuje pravidla. Zneužití nahlášení porušuje naše <0>pravidla komunity." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Neprůhlednost" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Otevřít na {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Otevřít vyskakovací okno" @@ -25379,11 +25084,6 @@ msgstr "Otevřete Nastavení systému → Soukromí a zabezpečení → Nahráv msgid "Open template JSON" msgstr "Otevřít šablonu JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Otevřít dialog pro zabanování v této komunitě." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Otevřít nastavení" msgid "Opened the thread again" msgstr "Vlákno bylo znovu otevřeno" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Otevře se v nové kartě" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Původně zabanován(a) {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Jiné" @@ -25654,11 +25357,6 @@ msgstr "Další reakce…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Náš bezpečnostní tým nahlášení prověřuje. Jakmile rozhodneme, pošleme vám přímou zprávu a e-mail." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Vlastnictví se momentálně nepodařilo převést na uživatele <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Vlastnictví bylo převedeno" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Vložte sem odpověď JSON" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Vložte odkaz na zprávu." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, podvody, škodlivé odkazy nebo falešná tvrzení, která pravděpodobně způsobí skutečnou škodu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Vyberte poskytovatele webového vyhledávání" msgid "Pick an emoji" msgstr "Vyberte emotikon" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Vyberte možnost pro pokračování." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Vyberte 4místné číslo za svým uživatelským jménem" msgid "Pick the appearance this administrator account should start with." msgstr "Vyberte vzhled, se kterým by měl tento účet správce začít." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Vyberte pravidlo k revizi." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Počkejte chvíli a zkuste přejmenování znovu." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polsko" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugalsko" @@ -26872,11 +26555,6 @@ msgstr "klepnutím přidáte reakci" msgid "press to remove reaction" msgstr "klepnutím odeberete reakci" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Vydávání se za někoho jiného, včetně klamavého obsahu vytvořeného umělou inteligencí." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Zabránit uživateli <0>{targetUserTag} po určenou dobu odesílat zprávy, reagovat a připojovat se k hlasovým kanálům." @@ -27078,11 +26756,6 @@ msgstr "Prioritní mluvčí" msgid "Privacy" msgstr "Soukromí" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Soukromí nebo vydávání se za někoho jiného" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Nastavení soukromí" msgid "Privacy URL" msgstr "URL zásad ochrany osobních údajů" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Porušení soukromí" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Porušení soukromí nebo doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Porušení soukromí nebo pronásledování" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Typ profilu" msgid "Profile updated" msgstr "Profil aktualizován" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Porušení pravidel v profilu, uživatelském jménu nebo avataru" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Podněcuje nenávist vůči chráněným skupinám." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Propaguje násilné extremistické aktivity, získává pro ně nové členy nebo je koordinuje." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Propagace nebo návod k sebepoškozování či poruchám příjmu potravy." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil, který nahlašujete" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Zájmena: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Chraňte svůj účet Visionary povolením dvoufaktorového ověřování. Děkujeme, že podporujete {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Zadejte alespoň ID uživatele nebo uživatelskou značku." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Zadejte ID uživatele nebo uživatelské jméno osoby, kterou nahlašujete." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Uveďte své celé jméno, které je uvedeno v úředních dokumentech." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Přepínače umožňují vybrat jednu možnost ze skupiny." msgid "Radio group" msgstr "Skupina přepínačů" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Koordinace nájezdu" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Chcete koupit dárek?" msgid "Ready to upgrade?" msgstr "Chcete upgradovat?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Důvod" @@ -28291,8 +27924,8 @@ msgstr "Pamatovat si velikost a pozici okna" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Odebrat {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Odebrat uživatele {userName} ze skupiny?" @@ -28419,8 +28052,8 @@ msgstr "Odebrat z oblíbených" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Odebrat ze skupiny" @@ -28458,11 +28091,6 @@ msgstr "Odebrat z oblíbených GIFů uložených pouze jako URL" msgid "Remove icon" msgstr "Odebrat ikonu" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Odstranit z kanálu pro všechny." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Odebráno z oblíbených" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Odebrán(a) ze skupiny" @@ -28919,28 +28547,18 @@ msgstr "Nahlásit komunitu" msgid "Report a message" msgstr "Nahlásit zprávu" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Nahlaste porušení pravidel nebo najděte nástroje pro správu kontaktů a předvoleb." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Nahlásit profil uživatele" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Nahlásit komunitu" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Podrobnosti nahlášení" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Nahlásit nelegální obsah" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Nahlásit problém" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Nahlásit zprávu" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Nahlásit profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Nahlášení odesláno" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Typ nahlášení" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Nahlásit uživatele" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Uživatelská značka nahlášeného uživatele (volitelné)" @@ -29100,6 +28716,10 @@ msgstr "Vyžaduje vše ze střední úrovně a navíc členství v komunitě po msgid "Resend" msgstr "Znovu odeslat" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Znovu odeslat ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Znovu odeslat ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Znovu odeslat ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Znovu odeslat ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Znovu odeslat ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Znovu odeslat ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Znovu odeslat ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Znovu odeslat kód" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Role úspěšně aktualizovány" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumunsko" @@ -29947,7 +29567,7 @@ msgstr "Sytost" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Pozdravte <0>{displayName}. Zde začíná vaše soukromá konverzace msgid "Scale" msgstr "Měřítko" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Podvody, malware nebo dezinformace" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Naskenujte QR kód svou ověřovací aplikací." @@ -30855,11 +30470,6 @@ msgstr "Vybrat" msgid "Select {accessibleName}" msgstr "Vybrat {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Vyberte kategorii" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Vyberte komunitu, ve které máte oprávnění {permissionName}, nebo skupinovou konverzaci, jejímž jste členem." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Vyberte zemi" @@ -30911,11 +30521,6 @@ msgstr "Vyberte URI přesměrování" msgid "Select a scenario to apply..." msgstr "Vyberte scénář, který chcete použít…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Vyberte kategorii porušení." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Vyberte účet, ke kterému se chcete přihlásit na novém zařízení. msgid "Select voice processing mode" msgstr "Vyberte režim zpracování hlasu" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Vyberte, co chcete nahlásit." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Vyberte zemi svého pobytu." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Vybrat…" @@ -31037,13 +30642,6 @@ msgstr "Výběr: {0} (max. {1})" msgid "Selections" msgstr "Výběry" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Sebepoškozování nebo sebevražda" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Odeslat zprávu popisující akci (zobrazí se kurzívou)." msgid "Send animation" msgstr "Odeslat animaci" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Odeslat další nahlášení" @@ -31138,7 +30736,7 @@ msgstr "Tlačítko Odeslat" msgid "Send code" msgstr "Odeslat kód" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Odeslat nahlášení podle DSA" @@ -31158,9 +30756,9 @@ msgstr "Odesílejte soubory až do velikosti {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Poslat žádost o přátelství" @@ -31220,8 +30818,8 @@ msgstr "Odesílat zprávy ve vláknech" msgid "Send messages, images, GIFs and emoji" msgstr "Odesílejte zprávy, obrázky, GIFy a emotikony" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Odeslat nahlášení" @@ -31255,7 +30853,7 @@ msgstr "Poslat tento připnutý příspěvek zpět v čase?" msgid "Send TTS messages" msgstr "Odesílat zprávy převodem textu na řeč" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Odeslat ověřovací kód" @@ -31273,11 +30871,6 @@ msgstr "Odeslat hlasovou zprávu" msgid "Send:" msgstr "Odesílání:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Odesílání malwaru nebo nebezpečných odkazů" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Sdílet motiv" msgid "Share voice activity with all friends?" msgstr "Sdílet hlasovou aktivitu se všemi přáteli?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Popište, co náš tým potřebuje k posouzení." @@ -31709,11 +31302,6 @@ msgstr "Popište, co náš tým potřebuje k posouzení." msgid "Share with a friend" msgstr "Sdílet s přítelem" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Sdílet s moderátory komunity." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Sdílené okno" msgid "Shared window audio" msgstr "Zvuk sdíleného okna" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Sdílí osobní údaje, pronásleduje uživatele nebo koordinuje narušování soukromí." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Sdílení osobních údajů" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Posuvníky" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovensko" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovinsko" @@ -32889,11 +32467,6 @@ msgstr "Simulace pomalého režimu" msgid "Slowmode time remaining" msgstr "Zbývající čas pomalého režimu" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Nadávky, dehumanizující jazyk nebo útoky na chráněné skupiny." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Při přípravě této samolepky se něco pokazilo. Zkuste jiný soubor nebo to zkuste znovu za chvíli." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Něco se pokazilo při publikování. Zkuste to za chvíli znovu." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Prostorné rozvržení s jasným vizuálním oddělením mezi zprávami." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Španělsko" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamový účet" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Klasifikace spamu" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam nebo podvod" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Komunita šířící spam nebo podvody" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Účet šířící spam, podvody nebo phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, podvody nebo phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Začít minimalizováno" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Začít znovu" @@ -33752,22 +33302,26 @@ msgstr "Zůstat přihlášen" msgid "Step {current} of {total}" msgstr "Krok {current} z {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Krok 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Krok 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Krok 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Krok 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Krok 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Přestat být kanálem oznámení?" msgid "Stop hiding muted channels by default?" msgstr "Přestat ve výchozím nastavení skrývat ztlumené kanály?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Zastavit zprávy a žádosti o přátelství." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Zastavit test mikrofonu" @@ -33959,11 +33508,6 @@ msgstr "Přestat upravovat Node.prototype insertBefore a removeChild. Aplikace z msgid "Stop ringing" msgstr "Zastavit vyzvánění" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Přestanete vídat její obsah a členy." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Při odesílání zpráv nahrazovat běžné textové emotikony, například :) a <3, emoji" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Švédsko" @@ -34804,11 +34348,6 @@ msgstr "Klepnutím přidáte poznámku" msgid "tar.gz archive" msgstr "Archiv tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Cílí na lidi podle chráněných charakteristik." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Podmínky služby" msgid "Terms URL" msgstr "URL podmínek" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terorismus nebo násilný extremismus" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thajština" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Děkujeme, že pomáháte udržovat {productName} v bezpečí. Vaše nahlášení posoudíme co nejdříve." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Děkujeme, že jste na to upozornili" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Děkujeme, že jste nám to oznámili. Samo o sobě to naše pravidla neporušuje, proto jsme neodeslali žádné nahlášení." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Děkujeme, že jste nám to oznámili. Samo o sobě to naše pravidla neporušuje, proto jsme neodeslali žádné nahlášení. Pokud to míří na někoho nebo obsahuje urážky, nahlaste to znovu a vyberte „Zneužívající nebo škodlivý obsah“." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "To nefungovalo. Zkuste to znovu nebo zrušte." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Nevypadá to jako platná barva. Zkuste hex, rgb(), hsl() nebo název barvy CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Nevypadá to jako platná adresa URL." @@ -35104,6 +34653,11 @@ msgstr "Aplikace {PRODUCT_NAME} na vašem druhém zařízení se zobrazí pod mo msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Aplikace {PRODUCT_NAME} nebyla přihlášena. Tuto kartu můžete zavřít." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Tým bezpečnosti {productName} vaše nahlášení posoudí. Neprozradíme, že pochází od vás." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Zadané redirect_uri není pro tuto aplikaci zaregistrováno." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Zadané redirect_uri musí používat HTTP nebo HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Formulář nahlášení se změnil. Začněte prosím znovu." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Názvy uživatelů na této instanci jsou již nastaveny. Nelze je již změnit." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Ověřovací kód je neplatný nebo vypršel." @@ -36115,13 +35674,8 @@ msgstr "Tento člen už není připojen k hlasovému chatu." msgid "This message can only be forwarded to age-restricted channels" msgstr "Tuto zprávu lze přeposlat pouze do kanálů s omezeným věkem" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Tato zpráva již byla smazána." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Tato zpráva již byla publikována" @@ -36279,11 +35833,6 @@ msgstr "Tato konverzace je uzavřená. Odesláním zprávy se znovu otevře." msgid "This thread is locked. Only moderators can send messages." msgstr "Tato konverzace je uzamčena. Zprávy mohou posílat pouze moderátoři." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "tento uživatel" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Tento uživatel si omezil svůj profil. Některé detaily jsou skryté před lidmi, kteří nejsou jeho přáteli." @@ -36292,11 +35841,6 @@ msgstr "Tento uživatel si omezil svůj profil. Některé detaily jsou skryté p msgid "This user has no roles in this community." msgstr "Tento uživatel nemá v této komunitě žádné role." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Tento uživatel už má v komunitě ban." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Tento uživatel již není k dispozici." @@ -36465,16 +36009,6 @@ msgstr "Vlákno aktualizováno" msgid "Threads" msgstr "Vlákna" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Vyhrožování, pronásledování na různých místech nebo nevyžádaný kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Vyhrožování, obtěžování nebo újma" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Uživatel {targetUserTag} byl dočasně omezen" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Dočasné omezení" @@ -36787,6 +36321,11 @@ msgstr "Tón" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Převést HDR snímky do standardního rozsahu, čímž se sníží maximální jas." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Bylo odesláno příliš mnoho kódů. Počkejte {duration} a zkuste to znovu." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Převést vlastnictví komunity" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Předat vlastnictví skupiny uživateli {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Nejprve tohoto uživatele odblokujte, abyste mu mohli poslat žádost o #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Odblokovat uživatele" @@ -37607,16 +37146,6 @@ msgstr "Zapnout zvuk na všech zařízeních" msgid "Undeafen yourself" msgstr "Zapnout si zvuk" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Nedostatečný věk nebo obavy o bezpečnost dětí" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Uživatel mladší než povolený věk" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Dokud to znovu nezapnu" msgid "Unverified email" msgstr "Neověřený e-mail" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Nevhodné chování nebo obsah pro dospělé na nesprávném místě." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Nevhodné chování, komentáře nebo žádosti s dospělým obsahem." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Až {DISCOVERY_MAX_TAGS} štítků pomůže lidem najít vaši komunitu. Zobrazují se ve vyhledávání v Objevování." @@ -38840,11 +38359,6 @@ msgstr "Použít světlý motiv" msgid "Use native title bar" msgstr "Použít nativní záhlaví" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Použijte pouze v případě, že jasně porušuje pravidla {productName} a nespadá do výše uvedených kategorií." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Použito pouze v této komunitě." msgid "User" msgstr "Uživatel" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Uživatel je zřejmě mladší než povolený věk nebo se podílí na navazování důvěrného kontaktu s dětmi za účelem jejich zneužití či na vykořisťování dětí." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Ladění uživatele" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID uživatele (volitelné)" @@ -39061,12 +38570,12 @@ msgstr "Uživatel nenalezen" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profil uživatele" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profil uživatele: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Uživatelské nastavení" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Uživatelská značka (volitelné)" @@ -39339,7 +38848,7 @@ msgstr "Ověřená komunita" msgid "Verify" msgstr "Ověřit" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Ověřit kód" @@ -39368,7 +38877,7 @@ msgstr "Ověřte, že jste to vy" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Ověřte svůj e-mail" @@ -39718,7 +39227,7 @@ msgstr "Zobrazit kódy" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Zobrazit profil pro tuto komunitu" @@ -39751,7 +39260,7 @@ msgstr "Zobrazit dárky" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Zobrazit globální profil" @@ -39847,26 +39356,6 @@ msgstr "Divák začne sledovat stream" msgid "Viewer leaves stream" msgstr "Divák přestane sledovat stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategorie porušení" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Porušení je v profilu uživatele, ne v konkrétní zprávě." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Násilí nebo násilné hrozby" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Násilný nebo explicitní obsah" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Změnili jsme velikost tohoto emoji na 128x128 pixelů a zkomprimovali h msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Změnili jsme velikost této samolepky na 320x320 pixelů a zkomprimovali ji, ale stále má {fileSize}. Limit je {maxSize}. Zkuste jednodušší obrázek, méně barev nebo menší zdrojový soubor." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Kód jsme odeslali na {email}." @@ -40472,7 +39961,7 @@ msgstr "Zpracujeme to co nejdříve. Až bude váš archiv připraven, dostanete msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Obnovíme váš předchozí e-mail, odhlásíme stará připojení, zakážeme vícefaktorové ověřování a zabezpečíme váš účet novým heslem." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Pošleme vám krátký kód, abychom potvrdili, že můžete dostávat aktualizace o tomto nahlášení." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Západní Virginie" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Jaký typ pravidla byl porušen?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Co se děje?" msgid "What's new" msgstr "Co je nového" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Jaký je důvod vašeho nahlášení?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Pokud není nastavené vlastní datum zpřístupnění historie, členové bez oprávnění <0>{readMessageHistoryPermissionLabel} nemohou zobrazit žádné historické zprávy. Uvidí pouze zprávy přicházející v reálném čase. Po restartování aplikace jim tyto zprávy zmizí." @@ -40832,11 +40321,6 @@ msgstr "Které komunity" msgid "Which conversations" msgstr "Které konverzace" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Které pravidlo bylo porušeno?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Když je zapnutý režim Stisknutím mluvit, mikrofon ovládá klávesová zkratka, takže tlačítko ztlumení není dostupné." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "V tomto kanálu nelze připojovat soubory." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Nemůžete si přidat sami sebe do přátel" @@ -41341,7 +40825,7 @@ msgstr "Tomuto uživateli nemůžete poslat zprávu" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Musíte souhlasit s podmínkami služby, abyste mohli vytvořit účet" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Před odesláním nahlášení musíte ověřit svůj e-mail." @@ -41891,6 +41375,11 @@ msgstr "Používáte starší cenu. Aktuální cena tohoto tarifu je {currentSub msgid "You're sending messages too quickly" msgstr "Posíláte zprávy příliš rychle" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Odesíláte nahlášení příliš rychle. Zkuste to později." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Zobrazujete starší zprávy" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Přidali jste více lidí, než kolik skupinová konverzace umožňuje. Některé odeberte a zkuste to znovu." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Tuto zprávu jste již nahlásili." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Tento profil jste dnes již nahlásili." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Vaše účty a nastavení nebyly změněny ani smazány." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Vaši akci se nepodařilo dokončit, protože byla označena našimi bezpečnostními systémy. Pokud se domníváte, že jde o chybu, kontaktujte prosím podporu." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Vaše odpovědi" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Vaše žádost čeká na posouzení. Stále můžete upravovat údaje v záznamu nebo žádost stáhnout." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Váš prohlížeč vyžaduje interakci uživatele, než bude možné přehrát zvuk. Kliknutím na tlačítko níže povolíte hlasový chat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Vaše změny se projeví v každé komunitě, která tento kanál sleduje, což může chvíli trvat. Každá publikovaná zpráva umožňuje 3 rychlé úpravy, poté 1 každých 20 minut." @@ -42311,6 +41815,11 @@ msgstr "Vaše nová přezdívka. Chcete-li ji zrušit, nechte pole prázdné." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Vaše stará sada pro obnovení již nefunguje. Tuto novou si uložte na bezpečné místo." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Vaše možnosti" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "váš region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Platba za obnovení předplatného se nezdařila, ale <0/> zůstávají aktivní do <1>{graceDate}. Do té doby aktualizujte způsob platby, abyste si předplatné zachovali." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Nahlášení se nepodařilo odeslat. Zkuste to znovu." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Vaše předplatné se při příštím obnovení změní na roční fakt msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Kód CSS vašeho motivu je příliš velký na sdílení. Zkraťte ho a zkuste to znovu." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Vaše uživatelské jméno (volitelné)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 1a68b440d..59dd92671 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} tilbage" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {medlem} other {medlemmer}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Dit invitationslink udløber om # sekund.} other {Dit invitationslink udløber om # sekunder.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} valgt" @@ -2957,11 +2957,6 @@ msgstr "Kontodata" msgid "Account details unavailable" msgstr "Kontooplysninger utilgængelige" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Kontoen eksisterer for at spamme, svindle eller misbruge platformen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Tilføjet: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Tilføjet: {createdDate} • sidst brugt: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Yderligere kommentarer (valgfrit)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Allerede indløst" msgid "Already set to cancel" msgstr "Allerede opsagt" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Anmeld også denne besked til sikkerhedsteamet hos {productName}" @@ -4576,11 +4566,6 @@ msgstr "Årlig" msgid "Another checkbox" msgstr "Endnu et afkrydsningsfelt" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "En anden klar overtrædelse af reglerne" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Endnu et rundt afkrydsningsfelt" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Upload af lydfil" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Østrig" @@ -5620,6 +5605,7 @@ msgstr "Ikke til stede lige nu" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Ikke til stede lige nu" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Tilbage" @@ -5788,9 +5775,7 @@ msgstr "Backupkoder er fornyet" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Udeluk" @@ -5819,7 +5804,7 @@ msgstr "Varighed af udelukkelse" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Udeluk medlemmer fra fællesskabet med mulighed for at slette deres sene msgid "Ban reason" msgstr "Årsag til udelukkelse" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Udeluk denne bruger" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Båndbredde" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Udelukket" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Udelukkede {targetUserTag} fra fællesskabet" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Før dato" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgien" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Bloker" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Bloker" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Bloker {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Bloker for alle fællesskaber" msgid "Block spoiler" msgstr "Spoilerblok" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bloker denne bruger" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Bloker bruger" msgid "Blocked" msgstr "Blokeret" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blokeret" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Indbyggede oversættere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarien" @@ -6519,16 +6500,6 @@ msgstr "Bulgarsk" msgid "Bulk delete" msgstr "Masseslet" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Mobning, gentagen uønsket kontakt, stalking eller målrettet chikane." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Mobning, trusler, had, vold, raids eller indhold, der opfordrer til selvskade." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Californien" msgid "Call" msgstr "Opkald" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Indstillinger for opkald og gruppechat" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Skift banner" msgid "Change chat embed background" msgstr "Skift baggrund for chatindlejring" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Skift e-mailadresse" @@ -7150,8 +7116,8 @@ msgstr "Skift vens kaldenavn" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Skift kaldenavn i gruppen" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Skift sprog" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Skift mit kaldenavn i gruppen" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Skift eget kaldenavn" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Skift ejer" @@ -7283,16 +7249,6 @@ msgstr "Skift, hvilken taleregion en talekanal bruger." msgid "Change which voice region this channel uses." msgstr "Skift, hvilken taleregion denne kanal bruger." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Skift, hvem der kan ringe eller tilføje dig." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Skift, hvem der kan kontakte dig." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Tjek din indbakke på {emailAddress} for autorisationslinket." msgid "Check your inbox for a verification email." msgstr "Tjek din indbakke for en bekræftelsesmail." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Tjek din anmeldelse" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Afkrydsningsfelter" @@ -7901,21 +7862,6 @@ msgstr "Betaling er blokeret for denne konto. Kontakt {supportEmail}, hvis du ha msgid "Checkout unavailable" msgstr "Betaling ikke tilgængelig" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Bekymringer om børns sikkerhed" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Børnesikkerhed eller udnyttelse af mindreårige" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Børnesikkerhed eller indhold for voksne" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Valg" msgid "Choices: {choiceList}" msgstr "Valgmuligheder: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Vælg" @@ -8122,6 +8068,11 @@ msgstr "Vælg den kategori, der bedst beskriver dit fællesskab. Du kan ændre d msgid "Choose the premium model" msgstr "Vælg premium-modellen" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Vælg årsagen igen" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Indløs gave" msgid "Claim your account" msgstr "Fuldfør oprettelsen af din konto" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Fuldfør oprettelsen af din konto, og bekræft din e-mailadresse for at sende anmeldelser." @@ -8352,12 +8303,12 @@ msgstr "Fuldfør oprettelsen af din konto for at indløse denne gave." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Fuldfør oprettelsen af din konto for at sende venneanmodninger." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Gør krav på din konto for at sende rapporter." @@ -8378,11 +8329,6 @@ msgstr "Fuldfør oprettelsen af din konto for at starte eller deltage i 1:1-opka msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Indløs din gave for at aktivere dit {premiumProductName}-abonnement!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Udgiver sig for at være en anden person, et brand eller en organisation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Ryd søgefelt" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Luk dialog" msgid "Close popout" msgstr "Luk separat vindue" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Luk denne DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Luk til systembakken" msgid "Close window" msgstr "Luk vindue" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Luk din nuværende DM med {dmDisplayName}. Dette blokerer ikke brugeren, og du kan genåbne DM'en senere." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Vil du lukke din direkte samtale med {displayName}? Du kan åbne den igen når som helst." @@ -8837,7 +8773,7 @@ msgstr "Kulsort tema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kode" @@ -8868,7 +8804,7 @@ msgstr "Kode fra {productName}-appen" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kode sendt igen" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Fællesskaber du kan deltage i" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Fællesskab" @@ -9131,7 +9065,7 @@ msgstr "Slå lyden fra for medlemmet i fællesskabet" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Fejlfinding for fællesskab" @@ -9150,16 +9084,6 @@ msgstr "Fællesskab slettet" msgid "Community DM" msgstr "Fællesskabs-DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Fællesskabet eksisterer for at spamme, svindle eller misbruge platformen." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Fællesskabet fremmer koordinerede angreb eller målrettet chikane." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Fællesskabsikon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Fællesskabs-ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Fællesskabs-ID er påkrævet." @@ -9526,6 +9450,11 @@ msgstr "Bekræft ny adgangskode" msgid "Confirm password" msgstr "Bekræft adgangskode" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Bekræft erklæringen for at sende anmeldelsen." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Fortsæt i din browser" msgid "Continue to checkout" msgstr "Fortsæt til betaling" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Fortsæt med at anmelde fællesskab" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Fortsæt med at anmelde bruger" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Konvertering af denne kanal til en tekstkanal fjerner alle kanaler, der msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Konverterer indgående indhold til tale, uanset om det kom fra /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinerer raids, organiserede angreb eller chikane mod personer eller fællesskaber." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL kopieret til udklipsholder" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL kopieret til udklipsholder" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopiér besked-ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopiér link til besked" @@ -10643,6 +10553,11 @@ msgstr "Kunne ikke indlæse opslag. Prøv igen senere." msgid "Couldn't load settings" msgstr "Kunne ikke indlæse indstillinger" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Kunne ikke indlæse anmeldelsesformularen." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Kunne ikke indlæse denne app" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Kunne ikke behandle billede" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Kunne ikke udgive denne besked" @@ -10825,11 +10740,6 @@ msgstr "Kunne ikke sende invitation" msgid "Couldn't send invite. Try again." msgstr "Kunne ikke sende invitation. Prøv igen." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Kunne ikke sende. Prøv igen." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Nedtællingstimer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Bopælsland" @@ -11301,13 +11211,8 @@ msgstr "Oprettet:" msgid "Credentials" msgstr "Loginoplysninger" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Troværdige trusler, udpenslet vold eller forherligelse af vold." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatien" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Fjerner lyd under en lydstyrketærskel med minimalt CPU-forbrug." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cypern" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tjekkisk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tjekkiet" @@ -11965,7 +11870,7 @@ msgstr "Fejlfind kanal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Fejlfind fællesskab" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Slet tema?" msgid "Delete this invite? Can't be undone." msgstr "Slet denne invitation? Kan ikke fortrydes." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Slet denne besked" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Slet denne besked? Kan ikke fortrydes." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Slet denne besked? Kan ikke fortrydes. Denne besked fjernes også fra alle communities, der følger denne kanal." @@ -12461,11 +12359,6 @@ msgstr "Slet dine beskeder i dette fællesskab?" msgid "Delete your messages in this conversation?" msgstr "Slet dine beskeder i denne samtale?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Slettet" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Nægtede {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danmark" @@ -12554,11 +12447,6 @@ msgstr "Beskriv klistermærket" msgid "Describe this media for screen readers" msgstr "Beskriv dette medie for skærmlæsere" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Beskriv, hvad der gør indholdet ulovligt" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Frakoblet banner" msgid "Detail" msgstr "Detalje" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detaljer" @@ -13315,11 +13203,6 @@ msgstr "Visningsnavn (valgfrit)" msgid "Display scaling" msgstr "Skalering af visning" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuerer malware, værktøjer til at stjæle loginoplysninger eller andre skadelige filer." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Indstillinger for DM og venneanmodninger" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentation" msgid "Doesn't allow being added to group DMs" msgstr "Kan ikke føjes til gruppe-DM'er" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Blokerer ikke. Du kan genåbne senere." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donér i stedet" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Download kildekort, så stack traces og udviklerværktøjer peger på de msgid "Download video" msgstr "Hent video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, offentliggørelse af private oplysninger eller stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, at udgive sig for at være en anden eller en upassende profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Rediger farve for {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Rediger fællesskabsprofil" @@ -14043,7 +13908,7 @@ msgstr "Rediger tilpassede tilladelser for roller og medlemmer i denne kanal." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Rediger profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Rediger lokal tid for profil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Rediger opslået besked?" @@ -14191,13 +14056,13 @@ msgstr "Kan refunderes indtil {windowEndsOn}. Dette afslutter også dit abonneme #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-mailadresse" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-mailadresse er påkrævet." @@ -14721,16 +14586,6 @@ msgstr "Encoderpræference for nye skærmdelinger." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC og bitrate-forudindstillinger" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Opmuntrer til selvskade" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Opmuntrer til selvmord, selvskade eller spiseforstyrrelser." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "End-to-end-kryptering er ikke tilgængelig, fordi en deltager i dette op msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "End-to-end-kryptering er ikke tilgængelig, fordi en deltager i denne talekanal ikke understøtter funktionen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Bringer mindreårige i fare eller indeholder materiale med udnyttelse af børn." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Indtast en kode i formatet ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Indtast en gyldig skabelon-URL eller kode fra {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Indtast en gyldig e-mailadresse." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Angiv et gyldigt beskedslink." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Indtast den {digitCount}-cifrede kode fra din godkendelsesapp." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Indtast koden, før du fortsætter." @@ -15008,7 +14858,7 @@ msgstr "Tryk på Enter for at <0><1>gemme" msgid "Enter username" msgstr "Indtast brugernavn" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Indtast bekræftelseskode" @@ -15017,6 +14867,11 @@ msgstr "Indtast bekræftelseskode" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Indtast din e-mailadresse, så sender vi dig et link til at nulstille din adgangskode." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Indtast dit fulde officielle navn for at sende anmeldelsen." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Tryk på Escape for at <0><1>annullere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estland" @@ -15412,6 +15267,16 @@ msgstr "Udløber den {earliest}" msgid "Expires:" msgstr "Udløber:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Forklar problemet" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Forklar problemet for at sende anmeldelsen." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Eksterne links kan være farlige. Vær forsigtig." msgid "Extra large" msgstr "Ekstra stor" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ekstremistisk fællesskab" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Kunne ikke fjerne det brugerdefinerede invitationslink. Prøv igen." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Kunne ikke sende kode igen. Prøv igen." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Kunne ikke nulstille premium-status." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Kunne ikke sende kode. Prøv igen." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Kunne ikke sende besked. Hold nede for muligheder." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Kunne ikke sende anmeldelsen. Prøv igen." @@ -15840,11 +15700,6 @@ msgstr "Kunne ikke uploade emojis fra {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Kunne ikke uploade emojis. Prøv igen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Falske påstande, der sandsynligvis vil forårsage skade i den virkelige verden." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Find det perfekte klistermærke" msgid "Fingerprint" msgstr "Fingeraftryk" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Fuldfør kontooprettelsen" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Fuldfør først kontooprettelsen" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Fuldfør oprettelsen af din konto for at sende venneanmodninger." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finsk" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "For- og efternavn" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Billedhastigheder over 30 FPS kræver {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Frankrig" @@ -16834,10 +16689,10 @@ msgstr "Fuld" msgid "Full dynamic range" msgstr "Fuldt dynamikområde" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Fulde officielle navn" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Fulde officielle navn (valgfrit ved anmeldelser af seksuelle overgreb mod børn)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Tysk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Tyskland" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Gå tilbage" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Gå tilbage, og indtast en gyldig e-mailadresse." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Dejligt at se dig, {username}! Velkommen til." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grækenland" @@ -17572,11 +17427,6 @@ msgstr "Græsk" msgid "Grid view" msgstr "Gittervisning" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Indhold med grooming eller udnyttelse af børn." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Brugernavn" msgid "Hang out with voice, video and screen share" msgstr "Deltag med stemme, video og skærmdeling" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Chikane" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Chikane med indhold for voksne" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Chikane eller mobning" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Chikane eller stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Chikane eller målrettede overgreb" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Chikane eller trusler" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardwarenøgle" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardwareaccelereret på de fleste Windows- og macOS-systemer. Pålidelig for ældre enheder." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Skadelig misinformation" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Har købt tidligere" msgid "Has ever purchased override" msgstr "Gennemtving tidligere køb" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hadefuld tale" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Skjul din egen skærmdeling?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Skjuler knapperne for download, åbn i browser og kopiér på billeder og videoer i denne kanal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Skjuler vedkommendes beskeder og forhindrer vedkommende i at sende dig direkte beskeder" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ungarsk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungarn" @@ -18399,6 +18212,11 @@ msgstr "Jeg er et værktøjstip" msgid "I changed my mind" msgstr "Jeg har ombestemt mig" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Jeg bekræfter i god tro, at oplysningerne og påstandene i denne anmeldelse er nøjagtige og fuldstændige." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Indstillinger for inaktivitet" msgid "Idle timeout" msgstr "Inaktivitetstimeout" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Hvis en mindreårig er involveret, skal du i stedet bruge \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Hvis en konto bruger den adresse, har vi sendt den instruktioner til nul msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Hvis macOS beder om at genstarte {productName}, skal du vælge Senere." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Hvis nogen kan være i overhængende fare, skal du kontakte de lokale beredskabstjenester, hvis du kan gøre det sikkert." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Hvis nogen er i umiddelbar fare, skal du først kontakte de lokale nødtjenester." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Hvis nogen bad dig om at indsætte noget her, er det et svindelnummer, der kan give dem adgang til din {productName}-konto." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Hvis det handler om materiale med seksuelle overgreb mod børn eller udnyttelse af en mindreårig, så send anmeldelsen nu, og del ikke materialet igen." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Hvis der er tale om en troværdig, overhængende trussel, skal du også kontakte de lokale beredskabstjenester." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Hvis der er tale om en overhængende terrortrussel, skal du også kontakte de lokale beredskabstjenester." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Hvis denne anmeldelse handler om en specifik besked i dette fællesskab, skal du anmelde den besked i stedet. Beskedanmeldelser giver vores sikkerhedsteam den tydeligste kontekst, og hvis du tilføjer detaljer i kommentarerne, kan det hjælpe os med at gennemgå den hurtigere. Fortsæt kun med at anmelde fællesskabet som helhed, hvis en beskedanmeldelse ikke ville dække det bredere problem." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Hvis denne anmeldelse handler om en specifik besked, skal du anmelde den besked i stedet. Beskedanmeldelser giver vores sikkerhedsteam den tydeligste kontekst, og hvis du tilføjer detaljer i kommentarerne, kan det hjælpe os med at gennemgå den hurtigere. Fortsæt kun med at anmelde brugeren som helhed, hvis den besked ikke dækker det bredere problem." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Hvis denne anmeldelse handler om specifikke beskeder, skal du i stedet anmelde den mest relevante besked. Beskedanmeldelser giver vores sikkerhedsteam den tydeligste kontekst, og hvis du tilføjer detaljer i kommentarerne, kan det hjælpe os med at gennemgå den hurtigere. Fortsæt kun med at anmelde brugeren som helhed, hvis en beskedanmeldelse ikke ville dække det bredere problem." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Hvis du mener, at det er ulovligt, skal du angive, hvilken lov og hvorfor." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorer ventetiden i langsom tilstand i denne kanal." msgid "Ignore virtual" msgstr "Ignorer virtuelle enheder" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Ulovlig aktivitet" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Ulovlig aktivitet eller andet" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Ulovligt salg, medvirken til kriminalitet eller en klar overtrædelse af reglerne, der ikke passer ind ovenfor." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Ulovligt salg, kriminel medvirken eller ulovlig aktivitet." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Billeder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Billeder, der er indsat fra din udklipsholder, sendes som vedhæftede filer, og du har ikke tilladelse til at vedhæfte filer i denne kanal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Udgiver sig for en anden" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Udgiver sig for en anden eller bruger vildledende medier" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inaktiv" msgid "Inactive timeout" msgstr "Inaktivitetstimeout" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Upassende profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Inkluder mine to-faktor backup-koder i PDF'en og udskriften" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Inkluder fællesskabs-id'et." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Invitationsbaggrund" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Invitationskode (valgfrit)" @@ -19471,7 +19220,7 @@ msgstr "Maskering af invitationer" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Inviter medlemmer" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-adresse godkendt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursiv" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italien" @@ -20120,7 +19869,7 @@ msgstr "Taster" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Senere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letland" @@ -20291,11 +20040,6 @@ msgstr "Læs mere" msgid "Learn more about Visionary" msgstr "Lær mere om Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Forlad" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Forlad privat tråd" msgid "Leave silently" msgstr "Forlad uden besked" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Forlad fællesskabet" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Viser medlemmer med denne rolle i deres egen sektion på medlemslisten." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litauen" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Indlæser..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Indlæser…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Lavt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Vedligeholdelse er planlagt til {localizedTime}. Forventet varighed: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Gør {userName} til gruppeejer? Du mister dine ejerskabsrettigheder." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Gør til gruppeejer" @@ -21091,38 +20830,21 @@ msgstr "Gør til gruppeejer" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Sørg for, at denne kode matcher den i {PRODUCT_NAME}-appen." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Sørg for, at det ser rigtigt ud, før du sender det." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Gør din instans personlig" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Skadelige links" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribution af malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware eller farlige links" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, tyveri af loginoplysninger eller skadelige filer." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskér private detaljer, før du deler din skærm eller stream." msgid "Mask Visionary as subscription" msgstr "Vis Visionary som et abonnement" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massespam, svindel, falske konkurrencer eller misbrug af konti." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Adgangskontrol for medier med indhold for voksne" msgid "Mature content not allowed" msgstr "Indhold for voksne er ikke tilladt" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Indhold for voksne eller chikane" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Indhold for voksne eller mangelfuld afskærmning" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Tilpasset mærkning som indhold for voksne" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Overtrædelse af politikken for indhold for voksne" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Indhold for voksne uden korrekt afskærmning." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Besked" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "beskedlink" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Beskedlink" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Beskedforhåndsvisninger i DM-listen" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Besked publiceret" @@ -22211,6 +21908,11 @@ msgstr "Tidspunkt for besked" msgid "Message unpinned" msgstr "Beskedens fastgørelse fjernet" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Besked, du anmelder" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Mindreårige i fare, indhold for voksne det forkerte sted eller uønsket adfærd." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mere" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Flere handlinger" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Indlejret" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Holland" @@ -24099,7 +23796,7 @@ msgstr "Ingen resultater" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Ingen resultater fundet" @@ -24858,6 +24555,16 @@ msgstr "Kun personer, du inviterer, og moderatorer kan se denne tråd." msgid "Only places I can't access anymore" msgstr "Kun steder, jeg ikke længere har adgang til" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Anmeld kun det, du ærligt mener bryder reglerne, og send helst ikke den samme anmeldelse to gange." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Anmeld kun det, du ærligt mener bryder reglerne. Misbrug af anmeldelser går imod vores <0>retningslinjer for fællesskabet." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Uigennemsigtighed" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Åbn på {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Åbn valgliste" @@ -25379,11 +25084,6 @@ msgstr "Åbn Systemindstillinger → Anonymitet og sikkerhed → Skærmoptagelse msgid "Open template JSON" msgstr "Åbn skabelon-JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Åbn dialogboksen for udelukkelse for dette fællesskab." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Åbn dine indstillinger" msgid "Opened the thread again" msgstr "Genåbnede tråden" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Åbner i en ny fane" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Oprindeligt udelukket den {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Andet" @@ -25654,11 +25357,6 @@ msgstr "Anden reaktion …" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Vores sikkerhedsteam gennemgår den. Vi sender dig en direkte besked og en e-mail, når vi har truffet en afgørelse." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Ejerskabet kunne ikke overføres til <0>{username} på nuværende tidspunkt." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Ejerskab overført" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Indsæt JSON-svaret her" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Indsæt linket til beskeden." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, svindel, ondsindede links eller falske påstande, der sandsynligvis vil forårsage skade i den virkelige verden." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Vælg en søgemaskine" msgid "Pick an emoji" msgstr "Vælg en emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Vælg en mulighed for at fortsætte." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Vælg det 4-cifrede nummer efter dit brugernavn" msgid "Pick the appearance this administrator account should start with." msgstr "Vælg det udseende, denne administratorkonto skal starte med." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Vælg den regel, du vil gennemgå." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Vent venligst et øjeblik, og prøv at omdøbe igen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polen" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "tryk for at tilføje reaktion" msgid "press to remove reaction" msgstr "tryk for at fjerne reaktion" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "At udgive sig for at være en anden, herunder med vildledende AI-genereret indhold." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Forhindr <0>{targetUserTag} i at sende beskeder, reagere og oprette forbindelse til talekanaler i den angivne periode." @@ -27078,11 +26756,6 @@ msgstr "Prioritetstaler" msgid "Privacy" msgstr "Privatliv" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privatliv eller at udgive sig for en anden" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Privatlivsopsætningsbjælke" msgid "Privacy URL" msgstr "URL til fortrolighedspolitik" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Overtrædelse af privatlivets fred" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Krænkelse af privatlivets fred eller doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Krænkelse af privatlivets fred eller stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiltype" msgid "Profile updated" msgstr "Profil opdateret" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Regelbrud i profil, brugernavn eller avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Fremmer had mod beskyttede grupper." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Fremmer, rekrutterer til eller koordinerer voldelig ekstremistisk aktivitet." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promovering eller instruktioner, der opfordrer til selvskade eller spiseforstyrrelser." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil, du anmelder" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronominer: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Beskyt din Visionary-konto ved at aktivere tofaktorgodkendelse. Tak for din støtte til {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Angiv mindst et bruger-id eller et brugertag." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Angiv enten et bruger-id eller et brugernavn for den person, du anmelder." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Angiv dit fulde officielle navn til erklæringen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Med radioknapper kan du vælge én mulighed fra en gruppe." msgid "Radio group" msgstr "Radiogruppe" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Koordinering af raid" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Klar til at købe en gave?" msgid "Ready to upgrade?" msgstr "Klar til at opgradere?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Årsag" @@ -28291,8 +27924,8 @@ msgstr "Husk vinduesstørrelse og -placering" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Fjern {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Fjern {userName} fra gruppen?" @@ -28419,8 +28052,8 @@ msgstr "Fjern fra favoritter" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Fjern fra gruppe" @@ -28458,11 +28091,6 @@ msgstr "Fjern fra URL-baserede GIF-favoritter" msgid "Remove icon" msgstr "Fjern ikon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Fjern den fra kanalen for alle." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Fjernet fra favoritter" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Fjernet fra gruppe" @@ -28919,28 +28547,18 @@ msgstr "Anmeld et fællesskab" msgid "Report a message" msgstr "Anmeld en besked" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Anmeld en regelovertrædelse, eller find værktøjer til at administrere kontakt og præferencer." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Anmeld en brugerprofil" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Anmeld fællesskab" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Oplysninger om anmeldelsen" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Anmeld ulovligt indhold" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Rapportér problem" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Anmeld besked" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Anmeld profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Anmeldelse sendt" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Anmeldelsestype" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Anmeld bruger" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Den anmeldte brugers tag (valgfrit)" @@ -29100,6 +28716,10 @@ msgstr "Kræver alt fra niveauet Mellem samt medlemskab af fællesskabet i minds msgid "Resend" msgstr "Send igen" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Send igen ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Send igen ({newSecondsRemaining} sek.)" @@ -29108,7 +28728,7 @@ msgstr "Send igen ({newSecondsRemaining} sek.)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Send igen ({originalSecondsRemaining} sek.)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Send igen ({resendCooldownSeconds} sek.)" @@ -29122,7 +28742,7 @@ msgstr "Send igen ({resendSecondsRemaining} sek.)" msgid "Resend ({secondsRemaining}s)" msgstr "Send igen ({secondsRemaining} sek.)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Send kode igen" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roller opdateret" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumænien" @@ -29947,7 +29567,7 @@ msgstr "Mætning" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Sig hej til <0>{displayName}. Jeres private samtale starter her." msgid "Scale" msgstr "Skalering" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Svindel, malware eller misinformation" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scan QR-koden med din godkendelsesapp." @@ -30855,11 +30470,6 @@ msgstr "Vælg" msgid "Select {accessibleName}" msgstr "Vælg {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Vælg en kategori" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Vælg et fællesskab, hvor du har tilladelsen {permissionName}, eller en gruppe-DM, du er medlem af." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Vælg et land" @@ -30911,11 +30521,6 @@ msgstr "Vælg en omdirigerings-URI" msgid "Select a scenario to apply..." msgstr "Vælg et scenarie, der skal anvendes ..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Vælg en kategori for overtrædelsen." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Vælg den konto, du vil logge ind med på din nye enhed." msgid "Select voice processing mode" msgstr "Vælg tilstand for talebehandling" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Vælg, hvad du vil anmelde." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Vælg dit bopælsland." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Vælg…" @@ -31037,13 +30642,6 @@ msgstr "Valg: {0} (maks. {1})" msgid "Selections" msgstr "Valg" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Selvskade eller selvmord" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Send en handlingsbesked (vises med kursiv)." msgid "Send animation" msgstr "Send animation" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Send endnu en anmeldelse" @@ -31138,7 +30736,7 @@ msgstr "Send-knap" msgid "Send code" msgstr "Send kode" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Send DSA-anmeldelse" @@ -31158,9 +30756,9 @@ msgstr "Send filer op til {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Send venneanmodning" @@ -31220,8 +30818,8 @@ msgstr "Send beskeder i tråde" msgid "Send messages, images, GIFs and emoji" msgstr "Send beskeder, billeder, GIF'er og emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Send anmeldelse" @@ -31255,7 +30853,7 @@ msgstr "Send denne fastgjorte besked tilbage i tiden?" msgid "Send TTS messages" msgstr "Send TTS-beskeder" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Send bekræftelseskode" @@ -31273,11 +30871,6 @@ msgstr "Send talebesked" msgid "Send:" msgstr "Send:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Sender malware eller farlige links" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Del tema" msgid "Share voice activity with all friends?" msgstr "Del taleaktivitet med alle venner?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Del, hvad vores team skal bruge for at vurdere dette." @@ -31709,11 +31302,6 @@ msgstr "Del, hvad vores team skal bruge for at vurdere dette." msgid "Share with a friend" msgstr "Del med en ven" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Del med fællesskabsmoderatorer." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Delt vindue" msgid "Shared window audio" msgstr "Lyd fra delt vindue" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Deler personlige oplysninger, stalker brugere eller koordinerer krænkelser af privatlivets fred." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Deler personlige oplysninger" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Skydere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakiet" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenien" @@ -32889,11 +32467,6 @@ msgstr "Simulering af langsom tilstand" msgid "Slowmode time remaining" msgstr "Tid tilbage i langsom tilstand" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Nedsættende sprog, dehumaniserende sprog eller angreb på beskyttede grupper." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Der opstod en fejl under forberedelsen af dette klistermærke. Prøv en anden fil, eller prøv igen om et øjeblik." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Der gik noget galt under publicering. Prøv igen om et øjeblik." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Rummeligt layout med tydelig visuel adskillelse mellem beskeder." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanien" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamkonto" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spamklassificering" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam eller fup" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Fællesskab med spam eller svindel" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam-, svindel- eller phishingkonto" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, svindel eller phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Start minimeret" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Start forfra" @@ -33752,22 +33302,26 @@ msgstr "Forbliv logget på" msgid "Step {current} of {total}" msgstr "Trin {current} af {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Trin 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Trin 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Trin 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Trin 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Trin 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Stop med at være en annonceringskanal?" msgid "Stop hiding muted channels by default?" msgstr "Stop med at skjule kanaler sat på lydløs som standard?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Stop beskeder og venneanmodninger." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Stop mikrofontest" @@ -33959,11 +33508,6 @@ msgstr "Stop ændringerne af insertBefore og removeChild på Node.prototype. App msgid "Stop ringing" msgstr "Stop med at ringe" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Stop med at se indhold og medlemmer." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Erstat almindelige tekstsmileyer som :) og <3 med emojis, når du sender beskeder" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Sverige" @@ -34804,11 +34348,6 @@ msgstr "Tryk for at tilføje en note" msgid "tar.gz archive" msgstr "tar.gz-arkiv" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Målretter personer baseret på beskyttede karakteristika." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Servicevilkår" msgid "Terms URL" msgstr "URL til servicevilkår" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorisme eller voldelig ekstremisme" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Tak, fordi du hjælper med at holde {productName} sikkert. Vi gennemgår din anmeldelse hurtigst muligt." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Tak, fordi du gjorde os opmærksom på det" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Tak, fordi du fortalte os det. Dette overtræder ikke i sig selv vores regler, så vi har ikke sendt en anmeldelse." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Tak, fordi du fortalte os det. Dette overtræder ikke i sig selv vores regler, så vi har ikke sendt en anmeldelse. Hvis det er rettet mod nogen eller indeholder nedsættende udtryk, så anmeld det igen, og vælg »Krænkende eller skadeligt indhold«." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Det virkede ikke. Prøv igen eller annuller." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Det ligner ikke en gyldig farve. Prøv hex, rgb(), hsl() eller et CSS-farvenavn." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Det ligner ikke en gyldig URL." @@ -35104,6 +34653,11 @@ msgstr "Appen {PRODUCT_NAME} på din anden enhed vises under \"Logger ind på en msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Appen {PRODUCT_NAME} blev ikke logget ind. Du kan lukke denne fane." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Sikkerhedsteamet hos {productName} vil gennemgå din anmeldelse. Vi afslører ikke, at den kom fra dig." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Den angivne redirect_uri er ikke registreret for denne applikation." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den angivne redirect_uri skal bruge HTTP eller HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Anmeldelsesformularen er ændret. Start venligst forfra." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Brugernavnetags på denne instans er allerede indstillet. De kan ikke længere ændres." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Bekræftelseskoden er ugyldig eller udløbet." @@ -36115,13 +35674,8 @@ msgstr "Dette medlem er ikke længere i taleopkaldet." msgid "This message can only be forwarded to age-restricted channels" msgstr "Denne besked kan kun videresendes til kanaler med aldersbegrænsning" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Denne besked er allerede blevet slettet." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Denne besked er allerede blevet udgivet" @@ -36279,11 +35833,6 @@ msgstr "Denne tråd er lukket. Hvis du sender en besked, åbnes den igen." msgid "This thread is locked. Only moderators can send messages." msgstr "Denne tråd er låst. Kun moderatorer kan sende beskeder." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "denne bruger" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Denne bruger har begrænset sin profil. Nogle detaljer er skjult for personer, der ikke er deres venner." @@ -36292,11 +35841,6 @@ msgstr "Denne bruger har begrænset sin profil. Nogle detaljer er skjult for per msgid "This user has no roles in this community." msgstr "Denne bruger har ingen roller i dette fællesskab." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Denne bruger er allerede udelukket fra fællesskabet." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Denne bruger er ikke længere tilgængelig." @@ -36465,16 +36009,6 @@ msgstr "Tråd opdateret" msgid "Threads" msgstr "Tråde" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Trusler, forfølgelse på tværs af platforme eller uønsket kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Trusler, chikane eller skade" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Gav {targetUserTag} timeout" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Giv timeout" @@ -36787,6 +36321,11 @@ msgstr "Tone" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tone-map HDR-billeder til standardområde, hvilket reducerer den maksimale lysstyrke." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Der er sendt for mange koder. Vent {duration}, og prøv igen." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Overfør ejerskab af fællesskab" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Overfør gruppeejerskab til {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Fjern blokeringen først for at sende en venneanmodning." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Fjern blokering af bruger" @@ -37607,16 +37146,6 @@ msgstr "Slå lyden til på alle enheder" msgid "Undeafen yourself" msgstr "Slå lyden til igen" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Bruger under aldersgrænsen eller bekymring for børns sikkerhed" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Bruger under aldersgrænsen" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Indtil jeg slår den til igen" msgid "Unverified email" msgstr "Ikke-bekræftet e-mail" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Uønsket adfærd eller indhold for voksne det forkerte sted." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Uønsket adfærd, kommentarer eller anmodninger af seksuel karakter." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Op til {DISCOVERY_MAX_TAGS} tags hjælper folk med at finde dit fællesskab. De vises i søgningen under Opdag." @@ -38840,11 +38359,6 @@ msgstr "Brug lyst tema" msgid "Use native title bar" msgstr "Brug systemets titellinje" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Brug kun, hvis det tydeligt overtræder {productName}s regler og ikke passer til ovenstående." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Bruges kun i dette fællesskab." msgid "User" msgstr "Bruger" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Brugeren ser ud til at være under aldersgrænsen eller er involveret i grooming eller udnyttelse af børn." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Fejlfinding for bruger" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Bruger-ID (valgfrit)" @@ -39061,12 +38570,12 @@ msgstr "Brugeren blev ikke fundet" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Brugerprofil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Brugerprofil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Brugerindstillinger" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Brugertag (valgfrit)" @@ -39339,7 +38848,7 @@ msgstr "Verificeret fællesskab" msgid "Verify" msgstr "Bekræft" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Bekræft kode" @@ -39368,7 +38877,7 @@ msgstr "Bekræft, at det er dig" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Bekræft din e-mail" @@ -39718,7 +39227,7 @@ msgstr "Se koder" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Se fællesskabsprofil" @@ -39751,7 +39260,7 @@ msgstr "Se gaver" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Se global profil" @@ -39847,26 +39356,6 @@ msgstr "Seer tilslutter sig stream" msgid "Viewer leaves stream" msgstr "Seer forlader stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Overtrædelseskategori" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Overtrædelsen er i brugerens profil, ikke en specifik besked." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Vold eller voldelige trusler" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Voldeligt eller stødende indhold" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Vi har ændret størrelsen på og komprimeret denne emoji til 128x128 pi msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Vi har ændret størrelsen på og komprimeret dette klistermærke til 320x320 pixels, men det er stadig {fileSize}. Grænsen er {maxSize}. Prøv et enklere billede, færre farver eller en mindre kildefil." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Vi har sendt en kode til {email}." @@ -40472,7 +39961,7 @@ msgstr "Vi behandler dette hurtigst muligt. Du får en e-mail, når dit arkiv er msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Vi gendanner din tidligere e-mail, logger ud af gamle sessioner, deaktiverer MFA og sikrer din konto med en ny adgangskode." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Vi sender en kort kode for at bekræfte, at du kan modtage opdateringer om denne anmeldelse." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Hvilken type regel blev brudt?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Hvad sker der?" msgid "What's new" msgstr "Nyheder" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Hvad er årsagen til din anmeldelse?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Når der ikke er angivet en brugerdefineret skæringsdato, kan medlemmer uden tilladelsen <0>{readMessageHistoryPermissionLabel} ikke se tidligere beskeder. De vil kun se beskeder i realtid, når de ankommer, og de forsvinder, når de genstarter deres klienter." @@ -40832,11 +40321,6 @@ msgstr "Hvilke fællesskaber" msgid "Which conversations" msgstr "Hvilke samtaler" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Hvilken regel blev brudt?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Når Tryk for at tale er slået til, styrer genvejen din mikrofon, så knappen til at slå mikrofonen fra er deaktiveret." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Du kan ikke vedhæfte filer i denne kanal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Du kan ikke blive venner med dig selv" @@ -41341,7 +40825,7 @@ msgstr "Du kan ikke sende beskeder til denne bruger" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Du skal acceptere servicevilkårene for at oprette en konto" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Du skal bekræfte din e-mail, før du kan sende en anmeldelse." @@ -41891,6 +41375,11 @@ msgstr "Du har en ældre pris. Den nuværende pris for denne plan er {currentSub msgid "You're sending messages too quickly" msgstr "Du sender beskeder for hurtigt" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Du sender anmeldelser for hurtigt. Prøv igen senere." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Du ser ældre beskeder" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Du har tilføjet flere personer, end en gruppe-DM tillader. Fjern et par stykker, og prøv igen." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Du har allerede anmeldt denne besked." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Du har allerede anmeldt denne profil i dag." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Dine konti og indstillinger er ikke blevet ændret eller slettet." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Din handling kunne ikke gennemføres, da den blev markeret af vores sikkerhedssystemer. Hvis du mener, at dette er en fejl, bedes du kontakte support." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Dine svar" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Din ansøgning afventer gennemgang. Du kan stadig opdatere oplysningerne om dit fællesskab eller trække ansøgningen tilbage." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Din browser kræver brugerinteraktion, før lyd kan afspilles. Klik på knappen herunder for at aktivere talechat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Dine ændringer når alle communities, der følger denne kanal, hvilket kan tage et minut. Hvert offentliggjort opslag tillader 3 hurtige redigeringer, derefter 1 hver 20. minut." @@ -42311,6 +41815,11 @@ msgstr "Dit nye kaldenavn, eller lad stå tomt for at nulstille det." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Dit gamle gendannelsessæt virker ikke længere. Opbevar dette nye et sikkert sted." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Dine muligheder" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "din region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Din fornyelsesbetaling mislykkedes, men <0/> forbliver aktive indtil <1>{graceDate}. Opdater din betalingsmetode inden da for at beholde dit abonnement." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Din anmeldelse blev ikke sendt. Prøv igen." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Dit abonnement skifter til årlig fakturering ved næste fornyelse." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Dit temas CSS er for stor til at dele. Gør den mindre, og prøv igen." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Dit brugernavn (valgfrit)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 0ee6f14bf..5c1e476bd 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -2081,7 +2081,7 @@ msgstr "Noch {remainingSlotCount} verfügbar" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {Mitglied} other {Mitglieder}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Dein Einladungslink läuft in # Sekunde ab.} other {Dein Einladungslink läuft in # Sekunden ab.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} ausgewählt" @@ -2957,11 +2957,6 @@ msgstr "Accountdaten" msgid "Account details unavailable" msgstr "Kontodetails nicht verfügbar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Der Account dient Spam, Betrug oder dem Missbrauch der Plattform." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Hinzugefügt: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Hinzugefügt: {createdDate} • zuletzt verwendet: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Zusätzliche Kommentare (optional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Bereits eingelöst" msgid "Already set to cancel" msgstr "Kündigung bereits geplant" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Diese Nachricht auch an das {productName}-Sicherheitsteam melden" @@ -4576,11 +4566,6 @@ msgstr "Jährlich" msgid "Another checkbox" msgstr "Ein weiteres Kontrollkästchen" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Ein weiterer klarer Regelverstoß" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Ein weiteres rundes Kontrollkästchen" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Audio-Upload" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Österreich" @@ -5620,6 +5605,7 @@ msgstr "Gerade abwesend" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Gerade abwesend" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Zurück" @@ -5788,9 +5775,7 @@ msgstr "Backup-Codes neu generiert" msgid "Badge" msgstr "Abzeichen" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Bannen" @@ -5819,7 +5804,7 @@ msgstr "Dauer des Bans" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Mitglieder aus der Community ausschließen, mit der Option, ihre letzten msgid "Ban reason" msgstr "Bann-Grund" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Diesen Nutzer bannen" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandbreite" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Gebannt" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} aus der Community gebannt" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Vor Datum" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgien" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blockieren" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blockieren" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name} blockieren" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Für alle Communitys blockieren" msgid "Block spoiler" msgstr "Spoiler-Block" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Nutzer blockieren" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Nutzer blockieren" msgid "Blocked" msgstr "Blockiert" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blockiert" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Integrierte Übersetzer" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarien" @@ -6519,16 +6500,6 @@ msgstr "Bulgarisch" msgid "Bulk delete" msgstr "Mehrere löschen" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Mobbing, wiederholte unerwünschte Kontaktaufnahme, Stalking oder gezielter Missbrauch." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Mobbing, Drohungen, Hass, Gewalt, Raids oder Inhalte, die zur Selbstverletzung anregen." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornien" msgid "Call" msgstr "Anruf" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Anruf- und Gruppenchat-Einstellungen" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Banner ändern" msgid "Change chat embed background" msgstr "Hintergrund für Chat-Einbettungen ändern" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "E-Mail-Adresse ändern" @@ -7150,8 +7116,8 @@ msgstr "Spitznamen des Freundes ändern" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Spitznamen in der Gruppe ändern" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Sprache ändern" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Meinen Spitznamen in der Gruppe ändern" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Eigenen Spitznamen ändern" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Eigentümer ändern" @@ -7283,16 +7249,6 @@ msgstr "Ändere die Sprachregion eines Sprachkanals." msgid "Change which voice region this channel uses." msgstr "Ändere die Sprachregion, die dieser Kanal verwendet." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Ändere, wer dich anrufen oder hinzufügen kann." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Ändere, wer dich erreichen kann." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Überprüfe deinen Posteingang unter {emailAddress} auf den Autorisierun msgid "Check your inbox for a verification email." msgstr "Prüfe deinen Posteingang auf eine Bestätigungs-E-Mail." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Überprüfe deine Meldung" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Kontrollkästchen" @@ -7901,21 +7862,6 @@ msgstr "Käufe sind für diesen Account gesperrt. Wenn du Hilfe benötigst, wend msgid "Checkout unavailable" msgstr "Kaufabwicklung nicht verfügbar" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Kinderschutzbedenken" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Kindeswohlgefährdung oder Ausbeutung Minderjähriger" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Kinderschutz oder nicht jugendfreie Inhalte" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Auswahl" msgid "Choices: {choiceList}" msgstr "Auswahlmöglichkeiten: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Auswählen" @@ -8122,6 +8068,11 @@ msgstr "Wähle die Kategorie, die deine Community am besten beschreibt. Du kanns msgid "Choose the premium model" msgstr "Wähle das Premium-Modell" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Wähle den Grund erneut" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Geschenk einlösen" msgid "Claim your account" msgstr "Deinen Account beanspruchen" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Beanspruche deinen Account und bestätige deine E-Mail-Adresse, um Meldungen zu senden." @@ -8352,12 +8303,12 @@ msgstr "Beanspruche deinen Account, um dieses Geschenk einzulösen." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Beanspruche deinen Account, um Freundschaftsanfragen zu senden." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Beanspruche dein Konto, um Berichte zu senden." @@ -8378,11 +8329,6 @@ msgstr "Beanspruche deinen Account, um 1:1-Anrufe zu starten oder daran teilzune msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Löse dein Geschenk ein, um dein {premiumProductName}-Abonnement zu aktivieren!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Sich als eine andere Person, Marke oder Organisation ausgeben." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Suchfeld leeren" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Dialog schließen" msgid "Close popout" msgstr "Pop-out schließen" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "DM schließen" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "In den Infobereich minimieren" msgid "Close window" msgstr "Fenster schließen" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Schließe deine aktuelle DM mit {dmDisplayName}. Dadurch wird der Nutzer nicht blockiert und du kannst die DM später wieder öffnen." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Den Direktchat mit {displayName} schließen? Du kannst ihn jederzeit wieder öffnen." @@ -8837,7 +8773,7 @@ msgstr "Kohle-Design" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Code" @@ -8868,7 +8804,7 @@ msgstr "Code aus der {productName}-App" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Code erneut gesendet" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Communities, denen du beitreten kannst" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9131,7 +9065,7 @@ msgstr "Ton in der Community ausschalten" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Community-Debug" @@ -9150,16 +9084,6 @@ msgstr "Community gelöscht" msgid "Community DM" msgstr "Community-DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Die Community existiert, um die Plattform mit Spam, Betrug oder Missbrauch zu überziehen." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Community fördert kollektive Angriffe oder gezielte Belästigung." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Community-Icon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Community-ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Community-ID ist erforderlich." @@ -9526,6 +9450,11 @@ msgstr "Neues Passwort bestätigen" msgid "Confirm password" msgstr "Passwort bestätigen" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Bestätige die Aussage, um die Meldung zu senden." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "In deinem Browser fortfahren" msgid "Continue to checkout" msgstr "Weiter zur Kasse" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Weiter zur Community-Meldung" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Weiter zur Nutzermeldung" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Wenn dieser Kanal in einen Textkanal umgewandelt wird, werden alle folge msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Wandelt eingehende Inhalte in Sprache um, unabhängig davon, ob sie von /tts stammen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordiniert Raids, Brigading oder Belästigung gegen Personen oder Communitys." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL in Zwischenablage kopiert" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL in Zwischenablage kopiert" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Nachrichten-ID kopieren" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Nachrichtenlink kopieren" @@ -10643,6 +10553,11 @@ msgstr "Beiträge konnten nicht geladen werden. Versuche es später erneut." msgid "Couldn't load settings" msgstr "Einstellungen konnten nicht geladen werden" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Das Formular für die Meldung konnte nicht geladen werden." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Diese Anwendung konnte nicht geladen werden" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Bild konnte nicht verarbeitet werden" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Diese Nachricht konnte nicht veröffentlicht werden" @@ -10825,11 +10740,6 @@ msgstr "Einladung konnte nicht gesendet werden" msgid "Couldn't send invite. Try again." msgstr "Einladung konnte nicht gesendet werden. Bitte versuche es erneut." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Konnte nicht gesendet werden. Versuche es noch einmal." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Countdown-Timer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Wohnsitzland" @@ -11301,13 +11211,8 @@ msgstr "Erstellt:" msgid "Credentials" msgstr "Anmeldedaten" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Glaubwürdige Drohungen, explizite Gewalt oder Verherrlichung von Gewalt." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatien" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Unterdrückt Audiosignale unterhalb einer Lautstärkeschwelle bei minimaler CPU-Auslastung." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Zypern" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tschechisch" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tschechische Republik" @@ -11965,7 +11870,7 @@ msgstr "Kanal debuggen" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Community debuggen" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Design löschen?" msgid "Delete this invite? Can't be undone." msgstr "Diese Einladung löschen? Kann nicht rückgängig gemacht werden." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Diese Nachricht löschen" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Diese Nachricht löschen? Kann nicht rückgängig gemacht werden." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Diese Nachricht löschen? Das kann nicht rückgängig gemacht werden. Die Nachricht wird auch aus jeder Community entfernt, die diesem Kanal folgt." @@ -12461,11 +12359,6 @@ msgstr "Eigene Nachrichten in dieser Community löschen?" msgid "Delete your messages in this conversation?" msgstr "Eigene Nachrichten in dieser Unterhaltung löschen?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Gelöscht" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions} verweigert" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dänemark" @@ -12554,11 +12447,6 @@ msgstr "Sticker beschreiben" msgid "Describe this media for screen readers" msgstr "Medien für Screenreader beschreiben" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Beschreibe, warum der Inhalt illegal ist" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Abgesetztes Banner" msgid "Detail" msgstr "Details" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Details" @@ -13315,11 +13203,6 @@ msgstr "Anzeigename (optional)" msgid "Display scaling" msgstr "Anzeigeskalierung" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Verbreitet Malware, Programme zum Diebstahl von Anmeldedaten oder andere schädliche Dateien." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM- & Freundschaftsanfrage-Einstellungen" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentation" msgid "Doesn't allow being added to group DMs" msgstr "Erlaubt nicht, zu Gruppen-DMs hinzugefügt zu werden" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Blockiert nicht. Du kannst es später wieder öffnen." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Stattdessen spenden" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Download-Quellzuordnungsdateien, damit Stack-Traces und die Entwicklerto msgid "Download video" msgstr "Video herunterladen" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, Offenlegung privater Informationen oder Stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, Stalking, das Vortäuschen einer fremden Identität oder ein unangemessenes Profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Farbe für {tokenLabel} bearbeiten" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Community-Profil bearbeiten" @@ -14043,7 +13908,7 @@ msgstr "Berechtigungsüberschreibungen für Rollen und Mitglieder in diesem Kana #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Profil bearbeiten" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Ortszeit im Profil bearbeiten" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Veröffentlichte Nachricht bearbeiten?" @@ -14191,13 +14056,13 @@ msgstr "Rückerstattungsberechtigt bis {windowEndsOn}. Dadurch wird auch dein Ab #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-Mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-Mail-Adresse" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-Mail-Adresse erforderlich." @@ -14721,16 +14586,6 @@ msgstr "Encoder-Einstellung für neue Bildschirmfreigaben." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC und Bitraten-Voreinstellungen" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Fördert Selbstverletzung" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Fördert Suizid, Selbstverletzung oder Essstörungen." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Die Ende-zu-Ende-Verschlüsselung ist nicht verfügbar, da ein nicht unt msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Die Ende-zu-Ende-Verschlüsselung ist nicht verfügbar, da ein nicht unterstützter Teilnehmer in diesem Sprachkanal ist." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Gefährdet Minderjährige oder enthält Inhalte zur Ausbeutung von Kindern." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Eingabe" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Gib einen Code im Format ABCD-1234 ein." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Gib eine gültige Vorlagen-URL oder einen gültigen Vorlagencode von {theOtherPlatform} ein." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Gib eine gültige E-Mail-Adresse ein." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Gib einen gültigen Nachrichtenlink ein." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Gib den {digitCount}-stelligen Code aus deiner Authenticator-App ein." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Gib den Code ein, um fortzufahren." @@ -15008,7 +14858,7 @@ msgstr "Eingabetaste zum <0><1>Speichern" msgid "Enter username" msgstr "Benutzernamen eingeben" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Verifizierungscode eingeben" @@ -15017,6 +14867,11 @@ msgstr "Verifizierungscode eingeben" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Gib deine E-Mail-Adresse ein, und wir senden dir einen Link zum Zurücksetzen deines Passworts." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Gib deinen vollständigen Namen laut Ausweis ein, um die Meldung zu senden." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc zum <0><1>Abbrechen" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estland" @@ -15412,6 +15267,16 @@ msgstr "Läuft ab am {earliest}" msgid "Expires:" msgstr "Läuft ab:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Erkläre das Problem" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Erkläre das Problem, um die Meldung zu senden." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Externe Links können gefährlich sein. Sei vorsichtig." msgid "Extra large" msgstr "Extragroß" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremistische Community" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Fehler beim Entfernen der benutzerdefinierten URL. Bitte erneut versuchen." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Code konnte nicht erneut gesendet werden. Versuche es noch einmal." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Premium-Status konnte nicht zurückgesetzt werden." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Code konnte nicht gesendet werden. Versuche es erneut." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Nachricht konnte nicht gesendet werden. Für Optionen gedrückt halten." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Meldung konnte nicht gesendet werden. Versuche es noch einmal." @@ -15840,11 +15700,6 @@ msgstr "Emojis konnten ab {startLabel} nicht hochgeladen werden: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Emojis konnten nicht hochgeladen werden. Bitte versuche es noch einmal." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Falsche Behauptungen, die wahrscheinlich realen Schaden anrichten." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Finde den passenden Sticker" msgid "Fingerprint" msgstr "Fingerabdruck" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Accounteinrichtung abschließen" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Schließe zuerst die Accounteinrichtung ab" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Schließe die Registrierung ab, um Freundschaftsanfragen zu senden." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finnland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finnisch" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Vor- und Nachname" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Bildraten über 30 FPS erfordern {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Frankreich" @@ -16834,10 +16689,10 @@ msgstr "Voll" msgid "Full dynamic range" msgstr "Voller Dynamikbereich" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Vollständiger Name (laut Ausweis)" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Vollständiger Name laut Ausweis (optional bei Meldungen zu sexuellem Kindesmissbrauch)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Deutsch" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Deutschland" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Zurück" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Gehe zurück und gib eine gültige E-Mail-Adresse ein." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Schön, dich zu sehen, {username}! Willkommen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Griechenland" @@ -17572,11 +17427,6 @@ msgstr "Griechisch" msgid "Grid view" msgstr "Rasteransicht" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming oder Inhalte zur Ausbeutung von Kindern." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Benutzername" msgid "Hang out with voice, video and screen share" msgstr "Sprich, teile Video und deinen Bildschirm" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Belästigung" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Belästigung mit nicht jugendfreien Inhalten" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Belästigung oder Mobbing" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Belästigung oder Stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Belästigung oder gezielter Missbrauch" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Belästigung oder Drohungen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardware-Sicherheitsschlüssel" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardwarebeschleunigt auf den meisten Windows- und macOS-Systemen. Zuverlässig für ältere Geräte." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Schädliche Falschinformationen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Hat jemals etwas gekauft" msgid "Has ever purchased override" msgstr "Kauf-Override" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hassrede" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Eigene Bildschirmfreigabe ausblenden?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Versteckt die Schaltflächen zum Herunterladen, Öffnen im Browser und Kopieren bei Bildern und Videos in diesem Kanal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Blendet die Nachrichten dieser Person aus und verhindert, dass sie dir schreibt" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ungarisch" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungarn" @@ -18399,6 +18212,11 @@ msgstr "Ich bin ein Tooltip" msgid "I changed my mind" msgstr "Ich habe es mir anders überlegt" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Ich bestätige in gutem Glauben, dass die Angaben und Behauptungen in dieser Meldung richtig und vollständig sind." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Inaktivitätseinstellungen" msgid "Idle timeout" msgstr "Inaktivitäts-Timeout" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Wenn ein Minderjähriger betroffen ist, verwende stattdessen \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Wenn ein Konto diese Adresse verwendet, haben wir Anweisungen zum Zurüc msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Wenn macOS dich bittet, {productName} zu beenden und neu zu starten, wähle Später." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Wenn jemand in unmittelbarer Gefahr ist, kontaktiere die örtlichen Rettungsdienste, falls du dies sicher tun kannst." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Wenn jemand in unmittelbarer Gefahr ist, wende dich zuerst an die örtlichen Notdienste." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Wenn jemand dir gesagt hat, du sollst hier etwas einfügen, ist das eine Betrugsmasche, durch die diese Person Zugriff auf deinen {productName}-Account erhalten kann." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Wenn es um CSAM oder die Ausbeutung Minderjähriger geht, sende die Meldung jetzt und teile das Material nicht erneut." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Wenn es sich um eine glaubwürdige, unmittelbare Bedrohung handelt, kontaktiere auch die örtlichen Rettungsdienste." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Wenn dies eine unmittelbare terroristische Bedrohung ist, kontaktiere auch die örtlichen Rettungsdienste." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Wenn sich diese Meldung auf eine bestimmte Nachricht in dieser Community bezieht, melde stattdessen diese Nachricht. Nachrichtenmeldungen geben unserem Sicherheitsteam den klarsten Kontext, und das Hinzufügen von Details in den Kommentaren kann uns helfen, die Überprüfung zu beschleunigen. Fahre nur mit der Meldung der gesamten Community fort, wenn die Meldung einer Nachricht das umfassendere Problem nicht erfassen würde." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Wenn sich diese Meldung auf eine bestimmte Nachricht bezieht, melde stattdessen diese Nachricht. Nachrichtenmeldungen geben unserem Sicherheitsteam den klarsten Kontext, und das Hinzufügen von Details in den Kommentaren kann uns helfen, die Überprüfung zu beschleunigen. Fahre nur mit der Meldung des gesamten Nutzers fort, wenn diese Nachricht das umfassendere Problem nicht erfasst." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Wenn sich diese Meldung auf bestimmte Nachrichten bezieht, melde stattdessen die relevanteste Nachricht. Nachrichtenmeldungen geben unserem Sicherheitsteam den klarsten Kontext, und das Hinzufügen von Details in den Kommentaren kann uns helfen, die Meldung schneller zu prüfen. Fahre nur mit der Meldung des gesamten Nutzers fort, wenn die Meldung einer Nachricht das umfassendere Problem nicht erfassen würde." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Wenn du glaubst, dass es illegal ist, nenne das Gesetz und den Grund." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Wartezeit des Slow-Modus in diesem Kanal ignorieren." msgid "Ignore virtual" msgstr "Virtuelle ignorieren" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Illegale Aktivität" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Illegale Aktivitäten oder Sonstiges" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Illegale Verkäufe, Beihilfe zu Straftaten oder ein klarer Regelverstoß, der oben nicht aufgeführt ist." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Illegale Verkäufe, Beihilfe zu Straftaten oder rechtswidrige Aktivitäten." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Aus deiner Zwischenablage eingefügte Bilder werden als Anhänge gesendet. Du hast in diesem Kanal keine Berechtigung, Dateien anzuhängen." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Identitätstäuschung" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Identitätstäuschung oder irreführende Medien" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inaktiv" msgid "Inactive timeout" msgstr "Inaktivitäts-Timeout" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Unangemessenes Profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Füge meine Zwei-Faktor-Backup-Codes in das PDF und den Ausdruck ein" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Gib die Community-ID an." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Hintergrund für Einladung" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Einladungscode (optional)" @@ -19471,7 +19220,7 @@ msgstr "Einladungsmaskierung" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Mitglieder einladen" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-Adresse autorisiert" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursiv" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italien" @@ -20120,7 +19869,7 @@ msgstr "Tasten" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Später" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lettland" @@ -20291,11 +20040,6 @@ msgstr "Mehr erfahren" msgid "Learn more about Visionary" msgstr "Mehr über Visionary erfahren" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Verlassen" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Privaten Thread verlassen" msgid "Leave silently" msgstr "Lautlos verlassen" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Community verlassen" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Listet Mitglieder mit dieser Rolle in einem eigenen Abschnitt in der Mitgliederliste auf." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litauen" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Wird geladen..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Lädt…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Niedrig" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Wartungsarbeiten sind für {localizedTime} geplant. Voraussichtliche Dauer: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "{userName} zum Gruppeneigentümer machen? Du verlierst dann die Eigentümerberechtigungen." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Zum Gruppeneigentümer machen" @@ -21091,38 +20830,21 @@ msgstr "Zum Gruppeneigentümer machen" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Stelle sicher, dass dieser Code mit dem in der {PRODUCT_NAME}-App übereinstimmt." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Stell sicher, dass das so richtig ist, bevor du es abschickst." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Gestalte die Instanz nach deinen Wünschen" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Schädliche Links" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Malware-Verbreitung" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware oder gefährliche Links" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, Zugangsdaten-Diebstahl oder schädliche Dateien." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Private Details maskieren, bevor du deinen Bildschirm oder Stream teilst msgid "Mask Visionary as subscription" msgstr "Visionary als Abo tarnen" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massen-Spam, Betrug, gefälschte Gewinnspiele oder Accountmissbrauch." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Bestätigung für nicht jugendfreie Medien" msgid "Mature content not allowed" msgstr "Inhalte für Erwachsene nicht erlaubt" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Nicht jugendfreie Inhalte oder Belästigung" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Nicht jugendfreie Inhalte oder unzureichende Zugangsbeschränkungen" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Überschreibung für nicht jugendfreie Inhalte" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Verstoß gegen die Richtlinie für nicht jugendfreie Inhalte" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Nicht jugendfreie Inhalte ohne entsprechende Altersbeschränkung." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Nachricht" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "Nachrichtenlink" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Nachrichtenlink" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Nachrichten-Vorschauen in der DM-Liste anzeigen." #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Nachricht veröffentlicht" @@ -22211,6 +21908,11 @@ msgstr "Nachrichtenzeit" msgid "Message unpinned" msgstr "Anheftung der Nachricht aufgehoben" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Nachricht, die du meldest" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minderjährige in Gefahr, nicht jugendfreie Inhalte am falschen Ort oder unerwünschtes Verhalten." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mehr" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Weitere Aktionen" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Verschachtelt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Niederlande" @@ -24099,7 +23796,7 @@ msgstr "Keine Ergebnisse" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Keine Ergebnisse gefunden" @@ -24858,6 +24555,16 @@ msgstr "Nur Personen, die du einlädst, und Moderatoren können diesen Thread se msgid "Only places I can't access anymore" msgstr "Nur Orte, auf die ich nicht mehr zugreifen kann" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Melde nur, was du ehrlich für einen Regelverstoß hältst, und sende bitte dieselbe Meldung nicht zweimal." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Melde nur, was du ehrlich für einen Regelverstoß hältst. Missbrauch von Meldungen verstößt gegen unsere <0>Community-Richtlinien." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Deckkraft" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Auf {instanceName} öffnen" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Popup öffnen" @@ -25379,11 +25084,6 @@ msgstr "Öffne Systemeinstellungen → Datenschutz & Sicherheit → Bildschirmau msgid "Open template JSON" msgstr "Vorlagen-JSON öffnen" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Banndialog für diese Community öffnen." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Einstellungen öffnen" msgid "Opened the thread again" msgstr "Thread wieder geöffnet" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Öffnet sich in einem neuen Tab" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Ursprünglich gebannt am {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Sonstiges" @@ -25654,11 +25357,6 @@ msgstr "Andere Reaktion …" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Unser Sicherheitsteam prüft dies. Wir senden dir eine DM und E-Mail, sobald wir zu einem Ergebnis gekommen sind." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Das Eigentum konnte derzeit nicht an <0>{username} übertragen werden." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Eigentumsrechte wurden übertragen" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "JSON-Antwort hier einfügen" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Nachrichtenlink einfügen." @@ -26260,11 +25958,6 @@ msgstr "Bild ab" msgid "PgUp" msgstr "Bild auf" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, Betrug, bösartige Links oder falsche Behauptungen, die wahrscheinlich realen Schaden verursachen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Web-Suchanbieter auswählen" msgid "Pick an emoji" msgstr "Emoji auswählen" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Wähle eine Option, um fortzufahren." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Wähle die 4-stellige Zahl nach deinem Benutzernamen" msgid "Pick the appearance this administrator account should start with." msgstr "Wähle das Erscheinungsbild, mit dem dieser Administratoraccount beginnen soll." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Regel zur Überprüfung auswählen." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Bitte warte einen Moment und versuche die Umbenennung erneut." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polen" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "zum Hinzufügen einer Reaktion tippen" msgid "press to remove reaction" msgstr "zum Entfernen der Reaktion tippen" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Das Vortäuschen einer fremden Identität, auch mithilfe irreführender KI-generierter Inhalte." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Verhindere, dass <0>{targetUserTag} für die angegebene Dauer Nachrichten senden, reagieren und Sprachkanälen beitreten kann." @@ -27078,11 +26756,6 @@ msgstr "Prioritätssprecher" msgid "Privacy" msgstr "Datenschutz" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Datenschutz oder Identitätstäuschung" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Datenschutz-Einrichtung-Banner" msgid "Privacy URL" msgstr "Datenschutz-URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Datenschutzverletzung" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Verstoß gegen den Datenschutz oder Doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Verstoß gegen den Datenschutz oder Stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiltyp" msgid "Profile updated" msgstr "Profil aktualisiert" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Regelverstoß im Profil, Benutzernamen oder Avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Fördert Hass gegen geschützte Gruppen." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Fördert, rekrutiert für oder koordiniert gewalttätige extremistische Aktivitäten." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Werbung oder Anleitungen, die zu Selbstverletzung oder Essstörungen anregen." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil, das du meldest" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronomen: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Schütze deinen Visionary-Account, indem du die Zwei-Faktor-Authentifizierung aktivierst. Vielen Dank für deine Unterstützung von {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Gib mindestens eine Nutzer-ID oder einen Nutzer-Tag an." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Gib entweder eine Nutzer-ID oder einen Nutzernamen der Person an, die du melden möchtest." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Gib deinen vollständigen Namen für die Erklärung an." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Mit Radio-Buttons kann eine Option aus einer Gruppe ausgewählt werden." msgid "Radio group" msgstr "Optionsgruppe" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Raid-Koordination" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Möchtest du ein Geschenk kaufen?" msgid "Ready to upgrade?" msgstr "Bereit zum Upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Grund" @@ -28291,8 +27924,8 @@ msgstr "Fenstergröße und -position merken" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName} entfernen" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "{userName} aus der Gruppe entfernen?" @@ -28419,8 +28052,8 @@ msgstr "Aus Favoriten entfernen" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Aus Gruppe entfernen" @@ -28458,11 +28091,6 @@ msgstr "Aus der Liste der per URL gespeicherten GIFs entfernen" msgid "Remove icon" msgstr "Symbol entfernen" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Nachricht für alle aus dem Kanal entfernen." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Aus Favoriten entfernt" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Aus Gruppe entfernt" @@ -28919,28 +28547,18 @@ msgstr "Community melden" msgid "Report a message" msgstr "Nachricht melden" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Melde einen Regelverstoß oder finde Werkzeuge zur Verwaltung von Kontakten und Einstellungen." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Nutzerprofil melden" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Community melden" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Details zur Meldung" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Illegale Inhalte melden" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Problem melden" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Nachricht melden" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Profil melden" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Meldung gesendet" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Meldungstyp" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Nutzer melden" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Gemeldeter Nutzer-Tag (optional)" @@ -29100,6 +28716,10 @@ msgstr "Erfordert alles, was in \"Mittel\" enthalten ist, plus eine Mitgliedscha msgid "Resend" msgstr "Erneut senden" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Erneut senden ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Erneut senden ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Erneut senden ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Erneut senden ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Erneut senden ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Erneut senden ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Erneut senden ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Code erneut senden" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Rollen erfolgreich aktualisiert" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumänien" @@ -29947,7 +29567,7 @@ msgstr "Sättigung" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Sag Hallo zu <0>{displayName}. Deine DM beginnt hier." msgid "Scale" msgstr "Skalierung" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Betrug, Malware oder Falschinformationen" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scanne den QR-Code mit deiner Authenticator-App." @@ -30855,11 +30470,6 @@ msgstr "Auswählen" msgid "Select {accessibleName}" msgstr "{accessibleName} auswählen" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Kategorie auswählen" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Wähle eine Community aus, in der du die Berechtigung „{permissionName}“ hast, oder eine Gruppen-DM, der du angehörst." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Land auswählen" @@ -30911,11 +30521,6 @@ msgstr "Weiterleitungs-URI auswählen" msgid "Select a scenario to apply..." msgstr "Szenario zur Anwendung auswählen …" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Wähle eine Kategorie für den Verstoß." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Wähle das Konto aus, mit dem du dich auf deinem neuen Gerät anmelden m msgid "Select voice processing mode" msgstr "Sprachverarbeitungsmodus auswählen" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Wähle aus, was du melden möchtest." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Wähle dein Wohnsitzland aus." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Auswählen …" @@ -31037,13 +30642,6 @@ msgstr "Auswahl: {0} (max. {1})" msgid "Selections" msgstr "Auswahl" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Selbstverletzung oder Suizid" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Aktionsnachricht senden (wird kursiv angezeigt)." msgid "Send animation" msgstr "Animation senden" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Weitere Meldung senden" @@ -31138,7 +30736,7 @@ msgstr "Senden-Taste" msgid "Send code" msgstr "Code senden" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA-Meldung senden" @@ -31158,9 +30756,9 @@ msgstr "Dateien bis zu {size} senden" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Freundschaftsanfrage senden" @@ -31220,8 +30818,8 @@ msgstr "Nachrichten in Threads senden" msgid "Send messages, images, GIFs and emoji" msgstr "Nachrichten, Bilder, GIFs und Emojis senden" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Meldung senden" @@ -31255,7 +30853,7 @@ msgstr "Diesen Pin in die Vergangenheit schicken?" msgid "Send TTS messages" msgstr "TTS-Nachrichten senden" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Verifizierungscode senden" @@ -31273,11 +30871,6 @@ msgstr "Sprachnachricht senden" msgid "Send:" msgstr "Senden:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Malware oder gefährliche Links senden" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Design teilen" msgid "Share voice activity with all friends?" msgstr "Sprachaktivität mit allen Freunden teilen?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Teile mit, was unser Team zur Bewertung benötigt." @@ -31709,11 +31302,6 @@ msgstr "Teile mit, was unser Team zur Bewertung benötigt." msgid "Share with a friend" msgstr "Mit einem Freund teilen" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Mit Community-Mods teilen." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Freigegebenes Fenster" msgid "Shared window audio" msgstr "Audio des geteilten Fensters" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Gibt persönliche Informationen weiter, stalkt Nutzer oder koordiniert den Missbrauch der Privatsphäre." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Teilen persönlicher Informationen" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Schieberegler" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slowakei" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slowenien" @@ -32889,11 +32467,6 @@ msgstr "Slow-Modus-Simulation" msgid "Slowmode time remaining" msgstr "Verbleibende Zeit im Slow-Modus" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Beleidigungen, entmenschlichende Sprache oder Angriffe auf geschützte Gruppen." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Beim Vorbereiten dieses Stickers ist ein Fehler aufgetreten. Versuche es mit einer anderen Datei oder versuche es später noch einmal." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Beim Veröffentlichen ist etwas schiefgelaufen. Versuche es gleich noch einmal." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Großzügiges Layout mit klarer visueller Trennung zwischen Nachrichten." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanien" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spam-Account" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spam-Klassifizierung" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam oder Betrug" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spam- oder Betrugs-Community" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam-, Betrugs- oder Phishing-Account" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, Betrug oder Phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Minimiert starten" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Neu beginnen" @@ -33752,22 +33302,26 @@ msgstr "Angemeldet bleiben" msgid "Step {current} of {total}" msgstr "Schritt {current} von {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Schritt 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Schritt 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Schritt 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Schritt 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Schritt 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Kein Ankündigungskanal mehr?" msgid "Stop hiding muted channels by default?" msgstr "Stummgeschaltete Kanäle nicht mehr standardmäßig ausblenden?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Nachrichten und Freundschaftsanfragen stoppen." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Mikrofontest beenden" @@ -33959,11 +33508,6 @@ msgstr "Stoppe das Patchen von Node.prototype insertBefore und removeChild. Die msgid "Stop ringing" msgstr "Klingeln beenden" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Inhalte und Mitglieder nicht mehr sehen." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Ersetze gängige Text-Emoticons wie :) und <3 durch Emojis, wenn Nachrichten gesendet werden" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Schweden" @@ -34804,11 +34348,6 @@ msgstr "Tippen, um eine Notiz hinzuzufügen" msgid "tar.gz archive" msgstr "tar.gz-Archiv" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Zielt auf Personen mit geschützten Merkmalen ab." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Nutzungsbedingungen" msgid "Terms URL" msgstr "URL der Nutzungsbedingungen" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismus oder gewalttätiger Extremismus" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thailändisch" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Danke, dass du dabei hilfst, {productName} sicher zu halten. Wir prüfen deine Meldung so schnell wie möglich." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Danke für deinen Hinweis" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Danke für deine Rückmeldung. Das verstößt für sich genommen nicht gegen unsere Regeln, daher haben wir keine Meldung gesendet." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Danke, dass du uns Bescheid gibst. Das verstößt für sich genommen nicht gegen unsere Regeln, daher haben wir keine Meldung gesendet. Wenn es sich gegen jemanden richtet oder diskriminierende Ausdrücke verwendet, melde es erneut und wähle „Missbräuchliche oder schädliche Inhalte“." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Das hat nicht funktioniert. Versuche es erneut oder brich ab." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Das sieht nicht nach einer gültigen Farbe aus. Versuche es mit Hex, rgb(), hsl() oder einem CSS-Farbnamen." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Das sieht nicht nach einer gültigen URL aus." @@ -35104,6 +34653,11 @@ msgstr "Die {PRODUCT_NAME}-App auf deinem anderen Gerät zeigt sie unter „Auf msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Die App {PRODUCT_NAME} wurde nicht angemeldet. Du kannst diesen Tab schließen." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Das {productName}-Sicherheitsteam prüft deine Meldung. Wir geben nicht preis, dass sie von dir kommt." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Die angegebene redirect_uri ist für diese Anwendung nicht registriert." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Die angegebene redirect_uri muss HTTP oder HTTPS verwenden." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Das Formular für die Meldung wurde geändert. Bitte beginne erneut." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Die Benutzernamen-Tags auf dieser Instanz sind bereits festgelegt. Sie können nicht mehr geändert werden." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Der Bestätigungscode ist ungültig oder abgelaufen." @@ -36115,13 +35674,8 @@ msgstr "Dieses Mitglied ist nicht mehr mit dem Sprachkanal verbunden." msgid "This message can only be forwarded to age-restricted channels" msgstr "Diese Nachricht kann nur an Kanäle mit Altersbeschränkung weitergeleitet werden" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Diese Nachricht wurde bereits gelöscht." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Diese Nachricht wurde bereits veröffentlicht" @@ -36279,11 +35833,6 @@ msgstr "Dieser Thread ist geschlossen. Wenn Sie eine Nachricht senden, wird er w msgid "This thread is locked. Only moderators can send messages." msgstr "Dieser Thread ist gesperrt. Nur Moderatoren können Nachrichten senden." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "dieser Nutzer" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Dieser Nutzer hat sein Profil eingeschränkt. Einige Details sind für Personen, die nicht mit ihm befreundet sind, ausgeblendet." @@ -36292,11 +35841,6 @@ msgstr "Dieser Nutzer hat sein Profil eingeschränkt. Einige Details sind für P msgid "This user has no roles in this community." msgstr "Dieser Nutzer hat keine Rollen in dieser Community." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Dieser Nutzer ist bereits aus der Community ausgeschlossen." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Dieser Nutzer ist nicht mehr verfügbar." @@ -36465,16 +36009,6 @@ msgstr "Thread aktualisiert" msgid "Threads" msgstr "Threads" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Bedrohungen, Verfolgung über verschiedene Bereiche hinweg oder unerwünschter Kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Bedrohungen, Belästigung oder Schaden" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Timeout für {targetUserTag} verhängt" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Auszeit" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR-Bilder auf den Standardbereich tonemappen, wodurch die Spitzenhelligkeit reduziert wird." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Zu viele Codes gesendet. Warte {duration} und versuche es erneut." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Community-Eigentumsrechte übertragen" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Gruppenbesitz an {userName} übertragen?" @@ -37561,7 +37100,7 @@ msgstr "Blockierung zuerst aufheben, um eine Freundschaftsanfrage zu senden." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Blockierung des Nutzers aufheben" @@ -37607,16 +37146,6 @@ msgstr "Ton auf allen Geräten einschalten" msgid "Undeafen yourself" msgstr "Eigenen Ton einschalten" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Mindestalter unterschritten oder Bedenken zum Schutz von Kindern" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Nutzer unter dem Mindestalter" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Bis ich es wieder einschalte" msgid "Unverified email" msgstr "E-Mail nicht verifiziert" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Unerwünschtes Verhalten oder nicht jugendfreie Inhalte an der falschen Stelle." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Unerwünschtes anzügliches Verhalten, Kommentare oder Anfragen." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Bis zu {DISCOVERY_MAX_TAGS} Tags helfen anderen, deine Community zu finden. Sie erscheinen in der Suche unter „Entdecken“." @@ -38840,11 +38359,6 @@ msgstr "Helles Design verwenden" msgid "Use native title bar" msgstr "Native Titelleiste verwenden" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Nur verwenden, wenn es eindeutig gegen die Regeln von {productName} verstößt und nicht zu den oben genannten Punkten passt." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Nur in dieser Community verwendet." msgid "User" msgstr "Benutzer" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Der Nutzer scheint zu jung zu sein oder ist an Grooming oder der Ausbeutung von Kindern beteiligt." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Nutzer-Debug" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Nutzer-ID (optional)" @@ -39061,12 +38570,12 @@ msgstr "Nutzer nicht gefunden" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Nutzerprofil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Nutzerprofil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Benutzereinstellungen" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Nutzer-Tag (optional)" @@ -39339,7 +38848,7 @@ msgstr "Verifizierte Community" msgid "Verify" msgstr "Verifizieren" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Code überprüfen" @@ -39368,7 +38877,7 @@ msgstr "Verifiziere deine Identität" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "E-Mail-Adresse bestätigen" @@ -39718,7 +39227,7 @@ msgstr "Codes ansehen" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Community-Profil ansehen" @@ -39751,7 +39260,7 @@ msgstr "Geschenke ansehen" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Globales Profil ansehen" @@ -39847,26 +39356,6 @@ msgstr "Zuschauer tritt Stream bei" msgid "Viewer leaves stream" msgstr "Zuschauer verlässt Stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategorie des Verstoßes" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Der Verstoß betrifft das Nutzerprofil, nicht eine bestimmte Nachricht." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Gewalt oder Gewaltandrohung" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Gewaltdarstellungen oder verstörende Inhalte" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Wir haben dieses Emoji auf 128x128 Pixel verkleinert und komprimiert, ab msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Wir haben diesen Sticker auf 320x320 Pixel verkleinert und komprimiert, aber er ist immer noch {fileSize} groß. Das Limit liegt bei {maxSize}. Versuche es mit einem einfacheren Bild, weniger Farben oder einer kleineren Quelldatei." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Wir haben einen Code an {email} gesendet." @@ -40472,7 +39961,7 @@ msgstr "Wir verarbeiten deine Anfrage so schnell wie möglich. Du erhältst eine msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Wir stellen deine vorherige E-Mail-Adresse wieder her, melden alte Sitzungen ab, deaktivieren die Multi-Faktor-Authentifizierung und sichern dein Konto mit einem neuen Passwort." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Wir senden dir einen kurzen Code, um zu bestätigen, dass du Neuigkeiten zu dieser Meldung erhalten kannst." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Welche Art von Regel wurde gebrochen?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Was gibt's Neues?" msgid "What's new" msgstr "Neuigkeiten" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Was ist der Grund für deine Meldung?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Wenn kein benutzerdefinierter Stichtag festgelegt ist, können Mitglieder ohne die Berechtigung <0>{readMessageHistoryPermissionLabel} keine früheren Nachrichten sehen. Sie sehen nur Nachrichten, die in Echtzeit eintreffen. Diese verschwinden, wenn sie ihren Client neu starten." @@ -40832,11 +40321,6 @@ msgstr "Welche Communitys" msgid "Which conversations" msgstr "Welche Unterhaltungen" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Welche Regel wurde gebrochen?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Solange Push-to-Talk aktiviert ist, steuert deine Tastenkombination dein Mikrofon, daher ist die Stummschaltfläche deaktiviert." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Du kannst in diesem Kanal keine Dateien anhängen." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Du kannst dich nicht selbst befreunden" @@ -41341,7 +40825,7 @@ msgstr "Du kannst diesem Nutzer keine Nachricht senden" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Du musst den Nutzungsbedingungen zustimmen, um einen Account zu erstellen" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Du musst deine E-Mail-Adresse bestätigen, bevor du eine Meldung senden kannst." @@ -41891,6 +41375,11 @@ msgstr "Du nutzt einen älteren Tarif. Der aktuelle Preis dafür beträgt {curre msgid "You're sending messages too quickly" msgstr "Du sendest zu schnell Nachrichten" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Du sendest Meldungen zu schnell. Versuche es später erneut." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Du siehst dir ältere Nachrichten an" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Du hast mehr Personen hinzugefügt, als eine Gruppen-DM erlaubt. Entferne ein paar und versuche es erneut." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Du hast diese Nachricht bereits gemeldet." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Du hast dieses Profil heute bereits gemeldet." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Deine Konten und Einstellungen wurden nicht geändert oder gelöscht." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Deine Aktion konnte nicht abgeschlossen werden, da sie von unseren Sicherheitssystemen als bedenklich eingestuft wurde. Wenn du glaubst, dass dies ein Fehler ist, kontaktiere bitte den Support." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Deine Antworten" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Dein Antrag wartet auf Prüfung. Du kannst die Details deines Eintrags weiterhin aktualisieren oder den Antrag zurückziehen." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Dein Browser erfordert eine Nutzerinteraktion, bevor Audio abgespielt werden kann. Klicke auf die Schaltfläche unten, um den Sprachchat zu aktivieren." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Deine Änderungen erreichen jede Community, die diesem Kanal folgt. Das kann einen Moment dauern. Jede veröffentlichte Nachricht erlaubt 3 schnelle Bearbeitungen, danach 1 alle 20 Minuten." @@ -42311,6 +41815,11 @@ msgstr "Dein neuer Spitzname. Lass das Feld leer, um ihn zurückzusetzen." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Dein altes Wiederherstellungsset funktioniert nicht mehr. Bewahre dieses neue sicher auf." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Deine Optionen" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "deine Region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Deine Verlängerungszahlung ist fehlgeschlagen, aber <0/> bleiben bis zum <1>{graceDate} aktiv. Aktualisiere vorher deine Zahlungsmethode, um dein Abo zu behalten." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Deine Meldung wurde nicht gesendet. Versuche es noch einmal." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Dein Abo wird bei der nächsten Verlängerung auf jährliche Abrechnung msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Das CSS deines Designs ist zu groß zum Teilen. Kürze es und versuche es erneut." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Dein Nutzername (optional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index dada547c9..89ed80ad2 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -2081,7 +2081,7 @@ msgstr "Απομένουν: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {μέλος} other {μέλη}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Ο σύνδεσμος πρόσκλησής σας λήγει σε # δευτερόλεπτο.} other {Ο σύνδεσμος πρόσκλησής σας λήγει σε # δευτερόλεπτα.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} επιλεγμένα" @@ -2957,11 +2957,6 @@ msgstr "Δεδομένα λογαριασμού" msgid "Account details unavailable" msgstr "Οι λεπτομέρειες του λογαριασμού δεν είναι διαθέσιμες" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Ο λογαριασμός υπάρχει για spam, απάτη ή κατάχρηση της πλατφόρμας." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Προστέθηκε: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Προστέθηκε: {createdDate} • τελευταία χρήση: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Πρόσθετα σχόλια (προαιρετικά)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Έχει ήδη εξαργυρωθεί" msgid "Already set to cancel" msgstr "Έχει ήδη οριστεί για ακύρωση" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Αναφορά αυτού του μηνύματος και στην ομάδα ασφαλείας του {productName}" @@ -4576,11 +4566,6 @@ msgstr "Ετήσιο" msgid "Another checkbox" msgstr "Άλλο πλαίσιο επιλογής" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Άλλη μια σαφής παραβίαση κανόνων" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Άλλο ένα πλαίσιο επιλογής" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Ανέβασμα ήχου" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Αυστρία" @@ -5620,6 +5605,7 @@ msgstr "Απών τώρα" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Απών τώρα" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Πίσω" @@ -5788,9 +5775,7 @@ msgstr "Οι εφεδρικοί κωδικοί ανανεώθηκαν" msgid "Badge" msgstr "Σήμα" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Αποκλεισμός" @@ -5819,7 +5804,7 @@ msgstr "Διάρκεια αποκλεισμού" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Αποκλεισμός μελών από την κοινότητα, με msgid "Ban reason" msgstr "Λόγος αποκλεισμού" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Αποκλεισμός αυτού του χρήστη" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Εύρος ζώνης" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Έχει αποκλειστεί" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Αποκλείστηκε ο/η {targetUserTag} από την κοινότητα" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Πριν από την ημερομηνία" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Βέλγιο" @@ -6031,7 +6006,7 @@ msgstr "Ρυθμός μετάδοσης δεδομένων" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Μπλοκάρισμα" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Αποκλεισμός" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Μπλοκάρισμα {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Αποκλεισμός για όλες τις κοινότητες" msgid "Block spoiler" msgstr "Μπλοκ spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Μπλοκάρισμα αυτού του χρήστη" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Μπλοκάρισμα χρήστη" msgid "Blocked" msgstr "Μπλοκαρισμένοι" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Μπλοκαρίστηκε" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Ενσωματωμένοι μεταφραστές" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Βουλγαρία" @@ -6519,16 +6500,6 @@ msgstr "Βουλγαρικά" msgid "Bulk delete" msgstr "Μαζική διαγραφή" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Εκφοβισμός, επανειλημμένη ανεπιθύμητη επικοινωνία, παρακολούθηση ή στοχευμένη κακοποίηση." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Εκφοβισμός, απειλές, μίσος, βία, επιδρομές ή περιεχόμενο που προωθεί τον αυτοτραυματισμό." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Καλιφόρνια" msgid "Call" msgstr "Κλήση" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Ρυθμίσεις κλήσεων και ομαδικών συνομιλιών" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Αλλαγή banner" msgid "Change chat embed background" msgstr "Αλλαγή φόντου ενσωμάτωσης συνομιλίας" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Αλλαγή email" @@ -7150,8 +7116,8 @@ msgstr "Αλλαγή ψευδώνυμου φίλου" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Αλλαγή ψευδώνυμου στην ομάδα" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Αλλαγή γλώσσας" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Αλλαγή του ψευδώνυμού μου στην ομάδα" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Αλλαγή προσωπικού ψευδώνυμου" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Αλλαγή κατόχου" @@ -7283,16 +7249,6 @@ msgstr "Αλλαγή της περιοχής φωνής που χρησιμοπ msgid "Change which voice region this channel uses." msgstr "Αλλαγή της περιοχής φωνής που χρησιμοποιεί αυτό το κανάλι." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Αλλάξτε ποιος μπορεί να σας καλέσει ή να σας προσθέσει." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Αλλάξτε ποιος μπορεί να επικοινωνήσει μαζί σας." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Ελέγξτε τα εισερχόμενά σας στο {emailAddress} msgid "Check your inbox for a verification email." msgstr "Ελέγξτε τα εισερχόμενά σας για ένα email επαλήθευσης." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Έλεγχος αναφοράς" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Πλαίσια επιλογής" @@ -7901,21 +7862,6 @@ msgstr "Η ολοκλήρωση αγοράς έχει αποκλειστεί γ msgid "Checkout unavailable" msgstr "Η ολοκλήρωση αγοράς δεν είναι διαθέσιμη" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Ανησυχίες για την ασφάλεια ανηλίκων" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Ασφάλεια παιδιών ή εκμετάλλευση ανηλίκων" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Ασφάλεια παιδιών ή ακατάλληλο περιεχόμενο" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Επιλογές" msgid "Choices: {choiceList}" msgstr "Επιλογές: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Επιλογή" @@ -8122,6 +8068,11 @@ msgstr "Επίλεξε την κατηγορία που περιγράφει κ msgid "Choose the premium model" msgstr "Επιλέξτε το μοντέλο premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Επιλέξτε ξανά τον λόγο" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Παραλαβή δώρου" msgid "Claim your account" msgstr "Διεκδικήστε τον λογαριασμό σας" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Διεκδικήστε τον λογαριασμό σας και επαληθεύστε το email σας για να στείλετε αναφορές." @@ -8352,12 +8303,12 @@ msgstr "Διεκδικήστε τον λογαριασμό σας για να ε #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Διεκδικήστε τον λογαριασμό σας για να στείλετε αιτήματα φιλίας." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Διεκδίκησε τον λογαριασμό σου για να στείλεις αναφορές." @@ -8378,11 +8329,6 @@ msgstr "Διεκδικήστε τον λογαριασμό σας για να ξ msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Παραλάβετε το δώρο σας για να ενεργοποιήσετε τη συνδρομή σας στο {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Προσποίηση άλλου ατόμου, επωνυμίας ή οργανισμού." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Εκκαθάριση πεδίου αναζήτησης" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Κλείσιμο παραθύρου" msgid "Close popout" msgstr "Κλείσιμο αναδυόμενου παραθύρου" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Κλείσιμο αυτού του DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Κλείσιμο στο tray" msgid "Close window" msgstr "Κλείσιμο παραθύρου" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Κλείστε το τρέχον DM σας με τον/την {dmDisplayName}. Αυτό δεν μπλοκάρει τον χρήστη και μπορείτε να ανοίξετε ξανά το DM αργότερα." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Να κλείσει το DM σας με τον/την {displayName}; Μπορείτε να το ανοίξετε ξανά ανά πάσα στιγμή." @@ -8837,7 +8773,7 @@ msgstr "Θέμα Coal" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Κωδικός" @@ -8868,7 +8804,7 @@ msgstr "Κωδικός από την εφαρμογή {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Ο κωδικός στάλθηκε ξανά" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Κοινότητες στις οποίες μπορείτε να συμμετάσχετε" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Κοινότητα" @@ -9131,7 +9065,7 @@ msgstr "Σίγαση ήχου μέλους στην κοινότητα" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Εντοπισμός σφαλμάτων κοινότητας" @@ -9150,16 +9084,6 @@ msgstr "Η κοινότητα διαγράφηκε" msgid "Community DM" msgstr "DM κοινότητας" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Η κοινότητα υπάρχει για να στέλνει spam, να εξαπατά ή να κάνει κατάχρηση της πλατφόρμας." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Η κοινότητα διευκολύνει τις ομαδικές επιθέσεις ή τη στοχευμένη κακοποίηση." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Εικονίδιο κοινότητας" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Αναγνωριστικό κοινότητας" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Απαιτείται αναγνωριστικό κοινότητας." @@ -9526,6 +9450,11 @@ msgstr "Επιβεβαίωση νέου κωδικού πρόσβασης" msgid "Confirm password" msgstr "Επιβεβαίωση κωδικού πρόσβασης" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Επιβεβαιώστε τη δήλωση για να στείλετε την αναφορά." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Συνέχεια στο πρόγραμμα περιήγησής σας" msgid "Continue to checkout" msgstr "Συνέχεια στο ταμείο" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Συνέχεια αναφοράς κοινότητας" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Συνέχεια αναφοράς χρήστη" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Η μετατροπή αυτού του καναλιού σε κανάλ msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Μετατρέπει το εισερχόμενο περιεχόμενο σε ομιλία, ανεξάρτητα από το αν προήλθε από το /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Συντονίζει επιδρομές, οργανωμένες επιθέσεις ή παρενόχληση εναντίον ατόμων ή κοινοτήτων." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Αντιγράφηκε η διεύθυνση URL στο πρόχειρο #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Αντιγράφηκε η διεύθυνση URL στο πρόχειρο #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Αντιγραφή αναγνωριστικού μηνύματος" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Αντιγραφή συνδέσμου μηνύματος" @@ -10643,6 +10553,11 @@ msgstr "Δεν ήταν δυνατή η φόρτωση των δημοσιεύσ msgid "Couldn't load settings" msgstr "Αδυναμία φόρτωσης ρυθμίσεων" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Δεν ήταν δυνατή η φόρτωση της φόρμας αναφοράς." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Δεν ήταν δυνατή η φόρτωση αυτής της εφαρμογής" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Δεν ήταν δυνατή η επεξεργασία της εικόνας" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Δεν ήταν δυνατή η δημοσίευση αυτού του μηνύματος" @@ -10825,11 +10740,6 @@ msgstr "Δεν ήταν δυνατή η αποστολή της πρόσκλησ msgid "Couldn't send invite. Try again." msgstr "Δεν ήταν δυνατή η αποστολή της πρόσκλησης. Δοκιμάστε ξανά." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Δεν ήταν δυνατή η αποστολή. Δοκιμάστε ξανά." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Χρονόμετρο αντίστροφης μέτρησης" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Χώρα διαμονής" @@ -11301,13 +11211,8 @@ msgstr "Δημιουργήθηκε:" msgid "Credentials" msgstr "Στοιχεία σύνδεσης" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Αξιόπιστες απειλές, σοκαριστική βία ή εξύμνηση της βίας." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Κροατία" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Κόβει τον ήχο κάτω από ένα όριο έντασης, με ελάχιστη χρήση CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Κύπρος" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Τσεχικά" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Τσεχία" @@ -11965,7 +11870,7 @@ msgstr "Εντοπισμός σφαλμάτων καναλιού" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Εντοπισμός σφαλμάτων κοινότητας" @@ -12151,7 +12056,6 @@ msgstr "Ντέλαγουερ" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Ντέλαγουερ" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Διαγραφή θέματος;" msgid "Delete this invite? Can't be undone." msgstr "Να διαγραφεί αυτή η πρόσκληση; Δεν μπορεί να αναιρεθεί." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Διαγραφή αυτού του μηνύματος" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Διαγραφή αυτού του μηνύματος; Δεν μπορεί να αναιρεθεί." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Διαγραφή αυτού του μηνύματος; Δεν αναιρείται. Το μήνυμα θα αφαιρεθεί επίσης από κάθε κοινότητα που ακολουθεί αυτό το κανάλι." @@ -12461,11 +12359,6 @@ msgstr "Να διαγραφούν τα μηνύματά σας σε αυτήν msgid "Delete your messages in this conversation?" msgstr "Να διαγραφούν τα μηνύματά σας σε αυτήν τη συνομιλία;" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Διαγράφηκε" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Απαγορεύτηκαν {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Δανία" @@ -12554,11 +12447,6 @@ msgstr "Περιγράψτε το αυτοκόλλητο" msgid "Describe this media for screen readers" msgstr "Περιγράψτε αυτό το στοιχείο πολυμέσων για προγράμματα ανάγνωσης οθόνης" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Περιγράψτε γιατί το περιεχόμενο είναι παράνομο" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Ξεχωριστό banner" msgid "Detail" msgstr "Λεπτομέρεια" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Λεπτομέρειες" @@ -13315,11 +13203,6 @@ msgstr "Όνομα εμφάνισης (προαιρετικό)" msgid "Display scaling" msgstr "Κλιμάκωση οθόνης" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Διανέμει κακόβουλο λογισμικό, εργαλεία υποκλοπής διαπιστευτηρίων ή άλλα επιβλαβή αρχεία." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Ρυθμίσεις DM και αιτημάτων φιλίας" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Τεκμηρίωση" msgid "Doesn't allow being added to group DMs" msgstr "Δεν επιτρέπει την προσθήκη σε ομαδικές συνομιλίες" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Δεν μπλοκάρει. Μπορείτε να το ξανανοίξετε αργότερα." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Κάνε μια δωρεά" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Λήψη χαρτών πηγών ώστε τα ίχνη στοίβας msgid "Download video" msgstr "Λήψη βίντεο" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, έκθεση προσωπικών δεδομένων ή καταδίωξη." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, καταδίωξη, προσποίηση ταυτότητας ή ακατάλληλο προφίλ." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Επεξεργασία χρώματος για {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Επεξεργασία προφίλ κοινότητας" @@ -14043,7 +13908,7 @@ msgstr "Επεξεργασία παρακάμψεων για ρόλους και #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Επεξεργασία προφίλ" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Επεξεργασία τοπικής ώρας προφίλ" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Επεξεργασία δημοσιευμένου μηνύματος;" @@ -14191,13 +14056,13 @@ msgstr "Δικαιούστε επιστροφή χρημάτων έως {windowE #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Διεύθυνση email" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Απαιτείται διεύθυνση email." @@ -14721,16 +14586,6 @@ msgstr "Προτιμώμενος κωδικοποιητής για νέα κοι msgid "Encoder, SVC, and bitrate presets" msgstr "Κωδικοποιητής, SVC και προεπιλογές ρυθμού μετάδοσης" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Ενθαρρύνει τον αυτοτραυματισμό" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Ενθαρρύνει την αυτοκτονία, τον αυτοτραυματισμό ή τις διατροφικές διαταραχές." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Η κρυπτογράφηση από άκρο σε άκρο δεν εί msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Η κρυπτογράφηση από άκρο σε άκρο δεν είναι διαθέσιμη επειδή υπάρχει μη υποστηριζόμενος συμμετέχων σε αυτό το φωνητικό κανάλι." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Θέτει σε κίνδυνο ανηλίκους ή φιλοξενεί περιεχόμενο παιδικής εκμετάλλευσης." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Εισαγάγετε έναν κωδικό με τη μορφή ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Εισαγάγετε μια έγκυρη διεύθυνση URL ή κωδικό προτύπου {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Εισαγάγετε μια έγκυρη διεύθυνση email." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Εισαγάγετε έναν έγκυρο σύνδεσμο μηνύματος." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Εισαγάγετε τον κωδικό {digitCount} ψηφίων από την εφαρμογή ελέγχου ταυτότητας." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Εισάγετε τον κωδικό πριν συνεχίσετε." @@ -15008,7 +14858,7 @@ msgstr "Πατήστε Enter για <0><1>αποθήκευση" msgid "Enter username" msgstr "Εισαγάγετε όνομα χρήστη" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Εισαγάγετε τον κωδικό επαλήθευσης" @@ -15017,6 +14867,11 @@ msgstr "Εισαγάγετε τον κωδικό επαλήθευσης" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Εισάγετε το email σας και θα σας στείλουμε έναν σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Εισάγετε το πλήρες νόμιμο όνομά σας για να στείλετε την αναφορά." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Πατήστε Escape για <0><1>ακύρωση" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Εσθονία" @@ -15412,6 +15267,16 @@ msgstr "Λήγει στις {earliest}" msgid "Expires:" msgstr "Λήγει:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Εξηγήστε το πρόβλημα" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Εξηγήστε το πρόβλημα για να στείλετε την αναφορά." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Οι εξωτερικοί σύνδεσμοι μπορεί να είνα msgid "Extra large" msgstr "Πολύ μεγάλο" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Εξτρεμιστική κοινότητα" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Αποτυχία κατάργησης προσαρμοσμένου URL. Δοκιμάστε ξανά." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Αποτυχία επανάληψης αποστολής κωδικού. Δοκιμάστε ξανά." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Αποτυχία επαναφοράς της κατάστασης premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Αποτυχία αποστολής κωδικού. Δοκιμάστε ξανά." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Αποτυχία αποστολής μηνύματος. Πατήστε παρατεταμένα για επιλογές." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Αποτυχία αποστολής αναφοράς. Δοκιμάστε ξανά." @@ -15840,11 +15700,6 @@ msgstr "Αποτυχία μεταφόρτωσης emoji, ξεκινώντας α msgid "Failed to upload emojis. Try again." msgstr "Αποτυχία μεταφόρτωσης emoji. Δοκιμάστε ξανά." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Ψευδείς ισχυρισμοί που ενδέχεται να προκαλέσουν πραγματική βλάβη." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Βρες το τέλειο αυτοκόλλητο" msgid "Fingerprint" msgstr "Δακτυλικό αποτύπωμα" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Ολοκλήρωση ρύθμισης λογαριασμού" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Ολοκληρώστε πρώτα τη ρύθμιση του λογαριασμού" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Ολοκληρώστε την εγγραφή για να στείλετε αιτήματα φιλίας." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Φινλανδία" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Φινλανδικά" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Όνομα και επίθετο" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Οι ρυθμοί καρέ πάνω από 30 FPS απαιτούν {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Γαλλία" @@ -16834,10 +16689,10 @@ msgstr "Πλήρης" msgid "Full dynamic range" msgstr "Πλήρες δυναμικό εύρος" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Πλήρες νόμιμο όνομα" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Πλήρες νόμιμο όνομα (προαιρετικό για αναφορές παιδικής σεξουαλικής κακοποίησης)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Γερμανικά" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Γερμανία" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Πίσω" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Επιστρέψτε και εισαγάγετε ένα έγκυρο email." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Χαιρόμαστε που σε βλέπουμε, {username}! Καλώς ήρθες." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Ελλάδα" @@ -17572,11 +17427,6 @@ msgstr "Ελληνικά" msgid "Grid view" msgstr "Προβολή πλέγματος" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Αποπλάνηση ανηλίκων ή περιεχόμενο εκμετάλλευσης παιδιών." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Όνομα χρήστη" msgid "Hang out with voice, video and screen share" msgstr "Συνευρεθείτε με φωνή, βίντεο και κοινή χρήση οθόνης" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Παρενόχληση" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Παρενόχληση που περιλαμβάνει περιεχόμενο ενηλίκων" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Παρενόχληση ή εκφοβισμός" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Παρενόχληση ή καταδίωξη" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Παρενόχληση ή στοχευμένη κακοποίηση" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Παρενόχληση ή απειλές" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Κλειδί υλικού" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Με επιτάχυνση υλικού στα περισσότερα συστήματα Windows και macOS. Αξιόπιστο για παλαιότερες συσκευές." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Επιβλαβής παραπληροφόρηση" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Έχει κάνει ποτέ αγορά" msgid "Has ever purchased override" msgstr "Έχει κάνει ποτέ αγορά (παράκαμψη)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Ρητορική μίσους" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Να αποκρύψετε τη δική σας κοινή χρήση ο msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Αποκρύπτει τα κουμπιά λήψης, άνοιγμα σε πρόγραμμα περιήγησης και αντιγραφή σε εικόνες και βίντεο σε αυτό το κανάλι." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Αποκρύπτει τα μηνύματά τους και τους εμποδίζει να σας στέλνουν μηνύματα" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ουγγρικά" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ουγγαρία" @@ -18399,6 +18212,11 @@ msgstr "Είμαι μια επεξήγηση" msgid "I changed my mind" msgstr "Άλλαξα γνώμη" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Επιβεβαιώνω καλή τη πίστει ότι οι πληροφορίες και οι ισχυρισμοί σε αυτήν την αναφορά είναι ακριβείς και πλήρεις." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Ρυθμίσεις αδράνειας" msgid "Idle timeout" msgstr "Χρονικό όριο αδράνειας" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Εάν εμπλέκεται ανήλικος, χρησιμοποιήστε το \"{childSafetyReasonName}\" αντ' αυτού." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Αν ένας λογαριασμός χρησιμοποιεί αυτήν msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Αν το macOS ζητήσει να κλείσετε και να ανοίξετε ξανά το {productName}, επιλέξτε Αργότερα." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Αν κάποιος βρίσκεται σε άμεσο κίνδυνο, επικοινωνήστε με τις τοπικές υπηρεσίες έκτακτης ανάγκης, εφόσον μπορείτε να το κάνετε με ασφάλεια." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Αν κάποιος κινδυνεύει άμεσα, επικοινωνήστε πρώτα με τις τοπικές υπηρεσίες έκτακτης ανάγκης." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Εάν κάποιος σας ζήτησε να επικολλήσετε κάτι εδώ, είναι μια απάτη που μπορεί να τους δώσει πρόσβαση στον λογαριασμό σας στο {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Αν αυτό αφορά υλικό σεξουαλικής κακοποίησης παιδιών (CSAM) ή εκμετάλλευση ανηλίκου, στείλτε την αναφορά τώρα και μην αναδημοσιεύσετε το υλικό." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Αν πρόκειται για μια αξιόπιστη επικείμενη απειλή, επικοινωνήστε και με τις τοπικές υπηρεσίες έκτακτης ανάγκης." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Αν πρόκειται για επικείμενη τρομοκρατική απειλή, επικοινωνήστε και με τις τοπικές υπηρεσίες έκτακτης ανάγκης." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Αν αυτή η αναφορά αφορά ένα συγκεκριμένο μήνυμα σε αυτήν την κοινότητα, αναφέρετε αυτό το μήνυμα αντ' αυτού. Οι αναφορές μηνυμάτων δίνουν στην ομάδα ασφαλείας μας το σαφέστερο πλαίσιο και η προσθήκη λεπτομερειών στα σχόλια μπορεί να μας βοηθήσει να το εξετάσουμε πιο γρήγορα. Συνεχίστε με την αναφορά ολόκληρης της κοινότητας μόνο αν η αναφορά ενός μηνύματος δεν θα κάλυπτε το ευρύτερο ζήτημα." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Αν αυτή η αναφορά αφορά ένα συγκεκριμένο μήνυμα, αναφέρετε αυτό το μήνυμα αντ' αυτού. Οι αναφορές μηνυμάτων δίνουν στην ομάδα ασφαλείας μας το σαφέστερο πλαίσιο και η προσθήκη λεπτομερειών στα σχόλια μπορεί να μας βοηθήσει να το εξετάσουμε πιο γρήγορα. Συνεχίστε με την αναφορά του χρήστη συνολικά μόνο αν αυτό το μήνυμα δεν αποτυπώνει το ευρύτερο ζήτημα." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Αν αυτή η αναφορά αφορά συγκεκριμένα μηνύματα, αναφέρετε το πιο σχετικό μήνυμα. Οι αναφορές μηνυμάτων δίνουν στην ομάδα ασφαλείας μας το σαφέστερο πλαίσιο και η προσθήκη λεπτομερειών στα σχόλια μπορεί να μας βοηθήσει να το εξετάσουμε πιο γρήγορα. Συνεχίστε με την αναφορά του χρήστη συνολικά μόνο αν η αναφορά ενός μηνύματος δεν θα κάλυπτε το ευρύτερο ζήτημα." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Αν πιστεύετε ότι είναι παράνομο, αναφέρετε ποιον νόμο και γιατί." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Παράβλεψη της αργής λειτουργίας αυτού msgid "Ignore virtual" msgstr "Παράβλεψη εικονικών συσκευών" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Παράνομη δραστηριότητα" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Παράνομη δραστηριότητα ή κάτι άλλο" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Παράνομες πωλήσεις, διευκόλυνση εγκληματικών πράξεων ή σαφής παραβίαση κανόνων που δεν εμπίπτει στις παραπάνω κατηγορίες." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Παράνομες πωλήσεις, διευκόλυνση εγκληματικών πράξεων ή παράνομη δραστηριότητα." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Εικόνες" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Οι εικόνες που επικολλάτε από το πρόχειρό σας αποστέλλονται ως συνημμένα και δεν έχετε δικαίωμα επισύναψης αρχείων σε αυτό το κανάλι." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Πλαστοπροσωπία" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Πλαστοπροσωπία ή παραπλανητικό περιεχόμενο" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Ανενεργό" msgid "Inactive timeout" msgstr "Χρονικό όριο αδράνειας" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Ακατάλληλο προφίλ" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Συμπερίλαβε τους κωδικούς επαλήθευσης δύο παραγόντων στο PDF και την εκτύπωση" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Συμπεριλάβετε το αναγνωριστικό κοινότητας." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Φόντο πρόσκλησης" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Κωδικός πρόσκλησης (προαιρετικό)" @@ -19471,7 +19220,7 @@ msgstr "Απόκρυψη προσκλήσεων" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Πρόσκληση μελών" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Η διεύθυνση IP εξουσιοδοτήθηκε" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ιρλανδία" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Πλάγια" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Ιταλία" @@ -20120,7 +19869,7 @@ msgstr "Πλήκτρα" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Αργότερα" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Λετονία" @@ -20291,11 +20040,6 @@ msgstr "Μάθετε περισσότερα" msgid "Learn more about Visionary" msgstr "Μάθετε περισσότερα για το Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Αποχώρηση" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Έξοδος από ιδιωτικό νήμα" msgid "Leave silently" msgstr "Αθόρυβη αποχώρηση" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Αποχώρηση από την κοινότητα" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Εμφανίζει τα μέλη με αυτόν τον ρόλο σε δική τους ενότητα στη λίστα μελών." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Λιθουανία" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Φόρτωση..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Φόρτωση…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Χαμηλό" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Λουξεμβούργο" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Έχει προγραμματιστεί συντήρηση για {localizedTime}. Αναμενόμενη διάρκεια: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Να γίνει ο/η {userName} κάτοχος της ομάδας; Θα χάσετε τα δικαιώματα κατόχου." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Ορισμός ως κατόχου ομάδας" @@ -21091,38 +20830,21 @@ msgstr "Ορισμός ως κατόχου ομάδας" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Βεβαιωθείτε ότι αυτός ο κωδικός ταιριάζει με αυτόν στην εφαρμογή {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Βεβαιωθείτε ότι όλα φαίνονται σωστά πριν την αποστολή." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Κάντε την παρουσία δική σας" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Κακόβουλοι σύνδεσμοι" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Μάλτα" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Διανομή κακόβουλου λογισμικού" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Κακόβουλο λογισμικό ή επικίνδυνοι σύνδεσμοι" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Κακόβουλο λογισμικό, κλοπή διαπιστευτηρίων ή επιβλαβή αρχεία." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Απόκρυψη προσωπικών στοιχείων πριν από msgid "Mask Visionary as subscription" msgstr "Εμφάνιση του Visionary ως συνδρομής" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Μαζικά ανεπιθύμητα μηνύματα, απάτη, ψεύτικες κληρώσεις ή κατάχρηση λογαριασμού." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Πύλη πολυμέσων με περιεχόμενο για ενήλ msgid "Mature content not allowed" msgstr "Το περιεχόμενο ενηλίκων δεν επιτρέπεται" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Περιεχόμενο για ενήλικες ή παρενόχληση" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Περιεχόμενο για ενήλικες ή μη ασφαλής έλεγχος πρόσβασης" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Παράκαμψη περιεχομένου ενηλίκων" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Παραβίαση πολιτικής για περιεχόμενο ενηλίκων" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Περιεχόμενο ενηλίκων χωρίς κατάλληλο έλεγχο πρόσβασης." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Μήνυμα" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "σύνδεσμος μηνύματος" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Σύνδεσμος μηνύματος" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Προεπισκοπήσεις μηνυμάτων στη λίστα DM" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Μήνυμα δημοσιεύτηκε" @@ -22211,6 +21908,11 @@ msgstr "Ώρα μηνύματος" msgid "Message unpinned" msgstr "Το μήνυμα αποκαρφιτσώθηκε" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Μήνυμα που αναφέρετε" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Μινεσότα" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Ανήλικοι σε κίνδυνο, περιεχόμενο ενηλίκων σε λάθος μέρος ή ανεπιθύμητη συμπεριφορά." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Περισσότερα" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Περισσότερες ενέργειες" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Ένθετο" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Ολλανδία" @@ -24099,7 +23796,7 @@ msgstr "Κανένα αποτέλεσμα" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Δεν βρέθηκαν αποτελέσματα" @@ -24858,6 +24555,16 @@ msgstr "Μόνο άτομα που προσκαλείς και οι διαχει msgid "Only places I can't access anymore" msgstr "Μόνο μέρη στα οποία δεν έχω πλέον πρόσβαση" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Αναφέρετε μόνο ό,τι πιστεύετε ειλικρινά ότι παραβιάζει τους κανόνες και παρακαλούμε μην στέλνετε την ίδια αναφορά δύο φορές." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Αναφέρετε μόνο ό,τι πιστεύετε ειλικρινά ότι παραβιάζει τους κανόνες. Η κατάχρηση των αναφορών αντίκειται στις <0>οδηγίες κοινότητας μας." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Διαφάνεια" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Άνοιγμα στο {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Άνοιγμα αναπτυσσόμενου πλαισίου" @@ -25379,11 +25084,6 @@ msgstr "Άνοιξε τις Ρυθμίσεις Συστήματος → Απόρ msgid "Open template JSON" msgstr "Άνοιγμα JSON προτύπου" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Άνοιγμα του παραθύρου διαλόγου αποκλεισμού για αυτήν την κοινότητα." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Άνοιγμα ρυθμίσεων" msgid "Opened the thread again" msgstr "Ξανανοίξαμε το νήμα" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Ανοίγει σε νέα καρτέλα" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Αρχικά έγινε ο αποκλεισμός στις {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Άλλο" @@ -25654,11 +25357,6 @@ msgstr "Άλλη αντίδραση…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Η ομάδα ασφαλείας μας το εξετάζει. Θα σας στείλουμε ένα DM και ένα email μόλις καταλήξουμε σε απόφαση." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Δεν ήταν δυνατή η μεταβίβαση της ιδιοκτησίας στον χρήστη <0>{username} αυτή τη στιγμή." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Η ιδιοκτησία μεταβιβάστηκε" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Επικολλήστε την απόκριση JSON εδώ" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Επικολλήστε τον σύνδεσμο μηνύματος." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, απάτη, κακόβουλοι σύνδεσμοι ή ψευδείς ισχυρισμοί που ενδέχεται να προκαλέσουν πραγματική βλάβη." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Επιλέξτε πάροχο αναζήτησης ιστού" msgid "Pick an emoji" msgstr "Διάλεξε ένα emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Κάντε μια επιλογή για να συνεχίσετε." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Διάλεξε τον 4ψήφιο αριθμό μετά το όνομά msgid "Pick the appearance this administrator account should start with." msgstr "Επιλέξτε την εμφάνιση με την οποία θα ξεκινήσει αυτός ο λογαριασμός διαχειριστή." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Επιλέξτε τον κανόνα για έλεγχο." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Παρακαλώ περιμένετε λίγο και δοκιμάστε να μετονομάσετε ξανά." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Πολωνία" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Θύρα" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Πορτογαλία" @@ -26872,11 +26555,6 @@ msgstr "πατήστε για προσθήκη αντίδρασης" msgid "press to remove reaction" msgstr "πατήστε για κατάργηση αντίδρασης" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Προσποίηση ότι είστε κάποιος άλλος, συμπεριλαμβανομένου περιεχομένου που δημιουργείται από AI με σκοπό την εξαπάτηση." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Αποτροπή αποστολής μηνυμάτων, αντιδράσεων και σύνδεσης σε φωνητικά κανάλια από τον χρήστη <0>{targetUserTag} για την καθορισμένη διάρκεια." @@ -27078,11 +26756,6 @@ msgstr "Ομιλητής προτεραιότητας" msgid "Privacy" msgstr "Απόρρητο" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Απόρρητο ή πλαστοπροσωπία" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Ρύθμιση απορρήτου" msgid "Privacy URL" msgstr "Διεύθυνση URL απορρήτου" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Παραβίαση απορρήτου" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Παραβίαση απορρήτου ή doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Παραβίαση απορρήτου ή καταδίωξη" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Τύπος προφίλ" msgid "Profile updated" msgstr "Το προφίλ ενημερώθηκε" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Παραβίαση προφίλ, ονόματος χρήστη ή avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Προωθεί το μίσος κατά προστατευμένων ομάδων." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Προωθεί, στρατολογεί ή συντονίζει βίαιες εξτρεμιστικές δραστηριότητες." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Προώθηση ή οδηγίες που ενθαρρύνουν τον αυτοτραυματισμό ή τις διατροφικές διαταραχές." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Προφίλ που αναφέρετε" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Αντωνυμίες: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Προστατέψτε τον λογαριασμό σας Visionary, ενεργοποιώντας τον έλεγχο ταυτότητας δύο παραγόντων. Σας ευχαριστούμε που υποστηρίζετε το {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Δώστε τουλάχιστον ένα αναγνωριστικό χρήστη ή μια ετικέτα χρήστη." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Δώστε είτε το αναγνωριστικό χρήστη είτε το όνομα χρήστη του ατόμου που αναφέρετε." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Δώστε το πλήρες νόμιμο όνομά σας για τη δήλωση." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Τα κουμπιά επιλογής επιτρέπουν την επι msgid "Radio group" msgstr "Ομάδα επιλογών" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Συντονισμός επιδρομής" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Έτοιμοι να αγοράσετε ένα δώρο;" msgid "Ready to upgrade?" msgstr "Έτοιμοι για αναβάθμιση;" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Λόγος" @@ -28291,8 +27924,8 @@ msgstr "Απομνημόνευση μεγέθους και θέσης παραθ #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Κατάργηση {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Να καταργηθεί ο/η {userName} από την ομάδα;" @@ -28419,8 +28052,8 @@ msgstr "Αφαίρεση από τα αγαπημένα" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Αφαίρεση από την ομάδα" @@ -28458,11 +28091,6 @@ msgstr "Αφαίρεση από τα αγαπημένα GIF που αποθηκ msgid "Remove icon" msgstr "Αφαίρεση εικονιδίου" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Κατάργησή του από το κανάλι για όλους." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Αφαιρέθηκε από τα αγαπημένα" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Καταργήθηκε από την ομάδα" @@ -28919,28 +28547,18 @@ msgstr "Αναφορά κοινότητας" msgid "Report a message" msgstr "Αναφορά μηνύματος" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Αναφέρετε μια παραβίαση κανόνων ή βρείτε εργαλεία για τη διαχείριση επαφών και προτιμήσεων." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Αναφορά προφίλ χρήστη" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Αναφορά κοινότητας" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Λεπτομέρειες αναφοράς" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Αναφορά παράνομου περιεχομένου" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Αναφορά προβλήματος" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Αναφορά μηνύματος" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Αναφορά προφίλ" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Η αναφορά στάλθηκε" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Τύπος αναφοράς" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Αναφορά χρήστη" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Ετικέτα αναφερόμενου χρήστη (προαιρετικό)" @@ -29100,6 +28716,10 @@ msgstr "Απαιτούνται όλα όσα και στο επίπεδο \"Μέ msgid "Resend" msgstr "Επανάληψη αποστολής" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Επανάληψη αποστολής ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Επανάληψη αποστολής ({newSecondsRemaining}δ)" @@ -29108,7 +28728,7 @@ msgstr "Επανάληψη αποστολής ({newSecondsRemaining}δ)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Επανάληψη αποστολής ({originalSecondsRemaining}δ)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Επανάληψη αποστολής ({resendCooldownSeconds}δ)" @@ -29122,7 +28742,7 @@ msgstr "Επανάληψη αποστολής ({resendSecondsRemaining}δ)" msgid "Resend ({secondsRemaining}s)" msgstr "Επανάληψη αποστολής ({secondsRemaining}δ)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Επανάληψη αποστολής κωδικού" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Οι ρόλοι ενημερώθηκαν με επιτυχία" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Ρουμανία" @@ -29947,7 +29567,7 @@ msgstr "Κορεσμός" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Πείτε ένα γεια στον/στην <0>{displayName}. Το msgid "Scale" msgstr "Κλίμακα" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Απάτες, κακόβουλο λογισμικό ή παραπληροφόρηση" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Σαρώστε τον κωδικό QR με την εφαρμογή ελέγχου ταυτότητας." @@ -30855,11 +30470,6 @@ msgstr "Επιλογή" msgid "Select {accessibleName}" msgstr "Επιλέξτε {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Επιλέξτε κατηγορία" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Επιλέξτε μια κοινότητα όπου έχετε το δικαίωμα {permissionName} ή μια ομαδική συνομιλία στην οποία ανήκετε." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Επιλέξτε χώρα" @@ -30911,11 +30521,6 @@ msgstr "Επιλέξτε ένα URI ανακατεύθυνσης" msgid "Select a scenario to apply..." msgstr "Επιλέξτε ένα σενάριο για εφαρμογή..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Επιλέξτε κατηγορία παράβασης." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Επιλέξτε τον λογαριασμό με τον οποίο θέ msgid "Select voice processing mode" msgstr "Επιλέξτε λειτουργία επεξεργασίας φωνής" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Επιλέξτε τι θέλετε να αναφέρετε." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Επιλέξτε τη χώρα διαμονής σας." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Επιλογή…" @@ -31037,13 +30642,6 @@ msgstr "Επιλογή: {0} (μέγ. {1})" msgid "Selections" msgstr "Επιλογές" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Αυτοτραυματισμός ή αυτοκτονία" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Στείλτε ένα μήνυμα ενέργειας (εμφανίζε msgid "Send animation" msgstr "Αποστολή κινούμενων εικόνων" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Αποστολή άλλης αναφοράς" @@ -31138,7 +30736,7 @@ msgstr "Κουμπί αποστολής" msgid "Send code" msgstr "Αποστολή κωδικού" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Αποστολή αναφοράς DSA" @@ -31158,9 +30756,9 @@ msgstr "Στείλτε αρχεία έως {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Αποστολή αιτήματος φιλίας" @@ -31220,8 +30818,8 @@ msgstr "Αποστολή μηνυμάτων σε νήματα" msgid "Send messages, images, GIFs and emoji" msgstr "Στείλτε μηνύματα, εικόνες, GIF και emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Αποστολή αναφοράς" @@ -31255,7 +30853,7 @@ msgstr "Να στείλετε αυτό το καρφιτσωμένο μήνυμ msgid "Send TTS messages" msgstr "Αποστολή μηνυμάτων κειμένου σε ομιλία" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Αποστολή κωδικού επαλήθευσης" @@ -31273,11 +30871,6 @@ msgstr "Αποστολή φωνητικού μηνύματος" msgid "Send:" msgstr "Αποστολή:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Αποστολή κακόβουλου λογισμικού ή επικίνδυνων συνδέσμων" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Κοινοποίηση θέματος" msgid "Share voice activity with all friends?" msgstr "Κοινοποίηση της φωνητικής δραστηριότητας σε όλους τους φίλους;" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Μοιραστείτε ό,τι χρειάζεται η ομάδα μας για να το αξιολογήσει." @@ -31709,11 +31302,6 @@ msgstr "Μοιραστείτε ό,τι χρειάζεται η ομάδα μας msgid "Share with a friend" msgstr "Κοινοποίηση σε φίλο" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Κοινοποίηση στους συντονιστές της κοινότητας." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Κοινόχρηστο παράθυρο" msgid "Shared window audio" msgstr "Ήχος κοινόχρηστου παραθύρου" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Κοινοποιεί προσωπικά δεδομένα, παρακολουθεί χρήστες ή συντονίζει την κατάχρηση απορρήτου." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Κοινοποίηση προσωπικών πληροφοριών" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Ρυθμιστικά" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Σλοβακία" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Σλοβενία" @@ -32889,11 +32467,6 @@ msgstr "Προσομοίωση αργής λειτουργίας" msgid "Slowmode time remaining" msgstr "Χρόνος που απομένει για αργή λειτουργία" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Υβριστικοί χαρακτηρισμοί, απανθρωποποιητική γλώσσα ή επιθέσεις σε προστατευόμενες ομάδες." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Κάτι πήγε στραβά κατά την προετοιμασία αυτού του αυτοκόλλητου. Δοκιμάστε άλλο αρχείο ή δοκιμάστε ξανά σε λίγο." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Κάτι πήγε στραβά κατά τη δημοσίευση. Δοκιμάστε ξανά σε λίγο." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Ευρύχωρη διάταξη με σαφή οπτικό διαχωρισμό μεταξύ των μηνυμάτων." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Ισπανία" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Λογαριασμός ανεπιθύμητων μηνυμάτων" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Ταξινόμηση ανεπιθύμητων" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Ανεπιθύμητο ή απάτη" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Κοινότητα με ανεπιθύμητο περιεχόμενο ή απάτη" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Λογαριασμός ανεπιθύμητων, απάτης ή phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Ανεπιθύμητα, απάτες ή phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Έναρξη ελαχιστοποιημένο" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Από την αρχή" @@ -33752,22 +33302,26 @@ msgstr "Παραμονή σε σύνδεση" msgid "Step {current} of {total}" msgstr "Βήμα {current} από {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Βήμα 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Βήμα 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Βήμα 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Βήμα 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Βήμα 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Να σταματήσει να είναι κανάλι ανακοινώ msgid "Stop hiding muted channels by default?" msgstr "Να μην αποκρύπτονται πλέον τα κανάλια σε σίγαση από προεπιλογή;" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Διακοπή μηνυμάτων και αιτημάτων φιλίας." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Διακοπή δοκιμής μικροφώνου" @@ -33959,11 +33508,6 @@ msgstr "Διακοπή τροποποίησης των Node.prototype insertBefo msgid "Stop ringing" msgstr "Διακοπή κλήσης" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Διακοπή προβολής του περιεχομένου και των μελών της." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Αντικατάσταση συνηθισμένων φατσουλών κειμένου, όπως το :) και το <3, με emoji κατά την αποστολή μηνυμάτων" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Σουηδία" @@ -34804,11 +34348,6 @@ msgstr "Πατήστε για προσθήκη σημείωσης" msgid "tar.gz archive" msgstr "Αρχείο tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Στοχεύει άτομα με βάση προστατευόμενα χαρακτηριστικά." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Όροι παροχής υπηρεσιών" msgid "Terms URL" msgstr "Διεύθυνση URL όρων" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Τρομοκρατία ή βίαιος εξτρεμισμός" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Ταϊλανδικά" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Σας ευχαριστούμε που συμβάλλετε στη διατήρηση της ασφάλειας του {productName}. Θα εξετάσουμε την αναφορά σας το συντομότερο δυνατό." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Ευχαριστούμε που το επισημάνατε" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Σας ευχαριστούμε που μας ενημερώσατε. Αυτό από μόνο του δεν παραβιάζει τους κανόνες μας, οπότε δεν στείλαμε αναφορά." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Σας ευχαριστούμε που μας ενημερώσατε. Αυτό από μόνο του δεν παραβιάζει τους κανόνες μας, οπότε δεν στείλαμε αναφορά. Αν στοχεύει κάποιον ή χρησιμοποιεί ύβρεις, κάντε ξανά αναφορά και επιλέξτε «Κακοποιητικό ή επιβλαβές περιεχόμενο»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Αυτό δεν λειτούργησε. Δοκιμάστε ξανά ή msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Αυτό δεν μοιάζει με έγκυρο χρώμα. Δοκιμάστε hex, rgb(), hsl() ή ένα όνομα χρώματος CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Αυτό δεν μοιάζει με έγκυρη διεύθυνση URL." @@ -35104,6 +34653,11 @@ msgstr "Η εφαρμογή {PRODUCT_NAME} στη συσκευή σας δείχ msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Η εφαρμογή {PRODUCT_NAME} δεν συνδέθηκε. Μπορείτε να κλείσετε αυτήν την καρτέλα." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Η ομάδα ασφαλείας του {productName} θα ελέγξει την αναφορά σας. Δεν θα αποκαλύψουμε ότι προήλθε από εσάς." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Το redirect_uri που δόθηκε δεν είναι καταχωρι msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Το redirect_uri που δόθηκε πρέπει να χρησιμοποιεί HTTP ή HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Η φόρμα αναφοράς άλλαξε. Παρακαλώ ξεκινήστε ξανά." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Οι ετικέτες ονόματος χρήστη σε αυτήν την παρουσία έχουν ήδη οριστεί. Δεν μπορούν πλέον να αλλάξουν." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Ο κωδικός επαλήθευσης δεν είναι έγκυρος ή έχει λήξει." @@ -36115,13 +35674,8 @@ msgstr "Αυτό το μέλος δεν είναι πλέον συνδεδεμέ msgid "This message can only be forwarded to age-restricted channels" msgstr "Αυτό το μήνυμα μπορεί να προωθηθεί μόνο σε κανάλια με περιορισμό ηλικίας" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Αυτό το μήνυμα έχει ήδη διαγραφεί." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Αυτό το μήνυμα έχει ήδη δημοσιευτεί" @@ -36279,11 +35833,6 @@ msgstr "Αυτό το νήμα έχει κλείσει. Η αποστολή μη msgid "This thread is locked. Only moderators can send messages." msgstr "Αυτό το νήμα είναι κλειδωμένο. Μόνο οι διαχειριστές μπορούν να στέλνουν μηνύματα." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "αυτός ο χρήστης" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Αυτός ο χρήστης έχει περιορίσει το προφίλ του. Ορισμένες λεπτομέρειες είναι κρυφές από άτομα που δεν είναι φίλοι του." @@ -36292,11 +35841,6 @@ msgstr "Αυτός ο χρήστης έχει περιορίσει το προφ msgid "This user has no roles in this community." msgstr "Αυτός ο χρήστης δεν έχει ρόλους σε αυτήν την κοινότητα." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Αυτός ο χρήστης έχει ήδη αποκλειστεί από την κοινότητα." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Αυτός ο χρήστης δεν είναι πλέον διαθέσιμος." @@ -36465,16 +36009,6 @@ msgstr "Το νήμα ενημερώθηκε" msgid "Threads" msgstr "Νήματα" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Απειλές, παρακολούθηση σε διάφορους χώρους ή ανεπιθύμητη επικοινωνία." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Απειλές, παρενόχληση ή βλάβη" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Ο/Η {targetUserTag} τέθηκε σε προσωρινό περιορ #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Προσωρινός περιορισμός" @@ -36787,6 +36321,11 @@ msgstr "Τονική χαρτογράφηση" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Τονική προσαρμογή των εικόνων HDR στο τυπικό εύρος, με μείωση της μέγιστης φωτεινότητας." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Στάλθηκαν πάρα πολλοί κωδικοί. Περιμένετε {duration} και δοκιμάστε ξανά." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Μεταβίβαση ιδιοκτησίας κοινότητας" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Μεταβίβαση ιδιοκτησίας της ομάδας στον/στην {userName};" @@ -37561,7 +37100,7 @@ msgstr "Ξεμπλοκάρετέ τους πρώτα για να στείλετ #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Ξεμπλοκάρισμα χρήστη" @@ -37607,16 +37146,6 @@ msgstr "Κατάργηση σίγασης ήχου σε όλες τις συσκ msgid "Undeafen yourself" msgstr "Κατάργηση σίγασης του ήχου σας" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Ανησυχία για ανήλικο ή για την ασφάλεια παιδιού" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Ανήλικος χρήστης" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Μέχρι να το ενεργοποιήσω ξανά" msgid "Unverified email" msgstr "Μη επαληθευμένο email" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Ανεπιθύμητη συμπεριφορά ή περιεχόμενο για ενήλικες σε λάθος μέρος." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Ανεπιθύμητη συμπεριφορά, σχόλια ή αιτήματα με περιεχόμενο για ενήλικες." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Έως {DISCOVERY_MAX_TAGS} ετικέτες βοηθούν τους χρήστες να βρουν την κοινότητά σου. Εμφανίζονται στην αναζήτηση της Ανακάλυψης." @@ -38840,11 +38359,6 @@ msgstr "Χρήση φωτεινού θέματος" msgid "Use native title bar" msgstr "Χρήση γραμμής τίτλου συστήματος" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Χρησιμοποιήστε το μόνο αν παραβιάζει σαφώς τους κανόνες του {productName} και δεν ταιριάζει με τα παραπάνω." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Χρησιμοποιείται μόνο σε αυτήν την κοιν msgid "User" msgstr "Χρήστης" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Ο χρήστης φαίνεται να είναι ανήλικος ή εμπλέκεται σε αποπλάνηση ανηλίκων ή εκμετάλλευση παιδιών." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Εντοπισμός σφαλμάτων χρήστη" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Αναγνωριστικό χρήστη (προαιρετικό)" @@ -39061,12 +38570,12 @@ msgstr "Ο χρήστης δεν βρέθηκε" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Προφίλ χρήστη" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Προφίλ χρήστη: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Ρυθμίσεις χρήστη" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Ετικέτα χρήστη (προαιρετικό)" @@ -39339,7 +38848,7 @@ msgstr "Επαληθευμένη κοινότητα" msgid "Verify" msgstr "Επαλήθευση" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Επαλήθευση κωδικού" @@ -39368,7 +38877,7 @@ msgstr "Επιβεβαιώστε την ταυτότητά σας" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Επαληθεύστε το email σας" @@ -39718,7 +39227,7 @@ msgstr "Προβολή κωδικών" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Προβολή προφίλ κοινότητας" @@ -39751,7 +39260,7 @@ msgstr "Προβολή δώρων" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Προβολή καθολικού προφίλ" @@ -39847,26 +39356,6 @@ msgstr "Ο θεατής μπαίνει στη ροή" msgid "Viewer leaves stream" msgstr "Ο θεατής αποχωρεί από τη ροή" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Κατηγορία παράβασης" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Η παράβαση αφορά το προφίλ του χρήστη, όχι ένα συγκεκριμένο μήνυμα." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Βία ή απειλές βίας" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Βίαιο ή σοκαριστικό περιεχόμενο" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Αλλάξαμε το μέγεθος και συμπιέσαμε αυτ msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Αλλάξαμε το μέγεθος και συμπιέσαμε αυτό το αυτοκόλλητο σε 320x320 pixel, αλλά εξακολουθεί να είναι {fileSize}. Το όριο είναι {maxSize}. Δοκιμάστε μια πιο απλή εικόνα, λιγότερα χρώματα ή ένα μικρότερο αρχείο προέλευσης." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Στείλαμε έναν κωδικό στο {email}." @@ -40472,7 +39961,7 @@ msgstr "Θα το επεξεργαστούμε το συντομότερο δυ msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Θα επαναφέρουμε την προηγούμενη διεύθυνση email σας, θα αποσυνδεθούμε από παλιές συνεδρίες, θα απενεργοποιήσουμε τον έλεγχο ταυτότητας πολλών παραγόντων (MFA) και θα ασφαλίσουμε τον λογαριασμό σας με έναν νέο κωδικό πρόσβασης." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Θα σας στείλουμε έναν σύντομο κωδικό για να επιβεβαιώσουμε ότι μπορείτε να λαμβάνετε ενημερώσεις σχετικά με αυτήν την αναφορά." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Δυτική Βιρτζίνια" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Τι είδους κανόνας παραβιάστηκε;" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Τι συμβαίνει;" msgid "What's new" msgstr "Τι νέο υπάρχει" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Ποιος είναι ο λόγος της αναφοράς σας;" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Όταν δεν έχει οριστεί προσαρμοσμένη ημερομηνία ορίου, τα μέλη χωρίς το δικαίωμα <0>{readMessageHistoryPermissionLabel} δεν μπορούν να δουν παλαιότερα μηνύματα. Θα βλέπουν μόνο τα μηνύματα σε πραγματικό χρόνο καθώς φτάνουν, και αυτά θα εξαφανίζονται όταν κάνουν επανεκκίνηση της εφαρμογής τους." @@ -40832,11 +40321,6 @@ msgstr "Ποιες κοινότητες" msgid "Which conversations" msgstr "Ποιες συνομιλίες" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Ποιος κανόνας παραβιάστηκε;" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Όσο η λειτουργία push-to-talk είναι ενεργή, η συντόμευσή σας ελέγχει το μικρόφωνό σας, οπότε το κουμπί σίγασης είναι απενεργοποιημένο." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Δεν μπορείτε να επισυνάψετε αρχεία σε αυτό το κανάλι." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Δεν μπορείτε να κάνετε φίλο τον εαυτό σας" @@ -41341,7 +40825,7 @@ msgstr "Δεν μπορείτε να στείλετε μήνυμα σε αυτό #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Πρέπει να συμφωνήσετε με τους όρους παροχής υπηρεσιών για να δημιουργήσετε λογαριασμό" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Πρέπει να επαληθεύσετε το email σας πριν στείλετε μια αναφορά." @@ -41891,6 +41375,11 @@ msgstr "Έχετε μια παλιά τιμή. Η τρέχουσα τιμή γι msgid "You're sending messages too quickly" msgstr "Στέλνετε μηνύματα πολύ γρήγορα" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Στέλνετε αναφορές πολύ γρήγορα. Δοκιμάστε ξανά αργότερα." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Βλέπετε παλιότερα μηνύματα" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Έχετε προσθέσει περισσότερα άτομα από όσα επιτρέπει μια ομαδική συνομιλία. Αφαιρέστε μερικά και δοκιμάστε ξανά." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Έχετε ήδη αναφέρει αυτό το μήνυμα." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Έχετε ήδη αναφέρει αυτό το προφίλ σήμερα." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Οι λογαριασμοί και οι ρυθμίσεις σας δεν msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Η ενέργειά σας δεν ολοκληρώθηκε επειδή επισημάνθηκε από τα συστήματα ασφαλείας μας. Αν πιστεύετε ότι πρόκειται για λάθος, επικοινωνήστε με την υποστήριξη." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Οι απαντήσεις σας" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Η αίτησή σας εκκρεμεί για έλεγχο. Μπορείτε ακόμα να ενημερώσετε τα στοιχεία της καταχώρισής σας ή να αποσύρετε την αίτηση." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Το πρόγραμμα περιήγησής σας απαιτεί αλληλεπίδραση χρήστη για την αναπαραγωγή ήχου. Πατήστε το παρακάτω κουμπί για να ενεργοποιήσετε τη φωνητική συνομιλία." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Οι αλλαγές σας φτάνουν σε κάθε κοινότητα που ακολουθεί αυτό το κανάλι, κάτι που μπορεί να πάρει ένα λεπτό. Κάθε δημοσιευμένο μήνυμα επιτρέπει 3 γρήγορες επεξεργασίες, μετά 1 κάθε 20 λεπτά." @@ -42311,6 +41815,11 @@ msgstr "Το νέο σου ψευδώνυμο, ή άφησέ το κενό γι msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Το παλιό σου κιτ ανάκτησης δεν λειτουργεί πλέον. Φύλαξε αυτό το νέο σε ασφαλές μέρος." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Οι επιλογές σας" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "η περιοχή σας" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Η πληρωμή ανανέωσης απέτυχε, αλλά τα <0/> παραμένουν ενεργά έως <1>{graceDate}. Ενημερώστε τον τρόπο πληρωμής σας πριν από τότε για να διατηρήσετε τη συνδρομή σας." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Η αναφορά σας δεν στάλθηκε. Δοκιμάστε ξανά." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Η συνδρομή σας θα μεταβεί σε ετήσια χρέ msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Το CSS του θέματός σας είναι πολύ μεγάλο για κοινή χρήση. Μειώστε το μέγεθός του και δοκιμάστε ξανά." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Το όνομα χρήστη σας (προαιρετικό)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index f1dd78a3f..4b369495a 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -2082,7 +2082,7 @@ msgstr "{remainingSlotCount} remaining" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" @@ -2135,7 +2135,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Your invite link expires in # second.} other {Your invite link expires in # seconds.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} selected" @@ -2958,11 +2958,6 @@ msgstr "Account data" msgid "Account details unavailable" msgstr "Account details unavailable" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Account exists to spam, scam, or abuse the platform." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3640,11 +3635,6 @@ msgstr "Added: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Added: {createdDate} • last used: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Additional comments (optional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4187,8 +4177,8 @@ msgstr "Already redeemed" msgid "Already set to cancel" msgstr "Already set to cancel" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Also report this message to the {productName} Safety Team" @@ -4577,11 +4567,6 @@ msgstr "Annual" msgid "Another checkbox" msgstr "Another checkbox" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Another clear rule violation" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Another round checkbox" @@ -5249,7 +5234,7 @@ msgid "Audio upload" msgstr "Audio upload" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5622,6 +5607,7 @@ msgstr "Away right now" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5630,7 +5616,8 @@ msgstr "Away right now" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Back" @@ -5790,9 +5777,7 @@ msgstr "Backup codes regenerated" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Ban" @@ -5821,7 +5806,7 @@ msgstr "Ban duration" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5842,21 +5827,11 @@ msgstr "Ban members from the community, with the option to delete their recent m msgid "Ban reason" msgstr "Ban reason" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Ban this user" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandwidth" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Banned" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Banned {targetUserTag} from the community" @@ -5939,7 +5914,7 @@ msgid "Before date" msgstr "Before date" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgium" @@ -6033,7 +6008,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Block" @@ -6044,6 +6019,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Block" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Block {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6089,11 +6069,6 @@ msgstr "Block for all communities" msgid "Block spoiler" msgstr "Block spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Block this user" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6104,6 +6079,12 @@ msgstr "Block user" msgid "Blocked" msgstr "Blocked" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blocked" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6507,7 +6488,7 @@ msgid "Built-in translators" msgstr "Built-in translators" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6521,16 +6502,6 @@ msgstr "Bulgarian" msgid "Bulk delete" msgstr "Bulk delete" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Bullying, repeated unwanted contact, stalking, or targeted abuse." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Bullying, threats, hate, violence, raids, or content that pushes self-harm." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6642,11 +6613,6 @@ msgstr "California" msgid "Call" msgstr "Call" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Call & group chat settings" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7133,7 +7099,7 @@ msgstr "Change banner" msgid "Change chat embed background" msgstr "Change chat embed background" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Change email" @@ -7152,8 +7118,8 @@ msgstr "Change friend nickname" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Change group nickname" @@ -7195,7 +7161,7 @@ msgid "Change language" msgstr "Change language" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Change my group nickname" @@ -7220,7 +7186,7 @@ msgid "Change own nickname" msgstr "Change own nickname" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Change owner" @@ -7285,16 +7251,6 @@ msgstr "Change which voice region a voice channel uses." msgid "Change which voice region this channel uses." msgstr "Change which voice region this channel uses." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Change who can call or add you." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Change who can reach you." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7862,6 +7818,11 @@ msgstr "Check your inbox at {emailAddress} for the authorisation link." msgid "Check your inbox for a verification email." msgstr "Check your inbox for a verification email." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Check your report" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Checkboxes" @@ -7903,21 +7864,6 @@ msgstr "Checkout is blocked for this account. Contact {supportEmail} if you need msgid "Checkout unavailable" msgstr "Checkout unavailable" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Child safety concerns" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Child safety or exploitation of minors" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Child safety or mature content" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7943,7 +7889,7 @@ msgstr "Choices" msgid "Choices: {choiceList}" msgstr "Choices: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Choose" @@ -8124,6 +8070,11 @@ msgstr "Choose the category that best describes your community. You can change t msgid "Choose the premium model" msgstr "Choose the premium model" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Choose the reason again" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8273,8 +8224,8 @@ msgstr "Claim gift" msgid "Claim your account" msgstr "Claim your account" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Claim your account and verify your email to send reports." @@ -8354,12 +8305,12 @@ msgstr "Claim your account to redeem this gift." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Claim your account to send friend requests." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Claim your account to send reports." @@ -8380,11 +8331,6 @@ msgstr "Claim your account to start or join 1:1 calls." msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Claim your gift to activate your {premiumProductName} subscription!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Claiming to be another person, brand, or organisation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8503,7 +8449,7 @@ msgstr "Clear search input" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8735,11 +8681,6 @@ msgstr "Close modal" msgid "Close popout" msgstr "Close popout" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Close this DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8767,13 +8708,8 @@ msgstr "Close to tray" msgid "Close window" msgstr "Close window" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Close your DM with {displayName}? You can reopen it anytime." @@ -8839,7 +8775,7 @@ msgstr "Coal theme" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Code" @@ -8870,7 +8806,7 @@ msgstr "Code from the {productName} app" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Code resent" @@ -9092,14 +9028,12 @@ msgid "Communities you can join" msgstr "Communities you can join" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9133,7 +9067,7 @@ msgstr "Community deafen" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Community debug" @@ -9152,16 +9086,6 @@ msgstr "Community deleted" msgid "Community DM" msgstr "Community DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Community exists to spam, scam, or abuse the platform." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Community facilitates pile-ons or targeted abuse." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9173,11 +9097,11 @@ msgid "Community icon" msgstr "Community icon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Community ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Community ID is required." @@ -9528,6 +9452,11 @@ msgstr "Confirm new password" msgid "Confirm password" msgstr "Confirm password" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirm the statement to send the report." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9818,16 +9747,6 @@ msgstr "Continue in your browser" msgid "Continue to checkout" msgstr "Continue to checkout" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continue to report community" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continue to report user" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9928,11 +9847,6 @@ msgstr "Converting this channel to a text channel removes every channel that fol msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Converts incoming content to speech, regardless of whether it came from /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordinates raids, brigading, or harassment against people or communities." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9962,7 +9876,6 @@ msgstr "Copied URL to clipboard" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9970,7 +9883,6 @@ msgstr "Copied URL to clipboard" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10205,11 +10117,9 @@ msgid "Copy message ID" msgstr "Copy message ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copy message link" @@ -10645,6 +10555,11 @@ msgstr "Couldn't load posts. Try again later." msgid "Couldn't load settings" msgstr "Couldn't load settings" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Couldn't load the report form." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Couldn't load this application" @@ -10698,7 +10613,7 @@ msgid "Couldn't process image" msgstr "Couldn't process image" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Couldn't publish this message" @@ -10827,11 +10742,6 @@ msgstr "Couldn't send invite" msgid "Couldn't send invite. Try again." msgstr "Couldn't send invite. Try again." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Couldn't send it. Try again." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10995,7 +10905,7 @@ msgid "Countdown timer" msgstr "Countdown timer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Country of residence" @@ -11303,13 +11213,8 @@ msgstr "Created:" msgid "Credentials" msgstr "Credentials" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Credible threats, graphic violence, or glorification of violence." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croatia" @@ -11737,7 +11642,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Cuts audio below a loudness threshold with minimal CPU usage." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cyprus" @@ -11747,7 +11652,7 @@ msgid "Czech" msgstr "Czech" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Czech Republic" @@ -11967,7 +11872,7 @@ msgstr "Debug channel" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Debug community" @@ -12153,7 +12058,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12165,8 +12069,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12413,18 +12316,13 @@ msgstr "Delete theme?" msgid "Delete this invite? Can't be undone." msgstr "Delete this invite? Can't be undone." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Delete this message" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Delete this message? Can't be undone." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." @@ -12463,11 +12361,6 @@ msgstr "Delete your messages in this community?" msgid "Delete your messages in this conversation?" msgstr "Delete your messages in this conversation?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Deleted" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12516,7 +12409,7 @@ msgid "Denied {permissions}" msgstr "Denied {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Denmark" @@ -12556,11 +12449,6 @@ msgstr "Describe the sticker" msgid "Describe this media for screen readers" msgstr "Describe this media for screen readers" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Describe what makes the content illegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12715,7 +12603,7 @@ msgstr "Detached banner" msgid "Detail" msgstr "Detail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Details" @@ -13317,11 +13205,6 @@ msgstr "Display name (optional)" msgid "Display scaling" msgstr "Display scaling" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distributes malware, credential-stealing tools, or other harmful files." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13339,11 +13222,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM & friend request settings" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13470,11 +13348,6 @@ msgstr "Documentation" msgid "Doesn't allow being added to group DMs" msgstr "Doesn't allow being added to group DMs" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Doesn't block. You can reopen later." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13547,11 +13420,13 @@ msgstr "Donate instead" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13680,16 +13555,6 @@ msgstr "Download source maps so stack traces and the developer tools point at re msgid "Download video" msgstr "Download video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, exposed private info, or stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, pretending to be someone, or an inappropriate profile." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13972,7 +13837,7 @@ msgstr "Edit colour for {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Edit community profile" @@ -14045,7 +13910,7 @@ msgstr "Edit overwrites for roles and members in this channel." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Edit profile" @@ -14056,7 +13921,7 @@ msgid "Edit profile local time" msgstr "Edit profile local time" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Edit published message?" @@ -14193,13 +14058,13 @@ msgstr "Eligible for a refund until {windowEndsOn}. This will also cancel your s #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14207,7 +14072,7 @@ msgid "Email address" msgstr "Email address" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Email address required." @@ -14723,16 +14588,6 @@ msgstr "Encoder preference for new screen shares." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC and bitrate presets" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Encourages self-harm" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Encourages suicide, self-harm, or eating disorders." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14773,11 +14628,6 @@ msgstr "End-to-end encryption is unavailable because an unsupported participant msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Endangers minors or hosts child-exploitation content." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14819,7 +14669,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Enter a code in the format ABCD-1234." @@ -14864,12 +14714,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Enter a valid {theOtherPlatform} template URL or code." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Enter a valid email address." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Enter a valid message link." @@ -14943,7 +14793,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Enter the {digitCount}-digit code from your authenticator app." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Enter the code before continuing." @@ -15010,7 +14860,7 @@ msgstr "Enter to <0><1>save" msgid "Enter username" msgstr "Enter username" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Enter verification code" @@ -15019,6 +14869,11 @@ msgstr "Enter verification code" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Enter your email address and we'll send you a link to reset your password." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Enter your full legal name to send the report." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15162,7 +15017,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape to <0><1>cancel" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15414,6 +15269,16 @@ msgstr "Expires on {earliest}" msgid "Expires:" msgstr "Expires:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explain the problem" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explain the problem to send the report." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15509,11 +15374,6 @@ msgstr "External links can be dangerous. Be careful." msgid "Extra large" msgstr "Extra large" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremist community" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15731,7 +15591,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Failed to remove vanity URL. Try again." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Failed to resend code. Try again." @@ -15741,7 +15601,7 @@ msgid "Failed to reset premium state." msgstr "Failed to reset premium state." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Failed to send code. Try again." @@ -15756,7 +15616,7 @@ msgid "Failed to send message. Hold for options." msgstr "Failed to send message. Hold for options." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Failed to send report. Try again." @@ -15842,11 +15702,6 @@ msgstr "Failed to upload emojis starting at {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Failed to upload emojis. Try again." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "False claims likely to cause real-world harm." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16129,13 +15984,13 @@ msgstr "Find the perfect sticker" msgid "Fingerprint" msgstr "Fingerprint" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Finish account setup" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Finish account setup first" @@ -16164,7 +16019,7 @@ msgid "Finish signing up to send friend requests." msgstr "Finish signing up to send friend requests." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16174,7 +16029,7 @@ msgid "Finnish" msgstr "Finnish" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "First and last name" @@ -16619,7 +16474,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Frame rates above 30 FPS require {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "France" @@ -16836,10 +16691,10 @@ msgstr "Full" msgid "Full dynamic range" msgstr "Full dynamic range" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Full legal name" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Full legal name (optional for child sexual abuse reports)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17023,7 +16878,7 @@ msgid "German" msgstr "German" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Germany" @@ -17378,7 +17233,7 @@ msgid "Go back" msgstr "Go back" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Go back and enter a valid email." @@ -17559,7 +17414,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Great to see you, {username}! Welcome in." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Greece" @@ -17574,11 +17429,6 @@ msgstr "Greek" msgid "Grid view" msgstr "Grid view" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming or child-exploitation content." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17718,36 +17568,6 @@ msgstr "Handle" msgid "Hang out with voice, video and screen share" msgstr "Hang out with voice, video and screen share" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Harassment" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Harassment involving mature content" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Harassment or bullying" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Harassment or stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Harassment or targeted abuse" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Harassment or threats" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17777,11 +17597,6 @@ msgstr "Hardware key" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Harmful misinformation" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17801,13 +17616,6 @@ msgstr "Has ever purchased" msgid "Has ever purchased override" msgstr "Has ever purchased override" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hate speech" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18164,6 +17972,11 @@ msgstr "Hide your own screen share?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Hides the download, open in browser and copy buttons on images and videos in this channel." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Hides their messages and stops them messaging you" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18320,7 +18133,7 @@ msgid "Hungarian" msgstr "Hungarian" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungary" @@ -18401,6 +18214,11 @@ msgstr "I am a tooltip" msgid "I changed my mind" msgstr "I changed my mind" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "I confirm in good faith that the information and allegations in this notice are accurate and complete." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18462,11 +18280,6 @@ msgstr "Idle settings" msgid "Idle timeout" msgstr "Idle timeout" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "If a minor is involved, use \"{childSafetyReasonName}\" instead." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18477,45 +18290,20 @@ msgstr "If an account uses that address, we've sent it password reset instructio msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "If macOS asks to quit and reopen {productName}, choose Later." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "If someone may be in immediate danger, contact local emergency services if you can do so safely." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "If someone is in immediate danger, contact local emergency services first." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "If someone told you to paste something here, it is a scam that can hand them your {productName} account." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "If this is a credible imminent threat, contact local emergency services too." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "If this is an imminent terrorist threat, contact local emergency services too." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "If you believe it is illegal, say which law and why." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18602,28 +18390,6 @@ msgstr "Ignore this channel's slowmode cooldown." msgid "Ignore virtual" msgstr "Ignore virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Illegal activity" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Illegal activity or something else" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Illegal sales, criminal facilitation, or unlawful activity." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18718,18 +18484,6 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Impersonation" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Impersonation or deceptive media" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18912,11 +18666,6 @@ msgstr "Inactive" msgid "Inactive timeout" msgstr "Inactive timeout" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Inappropriate profile" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18965,7 +18714,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Include my two-factor backup codes in the PDF and printout" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Include the community ID." @@ -19405,7 +19154,7 @@ msgid "Invite background" msgstr "Invite background" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Invite code (optional)" @@ -19473,7 +19222,7 @@ msgstr "Invite masking" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invite members" @@ -19652,7 +19401,7 @@ msgid "IP address authorized" msgstr "IP address authorised" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ireland" @@ -19692,7 +19441,7 @@ msgid "Italic" msgstr "Italic" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italy" @@ -20122,7 +19871,7 @@ msgstr "Keys" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20232,7 +19981,7 @@ msgid "Later" msgstr "Later" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20293,11 +20042,6 @@ msgstr "Learn more" msgid "Learn more about Visionary" msgstr "Find out more about Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Leave" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20338,11 +20082,6 @@ msgstr "Leave private thread" msgid "Leave silently" msgstr "Leave silently" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Leave the community" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20801,7 +20540,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Lists members with this role in their own section in the member list." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lithuania" @@ -20895,7 +20634,7 @@ msgid "Loading..." msgstr "Loading..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Loading…" @@ -21025,7 +20764,7 @@ msgid "Low" msgstr "Low" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21077,14 +20816,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Maintenance is scheduled for {localizedTime}. Expected duration: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Make {userName} the group owner? You'll lose owner privileges." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Make group owner" @@ -21093,38 +20832,21 @@ msgstr "Make group owner" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Make sure this code matches the one in the {PRODUCT_NAME} app." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Make sure this looks right before you send it." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Make the instance yours" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Malicious links" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Malware distribution" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware or dangerous links" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, credential theft, or harmful files." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21410,11 +21132,6 @@ msgstr "Mask private details before sharing your screen or stream." msgid "Mask Visionary as subscription" msgstr "Mask Visionary as subscription" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Mass spam, fraud, fake giveaways, or account abuse." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21493,31 +21210,11 @@ msgstr "Mature content media gate" msgid "Mature content not allowed" msgstr "Mature content not allowed" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Mature content or harassment" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Mature content or unsafe gating" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Mature content override" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Mature content policy violation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Mature content without proper gating." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21961,13 +21658,13 @@ msgstr "Message" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22130,7 +21827,7 @@ msgid "message link" msgstr "message link" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Message link" @@ -22169,7 +21866,7 @@ msgid "Message previews in the DM list" msgstr "Message previews in the DM list" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Message published" @@ -22213,6 +21910,11 @@ msgstr "Message time" msgid "Message unpinned" msgstr "Message unpinned" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Message you're reporting" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22424,11 +22126,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minors at risk, mature content in the wrong place, or unwanted conduct." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22635,7 +22332,7 @@ msgstr "More" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "More actions" @@ -23361,7 +23058,7 @@ msgid "Nested" msgstr "Nested" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Netherlands" @@ -24101,7 +23798,7 @@ msgstr "No results" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "No results found" @@ -24860,6 +24557,16 @@ msgstr "Only people you invite and moderators can see this thread." msgid "Only places I can't access anymore" msgstr "Only places I can't access anymore" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Only report what you honestly believe breaks the rules, and please don't send the same report twice." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24929,11 +24636,9 @@ msgstr "Opacity" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25308,7 +25013,7 @@ msgid "Open on {instanceName}" msgstr "Open on {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Open popup" @@ -25381,11 +25086,6 @@ msgstr "Open System Settings → Privacy & Security → Screen Recording, then a msgid "Open template JSON" msgstr "Open template JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Open the ban dialog for this community." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25487,6 +25187,11 @@ msgstr "Open your settings" msgid "Opened the thread again" msgstr "Reopened the thread" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Opens in a new tab" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25623,9 +25328,7 @@ msgstr "Originally banned on {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Other" @@ -25656,11 +25359,6 @@ msgstr "Other reaction…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25757,7 +25455,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Ownership could not be transferred to <0>{username} at this time." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Ownership transferred" @@ -25958,7 +25656,7 @@ msgid "Paste the JSON response here" msgstr "Paste the JSON response here" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Paste the message link." @@ -26262,11 +25960,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26302,11 +25995,6 @@ msgstr "Pick a web search provider" msgid "Pick an emoji" msgstr "Pick an emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Pick an option to continue." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26332,11 +26020,6 @@ msgstr "Pick the 4-digit number after your username" msgid "Pick the appearance this administrator account should start with." msgstr "Pick the appearance this administrator account should start with." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Pick the rule to review." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26609,7 +26292,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Please wait a moment and try renaming again." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Poland" @@ -26661,7 +26344,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26874,11 +26557,6 @@ msgstr "press to add reaction" msgid "press to remove reaction" msgstr "press to remove reaction" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Pretending to be someone else, including deceptive AI-generated content." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." @@ -27080,11 +26758,6 @@ msgstr "Priority speaker" msgid "Privacy" msgstr "Privacy" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacy or impersonation" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27105,21 +26778,6 @@ msgstr "Privacy setup nagbar" msgid "Privacy URL" msgstr "Privacy URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Privacy violation" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Privacy violation or doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Privacy violation or stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27282,25 +26940,10 @@ msgstr "Profile type" msgid "Profile updated" msgstr "Profile updated" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Profile, username, or avatar violation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promotes hatred against protected groups." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promotes, recruits for, or coordinates violent extremist activity." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promotion or instructions encouraging self-harm or eating disorders." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profile you're reporting" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27331,20 +26974,15 @@ msgstr "Pronouns: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Provide at least a user ID or a user tag." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Provide either a user ID or a username for the person you are reporting." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Provide your full legal name for the declaration." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27703,13 +27341,6 @@ msgstr "Radio buttons allow selecting one option from a group." msgid "Radio group" msgstr "Radio group" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Raid coordination" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27833,8 +27464,10 @@ msgstr "Ready to buy a gift?" msgid "Ready to upgrade?" msgstr "Ready to upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Reason" @@ -28293,8 +27926,8 @@ msgstr "Remember window size and position" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28330,8 +27963,8 @@ msgstr "Remove {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Remove {userName} from the group?" @@ -28421,8 +28054,8 @@ msgstr "Remove from favourites" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Remove from group" @@ -28460,11 +28093,6 @@ msgstr "Remove from URL-only GIF favourites" msgid "Remove icon" msgstr "Remove icon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Remove it from the channel for everyone." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28580,7 +28208,7 @@ msgid "Removed from favorites" msgstr "Removed from favourites" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Removed from group" @@ -28921,28 +28549,18 @@ msgstr "Report a community" msgid "Report a message" msgstr "Report a message" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Report a rule violation, or find tools to manage contact and preferences." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Report a user profile" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Report community" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Report details" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Report illegal content" @@ -28952,30 +28570,28 @@ msgid "Report issue" msgstr "Report issue" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Report message" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Report profile" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Report sent" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Report type" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Report user" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Reported user tag (optional)" @@ -29102,6 +28718,10 @@ msgstr "Requires everything in medium, plus being a member of the community for msgid "Resend" msgstr "Resend" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Resend ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Resend ({newSecondsRemaining}s)" @@ -29110,7 +28730,7 @@ msgstr "Resend ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Resend ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Resend ({resendCooldownSeconds}s)" @@ -29124,7 +28744,7 @@ msgstr "Resend ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Resend ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Resend code" @@ -29843,7 +29463,7 @@ msgid "Roles updated successfully" msgstr "Roles updated successfully" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29949,7 +29569,7 @@ msgstr "Saturation" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30095,11 +29715,6 @@ msgstr "Say hi to <0>{displayName}. Your DM starts here." msgid "Scale" msgstr "Scale" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Scams, malware, or misinformation" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scan the QR code with your authenticator app." @@ -30857,11 +30472,6 @@ msgstr "Select" msgid "Select {accessibleName}" msgstr "Select {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Select a category" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30894,7 +30504,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Select a community where you have {permissionName} permission, or a group DM you belong to." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Select a country" @@ -30913,11 +30523,6 @@ msgstr "Select a redirect URI" msgid "Select a scenario to apply..." msgstr "Select a scenario to apply..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Select a violation category." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30974,17 +30579,17 @@ msgstr "Select the account you want to sign in with on your new device." msgid "Select voice processing mode" msgstr "Select voice processing mode" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Select what you want to report." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Select your country of residence." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Select…" @@ -31039,13 +30644,6 @@ msgstr "Selection: {0} (max {1})" msgid "Selections" msgstr "Selections" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Self-harm or suicide" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31123,7 +30721,7 @@ msgstr "Send an action message (wraps in italics)." msgid "Send animation" msgstr "Send animation" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Send another report" @@ -31140,7 +30738,7 @@ msgstr "Send button" msgid "Send code" msgstr "Send code" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Send DSA report" @@ -31160,9 +30758,9 @@ msgstr "Send files up to {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Send friend request" @@ -31222,8 +30820,8 @@ msgstr "Send messages in threads" msgid "Send messages, images, GIFs and emoji" msgstr "Send messages, images, GIFs and emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Send report" @@ -31257,7 +30855,7 @@ msgstr "Send this pin back in time?" msgid "Send TTS messages" msgstr "Send TTS messages" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Send verification code" @@ -31275,11 +30873,6 @@ msgstr "Send voice message" msgid "Send:" msgstr "Send:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Sending malware or dangerous links" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31703,7 +31296,7 @@ msgstr "Share theme" msgid "Share voice activity with all friends?" msgstr "Share voice activity with all friends?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Share what our team needs to assess this." @@ -31711,11 +31304,6 @@ msgstr "Share what our team needs to assess this." msgid "Share with a friend" msgstr "Share with a friend" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Share with community mods." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31759,16 +31347,6 @@ msgstr "Shared window" msgid "Shared window audio" msgstr "Shared window audio" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Shares personal info, stalks users, or coordinates privacy abuse." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Sharing personal information" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32760,12 +32338,12 @@ msgid "Sliders" msgstr "Sliders" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32891,11 +32469,6 @@ msgstr "Slowmode simulation" msgid "Slowmode time remaining" msgstr "Slowmode time remaining" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Slurs, dehumanising language, or attacks on protected groups." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33096,7 +32669,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Something went wrong while preparing this sticker. Try another file or try again in a moment." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Something went wrong while publishing. Try again in a moment." @@ -33304,40 +32877,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Spacious layout with clear visual separation between messages." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spain" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spam account" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spam classification" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam or scam" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spam or scam community" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam, scam, or phishing account" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, scams, or phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33630,9 +33178,11 @@ msgstr "Start minimised" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Start over" @@ -33754,22 +33304,26 @@ msgstr "Stay signed in" msgid "Step {current} of {total}" msgstr "Step {current} of {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Step 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Step 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Step 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Step 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Step 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33937,11 +33491,6 @@ msgstr "Stop being an announcement channel?" msgid "Stop hiding muted channels by default?" msgstr "Stop hiding muted channels by default?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Stop messages and friend requests." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Stop mic test" @@ -33961,11 +33510,6 @@ msgstr "Stop patching Node.prototype insertBefore and removeChild. The app will msgid "Stop ringing" msgstr "Stop ringing" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Stop seeing its content and members." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34346,7 +33890,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Swap common text faces such as :) and <3 for emoji when sending messages" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Sweden" @@ -34806,11 +34350,6 @@ msgstr "Tap to add a note" msgid "tar.gz archive" msgstr "tar.gz archive" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Targets people by protected characteristics." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34887,11 +34426,6 @@ msgstr "Terms of service" msgid "Terms URL" msgstr "Terms URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorism or violent extremism" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35032,10 +34566,25 @@ msgid "Thai" msgstr "Thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Thanks for flagging this" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35050,7 +34599,7 @@ msgstr "That didn’t work. Try again or cancel." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "That doesn't look like a valid colour. Try hex, rgb(), hsl(), or a CSS colour name." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "That doesn't look like a valid URL." @@ -35106,6 +34655,11 @@ msgstr "The {PRODUCT_NAME} app on your other device shows it under Signing in on msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "The {PRODUCT_NAME} app was not signed in. You can close this tab." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "The {productName} safety team will review your report. We won't reveal that it came from you." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35310,6 +34864,11 @@ msgstr "The provided redirect_uri is not registered for this application." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "The provided redirect_uri must use HTTP or HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "The report form changed. Please start again." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35361,7 +34920,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "The username tags on this instance are already set. They can no longer be changed." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "The verification code is invalid or expired." @@ -36117,13 +35676,8 @@ msgstr "This member isn't connected to voice anymore." msgid "This message can only be forwarded to age-restricted channels" msgstr "This message can only be forwarded to age-restricted channels" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "This message has already been deleted." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "This message has already been published" @@ -36281,11 +35835,6 @@ msgstr "This thread is closed. Sending a message will reopen it." msgid "This thread is locked. Only moderators can send messages." msgstr "This thread is locked. Only moderators can send messages." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "this user" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "This user has limited their profile. Some details are hidden from people who aren't their friends." @@ -36294,11 +35843,6 @@ msgstr "This user has limited their profile. Some details are hidden from people msgid "This user has no roles in this community." msgstr "This user has no roles in this community." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "This user is already banned from the community." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "This user is no longer available." @@ -36467,16 +36011,6 @@ msgstr "Thread updated" msgid "Threads" msgstr "Threads" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Threats, following across spaces, or unwanted contact." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Threats, harassment, or harm" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36572,7 +36106,7 @@ msgstr "Timed out {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Timeout" @@ -36789,6 +36323,11 @@ msgstr "Tone" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tone-map HDR images to standard range, reducing peak brightness." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Too many codes sent. Wait {duration} and try again." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36862,7 +36401,7 @@ msgid "Transfer community ownership" msgstr "Transfer community ownership" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transfer group ownership to {userName}?" @@ -37563,7 +37102,7 @@ msgstr "Unblock them first to send a friend request." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Unblock user" @@ -37609,16 +37148,6 @@ msgstr "Undeafen all devices" msgid "Undeafen yourself" msgstr "Undeafen yourself" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Underage or child-safety concern" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Underage user" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38270,16 +37799,6 @@ msgstr "Until I turn it back on" msgid "Unverified email" msgstr "Unverified email" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Unwanted conduct or mature content in the wrong place." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Unwanted mature conduct, comments, or requests." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." @@ -38842,11 +38361,6 @@ msgstr "Use light theme" msgid "Use native title bar" msgstr "Use native title bar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Use only if it clearly breaks {productName}'s rules and doesn't fit above." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39002,11 +38516,6 @@ msgstr "Used only in this community." msgid "User" msgstr "User" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "User appears underage, or is involved in grooming or child exploitation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39023,7 +38532,7 @@ msgid "User debug" msgstr "User debug" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "User ID (optional)" @@ -39063,12 +38572,12 @@ msgstr "User not found" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "User profile" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "User profile: {tag}" @@ -39083,7 +38592,7 @@ msgid "User settings" msgstr "User settings" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "User tag (optional)" @@ -39341,7 +38850,7 @@ msgstr "Verified community" msgid "Verify" msgstr "Verify" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verify code" @@ -39370,7 +38879,7 @@ msgstr "Verify it's you" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verify your email" @@ -39720,7 +39229,7 @@ msgstr "View codes" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "View community profile" @@ -39753,7 +39262,7 @@ msgstr "View gifts" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "View global profile" @@ -39849,26 +39358,6 @@ msgstr "Viewer joins stream" msgid "Viewer leaves stream" msgstr "Viewer leaves stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Violation category" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Violation is in the user's profile, not a specific message." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violence or violent threats" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Violent or graphic content" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40423,7 +39912,7 @@ msgstr "We resized and compressed this emoji to 128x128 pixels, but it is still msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colours, or a smaller source file." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "We sent a code to {email}." @@ -40474,7 +39963,7 @@ msgstr "We'll process this as soon as possible. You'll get an email when your ar msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "We'll send a short code to confirm you can receive updates about this report." @@ -40716,11 +40205,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "What kind of rule was broken?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40757,6 +40241,11 @@ msgstr "What's happening?" msgid "What's new" msgstr "What's new" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "What's the reason for your report?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." @@ -40834,11 +40323,6 @@ msgstr "Which communities" msgid "Which conversations" msgstr "Which conversations" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Which rule was broken?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." @@ -41279,7 +40763,7 @@ msgid "You can't attach files in this channel." msgstr "You can't attach files in this channel." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "You can't befriend yourself" @@ -41343,7 +40827,7 @@ msgstr "You can't message this user" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41608,7 +41092,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "You must agree to the terms of service to create an account" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "You must verify your email before sending a report." @@ -41893,6 +41377,11 @@ msgstr "You're on a legacy rate. The current price for this plan is {currentSubs msgid "You're sending messages too quickly" msgstr "You're sending messages too quickly" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "You're sending reports too quickly. Try again later." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41917,6 +41406,16 @@ msgstr "You're viewing older messages" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "You've added more people than a group DM allows. Remove a few and try again." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "You've already reported this message." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "You've already reported this profile today." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42081,6 +41580,11 @@ msgstr "Your accounts and settings have not been changed or deleted." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Your answers" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Your application is pending review. You can still update your listing details or withdraw the application." @@ -42091,7 +41595,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." @@ -42313,6 +41817,11 @@ msgstr "Your new nickname, or leave blank to reset it." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Your old recovery kit no longer works. Store this new one somewhere safe." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Your options" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42372,6 +41881,11 @@ msgstr "your region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Your report didn't go through. Try again." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42466,11 +41980,6 @@ msgstr "Your subscription will switch to yearly billing at the next renewal." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Your theme CSS is too large to share. Trim it down and try again." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Your username (optional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index 516abee3f..1f2c0ab9b 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} remaining" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Your invite link expires in # second.} other {Your invite link expires in # seconds.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} selected" @@ -2957,11 +2957,6 @@ msgstr "Account data" msgid "Account details unavailable" msgstr "Account details unavailable" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Account exists to spam, scam, or abuse the platform." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Added: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Added: {createdDate} • last used: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Additional comments (optional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Already redeemed" msgid "Already set to cancel" msgstr "Already set to cancel" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Also report this message to the {productName} Safety Team" @@ -4576,11 +4566,6 @@ msgstr "Annual" msgid "Another checkbox" msgstr "Another checkbox" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Another clear rule violation" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Another round checkbox" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Audio upload" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Away right now" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Away right now" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Back" @@ -5788,9 +5775,7 @@ msgstr "Backup codes regenerated" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Ban" @@ -5819,7 +5804,7 @@ msgstr "Ban duration" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Ban members from the community, with the option to delete their recent m msgid "Ban reason" msgstr "Ban reason" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Ban this user" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandwidth" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Banned" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Banned {targetUserTag} from the community" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Before date" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgium" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Block" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Block" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Block {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Block for all communities" msgid "Block spoiler" msgstr "Block spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Block this user" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Block user" msgid "Blocked" msgstr "Blocked" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blocked" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Built-in translators" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Bulgarian" msgid "Bulk delete" msgstr "Bulk delete" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Bullying, repeated unwanted contact, stalking, or targeted abuse." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Bullying, threats, hate, violence, raids, or content that pushes self-harm." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Call" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Call & group chat settings" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Change banner" msgid "Change chat embed background" msgstr "Change chat embed background" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Change email" @@ -7150,8 +7116,8 @@ msgstr "Change friend nickname" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Change group nickname" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Change language" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Change my group nickname" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Change own nickname" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Change owner" @@ -7283,16 +7249,6 @@ msgstr "Change which voice region a voice channel uses." msgid "Change which voice region this channel uses." msgstr "Change which voice region this channel uses." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Change who can call or add you." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Change who can reach you." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Check your inbox at {emailAddress} for the authorization link." msgid "Check your inbox for a verification email." msgstr "Check your inbox for a verification email." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Check your report" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Checkboxes" @@ -7901,21 +7862,6 @@ msgstr "Checkout is blocked for this account. Contact {supportEmail} if you need msgid "Checkout unavailable" msgstr "Checkout unavailable" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Child safety concerns" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Child safety or exploitation of minors" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Child safety or mature content" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Choices" msgid "Choices: {choiceList}" msgstr "Choices: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Choose" @@ -8122,6 +8068,11 @@ msgstr "Choose the category that best describes your community. You can change t msgid "Choose the premium model" msgstr "Choose the premium model" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Choose the reason again" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Claim gift" msgid "Claim your account" msgstr "Claim your account" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Claim your account and verify your email to send reports." @@ -8352,12 +8303,12 @@ msgstr "Claim your account to redeem this gift." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Claim your account to send friend requests." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Claim your account to send reports." @@ -8378,11 +8329,6 @@ msgstr "Claim your account to start or join 1:1 calls." msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Claim your gift to activate your {premiumProductName} subscription!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Claiming to be another person, brand, or organization." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Clear search input" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Close modal" msgid "Close popout" msgstr "Close popout" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Close this DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Close to tray" msgid "Close window" msgstr "Close window" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Close your DM with {displayName}? You can reopen it anytime." @@ -8837,7 +8773,7 @@ msgstr "Coal theme" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Code" @@ -8868,7 +8804,7 @@ msgstr "Code from the {productName} app" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Code resent" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Communities you can join" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9131,7 +9065,7 @@ msgstr "Community deafen" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Community debug" @@ -9150,16 +9084,6 @@ msgstr "Community deleted" msgid "Community DM" msgstr "Community DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Community exists to spam, scam, or abuse the platform." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Community facilitates pile-ons or targeted abuse." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Community icon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Community ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Community ID is required." @@ -9526,6 +9450,11 @@ msgstr "Confirm new password" msgid "Confirm password" msgstr "Confirm password" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirm the statement to send the report." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continue in your browser" msgid "Continue to checkout" msgstr "Continue to checkout" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continue to report community" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continue to report user" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Converting this channel to a text channel removes every channel that fol msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Converts incoming content to speech, regardless of whether it came from /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordinates raids, brigading, or harassment against people or communities." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Copied URL to clipboard" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Copied URL to clipboard" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copy message ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copy message link" @@ -10643,6 +10553,11 @@ msgstr "Couldn't load posts. Try again later." msgid "Couldn't load settings" msgstr "Couldn't load settings" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Couldn't load the report form." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Couldn't load this application" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Couldn't process image" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Couldn't publish this message" @@ -10825,11 +10740,6 @@ msgstr "Couldn't send invite" msgid "Couldn't send invite. Try again." msgstr "Couldn't send invite. Try again." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Couldn't send it. Try again." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Countdown timer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Country of residence" @@ -11301,13 +11211,8 @@ msgstr "Created:" msgid "Credentials" msgstr "Credentials" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Credible threats, graphic violence, or glorification of violence." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croatia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Cuts audio below a loudness threshold with minimal CPU usage." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cyprus" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Czech" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Czech Republic" @@ -11965,7 +11870,7 @@ msgstr "Debug channel" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Debug community" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Delete theme?" msgid "Delete this invite? Can't be undone." msgstr "Delete this invite? Can't be undone." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Delete this message" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Delete this message? Can't be undone." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." @@ -12461,11 +12359,6 @@ msgstr "Delete your messages in this community?" msgid "Delete your messages in this conversation?" msgstr "Delete your messages in this conversation?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Deleted" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Denied {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Denmark" @@ -12554,11 +12447,6 @@ msgstr "Describe the sticker" msgid "Describe this media for screen readers" msgstr "Describe this media for screen readers" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Describe what makes the content illegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Detached banner" msgid "Detail" msgstr "Detail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Details" @@ -13315,11 +13203,6 @@ msgstr "Display name (optional)" msgid "Display scaling" msgstr "Display scaling" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distributes malware, credential-stealing tools, or other harmful files." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM & friend request settings" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentation" msgid "Doesn't allow being added to group DMs" msgstr "Doesn't allow being added to group DMs" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Doesn't block. You can reopen later." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donate instead" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Download source maps so stack traces and the developer tools point at re msgid "Download video" msgstr "Download video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, exposed private info, or stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, pretending to be someone, or an inappropriate profile." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Edit color for {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Edit community profile" @@ -14043,7 +13908,7 @@ msgstr "Edit overwrites for roles and members in this channel." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Edit profile" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Edit profile local time" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Edit published message?" @@ -14191,13 +14056,13 @@ msgstr "Eligible for a refund until {windowEndsOn}. This will also cancel your s #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Email address" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Email address required." @@ -14721,16 +14586,6 @@ msgstr "Encoder preference for new screen shares." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC, and bitrate presets" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Encourages self-harm" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Encourages suicide, self-harm, or eating disorders." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "End-to-end encryption is unavailable because an unsupported participant msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Endangers minors or hosts child-exploitation content." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Enter a code in the format ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Enter a valid {theOtherPlatform} template URL or code." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Enter a valid email address." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Enter a valid message link." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Enter the {digitCount}-digit code from your authenticator app." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Enter the code before continuing." @@ -15008,7 +14858,7 @@ msgstr "Enter to <0><1>save" msgid "Enter username" msgstr "Enter username" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Enter verification code" @@ -15017,6 +14867,11 @@ msgstr "Enter verification code" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Enter your email address and we'll send you a link to reset your password." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Enter your full legal name to send the report." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape to <0><1>cancel" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Expires on {earliest}" msgid "Expires:" msgstr "Expires:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explain the problem" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explain the problem to send the report." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "External links can be dangerous. Be careful." msgid "Extra large" msgstr "Extra large" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremist community" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Failed to remove vanity URL. Try again." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Failed to resend code. Try again." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Failed to reset premium state." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Failed to send code. Try again." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Failed to send message. Hold for options." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Failed to send report. Try again." @@ -15840,11 +15700,6 @@ msgstr "Failed to upload emojis starting at {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Failed to upload emojis. Try again." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "False claims likely to cause real-world harm." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Find the perfect sticker" msgid "Fingerprint" msgstr "Fingerprint" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Finish account setup" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Finish account setup first" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Finish signing up to send friend requests." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finnish" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "First and last name" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Frame rates above 30 FPS require {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "France" @@ -16834,10 +16689,10 @@ msgstr "Full" msgid "Full dynamic range" msgstr "Full dynamic range" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Full legal name" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Full legal name (optional for child sexual abuse reports)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "German" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Germany" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Go back" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Go back and enter a valid email." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Great to see you, {username}! Welcome in." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Greece" @@ -17572,11 +17427,6 @@ msgstr "Greek" msgid "Grid view" msgstr "Grid view" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming or child-exploitation content." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Handle" msgid "Hang out with voice, video and screen share" msgstr "Hang out with voice, video and screen share" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Harassment" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Harassment involving mature content" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Harassment or bullying" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Harassment or stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Harassment or targeted abuse" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Harassment or threats" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardware key" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Harmful misinformation" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Has ever purchased" msgid "Has ever purchased override" msgstr "Has ever purchased override" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hate speech" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Hide your own screen share?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Hides the download, open in browser and copy buttons on images and videos in this channel." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Hides their messages and stops them messaging you" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Hungarian" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungary" @@ -18399,6 +18212,11 @@ msgstr "I am a tooltip" msgid "I changed my mind" msgstr "I changed my mind" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "I confirm in good faith that the information and allegations in this notice are accurate and complete." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Idle settings" msgid "Idle timeout" msgstr "Idle timeout" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "If a minor is involved, use \"{childSafetyReasonName}\" instead." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "If an account uses that address, we've sent it password reset instructio msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "If macOS asks to quit and reopen {productName}, choose Later." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "If someone may be in immediate danger, contact local emergency services if you can do so safely." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "If someone is in immediate danger, contact local emergency services first." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "If someone told you to paste something here, it is a scam that can hand them your {productName} account." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "If this is a credible imminent threat, contact local emergency services too." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "If this is an imminent terrorist threat, contact local emergency services too." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "If you believe it is illegal, say which law and why." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignore this channel's slowmode cooldown." msgid "Ignore virtual" msgstr "Ignore virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Illegal activity" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Illegal activity or something else" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Illegal sales, criminal facilitation, or unlawful activity." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Impersonation" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Impersonation or deceptive media" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactive" msgid "Inactive timeout" msgstr "Inactive timeout" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Inappropriate profile" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Include my two-factor backup codes in the PDF and printout" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Include the community ID." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Invite background" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Invite code (optional)" @@ -19471,7 +19220,7 @@ msgstr "Invite masking" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invite members" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP address authorized" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ireland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Italic" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italy" @@ -20120,7 +19869,7 @@ msgstr "Keys" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Later" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20291,11 +20040,6 @@ msgstr "Learn more" msgid "Learn more about Visionary" msgstr "Learn more about Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Leave" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Leave private thread" msgid "Leave silently" msgstr "Leave silently" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Leave the community" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Lists members with this role in their own section in the member list." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lithuania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Loading..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Loading…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Low" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Maintenance is scheduled for {localizedTime}. Expected duration: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Make {userName} the group owner? You'll lose owner privileges." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Make group owner" @@ -21091,38 +20830,21 @@ msgstr "Make group owner" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Make sure this code matches the one in the {PRODUCT_NAME} app." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Make sure this looks right before you send it." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Make the instance yours" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Malicious links" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Malware distribution" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware or dangerous links" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, credential theft, or harmful files." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Mask private details before sharing your screen or stream." msgid "Mask Visionary as subscription" msgstr "Mask Visionary as subscription" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Mass spam, fraud, fake giveaways, or account abuse." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Mature content media gate" msgid "Mature content not allowed" msgstr "Mature content not allowed" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Mature content or harassment" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Mature content or unsafe gating" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Mature content override" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Mature content policy violation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Mature content without proper gating." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Message" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "message link" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Message link" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Message previews in the DM list" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Message published" @@ -22211,6 +21908,11 @@ msgstr "Message time" msgid "Message unpinned" msgstr "Message unpinned" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Message you're reporting" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minors at risk, mature content in the wrong place, or unwanted conduct." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "More" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "More actions" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Nested" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Netherlands" @@ -24099,7 +23796,7 @@ msgstr "No results" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "No results found" @@ -24858,6 +24555,16 @@ msgstr "Only people you invite and moderators can see this thread." msgid "Only places I can't access anymore" msgstr "Only places I can't access anymore" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Only report what you honestly believe breaks the rules, and please don't send the same report twice." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacity" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Open on {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Open popup" @@ -25379,11 +25084,6 @@ msgstr "Open System Settings → Privacy & Security → Screen Recording, then a msgid "Open template JSON" msgstr "Open template JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Open the ban dialog for this community." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Open your settings" msgid "Opened the thread again" msgstr "Opened the thread again" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Opens in a new tab" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Originally banned on {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Other" @@ -25654,11 +25357,6 @@ msgstr "Other reaction…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Ownership could not be transferred to <0>{username} at this time." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Ownership transferred" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Paste the JSON response here" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Paste the message link." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Pick a web search provider" msgid "Pick an emoji" msgstr "Pick an emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Pick an option to continue." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Pick the 4-digit number after your username" msgid "Pick the appearance this administrator account should start with." msgstr "Pick the appearance this administrator account should start with." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Pick the rule to review." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Please wait a moment and try renaming again." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Poland" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "press to add reaction" msgid "press to remove reaction" msgstr "press to remove reaction" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Pretending to be someone else, including deceptive AI-generated content." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." @@ -27078,11 +26756,6 @@ msgstr "Priority speaker" msgid "Privacy" msgstr "Privacy" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacy or impersonation" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Privacy setup nagbar" msgid "Privacy URL" msgstr "Privacy URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Privacy violation" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Privacy violation or doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Privacy violation or stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profile type" msgid "Profile updated" msgstr "Profile updated" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Profile, username, or avatar violation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promotes hatred against protected groups." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promotes, recruits for, or coordinates violent extremist activity." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promotion or instructions encouraging self-harm or eating disorders." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profile you're reporting" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronouns: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Provide at least a user ID or a user tag." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Provide either a user ID or a username for the person you are reporting." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Provide your full legal name for the declaration." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Radio buttons allow selecting one option from a group." msgid "Radio group" msgstr "Radio group" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Raid coordination" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Ready to buy a gift?" msgid "Ready to upgrade?" msgstr "Ready to upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Reason" @@ -28291,8 +27924,8 @@ msgstr "Remember window size and position" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Remove {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Remove {userName} from the group?" @@ -28419,8 +28052,8 @@ msgstr "Remove from favorites" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Remove from group" @@ -28458,11 +28091,6 @@ msgstr "Remove from URL-only GIF favorites" msgid "Remove icon" msgstr "Remove icon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Remove it from the channel for everyone." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Removed from favorites" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Removed from group" @@ -28919,28 +28547,18 @@ msgstr "Report a community" msgid "Report a message" msgstr "Report a message" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Report a rule violation, or find tools to manage contact and preferences." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Report a user profile" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Report community" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Report details" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Report illegal content" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Report issue" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Report message" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Report profile" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Report sent" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Report type" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Report user" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Reported user tag (optional)" @@ -29100,6 +28716,10 @@ msgstr "Requires everything in medium, plus being a member of the community for msgid "Resend" msgstr "Resend" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Resend ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Resend ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Resend ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Resend ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Resend ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Resend ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Resend ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Resend code" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roles updated successfully" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29947,7 +29567,7 @@ msgstr "Saturation" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Say hi to <0>{displayName}. Your DM starts here." msgid "Scale" msgstr "Scale" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Scams, malware, or misinformation" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scan the QR code with your authenticator app." @@ -30855,11 +30470,6 @@ msgstr "Select" msgid "Select {accessibleName}" msgstr "Select {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Select a category" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Select a community where you have {permissionName} permission, or a group DM you belong to." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Select a country" @@ -30911,11 +30521,6 @@ msgstr "Select a redirect URI" msgid "Select a scenario to apply..." msgstr "Select a scenario to apply..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Select a violation category." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Select the account you want to sign in with on your new device." msgid "Select voice processing mode" msgstr "Select voice processing mode" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Select what you want to report." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Select your country of residence." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Select…" @@ -31037,13 +30642,6 @@ msgstr "Selection: {0} (max {1})" msgid "Selections" msgstr "Selections" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Self-harm or suicide" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Send an action message (wraps in italics)." msgid "Send animation" msgstr "Send animation" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Send another report" @@ -31138,7 +30736,7 @@ msgstr "Send button" msgid "Send code" msgstr "Send code" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Send DSA report" @@ -31158,9 +30756,9 @@ msgstr "Send files up to {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Send friend request" @@ -31220,8 +30818,8 @@ msgstr "Send messages in threads" msgid "Send messages, images, GIFs and emoji" msgstr "Send messages, images, GIFs and emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Send report" @@ -31255,7 +30853,7 @@ msgstr "Send this pin back in time?" msgid "Send TTS messages" msgstr "Send TTS messages" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Send verification code" @@ -31273,11 +30871,6 @@ msgstr "Send voice message" msgid "Send:" msgstr "Send:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Sending malware or dangerous links" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Share theme" msgid "Share voice activity with all friends?" msgstr "Share voice activity with all friends?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Share what our team needs to assess this." @@ -31709,11 +31302,6 @@ msgstr "Share what our team needs to assess this." msgid "Share with a friend" msgstr "Share with a friend" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Share with community mods." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Shared window" msgid "Shared window audio" msgstr "Shared window audio" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Shares personal info, stalks users, or coordinates privacy abuse." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Sharing personal information" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Sliders" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Slowmode simulation" msgid "Slowmode time remaining" msgstr "Slowmode time remaining" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Slurs, dehumanizing language, or attacks on protected groups." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Something went wrong while preparing this sticker. Try another file or try again in a moment." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Something went wrong while publishing. Try again in a moment." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Spacious layout with clear visual separation between messages." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spain" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spam account" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spam classification" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam or scam" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spam or scam community" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam, scam, or phishing account" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, scams, or phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Start minimized" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Start over" @@ -33752,22 +33302,26 @@ msgstr "Stay signed in" msgid "Step {current} of {total}" msgstr "Step {current} of {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Step 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Step 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Step 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Step 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Step 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Stop being an announcement channel?" msgid "Stop hiding muted channels by default?" msgstr "Stop hiding muted channels by default?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Stop messages and friend requests." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Stop mic test" @@ -33959,11 +33508,6 @@ msgstr "Stop patching Node.prototype insertBefore and removeChild. The app will msgid "Stop ringing" msgstr "Stop ringing" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Stop seeing its content and members." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Swap common text faces such as :) and <3 for emoji when sending messages" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Sweden" @@ -34804,11 +34348,6 @@ msgstr "Tap to add a note" msgid "tar.gz archive" msgstr "tar.gz archive" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Targets people by protected characteristics." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Terms of service" msgid "Terms URL" msgstr "Terms URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorism or violent extremism" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Thanks for flagging this" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "That didn't work. Try again or cancel." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "That doesn't look like a valid URL." @@ -35104,6 +34653,11 @@ msgstr "The {PRODUCT_NAME} app on your other device shows it under Signing in on msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "The {PRODUCT_NAME} app was not signed in. You can close this tab." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "The {productName} safety team will review your report. We won't reveal that it came from you." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "The provided redirect_uri is not registered for this application." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "The provided redirect_uri must use HTTP or HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "The report form changed. Please start again." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "The username tags on this instance are already set. They can no longer change." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "The verification code is invalid or expired." @@ -36115,13 +35674,8 @@ msgstr "This member isn't connected to voice anymore." msgid "This message can only be forwarded to age-restricted channels" msgstr "This message can only be forwarded to age-restricted channels" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "This message has already been deleted." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "This message has already been published" @@ -36279,11 +35833,6 @@ msgstr "This thread is closed. Sending a message will open it again." msgid "This thread is locked. Only moderators can send messages." msgstr "This thread is locked. Only moderators can send messages." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "this user" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "This user has limited their profile. Some details are hidden from people who aren't their friends." @@ -36292,11 +35841,6 @@ msgstr "This user has limited their profile. Some details are hidden from people msgid "This user has no roles in this community." msgstr "This user has no roles in this community." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "This user is already banned from the community." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "This user is no longer available." @@ -36465,16 +36009,6 @@ msgstr "Thread updated" msgid "Threads" msgstr "Threads" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Threats, following across spaces, or unwanted contact." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Threats, harassment, or harm" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Timed out {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Timeout" @@ -36787,6 +36321,11 @@ msgstr "Tone" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tone-map HDR images to standard range, reducing peak brightness." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Too many codes sent. Wait {duration} and try again." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transfer community ownership" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transfer group ownership to {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Unblock them first to send a friend request." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Unblock user" @@ -37607,16 +37146,6 @@ msgstr "Undeafen all devices" msgid "Undeafen yourself" msgstr "Undeafen yourself" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Underage or child-safety concern" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Underage user" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Until I turn it back on" msgid "Unverified email" msgstr "Unverified email" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Unwanted conduct or mature content in the wrong place." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Unwanted mature conduct, comments, or requests." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." @@ -38840,11 +38359,6 @@ msgstr "Use light theme" msgid "Use native title bar" msgstr "Use native title bar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Use only if it clearly breaks {productName}'s rules and doesn't fit above." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Used only in this community." msgid "User" msgstr "User" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "User appears underage, or is involved in grooming or child exploitation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "User debug" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "User ID (optional)" @@ -39061,12 +38570,12 @@ msgstr "User not found" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "User profile" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "User profile: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "User settings" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "User tag (optional)" @@ -39339,7 +38848,7 @@ msgstr "Verified community" msgid "Verify" msgstr "Verify" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verify code" @@ -39368,7 +38877,7 @@ msgstr "Verify it's you" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verify your email" @@ -39718,7 +39227,7 @@ msgstr "View codes" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "View community profile" @@ -39751,7 +39260,7 @@ msgstr "View gifts" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "View global profile" @@ -39847,26 +39356,6 @@ msgstr "Viewer joins stream" msgid "Viewer leaves stream" msgstr "Viewer leaves stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Violation category" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Violation is in the user's profile, not a specific message." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violence or violent threats" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Violent or graphic content" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "We resized and compressed this emoji to 128x128 pixels, but it is still msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "We sent a code to {email}." @@ -40472,7 +39961,7 @@ msgstr "We'll process this as soon as possible. You'll get an email when your ar msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "We'll send a short code to confirm you can receive updates about this report." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "What kind of rule was broken?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "What's happening?" msgid "What's new" msgstr "What's new" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "What's the reason for your report?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." @@ -40832,11 +40321,6 @@ msgstr "Which communities" msgid "Which conversations" msgstr "Which conversations" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Which rule was broken?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "You can't attach files in this channel." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "You can't befriend yourself" @@ -41341,7 +40825,7 @@ msgstr "You can't message this user" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "You must agree to the terms of service to create an account" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "You must verify your email before sending a report." @@ -41891,6 +41375,11 @@ msgstr "You're on a legacy rate. The current price for this plan is {currentSubs msgid "You're sending messages too quickly" msgstr "You're sending messages too quickly" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "You're sending reports too quickly. Try again later." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "You're viewing older messages" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "You've added more people than a group DM allows. Remove a few and try again." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "You've already reported this message." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "You've already reported this profile today." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Your accounts and settings have not been changed or deleted." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Your answers" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Your application is pending review. You can still update your listing details or withdraw the application." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." @@ -42311,6 +41815,11 @@ msgstr "Your new nickname, or leave blank to reset it." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Your old recovery kit no longer works. Store this new one somewhere safe." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Your options" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "your region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Your report didn't go through. Try again." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Your subscription will switch to yearly billing at the next renewal." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Your theme CSS is too large to share. Trim it down and try again." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Your username (optional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index 4ebae093f..d8de4b325 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount, plural, one {# restante} other {# restantes}}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {miembro} other {miembros}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Tu enlace de invitación vence en # segundo.} many {Tu enlace de invitación vence en # segundos.} other {Tu enlace de invitación vence en # segundos.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount, plural, one {# seleccionado} other {# seleccionados}}" @@ -2957,11 +2957,6 @@ msgstr "Datos de la cuenta" msgid "Account details unavailable" msgstr "Detalles de la cuenta no disponibles" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "La cuenta existe para enviar spam, estafar o abusar de la plataforma." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Agregado: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Agregado: {createdDate} • última vez usado: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Comentarios adicionales (opcional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Ya canjeado" msgid "Already set to cancel" msgstr "Cancelación ya programada" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "También reportar este mensaje al equipo de seguridad de {productName}" @@ -4576,11 +4566,6 @@ msgstr "Anual" msgid "Another checkbox" msgstr "Otra casilla" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Otra infracción clara de las normas" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Otra casilla de verificación redonda" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Audio subido" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Ausente en este momento" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Ausente en este momento" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Atrás" @@ -5788,9 +5775,7 @@ msgstr "Códigos de respaldo regenerados" msgid "Badge" msgstr "Insignia" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Banear" @@ -5819,7 +5804,7 @@ msgstr "Duración del baneo" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banear a miembros de la comunidad, con la opción de eliminar sus mensaj msgid "Ban reason" msgstr "Motivo del baneo" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Banear a este usuario" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Ancho de banda" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Baneado" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Se baneó a {targetUserTag} de la comunidad" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Antes de la fecha" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Bélgica" @@ -6031,7 +6006,7 @@ msgstr "Tasa de bits" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Bloquear" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Bloquear" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Bloquear a {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Bloquear en todas las comunidades" msgid "Block spoiler" msgstr "Spoiler en bloque" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bloquear a este usuario" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Bloquear usuario" msgid "Blocked" msgstr "Bloqueados" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Bloqueado" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Traductores integrados" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Búlgaro" msgid "Bulk delete" msgstr "Eliminar varios" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Acoso, contacto no deseado repetido, acecho o abuso dirigido." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Acoso, amenazas, odio, violencia, ataques o contenido que promueva autolesiones." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Llamada" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Configuración de llamadas y chats grupales" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Cambiar banner" msgid "Change chat embed background" msgstr "Cambiar el fondo del contenido incrustado en el chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Cambiar correo electrónico" @@ -7150,8 +7116,8 @@ msgstr "Cambiar apodo de amigo" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Cambiar apodo en el grupo" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Cambiar idioma" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Cambiar mi apodo en el grupo" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Cambiar mi apodo" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Cambiar propietario" @@ -7283,16 +7249,6 @@ msgstr "Cambia la región de voz que usa un canal de voz." msgid "Change which voice region this channel uses." msgstr "Cambia la región de voz que usa este canal." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Cambia quién puede llamarte o agregarte." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Cambia quién puede contactarte." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Revisa tu bandeja de entrada en {emailAddress} para ver el enlace de aut msgid "Check your inbox for a verification email." msgstr "Revisa tu bandeja de entrada para ver el correo de verificación." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Revisa tu reporte" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Casillas de verificación" @@ -7901,21 +7862,6 @@ msgstr "El pago está bloqueado para esta cuenta. Si necesitas ayuda, contacta a msgid "Checkout unavailable" msgstr "Pago no disponible" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Problemas de seguridad infantil" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Seguridad infantil o explotación de menores" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Seguridad infantil o contenido para adultos" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Opciones" msgid "Choices: {choiceList}" msgstr "Opciones: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Elige" @@ -8122,6 +8068,11 @@ msgstr "Elige la categoría que mejor describa tu comunidad. Puedes cambiarla en msgid "Choose the premium model" msgstr "Elige el modelo premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Vuelve a elegir el motivo" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Reclamar regalo" msgid "Claim your account" msgstr "Completa el registro de tu cuenta" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Completa el registro de tu cuenta y verifica tu correo electrónico para enviar reportes." @@ -8352,12 +8303,12 @@ msgstr "Completa el registro de tu cuenta para canjear este regalo." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Completa el registro de tu cuenta para enviar solicitudes de amistad." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Reclama tu cuenta para enviar informes." @@ -8378,11 +8329,6 @@ msgstr "Completa el registro de tu cuenta para iniciar o unirte a llamadas 1:1." msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "¡Reclama tu regalo para activar tu suscripción a {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Hacerse pasar por otra persona, marca u organización." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Borrar búsqueda" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Cerrar" msgid "Close popout" msgstr "Cerrar ventana flotante" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Cerrar este MD" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Mantener en la bandeja al cerrar" msgid "Close window" msgstr "Cerrar ventana" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Cierra tu chat actual con {dmDisplayName}. Esto no bloquea al usuario y puedes reabrir el chat más tarde." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "¿Cerrar tu MD con {displayName}? Puedes reabrirlo en cualquier momento." @@ -8837,7 +8773,7 @@ msgstr "Tema carbón" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Código" @@ -8868,7 +8804,7 @@ msgstr "Código de la app {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Código reenviado" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Comunidades a las que puedes unirte" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Comunidad" @@ -9131,7 +9065,7 @@ msgstr "Desactivar sonido en la comunidad" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Depuración de comunidad" @@ -9150,16 +9084,6 @@ msgstr "Comunidad eliminada" msgid "Community DM" msgstr "MD de la comunidad" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "La comunidad existe para enviar spam, estafar o abusar de la plataforma." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "La comunidad facilita los ataques masivos o el acoso dirigido." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ícono de la comunidad" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID de la comunidad" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Se requiere el ID de la comunidad." @@ -9526,6 +9450,11 @@ msgstr "Confirmar nueva contraseña" msgid "Confirm password" msgstr "Confirmar contraseña" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirma la declaración para enviar el reporte." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continuar en tu navegador" msgid "Continue to checkout" msgstr "Continuar al pago" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continuar para reportar a la comunidad" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continuar para reportar al usuario" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Convertir este canal a un canal de texto eliminará todos los canales qu msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Convierte el contenido entrante en voz, sin importar si proviene de /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordina ataques, acoso o intimidación contra personas o comunidades." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiada al portapapeles" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiada al portapapeles" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copiar ID de mensaje" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copiar enlace del mensaje" @@ -10643,6 +10553,11 @@ msgstr "No se pudieron cargar las publicaciones. Intenta de nuevo más tarde." msgid "Couldn't load settings" msgstr "No se pudieron cargar la configuración" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "No se pudo cargar el formulario de reporte." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "No se pudo cargar esta aplicación" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "No se pudo procesar la imagen" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "No se pudo publicar este mensaje" @@ -10825,11 +10740,6 @@ msgstr "No se pudo enviar la invitación" msgid "Couldn't send invite. Try again." msgstr "No se pudo enviar la invitación. Intenta de nuevo." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "No se pudo enviar. Intenta de nuevo." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Temporizador de cuenta regresiva" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "País de residencia" @@ -11301,13 +11211,8 @@ msgstr "Creado:" msgid "Credentials" msgstr "Credenciales" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Amenazas creíbles, violencia gráfica o glorificación de la violencia." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croacia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Silencia el audio por debajo de un umbral de volumen con un uso mínimo de CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Chipre" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Checo" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "República Checa" @@ -11965,7 +11870,7 @@ msgstr "Depurar canal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Depurar comunidad" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "¿Eliminar tema?" msgid "Delete this invite? Can't be undone." msgstr "¿Eliminar esta invitación? No se puede deshacer." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Eliminar este mensaje" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "¿Eliminar este mensaje? No se puede deshacer." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "¿Eliminar este mensaje? No se puede deshacer. Este mensaje también se eliminará de cada comunidad que siga este canal." @@ -12461,11 +12359,6 @@ msgstr "¿Eliminar tus mensajes en esta comunidad?" msgid "Delete your messages in this conversation?" msgstr "¿Eliminar tus mensajes en esta conversación?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Eliminado" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Se denegaron {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dinamarca" @@ -12554,11 +12447,6 @@ msgstr "Describe el sticker" msgid "Describe this media for screen readers" msgstr "Describe este archivo multimedia para lectores de pantalla" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Describe por qué el contenido es ilegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner desvinculado" msgid "Detail" msgstr "Detalle" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detalles" @@ -13315,11 +13203,6 @@ msgstr "Nombre visible (opcional)" msgid "Display scaling" msgstr "Escala de visualización" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuye malware, herramientas para robar credenciales u otros archivos dañinos." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "MD" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Configuración de MD y solicitudes de amistad" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentación" msgid "Doesn't allow being added to group DMs" msgstr "No permite que lo agreguen a los MD grupales" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "No bloquea. Puedes reabrirlo más tarde." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donar en su lugar" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Descarga mapas de origen para que los rastreos de pila y las herramienta msgid "Download video" msgstr "Descargar video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, exposición de información privada o acoso." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, acoso, suplantación de identidad o un perfil inapropiado." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Editar color para {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Editar perfil en la comunidad" @@ -14043,7 +13908,7 @@ msgstr "Edita los permisos específicos de roles y miembros en este canal." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Editar perfil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Editar hora local del perfil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "¿Editar mensaje publicado?" @@ -14191,13 +14056,13 @@ msgstr "Puedes solicitar un reembolso hasta el {windowEndsOn}. Esto también can #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Correo electrónico" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Correo electrónico" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Se requiere una dirección de correo electrónico." @@ -14721,16 +14586,6 @@ msgstr "Preferencia de codificador para nuevas transmisiones de pantalla compart msgid "Encoder, SVC, and bitrate presets" msgstr "Codificador, SVC y ajustes preestablecidos de tasa de bits" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Fomenta autolesiones" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Fomenta el suicidio, las autolesiones o los trastornos alimenticios." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "El cifrado de extremo a extremo no está disponible porque un participan msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "El cifrado de extremo a extremo no está disponible porque un participante de este canal de voz usa un cliente que no lo admite." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Pone en peligro a menores o aloja contenido de explotación infantil." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Intro" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Ingresa un código con el formato ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Ingresa una URL o un código válido de una plantilla de {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Ingresa una dirección de correo electrónico válida." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Ingresa un enlace de mensaje válido." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Ingresa el código de {digitCount} dígitos de tu aplicación de autenticación." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Ingresa el código antes de continuar." @@ -15008,7 +14858,7 @@ msgstr "Intro para <0><1>guardar" msgid "Enter username" msgstr "Ingresa tu nombre de usuario" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Ingresa el código de verificación" @@ -15017,6 +14867,11 @@ msgstr "Ingresa el código de verificación" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Ingresa tu nombre legal completo para enviar el reporte." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape para <0><1>cancelar" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Vence el {earliest}" msgid "Expires:" msgstr "Vence:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explica el problema" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explica el problema para enviar el reporte." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Los enlaces externos pueden ser peligrosos. Ten cuidado." msgid "Extra large" msgstr "Extragrande" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Comunidad extremista" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "No se pudo eliminar la URL personalizada. Inténtalo de nuevo." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "No se pudo reenviar el código. Intenta de nuevo." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "No se pudo restablecer el estado premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "No se pudo enviar el código. Intenta de nuevo." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "No se pudo enviar el mensaje. Mantén presionado para ver las opciones." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "No se pudo enviar el reporte. Intenta de nuevo." @@ -15840,11 +15700,6 @@ msgstr "No se pudieron subir los emojis a partir de {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "No se pudieron subir los emojis. Intenta de nuevo." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Afirmaciones falsas que probablemente causen daños en el mundo real." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Busca el sticker perfecto" msgid "Fingerprint" msgstr "Huella digital" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Completar el registro de la cuenta" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Completa primero el registro de tu cuenta" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Termina de registrarte para enviar solicitudes de amistad." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandés" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nombre y apellido" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Las velocidades de fotogramas superiores a 30 FPS requieren {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francia" @@ -16834,10 +16689,10 @@ msgstr "Completa" msgid "Full dynamic range" msgstr "Rango dinámico completo" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nombre legal completo" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nombre legal completo (opcional para reportes de abuso sexual infantil)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Alemán" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Alemania" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Volver" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Vuelve e ingresa un correo electrónico válido." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "¡Qué bueno verte, {username}! Te damos la bienvenida." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grecia" @@ -17572,11 +17427,6 @@ msgstr "Griego" msgid "Grid view" msgstr "Vista de cuadrícula" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Captación de menores con fines sexuales o contenido de explotación infantil." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Identificador" msgid "Hang out with voice, video and screen share" msgstr "Pasa el rato con voz, video y compartir pantalla" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Acoso" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Acoso que involucra contenido para adultos" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Acoso o intimidación" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Acoso o acecho" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Acoso o abuso dirigido" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Acoso o amenazas" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Llave física de seguridad" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Aceleración por hardware en la mayoría de los sistemas Windows y macOS. Confiable para dispositivos más antiguos." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Información errónea dañina" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ha comprado alguna vez" msgid "Has ever purchased override" msgstr "Forzar estado de compra previa" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Discurso de odio" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "¿Ocultar tu pantalla compartida?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Oculta los botones de descargar, abrir en navegador y copiar en imágenes y videos de este canal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Oculta sus mensajes y evita que te envíe mensajes" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Húngaro" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungría" @@ -18399,6 +18212,11 @@ msgstr "Soy una ayuda emergente" msgid "I changed my mind" msgstr "Cambié de opinión" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Confirmo de buena fe que la información y las alegaciones de este aviso son precisas y completas." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Configuración de inactividad" msgid "Idle timeout" msgstr "Tiempo de inactividad" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Si hay un menor involucrado, usa \"{childSafetyReasonName}\" en su lugar." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Si una cuenta usa esa dirección, le hemos enviado instrucciones para re msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Si macOS te pide que cierres y vuelvas a abrir {productName}, elige Más tarde." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Si alguien está en peligro inmediato, contacta a los servicios de emergencia locales si puedes hacerlo de forma segura." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Si alguien está en peligro inmediato, contacta primero a los servicios de emergencia locales." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Si alguien te dijo que pegaras algo aquí, es una estafa que podría darle acceso a tu cuenta de {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Si esto involucra material de abuso sexual infantil (CSAM) o explotación de un menor, envía el reporte ahora y no vuelvas a compartir el material." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Si se trata de una amenaza inminente creíble, contacta también a los servicios de emergencia locales." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Si se trata de una amenaza terrorista inminente, contacta también a los servicios de emergencia locales." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Si este reporte es sobre un mensaje específico en esta comunidad, reporta ese mensaje. Los reportes de mensajes le dan a nuestro equipo de seguridad el contexto más claro, y agregar detalles en los comentarios nos puede ayudar a revisarlo más rápido. Solo continúa reportando la comunidad en general si reportar un mensaje no capturaría el problema principal." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Si este reporte es sobre un mensaje específico, reporta ese mensaje. Los reportes de mensajes le dan a nuestro equipo de seguridad el contexto más claro, y agregar detalles en los comentarios nos puede ayudar a revisarlo más rápido. Solo continúa reportando al usuario en general si ese mensaje no captura el problema más amplio." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Si este reporte es sobre mensajes específicos, reporta el mensaje más relevante. Los reportes de mensajes le dan a nuestro equipo de seguridad el contexto más claro, y agregar detalles en los comentarios nos puede ayudar a revisarlo más rápido. Solo continúa reportando al usuario en general si reportar un mensaje no capturaría el problema más amplio." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Si crees que es ilegal, indica qué ley y por qué." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorar el tiempo de espera de modo lento de este canal." msgid "Ignore virtual" msgstr "Ignorar virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Actividad ilegal" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Actividad ilegal u otra cosa" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Ventas ilegales, facilitación de actividades delictivas o una clara violación de las reglas que no encaja en las categorías anteriores." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Ventas ilegales, facilitación de actividades delictivas o actividades ilícitas." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Imágenes" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Las imágenes que pegas desde tu portapapeles se envían como archivos adjuntos, y no tienes permiso para adjuntar archivos en este canal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Suplantación de identidad" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Suplantación de identidad o contenido engañoso" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactivo" msgid "Inactive timeout" msgstr "Tiempo de inactividad" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Perfil inapropiado" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Incluir mis códigos de respaldo de dos factores en el PDF y la impresión" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Incluye el ID de la comunidad." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Fondo de invitación" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Código de invitación (opcional)" @@ -19471,7 +19220,7 @@ msgstr "Ocultar invitaciones" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invitar miembros" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Dirección IP autorizada" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Cursiva" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Teclas" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Más tarde" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letonia" @@ -20291,11 +20040,6 @@ msgstr "Más información" msgid "Learn more about Visionary" msgstr "Más información sobre Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Salir" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Salir del hilo privado" msgid "Leave silently" msgstr "Salir en silencio" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Salir de la comunidad" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Muestra a los miembros con este rol en su propia sección en la lista de miembros." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Cargando..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Cargando…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Bajo" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburgo" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Mantenimiento programado para las {localizedTime}. Duración estimada: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "¿Quieres que {userName} sea el propietario del grupo? Perderás los privilegios de propietario." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Hacer propietario del grupo" @@ -21091,38 +20830,21 @@ msgstr "Hacer propietario del grupo" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Asegúrate de que este código coincida con el de la app {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Asegúrate de que todo esté correcto antes de enviarlo." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personaliza tu instancia" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Enlaces maliciosos" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribución de software malicioso" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Software malicioso o enlaces peligrosos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, robo de credenciales o archivos dañinos." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Ocultar detalles privados antes de compartir tu pantalla o transmisión. msgid "Mask Visionary as subscription" msgstr "Mostrar Visionary como una suscripción normal" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam masivo, fraude, sorteos falsos o abuso de cuenta." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Restricción de acceso a contenido multimedia para adultos" msgid "Mature content not allowed" msgstr "Contenido para adultos no permitido" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Contenido para adultos o acoso" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Contenido para adultos o restricciones de acceso inadecuadas" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Ajuste específico de contenido para adultos" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Incumplimiento de la política de contenido para adultos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Contenido para adultos sin las restricciones de acceso adecuadas." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Mensaje" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "enlace del mensaje" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Enlace del mensaje" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Vistas previas de mensajes en la lista de mensajes directos" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Mensaje publicado" @@ -22211,6 +21908,11 @@ msgstr "Hora del mensaje" msgid "Message unpinned" msgstr "Mensaje desfijado" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Mensaje que estás reportando" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Menores en riesgo, contenido para adultos en el lugar equivocado o conducta no deseada." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Más" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Más acciones" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Anidado" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Países Bajos" @@ -24099,7 +23796,7 @@ msgstr "Sin resultados" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "No se encontraron resultados" @@ -24858,6 +24555,16 @@ msgstr "Solo las personas que invites y los moderadores pueden ver este hilo." msgid "Only places I can't access anymore" msgstr "Solo lugares a los que ya no puedo acceder" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Reporta solo lo que honestamente crees que rompe las reglas, y por favor, no envíes el mismo reporte dos veces." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Reporta solo lo que honestamente crees que rompe las reglas. El mal uso de los reportes va en contra de nuestras <0>normas de la comunidad." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacidad" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Abrir en {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Abrir menú desplegable" @@ -25379,11 +25084,6 @@ msgstr "Abre Configuración del Sistema → Privacidad y seguridad → Grabació msgid "Open template JSON" msgstr "Abrir plantilla JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Abrir el diálogo de baneo para esta comunidad." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Abrir tu configuración" msgid "Opened the thread again" msgstr "Se volvió a abrir el hilo" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Se abre en una pestaña nueva" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Baneado originalmente el {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Otro" @@ -25654,11 +25357,6 @@ msgstr "Otra reacción…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Nuestro equipo de seguridad lo está revisando. Te enviaremos un mensaje directo y un correo electrónico cuando tengamos un veredicto." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "No se pudo transferir la propiedad a <0>{username} en este momento." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Propiedad transferida" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Pega la respuesta JSON aquí" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Pega el enlace del mensaje." @@ -26260,11 +25958,6 @@ msgstr "Av Pág" msgid "PgUp" msgstr "Re Pág" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraude, enlaces maliciosos o afirmaciones falsas que puedan causar daños en el mundo real." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Elige un proveedor de búsqueda web" msgid "Pick an emoji" msgstr "Seleccionar un emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Elige una opción para continuar." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Elige el número de 4 dígitos después de tu nombre de usuario" msgid "Pick the appearance this administrator account should start with." msgstr "Elige la apariencia con la que debe empezar esta cuenta de administrador." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Elige la regla para revisar." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Espera un momento e intenta cambiar el nombre de nuevo." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polonia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Puerto" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "toca para agregar una reacción" msgid "press to remove reaction" msgstr "toca para eliminar la reacción" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Hacerse pasar por otra persona, incluyendo contenido engañoso generado por IA." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Evita que <0>{targetUserTag} envíe mensajes, reaccione y se conecte a canales de voz durante el tiempo especificado." @@ -27078,11 +26756,6 @@ msgstr "Prioridad de voz" msgid "Privacy" msgstr "Privacidad" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacidad o suplantación de identidad" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Configuración de privacidad" msgid "Privacy URL" msgstr "URL de privacidad" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Incumplimiento de privacidad" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Incumplimiento de privacidad o doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Violación de privacidad o acoso" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Tipo de perfil" msgid "Profile updated" msgstr "Perfil actualizado" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Incumplimiento de las normas sobre perfil, nombre de usuario o avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promueve el odio contra grupos protegidos." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promueve o coordina actividades extremistas violentas, o recluta participantes para ellas." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promoción o instrucciones que fomenten las autolesiones o los trastornos alimenticios." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Perfil que estás reportando" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronombres: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protege tu cuenta Visionary activando la autenticación de dos factores. ¡Gracias por apoyar a {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Proporciona al menos un ID de usuario o una etiqueta de usuario." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Proporciona el ID de usuario o el nombre de usuario de la persona que quieres reportar." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Escribe tu nombre legal completo para la declaración." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Los botones de radio permiten seleccionar una opción de un grupo." msgid "Radio group" msgstr "Grupo de botones de opción" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordinación de ataque" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "¿Listo para comprar un regalo?" msgid "Ready to upgrade?" msgstr "¿Listo para actualizar?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Motivo" @@ -28291,8 +27924,8 @@ msgstr "Recordar tamaño y posición de la ventana" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Eliminar {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "¿Quitar a {userName} del grupo?" @@ -28419,8 +28052,8 @@ msgstr "Quitar de favoritos" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Eliminar del grupo" @@ -28458,11 +28091,6 @@ msgstr "Quitar de los GIF favoritos guardados por URL" msgid "Remove icon" msgstr "Quitar ícono" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Eliminarlo del canal para todos." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Eliminado de favoritos" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Eliminado del grupo" @@ -28919,28 +28547,18 @@ msgstr "Reportar una comunidad" msgid "Report a message" msgstr "Reportar un mensaje" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Reporta una infracción de las reglas o encuentra herramientas para gestionar contactos y preferencias." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Reportar un perfil de usuario" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Reportar comunidad" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detalles del reporte" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Reportar contenido ilegal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Reportar un problema" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Reportar mensaje" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Reportar perfil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Reporte enviado" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Tipo de reporte" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Reportar usuario" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Etiqueta del usuario reportado (opcional)" @@ -29100,6 +28716,10 @@ msgstr "Requiere todo lo de nivel medio, además de ser miembro de la comunidad msgid "Resend" msgstr "Reenviar" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Reenviar ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Reenviar ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Reenviar ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Reenviar ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Reenviar ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Reenviar ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Reenviar ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Reenviar código" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roles actualizados correctamente" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumania" @@ -29947,7 +29567,7 @@ msgstr "Saturación" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Saluda a <0>{displayName}. Tu MD empieza aquí." msgid "Scale" msgstr "Escala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Estafas, software malicioso o desinformación" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Escanea el código QR con tu aplicación de autenticación." @@ -30855,11 +30470,6 @@ msgstr "Seleccionar" msgid "Select {accessibleName}" msgstr "Selecciona {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Selecciona una categoría" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Selecciona una comunidad donde tengas el permiso {permissionName} o un MD grupal al que pertenezcas." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Selecciona un país" @@ -30911,11 +30521,6 @@ msgstr "Selecciona una URI de redirección" msgid "Select a scenario to apply..." msgstr "Selecciona un escenario para aplicar..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Selecciona una categoría de infracción." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Selecciona la cuenta con la que quieres iniciar sesión en tu nuevo disp msgid "Select voice processing mode" msgstr "Seleccionar modo de procesamiento de voz" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Selecciona qué quieres reportar." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Selecciona tu país de residencia." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Selecciona…" @@ -31037,13 +30642,6 @@ msgstr "Selección: {0} (máx. {1})" msgid "Selections" msgstr "Selecciones" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Autolesiones o suicidio" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Enviar un mensaje de acción (se envuelve en cursiva)." msgid "Send animation" msgstr "Enviar animación" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Enviar otro reporte" @@ -31138,7 +30736,7 @@ msgstr "Botón de enviar" msgid "Send code" msgstr "Enviar código" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Enviar reporte DSA" @@ -31158,9 +30756,9 @@ msgstr "Enviar archivos de hasta {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Enviar solicitud de amistad" @@ -31220,8 +30818,8 @@ msgstr "Enviar mensajes en hilos" msgid "Send messages, images, GIFs and emoji" msgstr "Envía mensajes, imágenes, GIFs y emojis" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Enviar reporte" @@ -31255,7 +30853,7 @@ msgstr "¿Enviar este mensaje fijado al pasado?" msgid "Send TTS messages" msgstr "Enviar mensajes con síntesis de voz" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Enviar código de verificación" @@ -31273,11 +30871,6 @@ msgstr "Enviar mensaje de voz" msgid "Send:" msgstr "Enviar:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Enviar malware o enlaces peligrosos" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Compartir tema" msgid "Share voice activity with all friends?" msgstr "¿Compartir actividad de voz con todos los amigos?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Comparte lo que nuestro equipo necesita para evaluar esto." @@ -31709,11 +31302,6 @@ msgstr "Comparte lo que nuestro equipo necesita para evaluar esto." msgid "Share with a friend" msgstr "Compartir con un amigo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Compartir con los moderadores de la comunidad." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Ventana compartida" msgid "Shared window audio" msgstr "Audio de la ventana compartida" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Comparte información personal, acosa a otros usuarios o coordina el abuso de privacidad." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Compartir información personal" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Deslizadores" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Eslovaquia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Eslovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulación de modo lento" msgid "Slowmode time remaining" msgstr "Tiempo restante del modo lento" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Insultos, lenguaje deshumanizante o ataques a grupos protegidos." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Algo salió mal al preparar este sticker. Prueba con otro archivo o vuelve a intentarlo en un momento." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Algo salió mal al publicar. Intenta de nuevo en un momento." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Diseño espacioso con una clara separación visual entre los mensajes." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "España" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Cuenta de spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Clasificación de spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam o estafa" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Comunidad de spam o estafa" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Cuenta de spam, estafas o phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, estafas o phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Empezar minimizado" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Volver a empezar" @@ -33752,22 +33302,26 @@ msgstr "Mantener la sesión iniciada" msgid "Step {current} of {total}" msgstr "Paso {current} de {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Paso 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Paso 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Paso 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Paso 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Paso 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "¿Dejar de ser un canal de anuncios?" msgid "Stop hiding muted channels by default?" msgstr "¿Dejar de ocultar los canales silenciados por defecto?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Detener mensajes y solicitudes de amistad." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Detener prueba del micrófono" @@ -33959,11 +33508,6 @@ msgstr "Dejar de parchear Node.prototype insertBefore y removeChild. La app volv msgid "Stop ringing" msgstr "Dejar de sonar" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Dejar de ver su contenido y sus miembros." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Reemplazar las expresiones faciales comunes, como :) y <3, por emojis al enviar mensajes" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Suecia" @@ -34804,11 +34348,6 @@ msgstr "Toca para agregar una nota" msgid "tar.gz archive" msgstr "Archivo tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Dirigido a personas por características protegidas." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Términos del servicio" msgid "Terms URL" msgstr "URL de los Términos del servicio" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismo o extremismo violento" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tailandés" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Gracias por ayudarnos a mantener {productName} seguro. Revisaremos tu reporte lo antes posible." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Gracias por avisarnos" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Gracias por informarnos. Esto no infringe nuestras reglas por sí solo, así que no enviamos un reporte." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Gracias por informarnos. Esto por sí solo no infringe nuestras reglas, así que no enviamos un reporte. Si se dirige a alguien o usa insultos, repórtalo de nuevo y elige “Contenido abusivo o dañino”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Eso no funcionó. Intenta de nuevo o cancela." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "No parece un color válido. Prueba con hexadecimal, rgb(), hsl() o un nombre de color CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Parece que no es una URL válida." @@ -35104,6 +34653,11 @@ msgstr "La app {PRODUCT_NAME} en tu otro dispositivo la muestra en \"Iniciar ses msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "La app {PRODUCT_NAME} no inició sesión. Puedes cerrar esta pestaña." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "El equipo de seguridad de {productName} revisará tu reporte. No revelaremos que fuiste tú quien lo envió." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "La redirect_uri proporcionada no está registrada para esta aplicación. msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "La redirect_uri proporcionada debe usar HTTP o HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "El formulario de reporte cambió. Vuelve a empezar." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Las etiquetas de nombre de usuario en esta instancia ya están configuradas. Ya no se pueden cambiar." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "El código de verificación no es válido o ha caducado." @@ -36115,13 +35674,8 @@ msgstr "Este miembro ya no está conectado al chat de voz." msgid "This message can only be forwarded to age-restricted channels" msgstr "Este mensaje solo se puede reenviar a canales con restricción de edad" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Este mensaje ya se eliminó." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Este mensaje ya se publicó" @@ -36279,11 +35833,6 @@ msgstr "Este hilo está cerrado. Enviar un mensaje lo reabrirá." msgid "This thread is locked. Only moderators can send messages." msgstr "Este hilo está bloqueado. Solo los moderadores pueden enviar mensajes." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "este usuario" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Este usuario ha limitado su perfil. Algunos detalles están ocultos para quienes no son sus amigos." @@ -36292,11 +35841,6 @@ msgstr "Este usuario ha limitado su perfil. Algunos detalles están ocultos para msgid "This user has no roles in this community." msgstr "Este usuario no tiene roles en esta comunidad." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Este usuario ya está baneado de la comunidad." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Este usuario ya no está disponible." @@ -36465,16 +36009,6 @@ msgstr "Hilo actualizado" msgid "Threads" msgstr "Hilos" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Amenazas, seguimiento en diferentes espacios o contacto no deseado." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Amenazas, acoso o daño" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Se aplicó aislamiento temporal a {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Aislamiento temporal" @@ -36787,6 +36321,11 @@ msgstr "Mapeo de tonos" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mapear el tono de las imágenes HDR al rango estándar, reduciendo el brillo máximo." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Se enviaron demasiados códigos. Espera {duration} e intenta de nuevo." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transferir la propiedad de la comunidad" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "¿Transferir la propiedad del grupo a {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Desbloquea a esta persona primero para enviarle una solicitud de amistad #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Desbloquear usuario" @@ -37607,16 +37146,6 @@ msgstr "Activar el sonido en todos los dispositivos" msgid "Undeafen yourself" msgstr "Activar sonido" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Preocupación por menores de edad o seguridad infantil" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Usuario por debajo de la edad mínima" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Hasta que lo vuelva a activar" msgid "Unverified email" msgstr "Correo electrónico sin verificar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Conducta no deseada o contenido para adultos en el lugar equivocado." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Conducta, comentarios o solicitudes de índole sexual no deseados." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Hasta {DISCOVERY_MAX_TAGS} etiquetas ayudan a que la gente encuentre tu comunidad. Aparecen en la búsqueda de Descubrir." @@ -38840,11 +38359,6 @@ msgstr "Usar tema claro" msgid "Use native title bar" msgstr "Usar barra de título nativa" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Usa esta opción solo si infringe claramente las reglas de {productName} y no encaja en las categorías anteriores." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Solo se usa en esta comunidad." msgid "User" msgstr "Usuario" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "El usuario parece no tener la edad mínima requerida o está involucrado en captación de menores con fines sexuales o explotación infantil." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Depurar usuario" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID de usuario (opcional)" @@ -39061,12 +38570,12 @@ msgstr "Usuario no encontrado" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Perfil de usuario" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Perfil de usuario: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Configuración de usuario" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Etiqueta de usuario (opcional)" @@ -39339,7 +38848,7 @@ msgstr "Comunidad verificada" msgid "Verify" msgstr "Verificar" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verificar código" @@ -39368,7 +38877,7 @@ msgstr "Verifica que eres tú" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifica tu correo electrónico" @@ -39718,7 +39227,7 @@ msgstr "Ver códigos" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Ver perfil de la comunidad" @@ -39751,7 +39260,7 @@ msgstr "Ver regalos" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Ver perfil global" @@ -39847,26 +39356,6 @@ msgstr "El espectador se une a la transmisión" msgid "Viewer leaves stream" msgstr "El espectador abandona la transmisión" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Categoría de la infracción" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "La infracción está en el perfil del usuario, no en un mensaje específico." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violencia o amenazas violentas" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Contenido violento o gráfico" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Redimensionamos y comprimimos este emoji a 128x128 píxeles, pero todav msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Redimensionamos y comprimimos este sticker a 320x320 píxeles, pero sigue siendo de {fileSize}. El límite es {maxSize}. Prueba con una imagen más simple, menos colores o un archivo de origen más pequeño." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Enviamos un código a {email}." @@ -40472,7 +39961,7 @@ msgstr "Lo procesaremos lo antes posible. Recibirás un correo electrónico cuan msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Restauraremos tu correo anterior, cerraremos sesión en las sesiones antiguas, deshabilitaremos la MFA y aseguraremos tu cuenta con una nueva contraseña." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Te enviaremos un código corto para confirmar que puedes recibir actualizaciones sobre este reporte." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginia Occidental" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "¿Qué tipo de regla se infringió?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "¿Qué pasa?" msgid "What's new" msgstr "Novedades" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "¿Cuál es el motivo de tu reporte?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Cuando no se establece una fecha de corte personalizada, los miembros sin el permiso <0>{readMessageHistoryPermissionLabel} no pueden ver mensajes del historial. Solo verán los mensajes en tiempo real a medida que lleguen, y dejarán de verlos cuando reinicien sus clientes." @@ -40832,11 +40321,6 @@ msgstr "Qué comunidades" msgid "Which conversations" msgstr "Qué conversaciones" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "¿Qué regla se rompió?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Mientras la función pulsar para hablar esté activada, tu atajo controlará el micrófono, por lo que el botón de silenciar estará deshabilitado." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "No puedes adjuntar archivos en este canal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "No puedes ser tu propio amigo" @@ -41341,7 +40825,7 @@ msgstr "No puedes enviar mensajes a este usuario" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Debes aceptar los Términos del servicio para crear una cuenta" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Debes verificar tu correo electrónico antes de enviar un reporte." @@ -41891,6 +41375,11 @@ msgstr "Tienes una tarifa anterior. El precio actual de este plan es {currentSub msgid "You're sending messages too quickly" msgstr "Estás enviando mensajes muy rápido" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Estás enviando reportes muy rápido. Intenta de nuevo más tarde." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Estás viendo mensajes antiguos" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Agregaste más personas de las que permite un MD de grupo. Elimina algunas y vuelve a intentarlo." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Ya reportaste este mensaje." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ya reportaste este perfil hoy." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Tus cuentas y configuraciones no han sido cambiadas ni eliminadas." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "No pudimos completar tu acción porque fue marcada por nuestros sistemas de seguridad. Si crees que es un error, comunícate con soporte." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Tus respuestas" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Tu solicitud está pendiente de revisión. Aún puedes actualizar los datos de tu comunidad o retirar la solicitud." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Tu navegador requiere interacción del usuario para poder reproducir audio. Haz clic en el botón de abajo para habilitar el chat de voz." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Tus cambios llegan a todas las comunidades que siguen este canal, lo que puede tardar un minuto. Cada mensaje publicado permite 3 ediciones rápidas, luego 1 cada 20 minutos." @@ -42311,6 +41815,11 @@ msgstr "Tu nuevo apodo, o déjalo en blanco para restablecerlo." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Tu kit de recuperación anterior ya no funciona. Guarda este nuevo en un lugar seguro." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Tus opciones" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "tu región" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Tu pago de renovación falló, pero los <0/> siguen activos hasta el <1>{graceDate}. Actualiza tu método de pago antes de esa fecha para conservar tu suscripción." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Tu reporte no se envió. Intenta de nuevo." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Tu suscripción cambiará a facturación anual en la próxima renovació msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "El CSS de tu tema es demasiado grande para compartir. Recórtalo y vuelve a intentarlo." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Tu nombre de usuario (opcional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index 5e461eb03..2d06d49ee 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount, plural, one {# restante} other {# restantes}}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {miembro} other {miembros}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Tu enlace de invitación caduca en # segundo.} many {Tu enlace de invitación caduca en # segundos.} other {Tu enlace de invitación caduca en # segundos.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount, plural, one {# seleccionado} other {# seleccionados}}" @@ -2957,11 +2957,6 @@ msgstr "Datos de la cuenta" msgid "Account details unavailable" msgstr "Detalles de la cuenta no disponibles" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "La cuenta existe para enviar spam, estafar o abusar de la plataforma." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Añadido: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Añadido: {createdDate} • Últ. uso: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Comentarios adicionales (opcional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Ya canjeado" msgid "Already set to cancel" msgstr "Cancelación ya programada" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "También denunciar este mensaje al equipo de seguridad de {productName}" @@ -4576,11 +4566,6 @@ msgstr "Anual" msgid "Another checkbox" msgstr "Otra casilla" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Otra infracción clara de las normas" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Otra casilla de verificación redonda" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Audio subido" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Ausente ahora mismo" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Ausente ahora mismo" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Atrás" @@ -5788,9 +5775,7 @@ msgstr "Códigos de respaldo regenerados" msgid "Badge" msgstr "Insignia" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Banear" @@ -5819,7 +5804,7 @@ msgstr "Duración del baneo" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banear a miembros de la comunidad, con la opción de eliminar sus mensaj msgid "Ban reason" msgstr "Motivo del baneo" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Banear a este usuario" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Ancho de banda" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Baneado" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Se ha baneado a {targetUserTag} de la comunidad" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Antes de la fecha" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Bélgica" @@ -6031,7 +6006,7 @@ msgstr "Tasa de bits" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Bloquear" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Bloquear" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Bloquear a {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Bloquear para todas las comunidades" msgid "Block spoiler" msgstr "Spoiler en bloque" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bloquear a este usuario" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Bloquear usuario" msgid "Blocked" msgstr "Bloqueados" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Bloqueado" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Traductores integrados" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Búlgaro" msgid "Bulk delete" msgstr "Eliminar varios" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Acoso, contacto no deseado repetido, acecho o abuso dirigido." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Acoso, amenazas, odio, violencia, ataques o contenido que promueva las autolesiones." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Llamada" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Ajustes de llamadas y chats de grupo" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Cambiar banner" msgid "Change chat embed background" msgstr "Cambiar el fondo del contenido incrustado en el chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Cambiar correo electrónico" @@ -7150,8 +7116,8 @@ msgstr "Cambiar apodo de amigo" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Cambiar apodo en el grupo" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Cambiar idioma" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Cambiar mi apodo en el grupo" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Cambiar mi apodo" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Cambiar propietario" @@ -7283,16 +7249,6 @@ msgstr "Cambia la región de voz que utiliza un canal de voz." msgid "Change which voice region this channel uses." msgstr "Cambia la región de voz que usa este canal." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Cambia quién puede llamarte o añadirte." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Cambia quién puede contactarte." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Revisa tu bandeja de entrada en {emailAddress} para ver el enlace de aut msgid "Check your inbox for a verification email." msgstr "Comprueba tu bandeja de entrada para ver el correo electrónico de verificación." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Revisa tu denuncia" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Casillas de verificación" @@ -7901,21 +7862,6 @@ msgstr "El pago está bloqueado para esta cuenta. Contacta con {supportEmail} si msgid "Checkout unavailable" msgstr "Pago no disponible" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Preocupaciones sobre la seguridad infantil" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Seguridad infantil o explotación de menores" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Seguridad infantil o contenido para adultos" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Opciones" msgid "Choices: {choiceList}" msgstr "Opciones: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Elige" @@ -8122,6 +8068,11 @@ msgstr "Elige la categoría que mejor describa a tu comunidad. Puedes cambiarla msgid "Choose the premium model" msgstr "Elige el modelo premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Vuelve a elegir el motivo" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Reclamar regalo" msgid "Claim your account" msgstr "Completa el registro de tu cuenta" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Completa el registro de tu cuenta y verifica tu correo electrónico para enviar denuncias." @@ -8352,12 +8303,12 @@ msgstr "Completa el registro de tu cuenta para canjear este regalo." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Completa el registro de tu cuenta para enviar solicitudes de amistad." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Reclama tu cuenta para enviar informes." @@ -8378,11 +8329,6 @@ msgstr "Completa el registro de tu cuenta para iniciar o unirte a llamadas indiv msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Canjea tu regalo para activar tu suscripción a {premiumProductName}." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Hacerse pasar por otra persona, marca u organización." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Borrar búsqueda" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Cerrar modal" msgid "Close popout" msgstr "Cerrar ventana flotante" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Cerrar este MD" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Mantener en la bandeja al cerrar" msgid "Close window" msgstr "Cerrar ventana" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Cierra tu MD actual con {dmDisplayName}. Esto no bloquea al usuario y puedes volver a abrir el MD más tarde." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "¿Cerrar tu mensaje directo con {displayName}? Puedes volver a abrirlo en cualquier momento." @@ -8837,7 +8773,7 @@ msgstr "Tema carbón" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Código" @@ -8868,7 +8804,7 @@ msgstr "Código de la aplicación {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Código reenviado" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Comunidades a las que puedes unirte" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Comunidad" @@ -9131,7 +9065,7 @@ msgstr "Desactivar sonido en la comunidad" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Depuración de comunidad" @@ -9150,16 +9084,6 @@ msgstr "Comunidad eliminada" msgid "Community DM" msgstr "MD de la comunidad" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "La comunidad existe para enviar spam, estafar o abusar de la plataforma." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "La comunidad facilita los ataques masivos o el acoso dirigido." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Icono de la comunidad" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID de la comunidad" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Se requiere el ID de la comunidad." @@ -9526,6 +9450,11 @@ msgstr "Confirma la nueva contraseña" msgid "Confirm password" msgstr "Confirmar contraseña" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirma la declaración para enviar la denuncia." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continuar en tu navegador" msgid "Continue to checkout" msgstr "Continuar al pago" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continuar para denunciar a la comunidad" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continuar para denunciar al usuario" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Al convertir este canal en un canal de texto, se eliminarán todos los c msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Convierte el contenido entrante en voz, independientemente de si proviene de /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordina ataques, acoso organizado o acoso contra personas o comunidades." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiada al portapapeles" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiada al portapapeles" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copiar ID de mensaje" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copiar enlace del mensaje" @@ -10643,6 +10553,11 @@ msgstr "No se pudieron cargar las publicaciones. Inténtalo de nuevo más tarde. msgid "Couldn't load settings" msgstr "No se pudieron cargar los ajustes" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "No se ha podido cargar el formulario de denuncia." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "No se ha podido cargar esta aplicación" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "No se pudo procesar la imagen" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "No se ha podido publicar este mensaje" @@ -10825,11 +10740,6 @@ msgstr "No se pudo enviar la invitación" msgid "Couldn't send invite. Try again." msgstr "No se pudo enviar la invitación. Inténtalo de nuevo." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "No se ha podido enviar. Inténtalo de nuevo." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Temporizador de cuenta atrás" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "País de residencia" @@ -11301,13 +11211,8 @@ msgstr "Creado:" msgid "Credentials" msgstr "Credenciales" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Amenazas creíbles, violencia gráfica o glorificación de la violencia." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croacia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Silencia el audio por debajo de un umbral de volumen con un uso mínimo de CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Chipre" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Checo" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "República Checa" @@ -11965,7 +11870,7 @@ msgstr "Depurar canal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Depurar comunidad" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "¿Eliminar tema?" msgid "Delete this invite? Can't be undone." msgstr "¿Eliminar esta invitación? No se podrá deshacer." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Eliminar este mensaje" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "¿Eliminar este mensaje? No se puede deshacer." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "¿Eliminar este mensaje? No se puede deshacer. Este mensaje también se eliminará de todas las comunidades que sigan este canal." @@ -12461,11 +12359,6 @@ msgstr "¿Eliminar tus mensajes en esta comunidad?" msgid "Delete your messages in this conversation?" msgstr "¿Eliminar tus mensajes en esta conversación?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Eliminado" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Denegado {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dinamarca" @@ -12554,11 +12447,6 @@ msgstr "Describe la pegatina" msgid "Describe this media for screen readers" msgstr "Describe este archivo multimedia para lectores de pantalla" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Describe por qué el contenido es ilegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner desvinculado" msgid "Detail" msgstr "Detalle" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detalles" @@ -13315,11 +13203,6 @@ msgstr "Nombre visible (opcional)" msgid "Display scaling" msgstr "Escala de visualización" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuye malware, herramientas para robar credenciales u otros archivos dañinos." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "MD" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Ajustes de MD y solicitudes de amistad" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentación" msgid "Doesn't allow being added to group DMs" msgstr "No permite que se le añada a MD de grupo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "No bloquea. Puedes volver a abrirlo más tarde." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donar en su lugar" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Descarga mapas de origen para que las trazas de pila y las herramientas msgid "Download video" msgstr "Descargar vídeo" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, exposición de información privada o acoso." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxing, acoso, suplantación de identidad o un perfil inapropiado." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Editar color para {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Editar perfil en la comunidad" @@ -14043,7 +13908,7 @@ msgstr "Edita los permisos específicos de roles y miembros en este canal." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Editar perfil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Editar hora local del perfil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "¿Editar mensaje publicado?" @@ -14191,13 +14056,13 @@ msgstr "Puedes solicitar un reembolso hasta el {windowEndsOn}. Esto también can #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Correo electrónico" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Dirección de correo electrónico" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Se requiere una dirección de correo electrónico." @@ -14721,16 +14586,6 @@ msgstr "Preferencia del codificador para nuevos flujos de pantalla compartida." msgid "Encoder, SVC, and bitrate presets" msgstr "Ajustes predeterminados de codificador, SVC y tasa de bits" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Fomenta las autolesiones" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Fomenta el suicidio, las autolesiones o los trastornos alimentarios." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "El cifrado de extremo a extremo no está disponible porque un participan msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "El cifrado de extremo a extremo no está disponible porque un participante de este canal de voz usa un cliente que no lo admite." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Pone en peligro a menores o aloja contenido de explotación infantil." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Intro" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Introduce un código con el formato ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Introduce una URL o código de plantilla de {theOtherPlatform} válido." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Introduce una dirección de correo electrónico válida." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Introduce un enlace de mensaje válido." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Introduce el código de {digitCount} dígitos de tu aplicación de autenticación." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Introduce el código antes de continuar." @@ -15008,7 +14858,7 @@ msgstr "Intro para <0><1>guardar" msgid "Enter username" msgstr "Introduce tu nombre de usuario" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Introduce el código de verificación" @@ -15017,6 +14867,11 @@ msgstr "Introduce el código de verificación" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Introduce tu dirección de correo electrónico y te enviaremos un enlace para restablecer tu contraseña." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Introduce tu nombre legal completo para enviar la denuncia." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape para <0><1>cancelar" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Caduca el {earliest}" msgid "Expires:" msgstr "Caduca:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explica el problema" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explica el problema para enviar la denuncia." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Los enlaces externos pueden ser peligrosos. Ten cuidado." msgid "Extra large" msgstr "Extragrande" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Comunidad extremista" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "No se pudo eliminar la URL personalizada. Inténtalo de nuevo." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "No se ha podido reenviar el código. Inténtalo de nuevo." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "No se pudo restablecer el estado premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "No se ha podido enviar el código. Inténtalo de nuevo." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "No se pudo enviar el mensaje. Mantén pulsado para ver las opciones." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "No se ha podido enviar la denuncia. Inténtalo de nuevo." @@ -15840,11 +15700,6 @@ msgstr "No se pudieron subir los emojis a partir de {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "No se pudieron subir los emojis. Inténtalo de nuevo." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Afirmaciones falsas que pueden causar daños en el mundo real." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Busca la pegatina perfecta" msgid "Fingerprint" msgstr "Huella digital" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Completar el registro de la cuenta" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Completa primero el registro de tu cuenta" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Termina de registrarte para enviar solicitudes de amistad." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandés" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nombre y apellidos" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Las velocidades de fotogramas superiores a 30 FPS requieren {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francia" @@ -16834,10 +16689,10 @@ msgstr "Completo" msgid "Full dynamic range" msgstr "Rango dinámico completo" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nombre legal completo" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nombre legal completo (opcional para denuncias de abuso sexual infantil)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Alemán" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Alemania" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Volver" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Vuelve e introduce un correo electrónico válido." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "¡Qué bien verte por aquí, {username}! Te damos la bienvenida." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grecia" @@ -17572,11 +17427,6 @@ msgstr "Griego" msgid "Grid view" msgstr "Vista de cuadrícula" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Captación de menores con fines sexuales o contenido de explotación infantil." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Identificador" msgid "Hang out with voice, video and screen share" msgstr "Pasa el rato con voz, vídeo y compartir pantalla" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Acoso" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Acoso con contenido para adultos" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Acoso o intimidación" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Acoso o acecho" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Acoso o abuso dirigido" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Acoso o amenazas" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Llave física de seguridad" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Aceleración por hardware en la mayoría de los sistemas Windows y macOS. Fiable para dispositivos más antiguos." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Información errónea perjudicial" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ha comprado alguna vez" msgid "Has ever purchased override" msgstr "Forzar estado de compra previa" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Discurso de odio" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "¿Ocultar tu pantalla compartida?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Oculta los botones de descarga, abrir en el navegador y copiar en las imágenes y vídeos de este canal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Oculta sus mensajes y evita que te envíen mensajes" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Húngaro" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungría" @@ -18399,6 +18212,11 @@ msgstr "Soy una ayuda emergente" msgid "I changed my mind" msgstr "He cambiado de opinión" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Confirmo de buena fe que la información y las alegaciones de esta denuncia son exactas y completas." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Ajustes de inactividad" msgid "Idle timeout" msgstr "Tiempo de inactividad" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Si hay un menor implicado, usa \"{childSafetyReasonName}\" en su lugar." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Si una cuenta utiliza esa dirección, hemos enviado instrucciones para r msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Si macOS te pide que salgas y reinicies {productName}, elige Más tarde." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Si alguien puede estar en peligro inminente, contacta con los servicios de emergencia locales si puedes hacerlo de forma segura." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Si alguien corre peligro inmediato, contacta primero con los servicios de emergencia locales." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Si alguien te pide que pegues algo aquí, es una estafa y podrían obtener acceso a tu cuenta de {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Si esto implica material de abuso sexual infantil (CSAM) o explotación de un menor, envía la denuncia ahora y no vuelvas a compartir el material." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Si se trata de una amenaza inminente creíble, contacta también con los servicios de emergencia locales." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Si se trata de una amenaza terrorista inminente, contacta también con los servicios de emergencia locales." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Si esta denuncia se refiere a un mensaje específico de esta comunidad, denuncia ese mensaje en su lugar. Las denuncias de mensajes proporcionan a nuestro equipo de seguridad un contexto más claro, y añadir detalles en los comentarios puede ayudarnos a revisarlas más rápido. Solo continúa denunciando a la comunidad en su conjunto si denunciar un mensaje no permite reflejar el problema más amplio." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Si esta denuncia se refiere a un mensaje específico, denuncia ese mensaje en su lugar. Las denuncias de mensajes proporcionan a nuestro equipo de seguridad un contexto más claro, y añadir detalles en los comentarios puede ayudarnos a revisarlas más rápido. Solo continúa denunciando al usuario en su conjunto si ese mensaje no refleja el problema más amplio." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Si esta denuncia se refiere a mensajes específicos, denuncia el mensaje más relevante en su lugar. Las denuncias de mensajes proporcionan a nuestro equipo de seguridad un contexto más claro, y añadir detalles en los comentarios puede ayudarnos a revisarlas más rápido. Solo continúa denunciando al usuario en su conjunto si denunciar un mensaje no permite reflejar el problema más amplio." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Si crees que es ilegal, indica qué ley y por qué." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorar el tiempo de espera de modo lento de este canal." msgid "Ignore virtual" msgstr "Ignorar virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Actividad ilegal" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Actividad ilegal u otra cosa" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Ventas ilegales, facilitación de actividades delictivas o una infracción clara de las normas que no encaja en las categorías anteriores." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Ventas ilegales, facilitación de delitos o actividades ilícitas." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Imágenes" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Las imágenes pegadas desde tu portapapeles se envían como archivos adjuntos y no tienes permiso para adjuntar archivos en este canal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Suplantación de identidad" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Suplantación de identidad o contenido engañoso" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactivo" msgid "Inactive timeout" msgstr "Tiempo de inactividad" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Perfil inapropiado" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Incluir mis códigos de copia de seguridad de dos factores en el PDF y la impresión" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Incluye el ID de la comunidad." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Fondo de invitación" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Código de invitación (opcional)" @@ -19471,7 +19220,7 @@ msgstr "Ocultar invitaciones" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invitar a miembros" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Dirección IP autorizada" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Cursiva" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Teclas" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Más tarde" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letonia" @@ -20291,11 +20040,6 @@ msgstr "Más información" msgid "Learn more about Visionary" msgstr "Más información sobre Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Salir" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Salir del hilo privado" msgid "Leave silently" msgstr "Salir en silencio" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Salir de la comunidad" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Muestra a los miembros con este rol en su propia sección de la lista de miembros." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Cargando..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Cargando…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Bajo" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburgo" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Mantenimiento programado para las {localizedTime}. Duración estimada: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "¿Quieres que {userName} sea el propietario del grupo? Perderás los privilegios de propietario." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Hacer propietario del grupo" @@ -21091,38 +20830,21 @@ msgstr "Hacer propietario del grupo" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Asegúrate de que este código coincida con el de la aplicación {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Asegúrate de que todo esté correcto antes de enviarlo." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personaliza tu instancia" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Enlaces maliciosos" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribución de malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware o enlaces peligrosos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, robo de credenciales o archivos dañinos." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Ocultar detalles privados antes de compartir tu pantalla o transmisión. msgid "Mask Visionary as subscription" msgstr "Mostrar Visionary como una suscripción normal" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam masivo, fraude, sorteos falsos o abuso de cuenta." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Restricción de acceso a contenido multimedia para adultos" msgid "Mature content not allowed" msgstr "Contenido para adultos no permitido" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Contenido para adultos o acoso" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Contenido para adultos o restricciones de acceso inadecuadas" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Ajuste específico de contenido para adultos" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Incumplimiento de la política de contenido para adultos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Contenido para adultos sin las restricciones de acceso adecuadas." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Mensaje" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "enlace del mensaje" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Enlace del mensaje" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Vistas previas de mensajes en la lista de mensajes directos" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Mensaje publicado" @@ -22211,6 +21908,11 @@ msgstr "Hora del mensaje" msgid "Message unpinned" msgstr "Mensaje desfijado" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Mensaje que estás denunciando" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Menores en riesgo, contenido para adultos en el lugar equivocado o conducta no deseada." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Más" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Más acciones" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Anidado" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Países Bajos" @@ -24099,7 +23796,7 @@ msgstr "Sin resultados" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "No se encontraron resultados" @@ -24858,6 +24555,16 @@ msgstr "Solo las personas que invites y los moderadores pueden ver este hilo." msgid "Only places I can't access anymore" msgstr "Solo los lugares a los que ya no tengo acceso" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Denuncia solo lo que creas sinceramente que infringe las normas y, por favor, no envíes la misma denuncia dos veces." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Denuncia solo lo que creas sinceramente que infringe las normas. Hacer un mal uso de las denuncias va en contra de nuestras <0>normas de la comunidad." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacidad" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Abrir en {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Abrir menú emergente" @@ -25379,11 +25084,6 @@ msgstr "Abre Ajustes del Sistema → Privacidad y seguridad → Grabación de pa msgid "Open template JSON" msgstr "Abrir JSON de plantilla" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Abrir el diálogo de baneo para esta comunidad." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Abrir ajustes" msgid "Opened the thread again" msgstr "Se ha vuelto a abrir el hilo" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Se abre en una pestaña nueva" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Baneado originalmente el {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Otro" @@ -25654,11 +25357,6 @@ msgstr "Otra reacción…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Nuestro equipo de seguridad lo está revisando. Te enviaremos un mensaje directo y un correo electrónico cuando hayamos llegado a un veredicto." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "No se pudo transferir la propiedad a <0>{username} en este momento." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Propiedad transferida" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Pega la respuesta JSON aquí" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Pega el enlace del mensaje." @@ -26260,11 +25958,6 @@ msgstr "Av Pág" msgid "PgUp" msgstr "Re Pág" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraude, enlaces maliciosos o afirmaciones falsas que puedan causar daños en el mundo real." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Elige un proveedor de búsqueda web" msgid "Pick an emoji" msgstr "Seleccionar un emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Elige una opción para continuar." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Elige el número de 4 dígitos que va después de tu nombre de usuario" msgid "Pick the appearance this administrator account should start with." msgstr "Elige el aspecto con el que debe empezar esta cuenta de administrador." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Elige la regla que quieres revisar." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Espera un momento e intenta cambiar el nombre de nuevo." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polonia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Puerto" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "pulsa para añadir una reacción" msgid "press to remove reaction" msgstr "pulsa para eliminar la reacción" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Hacerse pasar por otra persona, incluido el contenido engañoso generado por IA." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Evita que <0>{targetUserTag} envíe mensajes, reaccione y se conecte a canales de voz durante el tiempo especificado." @@ -27078,11 +26756,6 @@ msgstr "Prioridad de voz" msgid "Privacy" msgstr "Privacidad" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacidad o suplantación de identidad" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Configuración de privacidad" msgid "Privacy URL" msgstr "URL de privacidad" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Incumplimiento de privacidad" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Incumplimiento de la privacidad o doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Incumplimiento de la privacidad o acoso" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Tipo de perfil" msgid "Profile updated" msgstr "Perfil actualizado" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Incumplimiento de las normas sobre perfil, nombre de usuario o avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promueve el odio contra grupos protegidos." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promueve o coordina actividades extremistas violentas, o recluta participantes para ellas." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promoción o instrucciones que fomenten las autolesiones o los trastornos alimentarios." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Perfil que estás denunciando" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronombres: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protege tu cuenta Visionary activando la autenticación de dos factores. ¡Gracias por apoyar a {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Proporciona al menos un ID de usuario o una etiqueta de usuario." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Introduce el ID de usuario o el nombre de usuario de la persona a la que quieres denunciar." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Indica tu nombre legal completo para la declaración." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Los botones de radio permiten seleccionar una opción de un grupo." msgid "Radio group" msgstr "Grupo de botones de opción" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordinación de raids" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "¿Listo para comprar un regalo?" msgid "Ready to upgrade?" msgstr "¿Listo para mejorar?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Motivo" @@ -28291,8 +27924,8 @@ msgstr "Recordar tamaño y posición de la ventana" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Eliminar {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "¿Eliminar a {userName} del grupo?" @@ -28419,8 +28052,8 @@ msgstr "Eliminar de favoritos" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Eliminar del grupo" @@ -28458,11 +28091,6 @@ msgstr "Eliminar de los GIF favoritos guardados por URL" msgid "Remove icon" msgstr "Eliminar icono" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Eliminarlo del canal para todos." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Eliminado de favoritos" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Eliminado del grupo" @@ -28919,28 +28547,18 @@ msgstr "Denunciar una comunidad" msgid "Report a message" msgstr "Denunciar un mensaje" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Denuncia una infracción de las normas o encuentra herramientas para gestionar tus contactos y preferencias." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Denunciar un perfil de usuario" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Denunciar comunidad" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detalles de la denuncia" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Denunciar contenido ilegal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Reportar un problema" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Denunciar mensaje" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Denunciar perfil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Denuncia enviada" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Tipo de denuncia" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Denunciar usuario" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Etiqueta del usuario denunciado (opcional)" @@ -29100,6 +28716,10 @@ msgstr "Requiere todo lo de nivel medio, además de ser miembro de la comunidad msgid "Resend" msgstr "Reenviar" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Reenviar ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Reenviar ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Reenviar ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Reenviar ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Reenviar ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Reenviar ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Reenviar ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Reenviar código" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roles actualizados correctamente" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumanía" @@ -29947,7 +29567,7 @@ msgstr "Saturación" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Saluda a <0>{displayName}. Tu MD empieza aquí." msgid "Scale" msgstr "Escala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Estafas, malware o desinformación" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Escanea el código QR con tu aplicación de autenticación." @@ -30855,11 +30470,6 @@ msgstr "Seleccionar" msgid "Select {accessibleName}" msgstr "Selecciona {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Selecciona una categoría" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Selecciona una comunidad donde tengas el permiso {permissionName}, o un MD de grupo al que pertenezcas." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Selecciona un país" @@ -30911,11 +30521,6 @@ msgstr "Selecciona una URI de redirección" msgid "Select a scenario to apply..." msgstr "Selecciona un escenario para aplicar..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Selecciona una categoría de infracción." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Selecciona la cuenta con la que quieres iniciar sesión en tu nuevo disp msgid "Select voice processing mode" msgstr "Selecciona el modo de procesamiento de voz" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Selecciona qué quieres denunciar." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Selecciona tu país de residencia." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Seleccionar…" @@ -31037,13 +30642,6 @@ msgstr "Selección: {0} (máx. {1})" msgid "Selections" msgstr "Selecciones" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Autolesiones o suicidio" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Enviar un mensaje de acción (se muestra en cursiva)." msgid "Send animation" msgstr "Enviar animación" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Enviar otra denuncia" @@ -31138,7 +30736,7 @@ msgstr "Botón de enviar" msgid "Send code" msgstr "Enviar código" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Enviar denuncia DSA" @@ -31158,9 +30756,9 @@ msgstr "Enviar archivos de hasta {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Enviar solicitud de amistad" @@ -31220,8 +30818,8 @@ msgstr "Enviar mensajes en hilos" msgid "Send messages, images, GIFs and emoji" msgstr "Enviar mensajes, imágenes, GIFs y emojis" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Enviar denuncia" @@ -31255,7 +30853,7 @@ msgstr "¿Enviar este mensaje fijado al pasado?" msgid "Send TTS messages" msgstr "Enviar mensajes con síntesis de voz" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Enviar código de verificación" @@ -31273,11 +30871,6 @@ msgstr "Enviar mensaje de voz" msgid "Send:" msgstr "Enviar:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Enviar malware o enlaces peligrosos" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Compartir tema" msgid "Share voice activity with all friends?" msgstr "¿Compartir la actividad de voz con todos los amigos?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Comparte lo que nuestro equipo necesita para evaluar esto." @@ -31709,11 +31302,6 @@ msgstr "Comparte lo que nuestro equipo necesita para evaluar esto." msgid "Share with a friend" msgstr "Compartir con un amigo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Compartir con los moderadores de la comunidad." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Ventana compartida" msgid "Shared window audio" msgstr "Audio de la ventana compartida" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Comparte información personal, acosa a otros usuarios o coordina abusos de privacidad." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Compartir información personal" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Deslizadores" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Eslovaquia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Eslovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulación de modo lento" msgid "Slowmode time remaining" msgstr "Tiempo restante del modo lento" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Insultos, lenguaje deshumanizador o ataques a grupos protegidos." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Algo salió mal al preparar esta pegatina. Prueba con otro archivo o inténtalo de nuevo en un momento." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Ha ocurrido un error al publicar. Inténtalo de nuevo en un momento." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Diseño espacioso con una clara separación visual entre mensajes." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "España" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Cuenta de spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Clasificación de spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam o estafa" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Comunidad de spam o estafas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Cuenta de spam, estafas o phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, estafas o suplantación de identidad (phishing)" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Iniciar minimizado" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Empezar de nuevo" @@ -33752,22 +33302,26 @@ msgstr "Mantener la sesión iniciada" msgid "Step {current} of {total}" msgstr "Paso {current} de {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Paso 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Paso 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Paso 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Paso 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Paso 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "¿Dejar de ser un canal de anuncios?" msgid "Stop hiding muted channels by default?" msgstr "¿Dejar de ocultar los canales silenciados por defecto?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Detener mensajes y solicitudes de amistad." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Detener prueba del micrófono" @@ -33959,11 +33508,6 @@ msgstr "Dejar de parchear Node.prototype insertBefore y removeChild. La aplicaci msgid "Stop ringing" msgstr "Dejar de sonar" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Dejar de ver su contenido y sus miembros." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Reemplazar las expresiones faciales de texto comunes, como :) y <3, por emojis al enviar mensajes" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Suecia" @@ -34804,11 +34348,6 @@ msgstr "Toca para añadir una nota" msgid "tar.gz archive" msgstr "Archivo tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Dirigido a personas por características protegidas." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Condiciones del servicio" msgid "Terms URL" msgstr "URL de las Condiciones del servicio" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismo o extremismo violento" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tailandés" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Gracias por ayudarnos a mantener {productName} seguro. Revisaremos tu denuncia lo antes posible." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Gracias por avisarnos" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Gracias por avisarnos. Esto no infringe nuestras normas por sí solo, así que no hemos enviado ninguna denuncia." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Gracias por avisarnos. Esto no infringe nuestras normas por sí solo, así que no hemos enviado ninguna denuncia. Si va dirigido a alguien o usa insultos, denúncialo de nuevo y elige «Contenido abusivo o dañino»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "No ha funcionado. Inténtalo de nuevo o cancela." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "No parece un color válido. Prueba con un código hexadecimal, rgb(), hsl() o un nombre de color CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "No parece una URL válida." @@ -35104,6 +34653,11 @@ msgstr "La aplicación {PRODUCT_NAME} en tu otro dispositivo la muestra en \"Ini msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "La aplicación {PRODUCT_NAME} no ha iniciado sesión. Puedes cerrar esta pestaña." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "El equipo de seguridad de {productName} revisará tu denuncia. No revelaremos que procede de ti." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "La redirect_uri proporcionada no está registrada para esta aplicación. msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "La redirect_uri proporcionada debe usar HTTP o HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "El formulario de denuncia ha cambiado. Empieza de nuevo." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Las etiquetas de nombre de usuario de esta instancia ya están configuradas. Ya no se pueden cambiar." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "El código de verificación no es válido o ha caducado." @@ -36115,13 +35674,8 @@ msgstr "Este miembro ya no está conectado al chat de voz." msgid "This message can only be forwarded to age-restricted channels" msgstr "Este mensaje solo se puede reenviar a canales con restricción de edad" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Este mensaje ya se ha eliminado." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Este mensaje ya se ha publicado" @@ -36279,11 +35833,6 @@ msgstr "Este hilo está cerrado. Enviar un mensaje lo reabrirá." msgid "This thread is locked. Only moderators can send messages." msgstr "Este hilo está bloqueado. Solo los moderadores pueden enviar mensajes." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "este usuario" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Este usuario ha limitado su perfil. Algunos detalles están ocultos para quienes no son sus amigos." @@ -36292,11 +35841,6 @@ msgstr "Este usuario ha limitado su perfil. Algunos detalles están ocultos para msgid "This user has no roles in this community." msgstr "Este usuario no tiene ningún rol en esta comunidad." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Este usuario ya está baneado de la comunidad." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Este usuario ya no está disponible." @@ -36465,16 +36009,6 @@ msgstr "Hilo actualizado" msgid "Threads" msgstr "Hilos" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Amenazas, seguimiento en diferentes espacios o contacto no deseado." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Amenazas, acoso o daño" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Se aplicó aislamiento temporal a {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Aislamiento temporal" @@ -36787,6 +36321,11 @@ msgstr "Mapeo de tonos" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mapea el tono de las imágenes HDR al rango estándar, reduciendo el brillo máximo." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Se han enviado demasiados códigos. Espera {duration} e inténtalo de nuevo." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transferir la propiedad de la comunidad" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "¿Transferir la propiedad del grupo a {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Desbloquea a esta persona primero para enviarle una solicitud de amistad #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Desbloquear usuario" @@ -37607,16 +37146,6 @@ msgstr "Activar el sonido en todos los dispositivos" msgid "Undeafen yourself" msgstr "Activar sonido" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Preocupación por menores o seguridad infantil" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Usuario por debajo de la edad mínima" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Hasta que lo vuelva a activar" msgid "Unverified email" msgstr "Correo electrónico sin verificar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Conducta no deseada o contenido para adultos en el lugar equivocado." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Conducta, comentarios o peticiones de índole sexual no deseados." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Hasta {DISCOVERY_MAX_TAGS} etiquetas ayudan a la gente a encontrar tu comunidad. Aparecen en la búsqueda de Descubrir." @@ -38840,11 +38359,6 @@ msgstr "Usar tema claro" msgid "Use native title bar" msgstr "Usar barra de título nativa" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Úsalo solo si infringe claramente las reglas de {productName} y no encaja en las opciones anteriores." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Solo se usa en esta comunidad." msgid "User" msgstr "Usuario" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "El usuario parece no tener la edad mínima requerida o está involucrado en captación de menores con fines sexuales o explotación infantil." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Depurar usuario" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID de usuario (opcional)" @@ -39061,12 +38570,12 @@ msgstr "Usuario no encontrado" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Perfil de usuario" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Perfil de usuario: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Ajustes de usuario" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Etiqueta de usuario (opcional)" @@ -39339,7 +38848,7 @@ msgstr "Comunidad verificada" msgid "Verify" msgstr "Verificar" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verificar código" @@ -39368,7 +38877,7 @@ msgstr "Verifica que eres tú" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifica tu correo electrónico" @@ -39718,7 +39227,7 @@ msgstr "Ver códigos" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Ver perfil de la comunidad" @@ -39751,7 +39260,7 @@ msgstr "Ver regalos" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Ver perfil global" @@ -39847,26 +39356,6 @@ msgstr "El espectador se une a la transmisión" msgid "Viewer leaves stream" msgstr "El espectador abandona la transmisión" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Categoría de la infracción" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "La infracción está en el perfil del usuario, no en un mensaje específico." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violencia o amenazas violentas" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Contenido violento o gráfico" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Hemos redimensionado y comprimido este emoji a 128x128 píxeles, pero to msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Hemos redimensionado y comprimido esta pegatina a 320x320 píxeles, pero todavía ocupa {fileSize}. El límite es {maxSize}. Prueba con una imagen más sencilla, menos colores o un archivo de origen más pequeño." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Hemos enviado un código a {email}." @@ -40472,7 +39961,7 @@ msgstr "Lo procesaremos lo antes posible. Recibirás un correo electrónico cuan msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Restauraremos tu correo anterior, cerraremos las sesiones antiguas, deshabilitaremos la autenticación multifactor y aseguraremos tu cuenta con una nueva contraseña." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Te enviaremos un código corto para confirmar que puedes recibir actualizaciones sobre esta denuncia." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginia Occidental" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "¿Qué tipo de norma se ha infringido?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "¿Qué tal?" msgid "What's new" msgstr "Novedades" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "¿Cuál es el motivo de tu denuncia?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Cuando no se establece una fecha de corte personalizada, los miembros sin el permiso <0>{readMessageHistoryPermissionLabel} no pueden ver mensajes del historial. Solo verán los mensajes en tiempo real a medida que lleguen, y dejarán de verlos cuando reinicien sus clientes." @@ -40832,11 +40321,6 @@ msgstr "Qué comunidades" msgid "Which conversations" msgstr "Qué conversaciones" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "¿Qué regla se ha infringido?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Mientras la función pulsar para hablar esté activada, tu atajo controla el micrófono, por lo que el botón de silenciar está deshabilitado." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "No puedes adjuntar archivos en este canal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "No puedes ser tu propio amigo" @@ -41341,7 +40825,7 @@ msgstr "No puedes enviar mensajes a este usuario" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Debes aceptar las Condiciones del servicio para crear una cuenta" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Debes verificar tu correo electrónico antes de enviar una denuncia." @@ -41891,6 +41375,11 @@ msgstr "Tienes una tarifa antigua. El precio actual de este plan es {currentSubs msgid "You're sending messages too quickly" msgstr "Estás enviando mensajes demasiado rápido" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Estás enviando denuncias demasiado rápido. Inténtalo de nuevo más tarde." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Estás viendo mensajes antiguos" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Has añadido más personas de las permitidas en un MD de grupo. Elimina a algunas y vuelve a intentarlo." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Ya has denunciado este mensaje." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ya has denunciado este perfil hoy." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Tus cuentas y ajustes no han sido modificados ni eliminados." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "No se ha podido completar tu acción porque ha sido marcada por nuestros sistemas de seguridad. Si crees que es un error, contacta con soporte." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Tus respuestas" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Tu solicitud está pendiente de revisión. Aún puedes actualizar los datos de tu comunidad o retirar la solicitud." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Tu navegador requiere interacción del usuario para poder reproducir audio. Haz clic en el botón de abajo para activar el chat de voz." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Tus cambios llegarán a todas las comunidades que siguen este canal y pueden tardar un minuto. Cada mensaje publicado permite 3 ediciones rápidas, y luego 1 cada 20 minutos." @@ -42311,6 +41815,11 @@ msgstr "Tu nuevo apodo, o déjalo en blanco para restablecerlo." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Tu kit de recuperación anterior ya no funciona. Guarda este nuevo en un lugar seguro." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Tus opciones" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "tu región" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "El pago de renovación ha fallado, pero las <0/> siguen activas hasta el <1>{graceDate}. Actualiza tu método de pago antes de esa fecha para mantener tu suscripción." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Tu denuncia no se ha enviado. Inténtalo de nuevo." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Tu suscripción cambiará a facturación anual en la próxima renovació msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "El CSS de tu tema es demasiado grande para compartirlo. Recórtalo y vuelve a intentarlo." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Tu nombre de usuario (opcional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index 30303b66d..595ca924c 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} jäljellä" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {jäsen} other {jäsentä}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Kutsulinkkisi vanhenee # sekunnin kuluttua.} other {Kutsulinkkisi vanhenee # sekunnin kuluttua.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} valittu" @@ -2957,11 +2957,6 @@ msgstr "Tilitiedot" msgid "Account details unavailable" msgstr "Tilin tiedot eivät saatavilla" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Tili on olemassa roskapostitusta, huijausta tai alustan väärinkäyttöä varten." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Lisätty: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Lisätty: {createdDate} • viimeksi käytetty: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Lisäkommentit (valinnainen)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Jo lunastettu" msgid "Already set to cancel" msgstr "Peruutus on jo ajoitettu" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Ilmoita tämä viesti myös {productName}-turvatiimille" @@ -4576,11 +4566,6 @@ msgstr "Vuosittain" msgid "Another checkbox" msgstr "Toinen valintaruutu" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Toinen selkeä sääntörikkomus" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Toinen pyöreä valintaruutu" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Äänitiedoston lataus" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Itävalta" @@ -5620,6 +5605,7 @@ msgstr "Poissa juuri nyt" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Poissa juuri nyt" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Takaisin" @@ -5788,9 +5775,7 @@ msgstr "Varakoodit luotu uudelleen" msgid "Badge" msgstr "Merkki" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Anna porttikielto" @@ -5819,7 +5804,7 @@ msgstr "Porttikiellon kesto" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Anna jäsenille porttikielto yhteisöön ja poista halutessasi heidän v msgid "Ban reason" msgstr "Porttikiellon syy" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Anna porttikielto tälle käyttäjälle" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Kaistanleveys" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Porttikielletty" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Käyttäjä {targetUserTag} sai porttikiellon yhteisöön" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Ennen päivämäärää" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgia" @@ -6031,7 +6006,7 @@ msgstr "Bittinopeus" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Estä" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Estä" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Estä {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Estä kaikissa yhteisöissä" msgid "Block spoiler" msgstr "Spoilerilohko" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Estä tämä käyttäjä" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Estä käyttäjä" msgid "Blocked" msgstr "Estetyt" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Estetty" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Sisäänrakennetut kääntäjät" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "bulgaria" msgid "Bulk delete" msgstr "Poista useita" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Kiusaaminen, toistuva ei-toivottu yhteydenotto, vainoaminen tai kohdennettu häirintä." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Kiusaaminen, uhkailu, viha, väkivalta, hyökkäykset tai itsensä vahingoittamiseen yllyttävä sisältö." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornia" msgid "Call" msgstr "Puhelu" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Puhelu- ja ryhmäkeskusteluasetukset" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Vaihda banneri" msgid "Change chat embed background" msgstr "Vaihda chatin upotuksen tausta" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Vaihda sähköpostiosoite" @@ -7150,8 +7116,8 @@ msgstr "Vaihda kaverin lempinimi" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Vaihda ryhmän lempinimi" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Vaihda kieltä" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Vaihda ryhmän lempinimeäni" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Vaihda oma lempinimi" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Vaihda omistajaa" @@ -7283,16 +7249,6 @@ msgstr "Vaihda äänikanavan käyttämä puhealue." msgid "Change which voice region this channel uses." msgstr "Vaihda tämän kanavan käyttämä puhealue." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Muuta, kuka voi soittaa tai lisätä sinut." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Muuta, ketkä voivat tavoittaa sinut." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Tarkista sähköpostisi osoitteessa {emailAddress} ja etsi valtuutuslink msgid "Check your inbox for a verification email." msgstr "Tarkista sähköpostistasi vahvistusviesti." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Tarkista ilmoituksesi" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Valintaruudut" @@ -7901,21 +7862,6 @@ msgstr "Ostaminen on estetty tällä tilillä. Jos tarvitset apua, ota yhteyttä msgid "Checkout unavailable" msgstr "Kassa ei ole käytettävissä" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Lapsiin kohdistuvat turvallisuushuolet" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Lasten turvallisuus tai alaikäisten hyväksikäyttö" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Lasten turvallisuus tai aikuisille tarkoitettu sisältö" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Vaihtoehdot" msgid "Choices: {choiceList}" msgstr "Vaihtoehdot: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Valitse" @@ -8122,6 +8068,11 @@ msgstr "Valitse kategoria, joka kuvaa yhteisöäsi parhaiten. Voit muuttaa tät msgid "Choose the premium model" msgstr "Valitse premium-malli" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Valitse syy uudelleen" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Lunasta lahja" msgid "Claim your account" msgstr "Viimeistele tilisi rekisteröinti" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Viimeistele tilisi rekisteröinti ja vahvista sähköpostiosoitteesi, niin voit lähettää ilmoituksia." @@ -8352,12 +8303,12 @@ msgstr "Viimeistele tilisi rekisteröinti, jotta voit lunastaa tämän lahjan." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Viimeistele tilisi rekisteröinti, jotta voit lähettää kaveripyyntöjä." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Lunasta tilisi lähettääksesi ilmoituksia." @@ -8378,11 +8329,6 @@ msgstr "Viimeistele tilisi rekisteröinti, jotta voit aloittaa kahdenkeskisiä p msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Lunasta lahjasi ja aktivoi {premiumProductName}-tilauksesi!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Väittää olevansa toinen henkilö, brändi tai organisaatio." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Tyhjennä hakukenttä" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Sulje ikkuna" msgid "Close popout" msgstr "Sulje kuva kuvassa" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Sulje tämä yksityisviesti" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Sulje ilmaisinalueelle" msgid "Close window" msgstr "Sulje ikkuna" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Sulje nykyinen yksityisviesti käyttäjän {dmDisplayName} kanssa. Tämä ei estä käyttäjää, ja voit avata yksityisviestin uudelleen myöhemmin." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Suljetaanko yksityisviesti käyttäjän {displayName} kanssa? Voit avata sen uudelleen milloin tahansa." @@ -8837,7 +8773,7 @@ msgstr "Hiiliteema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Koodi" @@ -8868,7 +8804,7 @@ msgstr "Koodi sovelluksesta {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Koodi lähetetty uudelleen" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Yhteisöt, joihin voit liittyä" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Yhteisö" @@ -9131,7 +9065,7 @@ msgstr "Mykistä äänet yhteisössä" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Yhteisön virheenkorjaus" @@ -9150,16 +9084,6 @@ msgstr "Yhteisö poistettu" msgid "Community DM" msgstr "Yhteisön yksityisviesti" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Yhteisön tarkoitus on roskapostittaa, huijata tai väärinkäyttää alustaa." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Yhteisö mahdollistaa joukkoahdistelun tai kohdistetun häirinnän." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Yhteisön kuvake" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Yhteisön tunnus" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Yhteisön tunnus on pakollinen." @@ -9526,6 +9450,11 @@ msgstr "Vahvista uusi salasana" msgid "Confirm password" msgstr "Vahvista salasana" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Vahvista vakuutus lähettääksesi ilmoituksen." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Jatka selaimessa" msgid "Continue to checkout" msgstr "Jatka kassalle" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Jatka yhteisön ilmoittamiseen" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Jatka käyttäjän ilmoittamiseen" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Tämän kanavan muuttaminen tekstikanavaksi poistaa kaikki sitä seuraav msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Muuntaa saapuvan sisällön puheeksi riippumatta siitä, onko se peräisin /tts-komennosta." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinoi hyökkäyksiä, joukkohäirintää tai ahdistelua ihmisiä tai yhteisöjä vastaan." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL-osoite kopioitu leikepöydälle" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL-osoite kopioitu leikepöydälle" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopioi viestin tunnus" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopioi viestin linkki" @@ -10643,6 +10553,11 @@ msgstr "Viestien lataaminen epäonnistui. Yritä myöhemmin uudelleen." msgid "Couldn't load settings" msgstr "Asetuksia ei voitu ladata" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Ilmoituslomakkeen lataaminen epäonnistui." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Sovellusta ei voitu ladata" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Kuvan käsittely epäonnistui" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Tämän viestin julkaiseminen epäonnistui" @@ -10825,11 +10740,6 @@ msgstr "Kutsua ei voitu lähettää" msgid "Couldn't send invite. Try again." msgstr "Kutsua ei voitu lähettää. Yritä uudelleen." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Lähetys epäonnistui. Yritä uudelleen." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Ajastin" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Asuinmaa" @@ -11301,13 +11211,8 @@ msgstr "Luotu:" msgid "Credentials" msgstr "Tunnukset" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Uskottavat uhkaukset, raaka väkivalta tai väkivallan ihannointi." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Katkaisee äänen, joka jää äänenvoimakkuusrajan alle, ja kuormittaa suoritinta hyvin vähän." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Kypros" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "tšekki" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tšekki" @@ -11965,7 +11870,7 @@ msgstr "Kanavan virheenkorjaus" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Yhteisön virheenkorjaus" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Poistetaanko teema?" msgid "Delete this invite? Can't be undone." msgstr "Poistetaanko tämä kutsu? Toimintoa ei voi kumota." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Poista tämä viesti" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Poistetaanko tämä viesti? Toimintoa ei voi kumota." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Poistetaanko tämä viesti? Tätä ei voi peruuttaa. Viesti poistetaan myös jokaisesta yhteisöstä, joka seuraa tätä kanavaa." @@ -12461,11 +12359,6 @@ msgstr "Poistetaanko viestisi tästä yhteisöstä?" msgid "Delete your messages in this conversation?" msgstr "Poistetaanko viestisi tästä keskustelusta?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Poistettu" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Kielletty {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Tanska" @@ -12554,11 +12447,6 @@ msgstr "Kuvaile tarraa" msgid "Describe this media for screen readers" msgstr "Kuvaile tätä mediaa ruudunlukijoille" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Kuvaile, mikä tekee sisällöstä laitonta" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Irrotettu banneri" msgid "Detail" msgstr "Yksityiskohdat" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Tiedot" @@ -13315,11 +13203,6 @@ msgstr "Näyttönimi (valinnainen)" msgid "Display scaling" msgstr "Näytön skaalaus" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Jakaa haittaohjelmia, tunnusten varastamiseen tarkoitettuja työkaluja tai muita haitallisia tiedostoja." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "YV" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Yksityisviesti- ja kaveripyyntöasetukset" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentaatio" msgid "Doesn't allow being added to group DMs" msgstr "Ei salli lisäämistä ryhmäkeskusteluihin" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Ei estä. Voit avata keskustelun myöhemmin uudelleen." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Lahjoita sen sijaan" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Lataa lähdekartat, jotta pinon jäljitykset ja kehittäjätyökalut oso msgid "Download video" msgstr "Lataa video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doksaus, yksityisten tietojen paljastaminen tai vainoaminen." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doksaus, vainoaminen, toisena esiintyminen tai sopimaton profiili." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Muokkaa kohteen {tokenLabel} väriä" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Muokkaa yhteisön profiilia" @@ -14043,7 +13908,7 @@ msgstr "Muokkaa roolien ja jäsenten käyttöoikeuksien ohituksia tällä kanava #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Muokkaa profiilia" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Muokkaa profiilin paikallista aikaa" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Muokataanko julkaistua viestiä?" @@ -14191,13 +14056,13 @@ msgstr "Oikeutettu hyvitykseen {windowEndsOn} asti. Tämä peruuttaa myös tilau #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Sähköposti" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Sähköpostiosoite" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Sähköpostiosoite vaaditaan." @@ -14721,16 +14586,6 @@ msgstr "Ensisijainen enkooderi uusissa näytönjaoissa." msgid "Encoder, SVC, and bitrate presets" msgstr "Kooderi, SVC ja bittinopeusasetukset" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Kannustaa itsensä vahingoittamiseen" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Kannustaa itsemurhaan, itsensä vahingoittamiseen tai syömishäiriöihin." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Päästä päähän -salaus ei ole käytettävissä, koska puhelussa on msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Päästä päähän -salaus ei ole käytettävissä, koska tässä äänikanavassa on osallistuja, jota ei tueta." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Vaarantaa alaikäisiä tai sisältää lasten hyväksikäyttöön liittyvää sisältöä." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Anna koodi muodossa ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Anna kelvollinen {theOtherPlatform}-mallin URL-osoite tai koodi." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Anna kelvollinen sähköpostiosoite." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Anna kelvollinen viestilinkki." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Syötä todennussovelluksesi {digitCount}-numeroinen koodi." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Syötä koodi ennen jatkamista." @@ -15008,7 +14858,7 @@ msgstr "enter <0><1>tallentaa" msgid "Enter username" msgstr "Kirjoita käyttäjänimi" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Anna vahvistuskoodi" @@ -15017,6 +14867,11 @@ msgstr "Anna vahvistuskoodi" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Anna sähköpostiosoitteesi, niin lähetämme sinulle linkin salasanan vaihtamista varten." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Syötä koko virallinen nimesi lähettääksesi ilmoituksen." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "escape <0><1>peruuttaa" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Viro" @@ -15412,6 +15267,16 @@ msgstr "Vanhenee {earliest}" msgid "Expires:" msgstr "Vanhenee:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Selitä ongelma" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Selitä ongelma lähettääksesi ilmoituksen." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Ulkoiset linkit voivat olla vaarallisia. Ole varovainen." msgid "Extra large" msgstr "Erittäin suuri" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ääriliikkeen yhteisö" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Mukautetun URL-osoitteen poistaminen epäonnistui. Yritä uudelleen." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Koodin uudelleenlähetys epäonnistui. Yritä uudelleen." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Premium-tilan nollaus epäonnistui." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Koodin lähetys epäonnistui. Yritä uudelleen." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Viestin lähetys epäonnistui. Paina pitkään nähdäksesi vaihtoehdot." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Raportin lähettäminen epäonnistui. Yritä uudelleen." @@ -15840,11 +15700,6 @@ msgstr "Emojien lataus epäonnistui kohdasta {startLabel} alkaen: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Emojien lataaminen epäonnistui. Yritä uudelleen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Vääriä väitteitä, jotka aiheuttavat todennäköisesti todellista haittaa." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Etsi täydellinen tarra" msgid "Fingerprint" msgstr "Sormenjälki" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Viimeistele tilin määritys" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Viimeistele ensin tilin määritys" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Viimeistele rekisteröityminen lähettääksesi kaveripyyntöjä." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Suomi" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "suomi" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Etunimi ja sukunimi" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Yli 30 FPS:n kuvataajuudet edellyttävät {premiumProductName}-tilausta" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Ranska" @@ -16834,10 +16689,10 @@ msgstr "Täysi" msgid "Full dynamic range" msgstr "Täysi dynaaminen alue" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Koko virallinen nimi" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Koko virallinen nimi (valinnainen lasten seksuaalista hyväksikäyttöä koskevissa ilmoituksissa)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "saksa" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Saksa" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Takaisin" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Palaa ja anna kelvollinen sähköpostiosoite." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Mukava nähdä, {username}! Tervetuloa mukaan." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Kreikka" @@ -17572,11 +17427,6 @@ msgstr "kreikka" msgid "Grid view" msgstr "Ruudukkonäkymä" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Lasten houkuttelu tai lasten seksuaalista hyväksikäyttöä esittävä sisältö." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Käyttäjätunnus" msgid "Hang out with voice, video and screen share" msgstr "Juttele äänen, videon ja ruudunjakojen avulla" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Häirintä" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Häirintä, johon liittyy aikuisille tarkoitettua sisältöä" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Häirintä tai kiusaaminen" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Häirintä tai vainoaminen" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Häirintä tai kohdennettu kiusaaminen" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Häirintä tai uhkailu" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "FIDO-avain" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Laitteistokiihdytetty useimmissa Windows- ja macOS-järjestelmissä. Luotettava vanhemmilla laitteilla." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Haitallinen väärä tieto" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ostanut joskus" msgid "Has ever purchased override" msgstr "Ohitus: ostanut joskus" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Vihapuhe" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Piilotetaanko oma näytönjako?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Piilottaa lataus-, avaa selaimessa- ja kopioi-painikkeet tämän kanavan kuviin ja videoihin." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Piilottaa hänen viestinsä ja estää häntä lähettämästä sinulle viestejä" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "unkari" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Unkari" @@ -18399,6 +18212,11 @@ msgstr "Olen työkaluvihje" msgid "I changed my mind" msgstr "Muutin mieleni" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Vahvistan vilpittömässä mielessä, että tämän ilmoituksen tiedot ja väitteet ovat paikkansapitäviä ja täydellisiä." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Toimettomuusasetukset" msgid "Idle timeout" msgstr "Toimettomuuden aikakatkaisu" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Jos kyseessä on alaikäinen, käytä sen sijaan kohtaa \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Jos tilin osoite täsmää, olemme lähettäneet siihen ohjeet salasanan msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Jos macOS pyytää lopettamaan ja avaamaan {productName} uudelleen, valitse Myöhemmin." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Jos joku on välittömässä vaarassa, ota yhteyttä paikallisiin hätäpalveluihin, jos voit tehdä sen turvallisesti." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Jos joku on välittömässä vaarassa, ota ensin yhteyttä paikallisiin hätäpalveluihin." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Jos joku pyysi sinua liittämään jotain tänne, se on huijaus, jonka avulla he voivat saada pääsyn {productName}-tiliisi." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Jos tämä sisältää lapsiin kohdistuvaa seksuaalista hyväksikäyttömateriaalia tai alaikäisen hyväksikäyttöä, lähetä ilmoitus nyt äläkä jaa materiaalia uudelleen." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Jos kyseessä on uskottava ja välitön uhka, ota yhteyttä myös paikallisiin hätäpalveluihin." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Jos kyseessä on välitön terroriuhka, ota yhteyttä myös paikallisiin hätäpalveluihin." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Jos tämä ilmoitus koskee tiettyä viestiä tässä yhteisössä, ilmoita siitä viestistä. Viesti-ilmoitukset antavat turvallisuustiimillemme selkeimmän kontekstin, ja lisätietojen lisääminen kommentteihin voi auttaa meitä käsittelemään sen nopeammin. Jatka yhteisöstä kokonaisuutena ilmoittamista vain, jos viestistä ilmoittaminen ei kattaisi laajempaa ongelmaa." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Jos ilmoitus koskee tiettyä viestiä, ilmoita siitä viestistä. Viesti-ilmoitukset antavat turvallisuustiimillemme selkeimmän kontekstin, ja lisätietojen lisääminen kommentteihin voi auttaa meitä käsittelemään sen nopeammin. Jatka käyttäjästä ilmoittamista kokonaisuutena vain, jos viesti ei kuvaa laajempaa ongelmaa." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Jos tämä ilmoitus koskee tiettyjä viestejä, ilmoita mieluummin niistä tärkeimmästä. Viesti-ilmoitukset antavat turvallisuustiimillemme selkeimmän kontekstin, ja lisätietojen lisääminen kommentteihin voi auttaa meitä käsittelemään sen nopeammin. Jatka käyttäjästä ilmoittamista kokonaisuutena vain, jos viestistä ilmoittaminen ei kattaisi laajempaa ongelmaa." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Jos uskot sen olevan laitonta, kerro, mikä laki on kyseessä ja miksi." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ohita tämän kanavan hitaan tilan odotusaika." msgid "Ignore virtual" msgstr "Ohita virtuaaliset" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Laiton toiminta" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Laiton toiminta tai jokin muu" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Laiton myynti, rikollisen toiminnan edistäminen tai selkeä sääntörikkomus, joka ei sovi yllä oleviin luokkiin." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Laiton myynti, rikollisen toiminnan edistäminen tai muu lainvastainen toiminta." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Kuvat" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Leikepöydältä liitetyt kuvat lähetetään liitteinä, eikä sinulla ole oikeutta liittää tiedostoja tälle kanavalle." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Toisena esiintyminen" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Toisena esiintyminen tai harhaanjohtava media" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Passiivinen" msgid "Inactive timeout" msgstr "Passiivisuuden aikakatkaisu" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Sopimaton profiili" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Sisällytä kaksivaiheiset varmuuskoodini PDF-tiedostoon ja tulosteeseen" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Anna yhteisön tunnus." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Kutsun taustakuva" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kutsukoodi (valinnainen)" @@ -19471,7 +19220,7 @@ msgstr "Kutsujen piilottaminen" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Kutsu jäseniä" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-osoite valtuutettu" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanti" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursivointi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Näppäimet" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Myöhemmin" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20291,11 +20040,6 @@ msgstr "Lue lisää" msgid "Learn more about Visionary" msgstr "Lue lisää Visionääristä" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Poistu" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Poistu yksityisestä säikeestä" msgid "Leave silently" msgstr "Poistu hiljaa" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Poistu yhteisöstä" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Listaa tämän roolin jäsenet omassa osiossaan jäsenluettelossa." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Liettua" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Ladataan..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Ladataan…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Matala" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Huoltokatko alkaa {localizedTime}. Arvioitu kesto: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Tehdäänkö käyttäjästä {userName} ryhmän omistaja? Menetät omistajan oikeudet." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Aseta ryhmän omistajaksi" @@ -21091,38 +20830,21 @@ msgstr "Aseta ryhmän omistajaksi" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Varmista, että tämä koodi vastaa sitä {PRODUCT_NAME} -sovelluksessa." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Tarkista, että tämä näyttää oikealta ennen lähettämistä." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Tee instanssista omasi" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Haitalliset linkit" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Haittaohjelmien levitys" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Haittaohjelmat tai vaaralliset linkit" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Haittaohjelmat, tunnusten varastaminen tai haitalliset tiedostot." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Piilota yksityiset tiedot ennen näytön tai striimin jakamista." msgid "Mask Visionary as subscription" msgstr "Näytä Visionary tavallisena tilauksena" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massaroskaposti, petokset, valearvonnat tai tilin väärinkäyttö." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Aikuissisällön mediaportti" msgid "Mature content not allowed" msgstr "Aikuisille tarkoitettu sisältö ei ole sallittua" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Aikuisille tarkoitettu sisältö tai häirintä" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Aikuisille tarkoitettu sisältö tai puutteellinen ikärajoitus" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Aikuisille tarkoitetun sisällön ohitus" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Aikuissisältöä koskevan käytännön rikkominen" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Aikuisille tarkoitettua sisältöä ilman asianmukaista ikärajoitusta." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Viesti" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "viestilinkki" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Viestilinkki" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Viestien esikatselut yksityisviestiluettelossa" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Viesti julkaistu" @@ -22211,6 +21908,11 @@ msgstr "Viestin aika" msgid "Message unpinned" msgstr "Viestin kiinnitys poistettu" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Viesti, josta ilmoitat" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Alaikäiset vaarassa, aikuisille tarkoitettu sisältö väärässä paikassa tai ei-toivottu käytös." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Lisää" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Lisää toimintoja" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Sisäkkäinen" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Alankomaat" @@ -24099,7 +23796,7 @@ msgstr "Ei tuloksia" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Ei tuloksia" @@ -24858,6 +24555,16 @@ msgstr "Vain kutsumasi henkilöt ja moderaattorit näkevät tämän säikeen." msgid "Only places I can't access anymore" msgstr "Vain paikat, joihin minulla ei ole enää pääsyä" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Ilmoita vain se, minkä uskot vilpittömästi rikkovan sääntöjä, äläkä lähetä samaa ilmoitusta kahdesti." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Ilmoita vain se, minkä uskot vilpittömästi rikkovan sääntöjä. Ilmoitusten väärinkäyttö on vastoin <0>yhteisön sääntöjä." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Peittävyys" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Avaa kohteessa {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Avaa valintaluettelo" @@ -25379,11 +25084,6 @@ msgstr "Avaa Järjestelmäasetukset → Tietosuoja ja suojaus → Näytön talle msgid "Open template JSON" msgstr "Avaa mallipohjan JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Avaa tämän yhteisön porttikieltoikkuna." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Avaa asetukset" msgid "Opened the thread again" msgstr "Avasi säikeen uudelleen" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Avautuu uuteen välilehteen" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Porttikielto annettiin alun perin {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Muu" @@ -25654,11 +25357,6 @@ msgstr "Muu reaktio…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Turvatiimimme tarkistaa ilmoituksen. Lähetämme sinulle yksityisviestin ja sähköpostin, kun olemme tehneet päätöksen." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Omistajuutta ei voitu siirtää käyttäjälle <0>{username} tällä hetkellä." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Omistajuus siirretty" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Liitä JSON-vastaus tähän" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Liitä viestin linkki." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Tietojenkalastelu, petokset, haitalliset linkit tai väärät väittämät, jotka todennäköisesti aiheuttavat todellista haittaa." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Valitse verkkohakujen tarjoaja" msgid "Pick an emoji" msgstr "Valitse emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Valitse vaihtoehto jatkaaksesi." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Valitse 4-numeroinen luku käyttäjänimesi jälkeen" msgid "Pick the appearance this administrator account should start with." msgstr "Valitse ulkoasu, jolla tämä pääkäyttäjätili aloittaa." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Valitse tarkistettava sääntö." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Odota hetki ja yritä nimeämistä uudelleen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Puola" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Portti" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugali" @@ -26872,11 +26555,6 @@ msgstr "lisää reaktio painamalla" msgid "press to remove reaction" msgstr "poista reaktio painamalla" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Esiintyminen toisena henkilönä, mukaan lukien harhaanjohtava tekoälyllä luotu sisältö." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Estä <0>{targetUserTag} lähettämästä viestejä, reagoimasta ja yhdistämästä äänikanaviin määritetyksi ajaksi." @@ -27078,11 +26756,6 @@ msgstr "Prioriteettipuhuja" msgid "Privacy" msgstr "Tietosuoja" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Yksityisyys tai toisena esiintyminen" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Tietosuoja-asetusten ilmoituspalkki" msgid "Privacy URL" msgstr "Tietosuojakäytännön URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Yksityisyyden loukkaus" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Yksityisyyden loukkaus tai doksaus" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Yksityisyyden loukkaus tai vainoaminen" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiilityyppi" msgid "Profile updated" msgstr "Profiili päivitetty" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Profiilin, käyttäjänimen tai avatarin rikkomus" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Edistää vihaa suojeltuja ryhmiä kohtaan." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Edistää, rekrytoi tai koordinoi väkivaltaista ekstremistitoimintaa." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Itsensä vahingoittamiseen tai syömishäiriöihin yllyttävä tai ohjeistava sisältö." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profiili, josta ilmoitat" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronominit: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Suojaa Visionary-tilisi ottamalla kaksivaiheinen todennus käyttöön. Kiitos, että tuet {productName}ia!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Anna vähintään käyttäjätunnus tai käyttäjätunniste." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Anna ilmoittamasi henkilön käyttäjätunnus tai käyttäjänimi." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Anna koko virallinen nimesi vakuutusta varten." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Valintanappien avulla voit valita yhden vaihtoehdon ryhmästä." msgid "Radio group" msgstr "Valintaryhmä" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Hyökkäyksen koordinointi" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Haluatko ostaa lahjan?" msgid "Ready to upgrade?" msgstr "Valmiina päivitykseen?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Syy" @@ -28291,8 +27924,8 @@ msgstr "Muista ikkunan koko ja sijainti" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Poista {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Poistetaanko käyttäjä {userName} ryhmästä?" @@ -28419,8 +28052,8 @@ msgstr "Poista suosikeista" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Poista ryhmästä" @@ -28458,11 +28091,6 @@ msgstr "Poista URL-osoitteena tallennetuista GIF-suosikeista" msgid "Remove icon" msgstr "Poista kuvake" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Poista se kanavalta kaikilta." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Poistettu suosikeista" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Poistettu ryhmästä" @@ -28919,28 +28547,18 @@ msgstr "Ilmoita yhteisöstä" msgid "Report a message" msgstr "Ilmoita viestistä" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Ilmoita sääntörikkomuksesta tai etsi työkaluja yhteystietojen ja asetusten hallintaan." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Ilmoita käyttäjäprofiilista" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Ilmoita yhteisöstä" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Ilmoituksen tiedot" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Ilmoita laittomasta sisällöstä" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Ilmoita ongelmasta" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Ilmoita viestistä" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Ilmoita profiilista" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Ilmoitus lähetetty" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Ilmoituksen tyyppi" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Ilmoita käyttäjästä" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Ilmoitetun käyttäjän tunniste (valinnainen)" @@ -29100,6 +28716,10 @@ msgstr "Edellyttää kaiken saman kuin keskitaso ja lisäksi vähintään 10 min msgid "Resend" msgstr "Lähetä uudelleen" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Lähetä uudelleen ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Lähetä uudelleen ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Lähetä uudelleen ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Lähetä uudelleen ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Lähetä uudelleen ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Lähetä uudelleen ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Lähetä uudelleen ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Lähetä koodi uudelleen" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roolit päivitetty" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29947,7 +29567,7 @@ msgstr "Kylläisyys" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Tervehdi käyttäjää <0>{displayName}. Yksityisviestisi alkaa täs msgid "Scale" msgstr "Skaalaus" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Huijaukset, haittaohjelmat tai virheellinen tieto" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Skannaa QR-koodi todennussovelluksellasi." @@ -30855,11 +30470,6 @@ msgstr "Valitse" msgid "Select {accessibleName}" msgstr "Valitse {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Valitse kategoria" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Valitse yhteisö, jossa sinulla on {permissionName}-käyttöoikeus, tai ryhmäkeskustelu, johon kuulut." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Valitse maa" @@ -30911,11 +30521,6 @@ msgstr "Valitse uudelleenohjaus-URI" msgid "Select a scenario to apply..." msgstr "Valitse käytettävä skenaario..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Valitse rikkeen kategoria." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Valitse tili, jolla haluat kirjautua sisään uudella laitteellasi." msgid "Select voice processing mode" msgstr "Valitse äänenkäsittelytila" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Valitse, mitä haluat ilmoittaa." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Valitse asuinmaasi." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Valitse…" @@ -31037,13 +30642,6 @@ msgstr "Valinta: {0} (enintään {1})" msgid "Selections" msgstr "Valinnat" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Itsensä vahingoittaminen tai itsemurha" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Lähetä toimintaviesti (kursivoitu)." msgid "Send animation" msgstr "Lähetä animaatio" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Lähetä toinen ilmoitus" @@ -31138,7 +30736,7 @@ msgstr "Lähetä-painike" msgid "Send code" msgstr "Lähetä koodi" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Lähetä DSA-ilmoitus" @@ -31158,9 +30756,9 @@ msgstr "Lähetä tiedostoja jopa {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Lähetä kaveripyyntö" @@ -31220,8 +30818,8 @@ msgstr "Lähetä viestejä ketjuissa" msgid "Send messages, images, GIFs and emoji" msgstr "Lähetä viestejä, kuvia, GIF-tiedostoja ja hymiöitä" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Lähetä ilmoitus" @@ -31255,7 +30853,7 @@ msgstr "Lähetetäänkö tämä kiinnitys takaisin menneisyyteen?" msgid "Send TTS messages" msgstr "Lähetä tekstistä puheeksi -viestejä" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Lähetä vahvistuskoodi" @@ -31273,11 +30871,6 @@ msgstr "Lähetä ääniviesti" msgid "Send:" msgstr "Lähetys:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Haittaohjelmien tai vaarallisten linkkien lähettäminen" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Jaa teema" msgid "Share voice activity with all friends?" msgstr "Jaetaanko äänitoiminta kaikkien kavereiden kanssa?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Kerro, mitä tiimimme tarvitsee arvioidakseen tämän." @@ -31709,11 +31302,6 @@ msgstr "Kerro, mitä tiimimme tarvitsee arvioidakseen tämän." msgid "Share with a friend" msgstr "Jaa kaverille" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Jaa yhteisön moderaattoreille." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Jaettu ikkuna" msgid "Shared window audio" msgstr "Jaetun ikkunan ääni" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Jakaa henkilökohtaisia tietoja, vainoaa käyttäjiä tai koordinoi yksityisyyden loukkauksia." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Henkilötietojen jakaminen" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Liukusäätimet" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Hitaan tilan simulointi" msgid "Slowmode time remaining" msgstr "Hitaan tilan jäljellä oleva aika" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Solvaukset, epäinhimillistävä kieli tai suojeltuihin ryhmiin kohdistuvat hyökkäykset." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Jokin meni pieleen tarraa valmisteltaessa. Kokeile toista tiedostoa tai yritä hetken kuluttua uudelleen." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Jokin meni vikaan julkaisussa. Yritä uudelleen hetken kuluttua." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Tilava asettelu, jossa viestit erottuvat selkeästi toisistaan." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Espanja" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Roskapostitili" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Roskapostiluokitus" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Roskaposti tai huijaus" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Roskapostia tai huijauksia sisältävä yhteisö" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Roskaposti-, huijaus- tai tietojenkalastelutili" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Roskaposti, huijaukset tai tietojenkalastelu" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Aloita minimoituna" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Aloita alusta" @@ -33752,22 +33302,26 @@ msgstr "Pysy kirjautuneena sisään" msgid "Step {current} of {total}" msgstr "Vaihe {current} / {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Vaihe 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Vaihe 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Vaihe 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Vaihe 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Vaihe 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Lopetetaanko ilmoituskanavana toimiminen?" msgid "Stop hiding muted channels by default?" msgstr "Lopetetaanko mykistettyjen kanavien piilottaminen oletuksena?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Estä viestit ja kaveripyynnöt." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Lopeta mikrofonitesti" @@ -33959,11 +33508,6 @@ msgstr "Lopeta Node.prototype insertBefore- ja removeChild-metodien paikkaaminen msgid "Stop ringing" msgstr "Lopeta soitto" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Et enää näe sen sisältöä etkä jäseniä." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Vaihda yleiset hymiöt, kuten :) ja <3, emojeiksi, kun lähetät viestejä" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Ruotsi" @@ -34804,11 +34348,6 @@ msgstr "Lisää muistiinpano napauttamalla" msgid "tar.gz archive" msgstr "tar.gz-arkisto" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Kohdistuu ihmisiin suojattujen ominaisuuksien perusteella." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Käyttöehdot" msgid "Terms URL" msgstr "Käyttöehtojen URL-osoite" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismi tai väkivaltainen ekstremismi" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Kiitos, että autat pitämään palvelun {productName} turvallisena. Tarkistamme ilmoituksesi mahdollisimman pian." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Kiitos ilmoituksesta" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Kiitos, että kerroit meille. Tämä ei itsessään riko sääntöjämme, joten emme lähettäneet ilmoitusta." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Kiitos, että kerroit meille. Tämä ei itsessään riko sääntöjämme, joten emme lähettäneet ilmoitusta. Jos se kohdistuu johonkuhun tai sisältää herjasanoja, ilmoita siitä uudelleen ja valitse ”Haitallinen tai loukkaava sisältö”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Se ei onnistunut. Yritä uudelleen tai peruuta." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Tuo ei näytä kelvolliselta väriltä. Kokeile heksakoodia, rgb()- tai hsl()-arvoa tai CSS-värinimeä." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Tuo ei näytä kelvolliselta URL-osoitteelta." @@ -35104,6 +34653,11 @@ msgstr "{PRODUCT_NAME}-sovellus toisella laitteellasi näyttää sen kohdassa Ki msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Sovellusta {PRODUCT_NAME} ei ole kirjattu sisään. Voit sulkea tämän välilehden." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName}-turvatiimi tarkistaa ilmoituksesi. Emme paljasta, että se tuli sinulta." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Annettua redirect_uri-osoitetta ei ole rekisteröity tälle sovelluksell msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri-osoitteen on käytettävä HTTP- tai HTTPS-protokollaa." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Ilmoituslomake muuttui. Aloita alusta." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Tämän instanssin käyttäjätunnukset on jo määritetty. Niitä ei voi enää muuttaa." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Vahvistuskoodi on virheellinen tai vanhentunut." @@ -36115,13 +35674,8 @@ msgstr "Tämä jäsen ei ole enää äänikanavalla." msgid "This message can only be forwarded to age-restricted channels" msgstr "Tämä viesti voidaan välittää vain ikärajoitettuihin kanaviin" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Tämä viesti on jo poistettu." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Tämä viesti on jo julkaistu" @@ -36279,11 +35833,6 @@ msgstr "Tämä säie on suljettu. Viestin lähettäminen avaa sen uudelleen." msgid "This thread is locked. Only moderators can send messages." msgstr "Tämä säie on lukittu. Vain moderaattorit voivat lähettää viestejä." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "tämä käyttäjä" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Tämä käyttäjä on rajoittanut profiiliaan. Jotkin tiedot on piilotettu henkilöiltä, jotka eivät ole hänen kavereitaan." @@ -36292,11 +35841,6 @@ msgstr "Tämä käyttäjä on rajoittanut profiiliaan. Jotkin tiedot on piilotet msgid "This user has no roles in this community." msgstr "Tällä käyttäjällä ei ole rooleja tässä yhteisössä." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Tämä käyttäjä on jo porttikiellossa tässä yhteisössä." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Tämä käyttäjä ei ole enää saatavilla." @@ -36465,16 +36009,6 @@ msgstr "Säie päivitetty" msgid "Threads" msgstr "Säikeet" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Uhkailu, seuraaminen paikasta toiseen tai ei-toivottu yhteydenotto." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Uhkaukset, häirintä tai vahingoittaminen" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Käyttäjä {targetUserTag} sai jäähyn" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Anna jäähy" @@ -36787,6 +36321,11 @@ msgstr "Sävy" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Sovita HDR-kuvat vakiokirkkausalueelle, mikä laskee huippukirkkautta." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Koodeja on lähetetty liian monta. Odota {duration} ja yritä uudelleen." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Siirrä yhteisön omistajuus" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Siirretäänkö ryhmän omistajuus käyttäjälle {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Poista esto ensin, jotta voit lähettää kaveripyynnön." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Poista esto" @@ -37607,16 +37146,6 @@ msgstr "Palauta äänet kaikille laitteille" msgid "Undeafen yourself" msgstr "Palauta äänet itsellesi" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Alaikäiseen tai lapsen turvallisuuteen liittyvä huoli" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Alaikäinen käyttäjä" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Kunnes laitan sen takaisin päälle" msgid "Unverified email" msgstr "Vahvistamaton sähköposti" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Ei-toivottu käytös tai aikuisille tarkoitettu sisältö väärässä paikassa." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Ei-toivottu aikuisille tarkoitettu käytös, kommentit tai pyynnöt." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Enintään {DISCOVERY_MAX_TAGS} tunnistetta auttaa ihmisiä löytämään yhteisösi. Ne näkyvät Löydä-haussa." @@ -38840,11 +38359,6 @@ msgstr "Käytä vaaleaa teemaa" msgid "Use native title bar" msgstr "Käytä järjestelmän otsikkoriviä" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Käytä vain, jos se rikkoo selkeästi {productName}-palvelun sääntöjä eikä sovi yllä oleviin kohtiin." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Käytössä vain tässä yhteisössä." msgid "User" msgstr "Käyttäjä" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Käyttäjä vaikuttaa alaikäiseltä tai on osallisena groomingissa tai lasten hyväksikäytössä." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Käyttäjän virheenkorjaus" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Käyttäjätunnus (valinnainen)" @@ -39061,12 +38570,12 @@ msgstr "Käyttäjää ei löydy" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Käyttäjäprofiili" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Käyttäjäprofiili: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Käyttäjäasetukset" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Käyttäjätunniste (valinnainen)" @@ -39339,7 +38848,7 @@ msgstr "Vahvistettu yhteisö" msgid "Verify" msgstr "Vahvista" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Vahvista koodi" @@ -39368,7 +38877,7 @@ msgstr "Vahvista henkilöllisyytesi" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Vahvista sähköpostiosoitteesi" @@ -39718,7 +39227,7 @@ msgstr "Näytä koodit" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Näytä yhteisön profiili" @@ -39751,7 +39260,7 @@ msgstr "Näytä lahjat" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Näytä globaali profiili" @@ -39847,26 +39356,6 @@ msgstr "Katsoja liittyy lähetykseen" msgid "Viewer leaves stream" msgstr "Katsoja poistuu lähetyksestä" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Rikkeen luokka" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Rikkomus on käyttäjän profiilissa, ei tietyssä viestissä." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Väkivalta tai väkivaltaiset uhkaukset" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Väkivaltainen tai graafinen sisältö" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Pienensimme ja pakkasimme tämän emojin 128x128 pikseliin, mutta sen ko msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Pienensimme ja pakkasimme tämän tarran 320x320 pikseliin, mutta sen koko on edelleen {fileSize}. Raja on {maxSize}. Kokeile yksinkertaisempaa kuvaa, vähemmän värejä tai pienempää lähdetiedostoa." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Lähetimme koodin osoitteeseen {email}." @@ -40472,7 +39961,7 @@ msgstr "Käsittelemme tämän mahdollisimman pian. Saat sähköpostin, kun arkis msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Palautamme aiemman sähköpostiosoitteesi, kirjaamme ulos vanhat istunnot, poistamme käytöstä monivaiheisen tunnistautumisen ja suojaamme tilisi uudella salasanalla." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Lähetämme lyhyen koodin vahvistaaksemme, että voit vastaanottaa päivityksiä tästä ilmoituksesta." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Länsi-Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Minkälaista sääntöä rikottiin?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Mitä kuuluu?" msgid "What's new" msgstr "Uutta" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Mikä on ilmoituksesi syy?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Jos mukautettua kynnyspäivämäärää ei ole asetettu, jäsenet, joilla ei ole <0>{readMessageHistoryPermissionLabel}-käyttöoikeutta, eivät voi nähdä vanhoja viestejä. He näkevät viestit vain reaaliaikaisesti niiden saapuessa, ja ne katoavat, kun he käynnistävät asiakasohjelmansa uudelleen." @@ -40832,11 +40321,6 @@ msgstr "Mitkä yhteisöt" msgid "Which conversations" msgstr "Mitkä keskustelut" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Mitä sääntöä rikottiin?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Kun paina ja puhu -toiminto on käytössä, pikanäppäin ohjaa mikrofonia, joten mykistyspainike on poissa käytöstä." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Et voi liittää tiedostoja tälle kanavalle." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Et voi ystävystyä itsesi kanssa" @@ -41341,7 +40825,7 @@ msgstr "Et voi lähettää viestiä tälle käyttäjälle" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Sinun on hyväksyttävä käyttöehdot tilin luomiseksi" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Sinun on vahvistettava sähköpostiosoitteesi ennen ilmoituksen lähettämistä." @@ -41891,6 +41375,11 @@ msgstr "Käytössäsi on vanha hinta. Tämän tilauksen nykyinen hinta on {curre msgid "You're sending messages too quickly" msgstr "Lähetät viestejä liian nopeasti" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Lähetät ilmoituksia liian nopeasti. Yritä uudelleen myöhemmin." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Katselet vanhempia viestejä" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Olet lisännyt enemmän henkilöitä kuin ryhmäkeskustelu sallii. Poista muutama ja yritä uudelleen." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Olet jo ilmoittanut tästä viestistä." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Olet jo ilmoittanut tästä profiilista tänään." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Tilejäsi ja asetuksiasi ei ole muutettu tai poistettu." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Toimintoasi ei voitu suorittaa, koska turvajärjestelmämme merkitsivät sen. Jos uskot tämän olevan virhe, ota yhteyttä tukeen." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Vastauksesi" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Hakemuksesi odottaa tarkistusta. Voit edelleen päivittää listauksesi tietoja tai peruuttaa hakemuksen." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Selaimesi vaatii käyttäjältä toimenpiteen, ennen kuin ääni voidaan toistaa. Ota äänichat käyttöön napsauttamalla alla olevaa painiketta." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Muokkauksesi tavoittavat kaikki kanavaa seuraavat yhteisöt, ja niiden julkaiseminen voi kestää hetken. Jokainen julkaistu viesti sallii 3 nopeaa muokkausta, sen jälkeen 1 muokkauksen 20 minuutin välein." @@ -42311,6 +41815,11 @@ msgstr "Uusi lempinimesi, tai jätä tyhjäksi palauttaaksesi sen." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Vanha palautussarja ei toimi enää. Säilytä tämä uusi turvallisessa paikassa." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Vaihtoehtosi" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "alueesi" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Uusimismaksusi epäonnistui, mutta <0/> pysyvät voimassa <1>{graceDate} asti. Päivitä maksutapasi ennen sitä, niin säilytät tilauksesi." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Ilmoituksesi ei mennyt perille. Yritä uudelleen." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Tilauksesi muuttuu vuosilaskutukseksi seuraavan uusimisen yhteydessä." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Teeman CSS-tiedosto on liian suuri jaettavaksi. Lyhennä sitä ja yritä uudelleen." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Käyttäjänimesi (valinnainen)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 11cc5b533..810f6af35 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -2081,7 +2081,7 @@ msgstr "Places restantes : {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {membre} other {membres}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Votre lien d’invitation expire dans # seconde.} other {Votre lien d’invitation expire dans # secondes.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Sélection : {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Données du compte" msgid "Account details unavailable" msgstr "Détails du compte indisponibles" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Ce compte existe pour envoyer du spam, escroquer ou abuser de la plateforme." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Ajouté : {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Ajouté : {createdDate} • dernière utilisation : {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Commentaires supplémentaires (facultatifs)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Déjà utilisé" msgid "Already set to cancel" msgstr "Résiliation déjà programmée" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Signaler également ce message à l'équipe de sécurité de {productName}" @@ -4576,11 +4566,6 @@ msgstr "Annuel" msgid "Another checkbox" msgstr "Une autre case à cocher" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Une autre violation claire du règlement" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Une autre case à cocher ronde" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Envoi de fichier audio" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Autriche" @@ -5620,6 +5605,7 @@ msgstr "Absent(e) pour le moment" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Absent(e) pour le moment" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Retour" @@ -5788,9 +5775,7 @@ msgstr "Codes de secours régénérés" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Bannir" @@ -5819,7 +5804,7 @@ msgstr "Durée du bannissement" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Bannir des membres de la communauté, avec la possibilité de supprimer msgid "Ban reason" msgstr "Raison du bannissement" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Bannir cet utilisateur" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bande passante" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Banni" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} a été banni de la communauté" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Avant le" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgique" @@ -6031,7 +6006,7 @@ msgstr "Débit binaire" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Bloquer" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Bloquer" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Bloquer {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Bloquer pour toutes les communautés" msgid "Block spoiler" msgstr "Spoiler en bloc" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bloquer cet utilisateur" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Bloquer l'utilisateur" msgid "Blocked" msgstr "Bloqué" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Bloqué" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Traducteurs intégrés" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarie" @@ -6519,16 +6500,6 @@ msgstr "Bulgare" msgid "Bulk delete" msgstr "Suppression en masse" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Intimidation, contacts répétés non désirés, traque ou abus ciblés." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Harcèlement, menaces, haine, violence, raids ou contenu incitant à l'automutilation." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Californie" msgid "Call" msgstr "Appel" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Paramètres d'appel et de discussion de groupe" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Changer la bannière" msgid "Change chat embed background" msgstr "Modifier l’arrière-plan de l’aperçu intégré dans le chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Changer d'adresse e-mail" @@ -7150,8 +7116,8 @@ msgstr "Modifier le surnom de l’ami" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Modifier le surnom du groupe" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Changer la langue" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Modifier mon surnom dans le groupe" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Modifier son propre surnom" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Changer le propriétaire" @@ -7283,16 +7249,6 @@ msgstr "Modifier la région vocale utilisée par un salon vocal." msgid "Change which voice region this channel uses." msgstr "Modifier la région vocale de ce salon." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Modifier qui peut vous appeler ou vous ajouter." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Modifier qui peut vous contacter." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Vérifiez votre boîte de réception à l'adresse {emailAddress} pour le msgid "Check your inbox for a verification email." msgstr "Vérifiez votre boîte de réception pour un e-mail de vérification." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Vérifier votre signalement" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Cases à cocher" @@ -7901,21 +7862,6 @@ msgstr "Le paiement est bloqué pour ce compte. Contactez {supportEmail} si vous msgid "Checkout unavailable" msgstr "Paiement indisponible" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Problèmes de sécurité des enfants" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Sécurité des enfants ou exploitation de mineurs" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Sécurité des enfants ou contenu pour adultes" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Choix" msgid "Choices: {choiceList}" msgstr "Choix : {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Choisir" @@ -8122,6 +8068,11 @@ msgstr "Choisissez la catégorie qui décrit le mieux votre communauté. Vous po msgid "Choose the premium model" msgstr "Choisir le modèle premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Choisissez à nouveau la raison" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Récupérer le cadeau" msgid "Claim your account" msgstr "Finalisez votre inscription" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Finalisez votre inscription et vérifiez votre adresse e-mail pour envoyer des signalements." @@ -8352,12 +8303,12 @@ msgstr "Finalisez votre inscription pour récupérer ce cadeau." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Finalisez votre inscription pour envoyer des demandes d’ami." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Réclamez votre compte pour envoyer des signalements." @@ -8378,11 +8329,6 @@ msgstr "Finalisez votre inscription pour démarrer ou rejoindre des appels indiv msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Récupérez votre cadeau pour activer votre abonnement {premiumProductName} !" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Se faire passer pour une autre personne, une marque ou une organisation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Vider le champ de recherche" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Fermer la fenêtre" msgid "Close popout" msgstr "Fermer la fenêtre flottante" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Fermer cette conversation privée" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Fermer vers la zone de notification" msgid "Close window" msgstr "Fermer la fenêtre" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Fermer votre discussion actuelle avec {dmDisplayName}. Cela ne bloque pas l'utilisateur et vous pourrez rouvrir la discussion plus tard." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Fermer votre conversation privée avec {displayName} ? Vous pourrez la rouvrir à tout moment." @@ -8837,7 +8773,7 @@ msgstr "Thème charbon" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Code" @@ -8868,7 +8804,7 @@ msgstr "Code de l'application {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Code renvoyé" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Communautés que vous pouvez rejoindre" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Communauté" @@ -9131,7 +9065,7 @@ msgstr "Désactiver le son du membre" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Débogage de la communauté" @@ -9150,16 +9084,6 @@ msgstr "Communauté supprimée" msgid "Community DM" msgstr "MP de la communauté" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "La communauté existe pour spammer, escroquer ou abuser de la plateforme." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Cette communauté facilite le harcèlement collectif ou les abus ciblés." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Icône de la communauté" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID de la communauté" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "L'ID de la communauté est requis." @@ -9526,6 +9450,11 @@ msgstr "Confirmer le nouveau mot de passe" msgid "Confirm password" msgstr "Confirmer le mot de passe" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirmez la déclaration pour envoyer le signalement." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continuer dans votre navigateur" msgid "Continue to checkout" msgstr "Continuer vers le paiement" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Poursuivre le signalement de la communauté" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Poursuivre le signalement de l’utilisateur" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "La conversion de cette chaîne en chaîne de texte supprimera toutes les msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Convertit le contenu entrant en parole, qu'il provienne ou non de /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordonne des raids, des attaques collectives ou du harcèlement contre des personnes ou des communautés." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiée dans le presse-papiers" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiée dans le presse-papiers" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copier l'ID du message" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copier le lien du message" @@ -10643,6 +10553,11 @@ msgstr "Impossible de charger les messages. Réessayez plus tard." msgid "Couldn't load settings" msgstr "Impossible de charger les paramètres" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Impossible de charger le formulaire de signalement." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Impossible de charger cette application" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Impossible de traiter l’image" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Impossible de publier ce message" @@ -10825,11 +10740,6 @@ msgstr "Impossible d’envoyer l’invitation" msgid "Couldn't send invite. Try again." msgstr "Impossible d'envoyer l'invitation. Veuillez réessayer." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Impossible d'envoyer. Réessayez." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Compte à rebours" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Pays de résidence" @@ -11301,13 +11211,8 @@ msgstr "Créé :" msgid "Credentials" msgstr "Identifiants" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Menaces crédibles, violence explicite ou apologie de la violence." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croatie" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Coupe le son sous un seuil de volume avec une utilisation minimale du processeur." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Chypre" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tchèque" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "République tchèque" @@ -11965,7 +11870,7 @@ msgstr "Déboguer le salon" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Déboguer la communauté" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Supprimer le thème ?" msgid "Delete this invite? Can't be undone." msgstr "Supprimer cette invitation ? Cette action est irréversible." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Supprimer ce message" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Supprimer ce message ? Cette action est irréversible." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Supprimer ce message ? Impossible d'annuler. Ce message sera également supprimé de chaque communauté qui suit ce canal." @@ -12461,11 +12359,6 @@ msgstr "Supprimer vos messages dans cette communauté ?" msgid "Delete your messages in this conversation?" msgstr "Supprimer vos messages dans cette conversation ?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Supprimé" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Refusé {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danemark" @@ -12554,11 +12447,6 @@ msgstr "Décrivez le sticker" msgid "Describe this media for screen readers" msgstr "Décrire ce média pour les lecteurs d'écran" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Décrivez en quoi le contenu est illégal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Bannière détachée" msgid "Detail" msgstr "Détail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Détails" @@ -13315,11 +13203,6 @@ msgstr "Nom affiché (facultatif)" msgid "Display scaling" msgstr "Mise à l'échelle de l'affichage" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribue des logiciels malveillants, des outils de vol d’identifiants ou d’autres fichiers nuisibles." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "MP" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Paramètres des messages privés et des demandes d'amis" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentation" msgid "Doesn't allow being added to group DMs" msgstr "N’autorise pas l’ajout aux conversations de groupe" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Ne bloque pas la personne. Vous pourrez rouvrir la conversation plus tard." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Faire un don plutôt" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Télécharger les cartes sources pour que les traces de pile et les outi msgid "Download video" msgstr "Télécharger la vidéo" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, divulgation d'informations privées ou harcèlement." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Divulgation de renseignements personnels, harcèlement, usurpation d'identité ou profil inapproprié." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Modifier la couleur pour {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Modifier le profil dans la communauté" @@ -14043,7 +13908,7 @@ msgstr "Modifier les permissions spécifiques aux rôles et aux membres dans ce #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Modifier le profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Modifier l'heure locale du profil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Modifier le message publié ?" @@ -14191,13 +14056,13 @@ msgstr "Remboursement possible jusqu’au {windowEndsOn}. Cela résiliera égale #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Adresse e-mail" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Adresse e-mail requise." @@ -14721,16 +14586,6 @@ msgstr "Préférence d’encodeur pour les nouveaux partages d’écran." msgid "Encoder, SVC, and bitrate presets" msgstr "Encodeur, SVC et préréglages de débit" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Encourage l'automutilation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Encourage le suicide, l'automutilation ou les troubles alimentaires." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Le chiffrement de bout en bout n’est pas disponible, car un participan msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Le chiffrement de bout en bout n’est pas disponible, car un participant utilise un client incompatible dans ce salon vocal." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Met des mineurs en danger ou héberge du contenu lié à l’exploitation d’enfants." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Entrée" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Saisissez un code au format ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Entrez une URL ou un code de modèle {theOtherPlatform} valide." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Saisissez une adresse e-mail valide." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Saisissez un lien de message valide." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Saisissez le code à {digitCount} chiffres de votre application d'authentification." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Saisissez le code avant de continuer." @@ -15008,7 +14858,7 @@ msgstr "appuyez sur Entrée pour <0><1>enregistrer" msgid "Enter username" msgstr "Saisir le nom d'utilisateur" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Saisir le code de vérification" @@ -15017,6 +14867,11 @@ msgstr "Saisir le code de vérification" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Saisissez votre adresse e-mail et nous vous enverrons un lien pour réinitialiser votre mot de passe." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Saisissez vos nom et prénom pour envoyer le signalement." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Échap pour <0><1>annuler" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonie" @@ -15412,6 +15267,16 @@ msgstr "Expire le {earliest}" msgid "Expires:" msgstr "Expire :" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Expliquez le problème" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Expliquez le problème pour envoyer le signalement." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Les liens externes peuvent être dangereux. Soyez prudent." msgid "Extra large" msgstr "Très grande" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Communauté extrémiste" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Impossible de supprimer l’URL personnalisée. Veuillez réessayer." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Échec du renvoi du code. Veuillez réessayer." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Échec de la réinitialisation du statut premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Échec de l'envoi du code. Veuillez réessayer." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Échec de l'envoi du message. Maintenez appuyé pour les options." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Échec de l'envoi du signalement. Veuillez réessayer." @@ -15840,11 +15700,6 @@ msgstr "Échec de l’envoi des emojis à partir de {startLabel} : {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Échec de l’envoi des emojis. Veuillez réessayer." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Fausses déclarations susceptibles de causer des préjudices dans le monde réel." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Trouver le sticker parfait" msgid "Fingerprint" msgstr "Empreinte digitale" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Finaliser l’inscription" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Finalisez d’abord votre inscription" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Finalisez votre inscription pour envoyer des demandes d’ami." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlande" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finnois" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nom et prénom" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Les fréquences d'images supérieures à 30 FPS nécessitent {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "France" @@ -16834,10 +16689,10 @@ msgstr "Plein" msgid "Full dynamic range" msgstr "Plage dynamique complète" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nom et prénom" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nom et prénom (facultatif pour les signalements d'abus sexuels sur enfants)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Allemand" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Allemagne" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Retour" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Retournez en arrière et saisissez une adresse e-mail valide." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Ravi de vous revoir, {username} ! Bienvenue." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grèce" @@ -17572,11 +17427,6 @@ msgstr "Grec" msgid "Grid view" msgstr "Vue grille" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Sollicitation de mineurs à des fins sexuelles ou contenu lié à l’exploitation d’enfants." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Pseudo" msgid "Hang out with voice, video and screen share" msgstr "Discutez en voix, vidéo et partage d'écran" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Harcèlement" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Harcèlement impliquant du contenu pour adultes" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Harcèlement ou intimidation" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Harcèlement" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Harcèlement ou abus ciblé" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Harcèlement ou menaces" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Clé matérielle" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Accélération matérielle sur la plupart des systèmes Windows et macOS. Fiable pour les appareils plus anciens." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Fausses informations nuisibles" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "A déjà effectué un achat" msgid "Has ever purchased override" msgstr "Forcer le statut « A déjà effectué un achat »" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Discours haineux" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Masquer votre partage d'écran ?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Masque les boutons de téléchargement, d'ouverture dans le navigateur et de copie sur les images et vidéos de ce canal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Masque ses messages et l'empêche de vous envoyer des messages" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Hongrois" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hongrie" @@ -18399,6 +18212,11 @@ msgstr "Je suis une infobulle" msgid "I changed my mind" msgstr "J'ai changé d'avis" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Je confirme de bonne foi que les informations et allégations contenues dans cet avis sont exactes et complètes." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Paramètres d'inactivité" msgid "Idle timeout" msgstr "Délai d'inactivité" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Si un mineur est impliqué, utilisez plutôt « {childSafetyReasonName} »." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Si un compte utilise cette adresse, nous avons envoyé des instructions msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Si macOS vous demande de quitter et rouvrir {productName}, choisissez Plus tard." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Si quelqu'un est en danger immédiat, contactez les services d'urgence locaux si vous pouvez le faire en toute sécurité." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Si quelqu'un est en danger immédiat, contactez d'abord les services d'urgence locaux." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Si quelqu’un vous demande de coller quelque chose ici, c’est une arnaque qui pourrait lui donner accès à votre compte {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "S’il s’agit de contenu pédocriminel ou d’exploitation d’un mineur, envoyez le signalement maintenant et ne partagez pas à nouveau le contenu." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "S'il s'agit d'une menace imminente et crédible, contactez également les services d'urgence locaux." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "S'il s'agit d'une menace terroriste imminente, contactez également les services d'urgence locaux." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Si ce signalement concerne un message spécifique de cette communauté, signalez plutôt ce message. Les signalements de messages donnent à notre équipe de sécurité le contexte le plus clair, et l'ajout de détails dans les commentaires peut nous aider à l'examiner plus rapidement. Ne signalez la communauté dans son ensemble que si le signalement d'un message ne permettait pas de saisir le problème plus large." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Si ce signalement concerne un message spécifique, signalez plutôt ce message. Les signalements de messages donnent à notre équipe de sécurité le contexte le plus clair, et l'ajout de détails dans les commentaires peut nous aider à l'examiner plus rapidement. Ne continuez à signaler l'utilisateur dans son ensemble que si ce message ne reflète pas le problème plus large." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Si ce signalement concerne des messages spécifiques, signalez plutôt le message le plus pertinent. Les signalements de messages donnent à notre équipe de sécurité le contexte le plus clair, et l'ajout de détails dans les commentaires peut nous aider à l'examiner plus rapidement. Ne continuez à signaler l'utilisateur dans son ensemble que si le signalement d'un message ne permettrait pas de saisir le problème plus large." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Si vous pensez que c'est illégal, précisez quelle loi et pourquoi." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorer le délai du mode lent de ce salon." msgid "Ignore virtual" msgstr "Ignorer le virtuel" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Activité illégale" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Activité illégale ou autre" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Ventes illégales, facilitation d'activités criminelles ou violation manifeste d'une règle ne correspondant à aucune des catégories ci-dessus." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Ventes illégales, facilitation d'activités criminelles ou activités illégales." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Les images collées depuis votre presse-papiers sont envoyées en tant que pièces jointes, et vous n'avez pas l'autorisation de joindre des fichiers dans ce salon." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Usurpation d'identité" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Usurpation d'identité ou contenu trompeur" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactif" msgid "Inactive timeout" msgstr "Délai d'inactivité" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Profil inapproprié" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Inclure mes codes de sauvegarde à deux facteurs dans le PDF et l'impression" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Incluez l'ID de la communauté." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Arrière-plan de l'invitation" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Code d'invitation (facultatif)" @@ -19471,7 +19220,7 @@ msgstr "Masquage des invitations" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Inviter des membres" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Adresse IP autorisée" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlande" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Italique" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italie" @@ -20120,7 +19869,7 @@ msgstr "Touches" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Plus tard" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lettonie" @@ -20291,11 +20040,6 @@ msgstr "En savoir plus" msgid "Learn more about Visionary" msgstr "En savoir plus sur Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Quitter" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Quitter le fil privé" msgid "Leave silently" msgstr "Quitter discrètement" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Quitter la communauté" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Répertorie les membres ayant ce rôle dans leur propre section de la liste des membres." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituanie" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Chargement..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Chargement…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Faible" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Une maintenance est prévue pour {localizedTime}. Durée estimée : {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Faire de {userName} le propriétaire du groupe ? Vous perdrez vos privilèges de propriétaire." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Nommer propriétaire du groupe" @@ -21091,38 +20830,21 @@ msgstr "Nommer propriétaire du groupe" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Assurez-vous que ce code correspond à celui de l'application {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Vérifiez que tout est correct avant d'envoyer." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personnalisez votre instance" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Liens malveillants" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malte" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribution de logiciels malveillants" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Logiciels malveillants ou liens dangereux" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Logiciels malveillants, vol d'identifiants ou fichiers nuisibles." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Masquez vos informations privées avant de partager votre écran ou de l msgid "Mask Visionary as subscription" msgstr "Afficher Visionary comme un abonnement" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam de masse, fraude, faux concours ou utilisation abusive de compte." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Restriction d’accès aux médias pour adultes" msgid "Mature content not allowed" msgstr "Contenu pour adultes non autorisé" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Contenu pour adultes ou harcèlement" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Contenu pour adultes ou restriction d’accès insuffisante" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Forçage du contenu pour adultes" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Violation des règles relatives aux contenus pour adultes" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Contenu pour adultes sans restriction d’accès appropriée." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Message" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "lien du message" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Lien du message" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Aperçus des messages dans la liste des MP" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Message publié" @@ -22211,6 +21908,11 @@ msgstr "Heure du message" msgid "Message unpinned" msgstr "Message désépinglé" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Message que vous signalez" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Mineurs en danger, contenu pour adultes dans un espace inadapté ou comportement indésirable." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Plus" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Plus d'actions" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Imbriqué" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Pays-Bas" @@ -24099,7 +23796,7 @@ msgstr "Aucun résultat" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Aucun résultat" @@ -24858,6 +24555,16 @@ msgstr "Seules les personnes que vous invitez et les modérateurs peuvent voir c msgid "Only places I can't access anymore" msgstr "Uniquement les endroits auxquels je n'ai plus accès" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Ne signalez que ce que vous pensez sincèrement contraire aux règles, et veuillez ne pas envoyer deux fois le même signalement." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Ne signalez que ce que vous pensez sincèrement contraire aux règles. L'utilisation abusive des signalements va à l'encontre de nos <0>règles de la communauté." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacité" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Ouvrir sur {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Ouvrir le menu déroulant" @@ -25379,11 +25084,6 @@ msgstr "Ouvrez Réglages Système → Confidentialité et sécurité → Enregis msgid "Open template JSON" msgstr "Ouvrir le modèle JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Ouvrir la boîte de dialogue de bannissement pour cette communauté." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Ouvrir vos réglages" msgid "Opened the thread again" msgstr "A rouvert le fil" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "S'ouvre dans un nouvel onglet" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Banni à l'origine le {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Autre" @@ -25654,11 +25357,6 @@ msgstr "Autre réaction…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Notre équipe de sécurité examine votre signalement. Nous vous enverrons un message privé et un e-mail dès que nous aurons pris une décision." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Le transfert de propriété à <0>{username} n'a pas pu être effectué pour le moment." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Propriété transférée" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Collez la réponse JSON ici" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Collez le lien du message." @@ -26260,11 +25958,6 @@ msgstr "Page suiv." msgid "PgUp" msgstr "Page préc." -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Hameçonnage, fraude, liens malveillants ou fausses déclarations susceptibles de causer des dommages dans le monde réel." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Choisir un fournisseur de recherche web" msgid "Pick an emoji" msgstr "Choisir un emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Choisissez une option pour continuer." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Choisissez le numéro à 4 chiffres après votre nom d’utilisateur" msgid "Pick the appearance this administrator account should start with." msgstr "Choisissez l'apparence de départ de ce compte administrateur." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Choisissez la règle à examiner." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Veuillez patienter un instant et réessayer de renommer." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Pologne" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "appuyer pour ajouter une réaction" msgid "press to remove reaction" msgstr "appuyer pour supprimer la réaction" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Se faire passer pour quelqu'un d'autre, y compris avec du contenu généré par l'IA de manière trompeuse." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Empêcher <0>{targetUserTag} d’envoyer des messages, de réagir et de se connecter aux salons vocaux pendant la durée indiquée." @@ -27078,11 +26756,6 @@ msgstr "Priorité de parole" msgid "Privacy" msgstr "Confidentialité" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Confidentialité ou usurpation d'identité" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Configuration de la confidentialité" msgid "Privacy URL" msgstr "URL de confidentialité" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Atteinte à la vie privée" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Atteinte à la vie privée ou doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Atteinte à la vie privée ou harcèlement" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Type de profil" msgid "Profile updated" msgstr "Profil mis à jour" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Infraction concernant le profil, le nom d'utilisateur ou l'avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Fait la promotion de la haine envers des groupes protégés." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promeut ou coordonne des activités extrémistes violentes, ou recrute pour celles-ci." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promotion ou instructions encourageant l'automutilation ou les troubles alimentaires." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil que vous signalez" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronoms : " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protégez votre compte Visionary en activant l’authentification à deux facteurs. Merci de soutenir {productName} !" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Veuillez fournir au moins un identifiant ou un tag d'utilisateur." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Indiquez l'identifiant ou le nom d'utilisateur de la personne que vous signalez." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Indiquez vos nom et prénom tels qu’ils figurent sur vos documents officiels pour la déclaration." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Les boutons radio permettent de sélectionner une option parmi un groupe msgid "Radio group" msgstr "Groupe de boutons radio" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordination de raid" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Prêt(e) à offrir un cadeau ?" msgid "Ready to upgrade?" msgstr "Prêt à passer à la version supérieure ?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Raison" @@ -28291,8 +27924,8 @@ msgstr "Mémoriser la taille et la position de la fenêtre" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Supprimer {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Retirer {userName} du groupe ?" @@ -28419,8 +28052,8 @@ msgstr "Retirer des favoris" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Retirer du groupe" @@ -28458,11 +28091,6 @@ msgstr "Supprimer des favoris GIF enregistrés par URL" msgid "Remove icon" msgstr "Supprimer l'icône" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Le supprimer du salon pour tout le monde." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Retiré des favoris" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Retiré du groupe" @@ -28919,28 +28547,18 @@ msgstr "Signaler une communauté" msgid "Report a message" msgstr "Signaler un message" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Signaler une infraction au règlement ou trouver des outils pour gérer les contacts et les préférences." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Signaler un profil utilisateur" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Signaler la communauté" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Détails du signalement" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Signaler un contenu illégal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Signaler un problème" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Signaler le message" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Signaler le profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Signalement envoyé" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Type de signalement" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Signaler l'utilisateur" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag de l'utilisateur signalé (facultatif)" @@ -29100,6 +28716,10 @@ msgstr "Exige les conditions du niveau moyen, ainsi qu’une présence dans la c msgid "Resend" msgstr "Renvoyer" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Renvoyer ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Renvoyer ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Renvoyer ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Renvoyer ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Renvoyer ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Renvoyer ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Renvoyer ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Renvoyer le code" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Rôles mis à jour" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Roumanie" @@ -29947,7 +29567,7 @@ msgstr "Saturation" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Dites bonjour à <0>{displayName}. Votre conversation privée commen msgid "Scale" msgstr "Échelle" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Arnaques, logiciels malveillants ou désinformation" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scannez le code QR avec votre application d’authentification." @@ -30855,11 +30470,6 @@ msgstr "Sélectionner" msgid "Select {accessibleName}" msgstr "Sélectionner {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Sélectionner une catégorie" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Sélectionnez une communauté où vous disposez de la permission {permissionName} ou une conversation de groupe dont vous faites partie." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Sélectionner un pays" @@ -30911,11 +30521,6 @@ msgstr "Sélectionner une URI de redirection" msgid "Select a scenario to apply..." msgstr "Sélectionner un scénario à appliquer..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Sélectionnez une catégorie d'infraction." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Sélectionnez le compte avec lequel vous souhaitez vous connecter sur vo msgid "Select voice processing mode" msgstr "Sélectionner le mode de traitement vocal" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Sélectionnez ce que vous souhaitez signaler." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Sélectionnez votre pays de résidence." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Sélectionner…" @@ -31037,13 +30642,6 @@ msgstr "Sélection : {0} (max {1})" msgid "Selections" msgstr "Sélections" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Automutilation ou suicide" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Envoyer un message d'action (s'affiche en italique)." msgid "Send animation" msgstr "Envoyer une animation" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Envoyer un autre signalement" @@ -31138,7 +30736,7 @@ msgstr "Bouton d'envoi" msgid "Send code" msgstr "Envoyer le code" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Envoyer le signalement DSA" @@ -31158,9 +30756,9 @@ msgstr "Envoyez des fichiers jusqu'à {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Envoyer une demande d'ami" @@ -31220,8 +30818,8 @@ msgstr "Envoyer des messages dans les fils" msgid "Send messages, images, GIFs and emoji" msgstr "Envoyez des messages, des images, des GIF et des émojis" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Envoyer le signalement" @@ -31255,7 +30853,7 @@ msgstr "Renvoyer cet élément épinglé dans le passé ?" msgid "Send TTS messages" msgstr "Envoyer des messages de synthèse vocale" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Envoyer le code de vérification" @@ -31273,11 +30871,6 @@ msgstr "Envoyer un message vocal" msgid "Send:" msgstr "Envoi :" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Envoi de logiciels malveillants ou de liens dangereux" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Partager le thème" msgid "Share voice activity with all friends?" msgstr "Partager l'activité vocale avec tous les amis ?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Partagez ce dont notre équipe a besoin pour évaluer la situation." @@ -31709,11 +31302,6 @@ msgstr "Partagez ce dont notre équipe a besoin pour évaluer la situation." msgid "Share with a friend" msgstr "Partager avec un ami" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Partager avec les modérateurs de la communauté." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Fenêtre partagée" msgid "Shared window audio" msgstr "Audio de la fenêtre partagée" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Divulgue des informations personnelles, traque des utilisateurs ou coordonne des atteintes à la vie privée." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Partage d'informations personnelles" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Curseurs" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovaquie" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovénie" @@ -32889,11 +32467,6 @@ msgstr "Simulation du mode lent" msgid "Slowmode time remaining" msgstr "Temps restant en mode lent" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Insultes, langage déshumanisant ou attaques envers des groupes protégés." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Une erreur est survenue lors de la préparation de ce sticker. Essayez un autre fichier ou réessayez dans un instant." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Une erreur s'est produite lors de la publication. Réessayez dans un instant." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Mise en page aérée avec une séparation visuelle claire entre les messages." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Espagne" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Compte de spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Classification des spams" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam ou arnaque" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Communauté diffusant du spam ou des arnaques" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Compte de spam, d'arnaque ou d'hameçonnage" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, arnaques ou hameçonnage" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Démarrer minimisé" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Recommencer" @@ -33752,22 +33302,26 @@ msgstr "Rester connecté" msgid "Step {current} of {total}" msgstr "Étape {current} sur {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Étape 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Étape 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Étape 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Étape 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Étape 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Arrêter d'être un canal d'annonces ?" msgid "Stop hiding muted channels by default?" msgstr "Arrêter de masquer les salons mis en sourdine par défaut ?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Arrêter les messages et les demandes d'amis." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Arrêter le test du micro" @@ -33959,11 +33508,6 @@ msgstr "Arrêter de patcher Node.prototype insertBefore et removeChild. L’appl msgid "Stop ringing" msgstr "Arrêter la sonnerie" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Ne plus voir son contenu et ses membres." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Remplacer les émoticônes courantes comme :) et <3 par des emojis lors de l'envoi de messages" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Suède" @@ -34804,11 +34348,6 @@ msgstr "Appuyer pour ajouter une note" msgid "tar.gz archive" msgstr "Archive tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Cible les personnes selon leurs caractéristiques protégées." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Conditions d'utilisation" msgid "Terms URL" msgstr "URL des conditions" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorisme ou extrémisme violent" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thaï" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Merci de nous aider à assurer la sécurité de {productName}. Nous examinerons votre signalement dès que possible." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Merci d'avoir signalé ceci" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Merci de nous en avoir informés. Cela n'enfreint pas nos règles à lui seul, donc nous n'avons pas envoyé de signalement." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Merci de nous en avoir informés. Cela n'enfreint pas nos règles à lui seul, donc nous n'avons pas envoyé de signalement. Si cela vise quelqu'un ou contient des insultes, signalez-le à nouveau et choisissez « Contenu abusif ou nuisible »." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Cela n'a pas fonctionné. Réessayez ou annulez." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Ceci ne semble pas être une couleur valide. Essayez le format hexadécimal, rgb(), hsl() ou un nom de couleur CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Ceci ne semble pas être une URL valide." @@ -35104,6 +34653,11 @@ msgstr "L'application {PRODUCT_NAME} sur votre autre appareil l'affiche sous « msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "L'application {PRODUCT_NAME} n'a pas été connectée. Vous pouvez fermer cet onglet." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "L'équipe de sécurité de {productName} examinera votre signalement. Nous ne révélerons pas que cela vient de vous." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "L'URI de redirection fournie n'est pas enregistrée pour cette applicati msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "L'URI de redirection fournie doit utiliser HTTP ou HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Le formulaire de signalement a changé. Veuillez recommencer." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Les identifiants d'utilisateur de cette instance sont déjà configurés. Ils ne peuvent plus être modifiés." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Le code de vérification est invalide ou a expiré." @@ -36115,13 +35674,8 @@ msgstr "Ce membre n’est plus connecté à la discussion vocale." msgid "This message can only be forwarded to age-restricted channels" msgstr "Ce message ne peut être transféré qu'aux chaînes soumises à restriction d'âge." -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Ce message a déjà été supprimé." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Ce message a déjà été publié" @@ -36279,11 +35833,6 @@ msgstr "Ce fil de discussion est fermé. Envoyer un message le rouvrira." msgid "This thread is locked. Only moderators can send messages." msgstr "Ce fil de discussion est verrouillé. Seuls les modérateurs peuvent envoyer des messages." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "cet utilisateur" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Cet utilisateur a limité son profil. Certains détails sont masqués pour les personnes qui ne font pas partie de ses amis." @@ -36292,11 +35841,6 @@ msgstr "Cet utilisateur a limité son profil. Certains détails sont masqués po msgid "This user has no roles in this community." msgstr "Cet utilisateur n'a aucun rôle dans cette communauté." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Cet utilisateur est déjà banni de la communauté." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Cet utilisateur n'est plus disponible." @@ -36465,16 +36009,6 @@ msgstr "Thread mis à jour" msgid "Threads" msgstr "Fils" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Menaces, suivi dans plusieurs espaces ou contacts indésirables." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Menaces, harcèlement ou préjudice" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "A appliqué une restriction temporaire à {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Appliquer une restriction temporaire" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Convertir les images HDR en plage standard, réduisant ainsi la luminosité maximale." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Trop de codes envoyés. Patientez {duration} et réessayez." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transférer la propriété de la communauté" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transférer la propriété du groupe à {userName} ?" @@ -37561,7 +37100,7 @@ msgstr "Débloquez d’abord cette personne pour lui envoyer une demande d’ami #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Débloquer l'utilisateur" @@ -37607,16 +37146,6 @@ msgstr "Réactiver le son sur tous les appareils" msgid "Undeafen yourself" msgstr "Réactiver le son" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Âge insuffisant ou problème de sécurité des enfants" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Utilisateur n’ayant pas l’âge requis" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Jusqu'à ce que je le réactive" msgid "Unverified email" msgstr "E-mail non vérifié" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Comportement indésirable ou contenu pour adultes dans un espace inadapté." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Comportements, commentaires ou demandes à caractère sexuel non désirés." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Jusqu'à {DISCOVERY_MAX_TAGS} tags aident les gens à trouver votre communauté. Ils apparaissent dans la recherche Découverte." @@ -38840,11 +38359,6 @@ msgstr "Utiliser le thème clair" msgid "Use native title bar" msgstr "Utiliser la barre de titre native" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "À utiliser uniquement si le contenu enfreint clairement les règles de {productName} et ne correspond pas aux catégories ci-dessus." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Utilisé uniquement dans cette communauté." msgid "User" msgstr "Utilisateur" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "L’utilisateur semble ne pas avoir l’âge requis, ou est impliqué dans la sollicitation de mineurs à des fins sexuelles ou l’exploitation d’enfants." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Débogage utilisateur" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID utilisateur (facultatif)" @@ -39061,12 +38570,12 @@ msgstr "Utilisateur introuvable" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profil de l'utilisateur" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profil utilisateur : {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Paramètres utilisateur" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag utilisateur (facultatif)" @@ -39339,7 +38848,7 @@ msgstr "Communauté vérifiée" msgid "Verify" msgstr "Vérifier" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Vérifier le code" @@ -39368,7 +38877,7 @@ msgstr "Vérifiez que c'est bien vous" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Vérifiez votre e-mail" @@ -39718,7 +39227,7 @@ msgstr "Afficher les codes" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Voir le profil dans la communauté" @@ -39751,7 +39260,7 @@ msgstr "Voir les cadeaux" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Voir le profil global" @@ -39847,26 +39356,6 @@ msgstr "Un spectateur rejoint la diffusion" msgid "Viewer leaves stream" msgstr "Un spectateur quitte la diffusion" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Catégorie de la violation" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "La violation se trouve dans le profil de l'utilisateur, pas dans un message spécifique." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violence ou menaces de violence" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Contenu violent ou explicite" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Nous avons redimensionné et compressé cet emoji en 128 × 128 pixels, msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Nous avons redimensionné et compressé ce sticker en 320 × 320 pixels, mais il pèse encore {fileSize}. La limite est de {maxSize}. Essayez une image plus simple, moins de couleurs ou un fichier source plus petit." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Nous avons envoyé un code à {email}." @@ -40472,7 +39961,7 @@ msgstr "Nous traiterons cette demande dès que possible. Vous recevrez un e-mail msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Nous restaurerons votre ancien e-mail, déconnecterons les anciennes sessions, désactiverons l'authentification multifacteur et sécuriserons votre compte avec un nouveau mot de passe." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Nous vous enverrons un code court pour confirmer que vous pouvez recevoir des mises à jour concernant ce signalement." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginie-Occidentale" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Quel type de règle a été enfreint ?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Quoi de neuf ?" msgid "What's new" msgstr "Nouveautés" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Quelle est la raison de votre signalement ?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Lorsqu’aucune date limite personnalisée n’est définie, les membres sans la permission <0>{readMessageHistoryPermissionLabel} ne peuvent consulter aucun ancien message. Ils voient uniquement les nouveaux messages en temps réel. Ces messages disparaissent lorsqu’ils redémarrent leur client." @@ -40832,11 +40321,6 @@ msgstr "Quelles communautés" msgid "Which conversations" msgstr "Quelles conversations" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Quelle règle a été enfreinte ?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Lorsque « Appuyer pour parler » est activé, votre raccourci contrôle le micro. Le bouton « Couper le micro » est donc désactivé." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Vous ne pouvez pas joindre de fichiers dans ce salon." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Vous ne pouvez pas être ami avec vous-même" @@ -41341,7 +40825,7 @@ msgstr "Vous ne pouvez pas envoyer de message à cet utilisateur" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Vous devez accepter les conditions d'utilisation pour créer un compte" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Vous devez vérifier votre adresse e-mail avant d'envoyer un signalement." @@ -41891,6 +41375,11 @@ msgstr "Vous bénéficiez d’un ancien tarif. Le prix actuel de ce forfait est msgid "You're sending messages too quickly" msgstr "Vous envoyez des messages trop rapidement" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Vous envoyez des signalements trop rapidement. Réessayez plus tard." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Vous consultez des messages plus anciens" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Vous avez ajouté trop de personnes pour une conversation de groupe. Retirez-en quelques-unes et réessayez." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Vous avez déjà signalé ce message." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Vous avez déjà signalé ce profil aujourd'hui." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Vos comptes et paramètres n'ont pas été modifiés ni supprimés." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Votre action n'a pas pu être effectuée, car elle a été signalée par nos systèmes de sécurité. Si vous pensez qu'il s'agit d'une erreur, veuillez contacter l'assistance." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Vos réponses" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Votre candidature est en attente d’examen. Vous pouvez encore modifier les détails de votre fiche ou retirer votre candidature." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Votre navigateur nécessite une interaction de l'utilisateur avant de pouvoir lire l'audio. Cliquez sur le bouton ci-dessous pour activer le chat vocal." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Vos modifications sont appliquées à toutes les communautés qui suivent ce canal, ce qui peut prendre une minute. Chaque message publié permet 3 modifications rapides, puis 1 toutes les 20 minutes." @@ -42311,6 +41815,11 @@ msgstr "Votre nouveau surnom, ou laissez vide pour le réinitialiser." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Votre ancien kit de récupération ne fonctionne plus. Conservez celui-ci en lieu sûr." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Vos options" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "votre région" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Le paiement de votre renouvellement a échoué, mais les <0/> restent actifs jusqu’au <1>{graceDate}. Mettez à jour votre mode de paiement avant cette date pour conserver votre abonnement." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Votre signalement n'a pas pu être envoyé. Réessayez." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Votre abonnement passera à la facturation annuelle lors du prochain ren msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Le code CSS de votre thème est trop volumineux pour être partagé. Réduisez-le et réessayez." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Votre nom d'utilisateur (facultatif)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index 0713e1705..d0732cd76 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -2081,7 +2081,7 @@ msgstr "נותרו {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {חבר} other {חברים}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {תוקף קישור ההזמנה שלך יפוג בעוד שנייה אחת.} two {תוקף קישור ההזמנה שלך יפוג בעוד שתי שניות.} other {תוקף קישור ההזמנה שלך יפוג בעוד # שניות.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} נבחרו" @@ -2957,11 +2957,6 @@ msgstr "נתוני חשבון" msgid "Account details unavailable" msgstr "פרטי החשבון אינם זמינים" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "החשבון קיים כדי לשלוח ספאם, להונות או לנצל לרעה את הפלטפורמה." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "נוסף: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "נוסף: {createdDate} • שימוש אחרון: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "הערות נוספות (אופציונלי)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "כבר מומש" msgid "Already set to cancel" msgstr "כבר מוגדר לביטול" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "דווח על ההודעה הזו גם לצוות הבטיחות של {productName}" @@ -4576,11 +4566,6 @@ msgstr "שנתי" msgid "Another checkbox" msgstr "תיבת סימון נוספת" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "הפרה ברורה נוספת של הכללים" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "תיבת סימון עגולה נוספת" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "העלאת שמע" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "אוסטריה" @@ -5620,6 +5605,7 @@ msgstr "לא זמין כרגע" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "לא זמין כרגע" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "חזרה" @@ -5788,9 +5775,7 @@ msgstr "קודי הגיבוי נוצרו מחדש" msgid "Badge" msgstr "תג" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "חסימה" @@ -5819,7 +5804,7 @@ msgstr "משך חסימה" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "חסום חברים מהקהילה, עם אפשרות למחוק את ה msgid "Ban reason" msgstr "סיבת החסימה" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "חסימת המשתמש הזה" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "רוחב פס" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "נחסם" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} נחסם מהקהילה" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "לפני תאריך" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "בלגיה" @@ -6031,7 +6006,7 @@ msgstr "קצב סיביות" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "חסימה" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "חסימה" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "חסימת {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "חסימה בכל הקהילות" msgid "Block spoiler" msgstr "בלוק ספוילר" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "חסימת המשתמש הזה" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "חסימת משתמש" msgid "Blocked" msgstr "חסומים" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "חסום" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "מתרגמים מובנים" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "בולגריה" @@ -6519,16 +6500,6 @@ msgstr "בולגרית" msgid "Bulk delete" msgstr "מחיקה מרובה" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "בריונות, יצירת קשר חוזרת ובלתי רצויה, מעקב או התעללות ממוקדת." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "בריונות, איומים, שנאה, אלימות, פשיטות או תוכן שדוחף לפגיעה עצמית." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "קליפורניה" msgid "Call" msgstr "שיחה" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "הגדרות שיחות וצ׳אטים קבוצתיים" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "שינוי באנר" msgid "Change chat embed background" msgstr "שינוי הרקע של הטמעת הצ'אט" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "שינוי אימייל" @@ -7150,8 +7116,8 @@ msgstr "שינוי כינוי של חבר" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "שינוי הכינוי בקבוצה" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "שינוי שפה" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "שינוי הכינוי שלי בקבוצה" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "שינוי הכינוי שלך" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "שינוי בעלים" @@ -7283,16 +7249,6 @@ msgstr "שינוי האזור הקולי שבו משתמש ערוץ קולי." msgid "Change which voice region this channel uses." msgstr "שינוי האזור הקולי שבו משתמש הערוץ הזה." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "שנה מי יכול להתקשר אליך או להוסיף אותך." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "שנה מי יכול ליצור איתך קשר." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "חפש את קישור ההרשאה בתיבת הדואר הנכנס ש msgid "Check your inbox for a verification email." msgstr "בדוק אם התקבל אימייל אימות בתיבת הדואר הנכנס שלך." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "בדוק את הדיווח שלך" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "תיבות סימון" @@ -7901,21 +7862,6 @@ msgstr "התשלום חסום עבור חשבון זה. צור קשר עם {supp msgid "Checkout unavailable" msgstr "התשלום אינו זמין" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "חששות לבטיחות ילדים" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "בטיחות ילדים או ניצול קטינים" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "בטיחות ילדים או תוכן למבוגרים" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "אפשרויות" msgid "Choices: {choiceList}" msgstr "אפשרויות: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "בחירה" @@ -8122,6 +8068,11 @@ msgstr "בחר את הקטגוריה המתאימה ביותר לקהילה של msgid "Choose the premium model" msgstr "בחר את מודל הפרימיום" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "בחר שוב את הסיבה" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "קבל את המתנה" msgid "Claim your account" msgstr "תבע את החשבון שלך" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "כדי לשלוח דיווחים, תבע את החשבון שלך ואמת את כתובת האימייל שלך." @@ -8352,12 +8303,12 @@ msgstr "תבע את החשבון שלך כדי לממש את המתנה הזו." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "תבע את החשבון שלך כדי לשלוח בקשות חברות." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "אמת את חשבונך כדי לשלוח דיווחים." @@ -8378,11 +8329,6 @@ msgstr "תבע את החשבון שלך כדי להתחיל שיחות אחד ע msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "קבל את המתנה שלך כדי להפעיל את המנוי ל-{premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "התחזות לאדם, למותג או לארגון אחר." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "נקה את שדה החיפוש" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "סגור חלון קופץ" msgid "Close popout" msgstr "סגור חלון קופץ" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "סגור את הצ'אט הזה" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "סגירה למגש המערכת" msgid "Close window" msgstr "סגור חלון" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "סגירת הצ'אט הנוכחי שלך עם {dmDisplayName}. הפעולה אינה חוסמת את המשתמש, ואפשר לפתוח את הצ'אט מחדש מאוחר יותר." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "לסגור את הצ'אט עם {displayName}? אפשר לפתוח אותו מחדש בכל עת." @@ -8837,7 +8773,7 @@ msgstr "ערכת נושא פחם" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "קוד" @@ -8868,7 +8804,7 @@ msgstr "קוד מתוך אפליקציית {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "הקוד נשלח שוב" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "קהילות שתוכל להצטרף אליהן" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "קהילה" @@ -9131,7 +9065,7 @@ msgstr "השתקת שמע בקהילה" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "ניפוי באגים של קהילה" @@ -9150,16 +9084,6 @@ msgstr "הקהילה נמחקה" msgid "Community DM" msgstr "הודעה פרטית מקהילה" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "הקהילה קיימת כדי לשלוח ספאם, להונות או לנצל לרעה את הפלטפורמה." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "הקהילה מאפשרת הצקות המוניות או התנכלות ממוקדת." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "אייקון קהילה" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "מזהה קהילה" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "נדרש מזהה קהילה." @@ -9526,6 +9450,11 @@ msgstr "אישור סיסמה חדשה" msgid "Confirm password" msgstr "אישור סיסמה" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "אשר את ההצהרה כדי לשלוח את הדיווח." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "המשך בדפדפן שלך" msgid "Continue to checkout" msgstr "המשך לתשלום" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "המשך לדווח על הקהילה" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "המשך לדווח על המשתמש" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "הפיכת ערוץ זה לערוץ טקסט תסיר כל ערוץ שע msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "ממיר תוכן נכנס לדיבור, בין אם הגיע מ-/tts ובין אם לא." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "מתאם פשיטות, התארגנויות או הטרדות נגד אנשים או קהילות." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "כתובת ה-URL הועתקה ללוח הגזירים" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "כתובת ה-URL הועתקה ללוח הגזירים" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "העתקת מזהה הודעה" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "העתקת קישור להודעה" @@ -10643,6 +10553,11 @@ msgstr "לא ניתן היה לטעון פוסטים. נסה שוב מאוחר msgid "Couldn't load settings" msgstr "לא ניתן היה לטעון את ההגדרות" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "לא ניתן היה לטעון את טופס הדיווח." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "לא ניתן לטעון את האפליקציה הזו" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "לא ניתן לעבד את התמונה" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "לא ניתן לפרסם הודעה זו" @@ -10825,11 +10740,6 @@ msgstr "לא ניתן היה לשלוח הזמנה" msgid "Couldn't send invite. Try again." msgstr "לא ניתן לשלוח הזמנה. יש לנסות שוב." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "לא הצלחנו לשלוח. יש לנסות שוב." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "טיימר ספירה לאחור" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "מדינת מגורים" @@ -11301,13 +11211,8 @@ msgstr "נוצר:" msgid "Credentials" msgstr "פרטי התחברות" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "איומים אמינים, אלימות גרפית או האדרת אלימות." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "קרואטיה" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "חותך אודיו מתחת לסף עוצמה, עלות CPU מינימלית." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "קפריסין" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "צ'כית" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "צ'כיה" @@ -11965,7 +11870,7 @@ msgstr "ניפוי באגים בערוץ" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "ניפוי באגים בקהילה" @@ -12151,7 +12056,6 @@ msgstr "דלאוור" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "דלאוור" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "למחוק ערכת נושא?" msgid "Delete this invite? Can't be undone." msgstr "למחוק את ההזמנה הזו? לא ניתן לבטל פעולה זו." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "מחיקת ההודעה הזו" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "למחוק את ההודעה הזו? לא ניתן לבטל פעולה זו." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "למחוק הודעה זו? לא ניתן לבטל. הודעה זו תוסר גם מכל קהילה שעוקבת אחר ערוץ זה." @@ -12461,11 +12359,6 @@ msgstr "למחוק את ההודעות שלך בקהילה זו?" msgid "Delete your messages in this conversation?" msgstr "למחוק את ההודעות שלך בשיחה זו?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "נמחקה" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "נשללו {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "דנמרק" @@ -12554,11 +12447,6 @@ msgstr "תאר את המדבקה" msgid "Describe this media for screen readers" msgstr "תאר את המדיה הזו עבור קוראי מסך" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "תאר מה הופך את התוכן לבלתי חוקי" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "באנר מנותק" msgid "Detail" msgstr "פירוט" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "פרטים" @@ -13315,11 +13203,6 @@ msgstr "שם לתצוגה (אופציונלי)" msgid "Display scaling" msgstr "קנה מידה לתצוגה" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "מפיץ תוכנות זדוניות, כלים לגניבת פרטי התחברות או קבצים מזיקים אחרים." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "הגדרות הודעות פרטיות ובקשות חברות" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "תיעוד" msgid "Doesn't allow being added to group DMs" msgstr "לא מאפשר/ת הוספה לצ'אטים קבוצתיים" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "לא חוסם. אפשר לפתוח שוב מאוחר יותר." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "לתרום במקום זאת" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "הורד מפות מקור כדי שמעקבי מחסנית וכלי ה msgid "Download video" msgstr "הורד את הסרטון" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "דוקסינג, חשיפת מידע פרטי או מעקב." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "דוקסינג, מעקב, התחזות או פרופיל לא הולם." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "עריכת צבע עבור {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "עריכת פרופיל קהילה" @@ -14043,7 +13908,7 @@ msgstr "ערוך עקיפות הרשאות עבור תפקידים וחברים #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "עריכת פרופיל" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "עריכת השעה המקומית בפרופיל" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "עריכת הודעה שפורסמה?" @@ -14191,13 +14056,13 @@ msgstr "זכאי להחזר כספי עד {windowEndsOn}. פעולה זו גם #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "אימייל" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "כתובת אימייל" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "נדרשת כתובת אימייל." @@ -14721,16 +14586,6 @@ msgstr "העדפת מקודד עבור שיתופי מסך חדשים." msgid "Encoder, SVC, and bitrate presets" msgstr "קידוד, SVC והגדרות קבועות מראש של קצב סיביות" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "מעודד פגיעה עצמית" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "מעודד התאבדות, פגיעה עצמית או הפרעות אכילה." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "הצפנה מקצה לקצה אינה זמינה מכיוון שמשתת msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "הצפנה מקצה לקצה אינה זמינה מכיוון שמשתתף לא נתמך נמצא בערוץ הקולי הזה." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "מסכן קטינים או מכיל תוכן של ניצול ילדים." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "יש להזין קוד בפורמט ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "יש להזין כתובת URL או קוד תבנית חוקיים של {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "יש להזין כתובת אימייל חוקית." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "יש להזין קישור חוקי להודעה." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "הזן את הקוד בן {digitCount} הספרות מאפליקציית האימות שלך." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "הזן את הקוד לפני שתמשיך." @@ -15008,7 +14858,7 @@ msgstr "Enter כדי <0><1>לשמור" msgid "Enter username" msgstr "הזן שם משתמש" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "הזן קוד אימות" @@ -15017,6 +14867,11 @@ msgstr "הזן קוד אימות" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "הזן את כתובת האימייל שלך ונשלח לך קישור לאיפוס הסיסמה." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "הזן את שמך המלא הרשמי כדי לשלוח את הדיווח." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape כדי <0><1>לבטל" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "אסטוניה" @@ -15412,6 +15267,16 @@ msgstr "יפוג ב-{earliest}" msgid "Expires:" msgstr "תפוגה:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "הסבר את הבעיה" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "הסבר את הבעיה כדי לשלוח את הדיווח." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "קישורים חיצוניים עלולים להיות מסוכנים. msgid "Extra large" msgstr "גדול במיוחד" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "קהילה קיצונית" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "הסרת כתובת ה-URL המותאמת אישית נכשלה. יש לנסות שוב." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "שליחת הקוד מחדש נכשלה. יש לנסות שוב." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "איפוס מצב הפרימיום נכשל." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "שליחת הקוד נכשלה. יש לנסות שוב." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "שליחת ההודעה נכשלה. יש ללחוץ לחיצה ארוכה לאפשרויות." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "שליחת הדיווח נכשלה. יש לנסות שוב." @@ -15840,11 +15700,6 @@ msgstr "העלאת האימוג'י נכשלה החל מ-{startLabel}: {errorMsg} msgid "Failed to upload emojis. Try again." msgstr "העלאת האימוג'י נכשלה. יש לנסות שוב." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "טענות שקריות שעלולות לגרום נזק בעולם האמיתי." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "מצא את המדבקה המושלמת" msgid "Fingerprint" msgstr "טביעת אצבע" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "סיום הגדרת החשבון" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "יש לסיים קודם את הגדרת החשבון" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "יש לסיים את ההרשמה כדי לשלוח בקשות חברות." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "פינלנד" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "פינית" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "שם פרטי ושם משפחה" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "קצב פריימים מעל 30 FPS דורש {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "צרפת" @@ -16834,10 +16689,10 @@ msgstr "מלא" msgid "Full dynamic range" msgstr "טווח דינמי מלא" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "שם מלא רשמי" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "שם מלא רשמי (אופציונלי עבור דיווחי פגיעה מינית בילדים)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "גרמנית" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "גרמניה" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "חזרה" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "חזור והזן אימייל תקין." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "כיף לראות אותך, {username}! ברוך הבא." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "יוון" @@ -17572,11 +17427,6 @@ msgstr "יוונית" msgid "Grid view" msgstr "תצוגת רשת" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "תוכן של פיתוי קטינים או ניצול ילדים." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "כינוי" msgid "Hang out with voice, video and screen share" msgstr "שוחחו בקול, בווידאו ועם שיתוף מסך" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "הטרדה" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "הטרדה הכוללת תוכן למבוגרים" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "הטרדה או בריונות" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "הטרדה או מעקב" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "הטרדה או התעללות ממוקדת" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "הטרדה או איומים" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "מפתח חומרה" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "מואץ בחומרה ברוב מערכות Windows ו-macOS. אמין למכשירים ישנים יותר." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "מידע שגוי מזיק" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "רכש אי פעם" msgid "Has ever purchased override" msgstr "עקיפת רכישה קודמת" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "דברי שטנה" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "להסתיר את שיתוף המסך שלך?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "מסתר את לחצני ההורדה, פתיחה בדפדפן והעתקה בתמונות וסרטונים בערוץ זה." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "מסתיר את ההודעות שלהם ומונע מהם לשלוח לך הודעות" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "הונגרית" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "הונגריה" @@ -18399,6 +18212,11 @@ msgstr "אני תיאור כלי" msgid "I changed my mind" msgstr "שיניתי את דעתי" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "אני מצהיר בתום לב כי המידע והטענות בדיווח זה מדויקים ושלמים." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "הגדרות מצב לא פעיל" msgid "Idle timeout" msgstr "זמן קצוב לחוסר פעילות" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "אם מעורב קטין, יש להשתמש ב\"{childSafetyReasonName}\" במקום זאת." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "אם חשבון משתמש משתמש בכתובת זו, שלחנו לו msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "אם macOS מבקש לצאת ולפתוח מחדש את {productName}, בחר מאוחר יותר." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "אם מישהו נמצא בסכנה מיידית, צור קשר עם שירותי החירום המקומיים אם אתה יכול לעשות זאת בבטחה." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "אם מישהו נמצא בסכנה מיידית, פנה תחילה לשירותי החירום המקומיים." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "אם מישהו ביקש ממך להדביק משהו כאן, זוהי הונאה שעלולה לתת לו גישה לחשבון ה-{productName} שלך." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "אם זה כולל חומר פגיעה מינית בילדים (CSAM) או ניצול קטינים, שלח את הדיווח עכשיו ואל תשתף את החומר מחדש." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "אם זהו איום ממשי ואמין, צור קשר גם עם שירותי החירום המקומיים." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "אם זהו איום טרור מיידי, צור קשר גם עם שירותי החירום המקומיים." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "אם הדיווח הזה נוגע להודעה ספציפית בקהילה הזו, דווח על ההודעה הזו במקום זאת. דיווחי הודעות מספקים לצוות הבטיחות שלנו את ההקשר הברור ביותר, והוספת פרטים בתגובות יכולה לעזור לנו לבדוק את הדיווח מהר יותר. המשך לדווח על הקהילה כולה רק אם דיווח על הודעה לא ישקף את הבעיה הרחבה יותר." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "אם הדיווח הזה נוגע להודעה ספציפית, דווח על ההודעה הזו במקום זאת. דיווחי הודעות מספקים לצוות הבטיחות שלנו את ההקשר הברור ביותר, והוספת פרטים בתגובות יכולה לעזור לנו לבדוק את הדיווח מהר יותר. המשך לדווח על המשתמש כולו רק אם ההודעה הזו אינה משקפת את הבעיה הרחבה יותר." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "אם הדיווח הזה נוגע להודעות ספציפיות, דווח על ההודעה הרלוונטית ביותר במקום זאת. דיווחי הודעות מספקים לצוות הבטיחות שלנו את ההקשר הברור ביותר, והוספת פרטים בתגובות יכולה לעזור לנו לבדוק את הדיווח מהר יותר. המשך לדווח על המשתמש כולו רק אם דיווח על הודעה לא ישקף את הבעיה הרחבה יותר." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "אם אתה סבור שזה בלתי חוקי, ציין איזה חוק ומדוע." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "התעלם מהשהיית המצב האיטי של הערוץ הזה." msgid "Ignore virtual" msgstr "התעלם מהתקנים וירטואליים" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "פעילות בלתי חוקית" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "פעילות בלתי חוקית או משהו אחר" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "מכירות לא חוקיות, סיוע לפעילות פלילית או הפרת כלל ברורה שאינה מתאימה לקטגוריות שלעיל." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "מכירות לא חוקיות, סיוע לפשיעה או פעילות בלתי חוקית." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "תמונות" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "תמונות שהודבקו מהלוח נשלחות כקבצים מצורפים, ואין לך הרשאה לצרף קבצים בערוץ זה." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "התחזות" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "התחזות או מדיה מטעה" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "לא פעיל" msgid "Inactive timeout" msgstr "זמן קצוב לאי-פעילות" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "פרופיל לא הולם" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "כלול את קודי הגיבוי הדו-שלביים שלי בקובץ ה-PDF ובפלט ההדפסה" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "יש לכלול את מזהה הקהילה." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "רקע להזמנה" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "קוד הזמנה (אופציונלי)" @@ -19471,7 +19220,7 @@ msgstr "הסתרת הזמנות" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "הזמנת חברים" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "כתובת ה-IP אושרה" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "אירלנד" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "נטוי" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "איטליה" @@ -20120,7 +19869,7 @@ msgstr "מקשים" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "אחר כך" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "לטביה" @@ -20291,11 +20040,6 @@ msgstr "מידע נוסף" msgid "Learn more about Visionary" msgstr "מידע נוסף על Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "יציאה" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "עזוב/עזבי שרשור פרטי" msgid "Leave silently" msgstr "יציאה בשקט" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "יציאה מהקהילה" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "מציג חברים עם תפקיד זה במקטע משלהם ברשימת החברים." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "ליטא" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "טוען..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "טוען…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "נמוכה" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "לוקסמבורג" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "תחזוקה מתוכננת ל-{localizedTime}. משך זמן צפוי: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "להפוך את {userName} לבעל הקבוצה? תאבד את הרשאות הבעלות שלך." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "הפוך לבעל הקבוצה" @@ -21091,38 +20830,21 @@ msgstr "הפוך לבעל הקבוצה" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "ודא שקוד זה תואם לזה שביישום {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "ודא שהכול נראה תקין לפני השליחה." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "הפוך את המופע לשלך" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "קישורים זדוניים" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "מלטה" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "הפצת תוכנות זדוניות" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "תוכנה זדונית או קישורים מסוכנים" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "תוכנות זדוניות, גניבת פרטי כניסה או קבצים מזיקים." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "הסתר פרטים אישיים לפני שיתוף המסך או הש msgid "Mask Visionary as subscription" msgstr "הצגת Visionary כמנוי" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "ספאם המוני, הונאה, הגרלות מזויפות או שימוש לרעה בחשבון." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "שער מדיה לתוכן למבוגרים" msgid "Mature content not allowed" msgstr "תוכן למבוגרים אינו מותר" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "תוכן למבוגרים או הטרדה" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "תוכן למבוגרים או הגבלת גישה לא בטוחה" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "עקיפת תוכן למבוגרים" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "הפרת מדיניות תוכן למבוגרים" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "תוכן למבוגרים ללא הגבלת גישה מתאימה." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "הודעה" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "קישור להודעה" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "קישור להודעה" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "תצוגות מקדימות של הודעות ברשימת ההודעות הפרטיות" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "ההודעה פורסמה" @@ -22211,6 +21908,11 @@ msgstr "שעת הודעה" msgid "Message unpinned" msgstr "הצמדת ההודעה בוטלה" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "ההודעה שאתה מדווח עליה" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "מינסוטה" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "קטינים בסיכון, תוכן למבוגרים במקום הלא נכון או התנהגות לא רצויה." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "עוד" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "פעולות נוספות" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "רשימה מקוננת" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "הולנד" @@ -24099,7 +23796,7 @@ msgstr "אין תוצאות" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "לא נמצאו תוצאות" @@ -24858,6 +24555,16 @@ msgstr "רק אנשים שהזמנת ומנהלים יכולים לראות את msgid "Only places I can't access anymore" msgstr "רק מקומות שכבר אין לי גישה אליהם" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "דווח רק על מה שאתה מאמין בכנות שמפר את הכללים, ובבקשה אל תשלח את אותו הדיווח פעמיים." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "דווח רק על מה שאתה מאמין בכנות שמפר את הכללים. שימוש לרעה בדיווחים נוגד את <0>הנחיות הקהילה שלנו." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "אטימות" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "פתח ב- {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "פתח תפריט נפתח" @@ -25379,11 +25084,6 @@ msgstr "פתח את הגדרות המערכת → פרטיות ואבטחה → msgid "Open template JSON" msgstr "פתיחת ה-JSON של התבנית" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "פתיחת חלון החסימה עבור קהילה זו." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "פתח את ההגדרות שלך" msgid "Opened the thread again" msgstr "פתחתי את השרשור מחדש" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "נפתח בלשונית חדשה" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "נחסם במקור בתאריך {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "אחר" @@ -25654,11 +25357,6 @@ msgstr "ריאקציה אחרת…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "צוות הבטיחות שלנו בודק את הדיווח. נשלח לך הודעה פרטית ואימייל ברגע שנגיע להחלטה." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "לא ניתן היה להעביר את הבעלות אל <0>{username} כרגע." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "הבעלות הועברה" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "הדבק כאן את תגובת ה-JSON" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "הדבק את קישור ההודעה." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "דיוג, הונאה, קישורים זדוניים או טענות שקריות שעלולות לגרום נזק בעולם האמיתי." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "בחירת ספק חיפוש באינטרנט" msgid "Pick an emoji" msgstr "בחר אימוג'י" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "בחר אפשרות כדי להמשיך." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "בחר את המספר בן 4 הספרות שאחרי שם המשתמש msgid "Pick the appearance this administrator account should start with." msgstr "בחר את המראה ההתחלתי של חשבון מנהל המערכת הזה." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "בחר את הכלל לבדיקה." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "יש להמתין רגע ולנסות לשנות את השם שוב." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "פולין" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "יציאה" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "פורטוגל" @@ -26872,11 +26555,6 @@ msgstr "לחץ כדי להוסיף ריאקציה" msgid "press to remove reaction" msgstr "לחץ כדי להסיר ריאקציה" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "התחזות לאדם אחר, כולל תוכן מטעה שנוצר על ידי AI." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "מנע מ-<0>{targetUserTag} לשלוח הודעות, להגיב ולהתחבר לערוצי קול למשך הזמן שצוין." @@ -27078,11 +26756,6 @@ msgstr "דובר בעדיפות" msgid "Privacy" msgstr "פרטיות" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "פרטיות או התחזות" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "הגדרות פרטיות" msgid "Privacy URL" msgstr "כתובת URL של פרטיות" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "הפרת פרטיות" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "הפרת פרטיות או דוקסינג" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "הפרת פרטיות או מעקב" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "סוג פרופיל" msgid "Profile updated" msgstr "הפרופיל עודכן" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "הפרת כללי פרופיל, שם משתמש או תמונת פרופיל" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "מקדם שנאה כלפי קבוצות מוגנות." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "מקדם, מגייס או מתאם פעילות אלימה קיצונית." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "קידום או הנחיות המעודדים פגיעה עצמית או הפרעות אכילה." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "הפרופיל שאתה מדווח עליו" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "כינויי גוף: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "הגן על חשבון ה-Visionary שלך על ידי הפעלת אימות דו-שלבי. תודה על תמיכתך ב-{productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "יש לספק לפחות מזהה משתמש או תג משתמש." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "יש לספק מזהה משתמש או שם משתמש של האדם שעליו מדווחים." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "יש לציין את שמך המלא כפי שמופיע במסמכים רשמיים לצורך ההצהרה." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "לחצני בחירה מאפשרים לבחור אפשרות אחת מת msgid "Radio group" msgstr "קבוצת לחצני בחירה" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "תיאום פשיטה" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "מוכן לקנות מתנה?" msgid "Ready to upgrade?" msgstr "מוכן לשדרג?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "סיבה" @@ -28291,8 +27924,8 @@ msgstr "זכור גודל ומיקום של החלון" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "הסר את {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "להסיר את {userName} מהקבוצה?" @@ -28419,8 +28052,8 @@ msgstr "הסר מהמועדפים" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "הסר מהקבוצה" @@ -28458,11 +28091,6 @@ msgstr "הסרה מקובצי GIF מועדפים לפי כתובת URL בלבד" msgid "Remove icon" msgstr "הסר אייקון" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "הסר אותה מהערוץ עבור כולם." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "הוסר מהמועדפים" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "הוסר/ה מהקבוצה" @@ -28919,28 +28547,18 @@ msgstr "דיווח על קהילה" msgid "Report a message" msgstr "דיווח על הודעה" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "דווח על הפרת כללים, או מצא כלים לניהול יצירת קשר והעדפות." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "דיווח על פרופיל משתמש" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "דיווח על קהילה" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "פרטי דיווח" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "דיווח על תוכן בלתי חוקי" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "דיווח על בעיה" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "דיווח על הודעה" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "דיווח על פרופיל" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "הדיווח נשלח" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "סוג הדיווח" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "דיווח על משתמש" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "תגית המשתמש שדווח (אופציונלי)" @@ -29100,6 +28716,10 @@ msgstr "דורש את כל מה שקיים בבינוני, בתוספת חברו msgid "Resend" msgstr "שלח שוב" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "שלח שוב ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "שלח שוב ({newSecondsRemaining} שנ')" @@ -29108,7 +28728,7 @@ msgstr "שלח שוב ({newSecondsRemaining} שנ')" msgid "Resend ({originalSecondsRemaining}s)" msgstr "שלח שוב ({originalSecondsRemaining} שנ')" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "שלח שוב ({resendCooldownSeconds} שנ')" @@ -29122,7 +28742,7 @@ msgstr "שלח שוב ({resendSecondsRemaining} שנ')" msgid "Resend ({secondsRemaining}s)" msgstr "שלח שוב ({secondsRemaining} שנ')" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "שלח קוד שוב" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "התפקידים עודכנו בהצלחה" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "רומניה" @@ -29947,7 +29567,7 @@ msgstr "רוויה" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "אמור שלום ל-<0>{displayName}. הצ'אט שלך מתחיל msgid "Scale" msgstr "קנה מידה" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "הונאות, תוכנות זדוניות או מידע שגוי" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "סרוק את קוד ה-QR באמצעות אפליקציית האימות שלך." @@ -30855,11 +30470,6 @@ msgstr "בחר" msgid "Select {accessibleName}" msgstr "בחר {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "בחר קטגוריה" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "יש לבחור קהילה שבה יש לך הרשאת {permissionName}, או צ'אט קבוצתי שאתה חבר בו." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "בחירת מדינה" @@ -30911,11 +30521,6 @@ msgstr "בחר כתובת URI להפניה מחדש" msgid "Select a scenario to apply..." msgstr "בחר תרחיש להחלה..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "בחר קטגוריית הפרה." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "בחר את החשבון שברצונך להתחבר איתו במכשי msgid "Select voice processing mode" msgstr "בחר מצב עיבוד קולי" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "בחר על מה ברצונך לדווח." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "בחר את מדינת המגורים שלך." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "בחר…" @@ -31037,13 +30642,6 @@ msgstr "בחירה: {0} (מקסימום {1})" msgid "Selections" msgstr "בחירות" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "פגיעה עצמית או התאבדות" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "שליחת הודעת פעולה (מוצגת בכתב נטוי)." msgid "Send animation" msgstr "שליחת אנימציה" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "שליחת דיווח נוסף" @@ -31138,7 +30736,7 @@ msgstr "כפתור שליחה" msgid "Send code" msgstr "שלח קוד" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "שליחת דיווח DSA" @@ -31158,9 +30756,9 @@ msgstr "שלח קבצים עד {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "שלח בקשת חברות" @@ -31220,8 +30818,8 @@ msgstr "שלח הודעות בשרשורים" msgid "Send messages, images, GIFs and emoji" msgstr "שלח הודעות, תמונות, גיפים ואימוג'י" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "שליחת דיווח" @@ -31255,7 +30853,7 @@ msgstr "לשלוח את ההצמדה הזו אחורה בזמן?" msgid "Send TTS messages" msgstr "שליחת הודעות טקסט לדיבור" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "שלח קוד אימות" @@ -31273,11 +30871,6 @@ msgstr "שלח הודעה קולית" msgid "Send:" msgstr "שליחה:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "שליחת תוכנות זדוניות או קישורים מסוכנים" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "שיתוף ערכת נושא" msgid "Share voice activity with all friends?" msgstr "לשתף פעילות קולית עם כל החברים?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "שתף את המידע שהצוות שלנו צריך כדי להעריך זאת." @@ -31709,11 +31302,6 @@ msgstr "שתף את המידע שהצוות שלנו צריך כדי להערי msgid "Share with a friend" msgstr "שתף עם חבר" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "שתף עם מנהלי הקהילה." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "חלון משותף" msgid "Shared window audio" msgstr "שמע החלון המשותף" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "משתף מידע אישי, עוקב אחרי משתמשים או מתאם פגיעה בפרטיות." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "שיתוף מידע אישי" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "מחוונים" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "סלובקיה" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "סלובניה" @@ -32889,11 +32467,6 @@ msgstr "הדמיית מצב איטי" msgid "Slowmode time remaining" msgstr "זמן שנותר במצב איטי" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "כינויי גנאי, שפה מבזה או התקפות נגד קבוצות מוגנות." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "משהו השתבש במהלך הכנת המדבקה. נסה קובץ אחר או נסה שוב בעוד רגע." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "משהו השתבש בעת הפרסום. נסה שוב בעוד רגע." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "פריסה מרווחת עם הפרדה ויזואלית ברורה בין ההודעות." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "ספרד" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "חשבון ספאם" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "סיווג ספאם" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "ספאם או הונאה" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "קהילה שמפיצה ספאם או הונאה" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "חשבון ספאם, הונאה או פישינג" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "ספאם, הונאות או פישינג" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "התחל ממוזער" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "התחל מחדש" @@ -33752,22 +33302,26 @@ msgstr "הישאר מחובר" msgid "Step {current} of {total}" msgstr "שלב {current} מתוך {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "שלב 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "שלב 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "שלב 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "שלב 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "שלב 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "להפסיק להיות ערוץ הודעות?" msgid "Stop hiding muted channels by default?" msgstr "להפסיק להסתיר ערוצים מושתקים כברירת מחדל?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "הפסקת הודעות ובקשות חברות." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "עצור בדיקת מיקרופון" @@ -33959,11 +33508,6 @@ msgstr "הפסק לתקן את Node.prototype insertBefore ו-removeChild. הא msgid "Stop ringing" msgstr "הפסק לצלצל" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "הפסקת הצפייה בתוכן ובחברים שלה." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "החלף סמיילים נפוצים כמו :) ו-<3 באימוג'י כאשר שולחים הודעות" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "שוודיה" @@ -34804,11 +34348,6 @@ msgstr "הקש כדי להוסיף הערה" msgid "tar.gz archive" msgstr "ארכיון tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "מכוון נגד אנשים על בסיס מאפיינים מוגנים." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "תנאי שירות" msgid "Terms URL" msgstr "כתובת URL של תנאים" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "טרור או קיצוניות אלימה" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "תאילנדית" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "תודה שעזרת לשמור על הבטיחות ב-{productName}. נבדוק את הדיווח שלך בהקדם האפשרי." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "תודה שהעלית את זה" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "תודה שסיפרת לנו. זה לא מפר את הכללים שלנו כשלעצמו, ולכן לא שלחנו דיווח." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "תודה שסיפרת לנו. זה לא מפר את הכללים שלנו כשלעצמו, ולכן לא שלחנו דיווח. אם זה מכוון כלפי מישהו או כולל כינויי גנאי, דווח על כך שוב ובחר \"תוכן פוגעני או מזיק\"." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "הפעולה לא הצליחה. יש לנסות שוב או לבטל." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "זה לא נראה כמו צבע תקין. נסה hex, rgb(), hsl(), או שם צבע CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "זה לא נראה כמו כתובת URL תקינה." @@ -35104,6 +34653,11 @@ msgstr "האפליקציה {PRODUCT_NAME} במכשיר אחר שלך מציגה msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "האפליקציה {PRODUCT_NAME} לא נכנסה לחשבון. אפשר לסגור את הלשונית הזו." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "צוות הבטיחות של {productName} יבדוק את הדיווח שלך. לא נחשוף שהדיווח הגיע ממך." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "כתובת ה-redirect_uri שצוינה אינה רשומה עבור ה msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "ה-redirect_uri שסופק חייב להשתמש ב-HTTP או ב-HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "טופס הדיווח השתנה. אנא התחל מחדש." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "תגיות שם המשתמש במופע זה כבר הוגדרו. לא ניתן לשנות אותן יותר." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "קוד האימות שגוי או שפג תוקפו." @@ -36115,13 +35674,8 @@ msgstr "החבר הזה כבר לא מחובר לערוץ הקולי." msgid "This message can only be forwarded to age-restricted channels" msgstr "לא ניתן להעביר הודעה זו אלא לערוצים המיועדים לגיל מסוים" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "ההודעה הזו כבר נמחקה." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "ההודעה הזו כבר פורסמה" @@ -36279,11 +35833,6 @@ msgstr "השרשור הזה סגור. שליחת הודעה תפתח אותו מ msgid "This thread is locked. Only moderators can send messages." msgstr "השרשור הזה נעול. רק מנהלים יכולים לשלוח הודעות." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "המשתמש הזה" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "משתמש זה הגביל את הפרופיל שלו. פרטים מסוימים מוסתרים מאנשים שאינם חבריו." @@ -36292,11 +35841,6 @@ msgstr "משתמש זה הגביל את הפרופיל שלו. פרטים מסו msgid "This user has no roles in this community." msgstr "למשתמש זה אין תפקידים בקהילה זו." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "משתמש זה כבר נחסם מהקהילה." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "משתמש זה אינו זמין עוד." @@ -36465,16 +36009,6 @@ msgstr "השרשור עודכן" msgid "Threads" msgstr "שרשורים" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "איומים, מעקב במרחבים שונים או יצירת קשר לא רצויה." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "איומים, הטרדה או פגיעה" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "הוטל פסק זמן על {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "הטלת פסק זמן" @@ -36787,6 +36321,11 @@ msgstr "גוון" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "ממפה תמונות HDR לטווח רגיל ומפחית את בהירות השיא." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "נשלחו יותר מדי קודים. יש להמתין {duration} ולנסות שוב." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "העברת בעלות על הקהילה" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "להעביר את בעלות הקבוצה אל {userName}?" @@ -37561,7 +37100,7 @@ msgstr "בטל תחילה את החסימה כדי לשלוח בקשת חברו #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "בטל חסימת משתמש" @@ -37607,16 +37146,6 @@ msgstr "בטל את השתקת השמע בכל המכשירים" msgid "Undeafen yourself" msgstr "בטל את השתקת השמע שלך" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "משתמש קטין או חשש לבטיחות ילדים" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "משתמש/ת מתחת לגיל המותר" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "עד שאפעיל מחדש" msgid "Unverified email" msgstr "אימייל לא מאומת" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "התנהגות לא רצויה או תוכן למבוגרים במקום הלא נכון." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "התנהגות, הערות או בקשות לא רצויות בעלות תוכן למבוגרים." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "עד {DISCOVERY_MAX_TAGS} תגיות עוזרות לאנשים למצוא את הקהילה שלך. הן מופיעות בחיפוש בגילוי." @@ -38840,11 +38359,6 @@ msgstr "שימוש בערכת נושא בהירה" msgid "Use native title bar" msgstr "השתמש בשורת כותרת מקורית" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "יש להשתמש רק אם זה מפר באופן ברור את הכללים של {productName} ולא מתאים לאף אחת מהאפשרויות שלעיל." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "בשימוש בקהילה זו בלבד." msgid "User" msgstr "משתמש" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "המשתמש נראה קטין, או מעורב בפיתוי קטינים או בניצול ילדים." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "ניפוי באגים של משתמש" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "מזהה משתמש (אופציונלי)" @@ -39061,12 +38570,12 @@ msgstr "משתמש לא נמצא" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "פרופיל משתמש" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "פרופיל משתמש: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "הגדרות משתמש" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "תגית משתמש (אופציונלי)" @@ -39339,7 +38848,7 @@ msgstr "קהילה מאומתת" msgid "Verify" msgstr "אימות" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "אימות קוד" @@ -39368,7 +38877,7 @@ msgstr "אימות זהותך" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "אמת את כתובת האימייל שלך" @@ -39718,7 +39227,7 @@ msgstr "הצגת קודים" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "הצגת פרופיל קהילה" @@ -39751,7 +39260,7 @@ msgstr "הצגת מתנות" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "הצגת פרופיל גלובלי" @@ -39847,26 +39356,6 @@ msgstr "צופה מצטרף לשידור" msgid "Viewer leaves stream" msgstr "הצופה עזב את השידור" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "קטגוריית הפרה" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "ההפרה נמצאת בפרופיל המשתמש, לא בהודעה ספציפית." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "אלימות או איומים באלימות" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "תוכן אלים או גרפי" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "שינינו את גודל האימוג'י הזה ודחסנו אותו msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "שינינו את גודל המדבקה ודחסנו אותה ל-320x320 פיקסלים, אבל היא עדיין {fileSize}. המגבלה היא {maxSize}. נסה תמונה פשוטה יותר, פחות צבעים או קובץ מקור קטן יותר." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "שלחנו קוד לכתובת {email}." @@ -40472,7 +39961,7 @@ msgstr "נעבד זאת בהקדם האפשרי. תקבל אימייל כשהא msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "נשחזר את כתובת האימייל הקודמת שלך, נתנתק מהסשנים הישנים, נבטל אימות רב-שלבי ונאבטח את החשבון שלך עם סיסמה חדשה." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "נשלח קוד אימות קצר כדי לוודא שתוכל לקבל עדכונים לגבי הדיווח הזה." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "מערב וירג'יניה" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "איזה כלל הופר?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "מה קורה?" msgid "What's new" msgstr "מה חדש" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "מה הסיבה לדיווח שלך?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "כשלא מוגדר תאריך סף מותאם אישית, חברים ללא הרשאת <0>{readMessageHistoryPermissionLabel} לא יכולים להציג הודעות קודמות. הם יראו רק הודעות בזמן אמת כשהן מגיעות, והן ייעלמו כשהם יפעילו מחדש את האפליקציות שלהם." @@ -40832,11 +40321,6 @@ msgstr "אילו קהילות" msgid "Which conversations" msgstr "אילו שיחות" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "איזה כלל הופר?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "כאשר דיבור בלחיצה מופעל, קיצור הדרך שולט במיקרופון שלך, ולכן כפתור ההשתקה מושבת." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "לא ניתן לצרף קבצים בערוץ זה." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "אי אפשר להוסיף את עצמך כחבר" @@ -41341,7 +40825,7 @@ msgstr "אינך יכול לשלוח הודעה למשתמש זה" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "עליך להסכים לתנאי השירות כדי ליצור חשבון" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "יש לאמת את כתובת האימייל שלך לפני שליחת דיווח." @@ -41891,6 +41375,11 @@ msgstr "אתה משתמש בתעריף מדור קודם. המחיר הנוכח msgid "You're sending messages too quickly" msgstr "אתה שולח הודעות מהר מדי" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "אתה שולח דיווחים מהר מדי. נסה שוב מאוחר יותר." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "אתה מציג הודעות ישנות יותר" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "הוספת יותר אנשים ממה שמותר בצ'אט קבוצתי. הסר כמה ונסה שוב." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "כבר דיווחת על ההודעה הזו." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "כבר דיווחת על הפרופיל הזה היום." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "החשבונות וההגדרות שלך לא השתנו או נמחקו msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "הפעולה שלך לא הושלמה כי היא סומנה על ידי מערכות הבטיחות שלנו. אם לדעתך מדובר בטעות, אנא פנה לתמיכה." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "התשובות שלך" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "הבקשה שלך ממתינה לבדיקה. עדיין באפשרותך לעדכן את פרטי הרישום או לבטל את הבקשה." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "הדפדפן שלך דורש אינטראקציה של המשתמש לפני שניתן להשמיע אודיו. לחץ על הכפתור למטה כדי לאפשר צ'אט קולי." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "השינויים שלך יגיעו לכל קהילה שעוקבת אחר הערוץ הזה, וזה עשוי לקחת דקה. כל הודעה שפורסמה מאפשרת 3 עריכות מהירות, ואז 1 כל 20 דקות." @@ -42311,6 +41815,11 @@ msgstr "הכינוי החדש שלך, או השאר ריק כדי לאפס או msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "ערכת השחזור הישנה שלך כבר לא עובדת. שמור את החדשה במקום בטוח." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "האפשרויות שלך" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "האזור שלך" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "תשלום החידוש נכשל, אבל <0/> יישארו פעילות עד <1>{graceDate}. עדכן את אמצעי התשלום לפני כן כדי לשמור על המנוי שלך." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "הדיווח שלך לא נשלח. נסה שוב." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "המנוי שלך יעבור לחיוב שנתי במועד החידוש msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "קובץ ה-CSS של העיצוב גדול מדי לשיתוף. צמצם אותו ונסה שוב." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "שם המשתמש שלך (אופציונלי)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index c8d9a6f8d..56c906435 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} बाकी" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {सदस्य} other {सदस्य}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {आपका इनवाइट लिंक # सेकंड में समाप्त हो जाएगा।} other {आपका इनवाइट लिंक # सेकंड में समाप्त हो जाएगा।}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} चुने गए" @@ -2957,11 +2957,6 @@ msgstr "अकाउंट डेटा" msgid "Account details unavailable" msgstr "खाता विवरण अनुपलब्ध" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "यह अकाउंट स्पैम करने, स्कैम करने या प्लेटफ़ॉर्म का गलत इस्तेमाल करने के लिए है।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "जोड़ा गया: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "जोड़ा गया: {createdDate} • आखिरी बार इस्तेमाल किया गया: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "अतिरिक्त टिप्पणियाँ (वैकल्पिक)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "पहले ही रिडीम किया गया" msgid "Already set to cancel" msgstr "पहले से रद्द करने के लिए सेट है" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "इस मैसेज को {productName} सुरक्षा टीम को भी रिपोर्ट करें" @@ -4576,11 +4566,6 @@ msgstr "सालाना" msgid "Another checkbox" msgstr "एक और चेकबॉक्स" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "नियम का एक और स्पष्ट उल्लंघन" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "एक और राउंड चेकबॉक्स" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "ऑडियो अपलोड" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "ऑस्ट्रिया" @@ -5620,6 +5605,7 @@ msgstr "अभी दूर हूँ" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "अभी दूर हूँ" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "वापस" @@ -5788,9 +5775,7 @@ msgstr "बैकअप कोड फिर से जनरेट किए ग msgid "Badge" msgstr "बैज" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "बैन करें" @@ -5819,7 +5804,7 @@ msgstr "बैन की अवधि" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "कम्युनिटी से सदस्यों को बै msgid "Ban reason" msgstr "बैन का कारण" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "इस यूज़र को बैन करें" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "बैंडविड्थ" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "बैन किया गया" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "कम्युनिटी से {targetUserTag} को बैन किया गया" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "इस तारीख से पहले" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "बेल्जियम" @@ -6031,7 +6006,7 @@ msgstr "बिटरेट" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "ब्लॉक करें" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "ब्लॉक करें" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name} को ब्लॉक करें" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "सभी कम्युनिटी के लिए ब्लॉक msgid "Block spoiler" msgstr "ब्लॉक स्पॉइलर" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "इस यूज़र को ब्लॉक करें" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "यूज़र को ब्लॉक करें" msgid "Blocked" msgstr "ब्लॉक किए गए" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "ब्लॉक किया गया" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "बिल्ट-इन ट्रांसलेटर" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "बुल्गारिया" @@ -6519,16 +6500,6 @@ msgstr "बुल्गारियाई" msgid "Bulk delete" msgstr "एक साथ मिटाएँ" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "धमकाना, बार-बार अवांछित संपर्क, पीछा करना या लक्षित दुर्व्यवहार।" - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "धमकाना, धमकियाँ देना, नफ़रत फैलाना, हिंसा, रेड करना या खुद को नुकसान पहुँचाने वाली सामग्री।" - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "कैलिफ़ोर्निया" msgid "Call" msgstr "कॉल" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "कॉल और ग्रुप चैट सेटिंग्स" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "बैनर बदलें" msgid "Change chat embed background" msgstr "चैट एम्बेड बैकग्राउंड बदलें" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "ईमेल बदलें" @@ -7150,8 +7116,8 @@ msgstr "दोस्त का उपनाम बदलें" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "ग्रुप का उपनाम बदलें" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "भाषा बदलें" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "ग्रुप में अपना उपनाम बदलें" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "अपना उपनाम बदलें" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "मालिक बदलें" @@ -7283,16 +7249,6 @@ msgstr "वॉइस चैनल के लिए वॉइस क्षेत msgid "Change which voice region this channel uses." msgstr "इस चैनल के लिए वॉइस क्षेत्र बदलें।" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "बदलें कि आपको कौन कॉल या ऐड कर सकता है।" - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "बदलें कि कौन आप तक पहुँच सकता है।" - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "अधिकृत करने वाले लिंक के लि msgid "Check your inbox for a verification email." msgstr "अपने इनबॉक्स में वेरिफ़िकेशन ईमेल देखें।" +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "अपनी रिपोर्ट जाँचें" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "चेकबॉक्स" @@ -7901,21 +7862,6 @@ msgstr "इस अकाउंट के लिए चेकआउट ब्ल msgid "Checkout unavailable" msgstr "चेकआउट अनुपलब्ध है" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "बच्चों की सुरक्षा से जुड़ी चिंताएँ" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "बच्चों की सुरक्षा या नाबालिगों का शोषण" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "बच्चों की सुरक्षा या वयस्क सामग्री" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "विकल्प" msgid "Choices: {choiceList}" msgstr "विकल्प: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "चुनें" @@ -8122,6 +8068,11 @@ msgstr "वह श्रेणी चुनें जो आपकी कम् msgid "Choose the premium model" msgstr "प्रीमियम मॉडल चुनें" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "वजह फिर से चुनें" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "उपहार क्लेम करें" msgid "Claim your account" msgstr "अपना अकाउंट क्लेम करें" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "रिपोर्ट भेजने के लिए अपना अकाउंट क्लेम करें और अपना ईमेल वेरिफ़ाई करें।" @@ -8352,12 +8303,12 @@ msgstr "यह उपहार पाने के लिए अपना अक #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "फ्रेंड रिक्वेस्ट भेजने के लिए अपना अकाउंट क्लेम करें।" -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "अपनी पहचान का दावा करें और रिपोर्ट भेजें।" @@ -8378,11 +8329,6 @@ msgstr "1:1 कॉल शुरू करने या उसमें शाम msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "{premiumProductName} सदस्यता चालू करने के लिए अपना उपहार क्लेम करें!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "किसी अन्य व्यक्ति, ब्रांड या संगठन के रूप में दावा करना।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "खोज इनपुट साफ़ करें" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "मॉडल बंद करें" msgid "Close popout" msgstr "पॉपआउट बंद करें" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "यह DM बंद करें" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "ट्रे में बंद करें" msgid "Close window" msgstr "विंडो बंद करें" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "{dmDisplayName} के साथ अपनी मौजूदा DM बंद करें। इससे यूज़र ब्लॉक नहीं होगा, और आप बाद में DM फिर से खोल सकते हैं।" - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "क्या आप {displayName} के साथ अपनी DM बंद करना चाहते हैं? आप इसे कभी भी फिर से खोल सकते हैं।" @@ -8837,7 +8773,7 @@ msgstr "कोल थीम" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "कोड" @@ -8868,7 +8804,7 @@ msgstr "{productName} ऐप से कोड" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "कोड फिर से भेजा गया" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "आप जिन समुदायों से जुड़ सकते हैं" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "कम्युनिटी" @@ -9131,7 +9065,7 @@ msgstr "कम्युनिटी डीफ़ेन" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "कम्युनिटी डीबग" @@ -9150,16 +9084,6 @@ msgstr "कम्युनिटी मिटा दी गई" msgid "Community DM" msgstr "कम्युनिटी DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "कम्युनिटी स्पैम, स्कैम या प्लेटफ़ॉर्म के दुरुपयोग के लिए ही मौजूद है।" - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "कम्युनिटी से लोगों का एक साथ हमला करना या जानबूझकर परेशान करना आसान हो जाता है।" - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "कम्युनिटी आइकॉन" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "कम्युनिटी आईडी" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "कम्युनिटी आईडी ज़रूरी है।" @@ -9526,6 +9450,11 @@ msgstr "नए पासवर्ड की पुष्टि करें" msgid "Confirm password" msgstr "पासवर्ड की पुष्टि करें" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "रिपोर्ट भेजने के लिए कथन की पुष्टि करें।" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "अपने ब्राउज़र में जारी रखे msgid "Continue to checkout" msgstr "चेकआउट जारी रखें" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "कम्युनिटी की रिपोर्ट करना जारी रखें" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "यूज़र की रिपोर्ट करना जारी रखें" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "इस चैनल को टेक्स्ट चैनल में msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "आने वाले कॉन्टेंट को स्पीच में बदलता है, भले ही वह /tts से आया हो या नहीं।" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "लोगों या कम्युनिटी के ख़िलाफ़ रेड, ब्रिगेडिंग या उत्पीड़न का समन्वय करता है।" - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "यूआरएल क्लिपबोर्ड पर कॉपी #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "यूआरएल क्लिपबोर्ड पर कॉपी #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "मैसेज आईडी कॉपी करें" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "मैसेज लिंक कॉपी करें" @@ -10643,6 +10553,11 @@ msgstr "पोस्ट लोड नहीं हो सके। बाद म msgid "Couldn't load settings" msgstr "सेटिंग्स लोड नहीं हो सकीं" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "रिपोर्ट फ़ॉर्म लोड नहीं हो सका।" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "यह ऐप्लिकेशन लोड नहीं हो सका" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "इमेज प्रोसेस नहीं की जा सकी" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "यह संदेश प्रकाशित नहीं हो सका" @@ -10825,11 +10740,6 @@ msgstr "इनवाइट भेजा नहीं जा सका" msgid "Couldn't send invite. Try again." msgstr "इनवाइट भेजा नहीं जा सका। फिर से कोशिश करें।" -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "यह भेजा नहीं जा सका। फिर से कोशिश करें।" - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "काउंटडाउन टाइमर" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "निवास का देश" @@ -11301,13 +11211,8 @@ msgstr "बनाया गया:" msgid "Credentials" msgstr "क्रेडेंशियल" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "विश्वसनीय धमकियाँ, ग्राफिक हिंसा या हिंसा का महिमामंडन।" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "क्रोएशिया" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "बहुत कम CPU इस्तेमाल के साथ तय लाउडनेस थ्रेशोल्ड से नीचे का ऑडियो काट देता है।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "साइप्रस" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "चेक" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "चेक गणराज्य" @@ -11965,7 +11870,7 @@ msgstr "चैनल डीबग करें" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "कम्युनिटी डीबग करें" @@ -12151,7 +12056,6 @@ msgstr "डेलावेयर" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "डेलावेयर" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "थीम मिटाएँ?" msgid "Delete this invite? Can't be undone." msgstr "यह इनवाइट मिटाएँ? इसे पूर्ववत नहीं किया जा सकता है।" -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "यह मैसेज मिटाएँ" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "यह मैसेज मिटाएँ? इसे पूर्ववत नहीं किया जा सकता।" #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "इस संदेश को हटा दें? इसे वापस नहीं लाया जा सकता। यह संदेश हर उस समुदाय से भी हटा दिया जाएगा जो इस चैनल को फॉलो करता है।" @@ -12461,11 +12359,6 @@ msgstr "इस कम्युनिटी में अपने मैसे msgid "Delete your messages in this conversation?" msgstr "इस बातचीत में अपने मैसेज मिटाएँ?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "मिटाया गया" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions} को अस्वीकार कर दिया गया" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "डेनमार्क" @@ -12554,11 +12447,6 @@ msgstr "स्टिकर का वर्णन करें" msgid "Describe this media for screen readers" msgstr "स्क्रीन रीडर के लिए इस मीडिया का वर्णन करें" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "बताएं कि यह सामग्री क्यों अवैध है" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "अलग बैनर" msgid "Detail" msgstr "डिटेल" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "विवरण" @@ -13315,11 +13203,6 @@ msgstr "डिस्प्ले नाम (वैकल्पिक)" msgid "Display scaling" msgstr "डिस्प्ले स्केलिंग" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "मैलवेयर, क्रेडेंशियल चुराने वाले टूल या नुकसान पहुँचाने वाली दूसरी फ़ाइलें बाँटता है।" - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM और फ्रेंड रिक्वेस्ट सेटिंग्स" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "डॉक्यूमेंटेशन" msgid "Doesn't allow being added to group DMs" msgstr "ग्रुप DM में जोड़े जाने की अनुमति नहीं देते" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "ब्लॉक नहीं होगा। आप बाद में फिर से खोल सकते हैं।" - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "इसके बजाय दान करें" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "डेवलपर टूल और स्टैक ट्रेस क msgid "Download video" msgstr "वीडियो डाउनलोड करें" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "डॉक्सिंग, निजी जानकारी उजागर करना या पीछा करना।" - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "डॉक्सिंग, पीछा करना, किसी और बनकर पेश आना या अनुचित प्रोफ़ाइल।" - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "{tokenLabel} के लिए रंग एडिट करें" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "कम्युनिटी प्रोफ़ाइल एडिट करें" @@ -14043,7 +13908,7 @@ msgstr "इस चैनल में रोल और सदस्यों क #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "प्रोफ़ाइल एडिट करें" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "प्रोफ़ाइल का स्थानीय समय बदलें" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "प्रकाशित संदेश संपादित करें?" @@ -14191,13 +14056,13 @@ msgstr "{windowEndsOn} तक रिफंड के लिए पात्र #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "ईमेल" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "ईमेल पता" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "ईमेल पता आवश्यक है।" @@ -14721,16 +14586,6 @@ msgstr "नए स्क्रीन शेयर के लिए एन्क msgid "Encoder, SVC, and bitrate presets" msgstr "एनकोडर, एसवीसी और बिटरेट प्रीसेट" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "खुद को नुकसान पहुँचाने के लिए उकसाता है" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "आत्महत्या, खुद को नुकसान पहुँचाने या ईटिंग डिसऑर्डर को बढ़ावा देता है।" - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "एंड-टू-एंड एन्क्रिप्शन उपल msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "एंड-टू-एंड एन्क्रिप्शन उपलब्ध नहीं है क्योंकि इस वॉइस चैनल में एक असमर्थित प्रतिभागी है।" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "नाबालिगों को खतरे में डालता है या बाल-शोषण वाली सामग्री होस्ट करता है।" - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "ABCD-1234 फ़ॉर्मैट में कोड डालें।" @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "मान्य {theOtherPlatform} टेम्पलेट यूआरएल या कोड डालें।" #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "एक मान्य ईमेल पता डालें।" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "एक वैध मैसेज लिंक डालें।" @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "अपने ऑथेंटिकेटर ऐप से {digitCount} अंकों वाला कोड डालें।" #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "जारी रखने से पहले कोड डालें।" @@ -15008,7 +14858,7 @@ msgstr "Enter दबाकर <0><1>सेव करें" msgid "Enter username" msgstr "यूज़रनेम डालें" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "वेरिफ़िकेशन कोड डालें" @@ -15017,6 +14867,11 @@ msgstr "वेरिफ़िकेशन कोड डालें" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "अपना ईमेल पता डालें और हम आपको पासवर्ड रीसेट करने के लिए एक लिंक भेजेंगे।" +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "रिपोर्ट भेजने के लिए अपना पूरा कानूनी नाम दर्ज करें।" + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape दबाकर <0><1>रद्द करें" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "एस्टोनिया" @@ -15412,6 +15267,16 @@ msgstr "{earliest} को समाप्त होगा" msgid "Expires:" msgstr "समाप्ति:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "समस्या बताएं" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "रिपोर्ट भेजने के लिए समस्या बताएं।" + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "बाहरी लिंक खतरनाक हो सकते ह msgid "Extra large" msgstr "बहुत बड़ा" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "कट्टरपंथी कम्युनिटी" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "वैनिटी यूआरएल नहीं हटाया जा सका। फिर से कोशिश करें।" #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "कोड दोबारा नहीं भेजा जा सका। फिर से कोशिश करें।" @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "प्रीमियम स्थिति रीसेट नहीं हो पाई।" #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "कोड नहीं भेजा जा सका। फिर से कोशिश करें।" @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "मैसेज भेजा नहीं जा सका। विकल्पों के लिए दबाकर रखें।" #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "रिपोर्ट नहीं भेजी जा सकी। फिर से कोशिश करें।" @@ -15840,11 +15700,6 @@ msgstr "{startLabel} से शुरू होने वाले इमोज msgid "Failed to upload emojis. Try again." msgstr "इमोजी अपलोड नहीं हो पाए। फिर से कोशिश करें।" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "झूठे दावे जिनसे वास्तविक दुनिया में नुकसान होने की संभावना है।" - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "सही स्टिकर ढूंढें" msgid "Fingerprint" msgstr "फ़िंगरप्रिंट" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "अकाउंट सेटअप पूरा करें" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "पहले अकाउंट सेटअप पूरा करें" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "फ्रेंड रिक्वेस्ट भेजने के लिए साइन अप पूरा करें।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "फ़िनलैंड" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "फ़िनिश" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "पहला और अंतिम नाम" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "30 FPS से ज़्यादा फ़्रेम रेट के लिए {premiumProductName} की ज़रूरत होगी" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "फ़्रांस" @@ -16834,10 +16689,10 @@ msgstr "पूरा" msgid "Full dynamic range" msgstr "फुल डायनामिक रेंज" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "पूरा कानूनी नाम" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "पूरा कानूनी नाम (बाल यौन शोषण की रिपोर्ट के लिए वैकल्पिक)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "जर्मन" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "जर्मनी" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "वापस जाएँ" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "वापस जाएं और मान्य ईमेल पता दर्ज करें।" @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "{username}, आपको देखकर अच्छा लगा! आपका स्वागत है।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "ग्रीस" @@ -17572,11 +17427,6 @@ msgstr "यूनानी" msgid "Grid view" msgstr "ग्रिड व्यू" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "ग्रूमिंग या बाल-शोषण से जुड़ी सामग्री।" - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "हैंडल" msgid "Hang out with voice, video and screen share" msgstr "आवाज़, वीडियो और स्क्रीन शेयर के साथ हैंग आउट करें" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "उत्पीड़न" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "वयस्क सामग्री से जुड़ा उत्पीड़न" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "उत्पीड़न या धमकाना" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "उत्पीड़न या पीछा करना" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "उत्पीड़न या लक्षित दुर्व्यवहार" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "उत्पीड़न या धमकियाँ" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "हार्डवेयर कुंजी" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "ज़्यादातर Windows और macOS सिस्टम पर हार्डवेयर एक्सीलरेशन के साथ चलता है। पुराने डिवाइस के लिए भरोसेमंद।" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "हानिकारक गलत जानकारी" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "कभी खरीदा है" msgid "Has ever purchased override" msgstr "कभी खरीदा गया ओवरराइड" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "नफ़रत फैलाने वाला भाषण" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "अपनी स्क्रीन शेयरिंग छिपाए msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "इस चैनल में इमेज और वीडियो पर डाउनलोड, ब्राउज़र में खोलें और कॉपी बटन छिपाता है।" +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "उनके मैसेज छिपाए जाते हैं और वे आपको मैसेज नहीं भेज पाते" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "हंगेरियन" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "हंगरी" @@ -18399,6 +18212,11 @@ msgstr "मैं एक टूलटिप हूँ" msgid "I changed my mind" msgstr "मैंने अपना मन बदल लिया" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "सद्भावना से मेरी यह पुष्टि है कि इस सूचना में दी गई जानकारी और आरोप सटीक और पूर्ण हैं।" + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "निष्क्रियता सेटिंग्स" msgid "Idle timeout" msgstr "निष्क्रियता टाइमआउट" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "अगर कोई नाबालिग शामिल है, तो इसके बजाय \"{childSafetyReasonName}\" का इस्तेमाल करें।" - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "अगर उस पते का कोई खाता है, तो msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "अगर macOS {productName} को बंद करने और फिर से खोलने के लिए कहता है, तो बाद में चुनें।" -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "अगर कोई तुरंत खतरे में है और आप सुरक्षित रूप से ऐसा कर सकते हैं, तो स्थानीय आपातकालीन सेवाओं से संपर्क करें।" +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "अगर कोई तत्काल खतरे में है, तो पहले स्थानीय आपातकालीन सेवाओं से संपर्क करें।" #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "अगर किसी ने आपसे यहां कुछ पेस्ट करने के लिए कहा है, तो यह एक स्कैम है जिससे उन्हें आपके {productName} अकाउंट का एक्सेस मिल सकता है।" -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "अगर इसमें CSAM या किसी नाबालिग का शोषण शामिल है, तो रिपोर्ट अभी भेजें और सामग्री को दोबारा शेयर न करें।" - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "अगर यह एक विश्वसनीय आसन्न ख़तरा है, तो स्थानीय आपातकालीन सेवाओं से भी संपर्क करें।" - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "अगर यह एक आसन्न आतंकवादी खतरा है, तो स्थानीय आपातकालीन सेवाओं से भी संपर्क करें।" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "अगर यह रिपोर्ट इस कम्युनिटी के किसी खास मैसेज के बारे में है, तो उस मैसेज की रिपोर्ट करें। मैसेज रिपोर्ट से हमारी सुरक्षा टीम को सबसे साफ़ जानकारी मिलती है, और कमेंट में जानकारी जोड़ने से हमें इसकी तेज़ी से समीक्षा करने में मदद मिल सकती है। पूरी कम्युनिटी की रिपोर्ट तभी करें, जब मैसेज की रिपोर्ट करने से बड़ी समस्या का पता न चल पाए।" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "अगर यह रिपोर्ट किसी खास मैसेज के बारे में है, तो उस मैसेज की रिपोर्ट करें। मैसेज रिपोर्ट से हमारी सुरक्षा टीम को सबसे साफ़ जानकारी मिलती है, और कमेंट में जानकारी जोड़ने से हमें उसकी तेज़ी से समीक्षा करने में मदद मिल सकती है। यूज़र की रिपोर्ट तभी करें, जब वह मैसेज बड़ी समस्या को पूरी तरह न दिखाता हो।" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "अगर यह रिपोर्ट खास मैसेज के बारे में है, तो सबसे काम के मैसेज की रिपोर्ट करें। मैसेज रिपोर्ट से हमारी सुरक्षा टीम को सबसे साफ़ जानकारी मिलती है, और कमेंट में जानकारी जोड़ने से हमें इसकी तेज़ी से समीक्षा करने में मदद मिल सकती है। यूज़र की रिपोर्ट तभी करें, जब मैसेज की रिपोर्ट करने से बड़ी समस्या का पता न चल पाए।" +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "अगर आपको लगता है कि यह अवैध है, तो बताएं कि कौन सा कानून और क्यों।" #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "इस चैनल के स्लोमोड कूलडाउन msgid "Ignore virtual" msgstr "वर्चुअल को अनदेखा करें" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "अवैध गतिविधि" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "अवैध गतिविधि या कुछ और" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "अवैध बिक्री, अपराध में मदद, या ऐसा साफ़ नियम उल्लंघन जो ऊपर के विकल्पों में फिट न हो।" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "अवैध बिक्री, अपराध में मदद या गैरकानूनी गतिविधि।" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "इमेज" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "आपके क्लिपबोर्ड से पेस्ट की गई इमेज अटैचमेंट के तौर पर भेजी जाती हैं, और आपको इस चैनल में फ़ाइलें अटैच करने की अनुमति नहीं है।" -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "फ़र्ज़ी पहचान" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "फ़र्ज़ी पहचान या भ्रामक मीडिया" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "निष्क्रिय" msgid "Inactive timeout" msgstr "निष्क्रियता टाइमआउट" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "अनुपयुक्त प्रोफ़ाइल" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "पीडीएफ और प्रिंटआउट में मेरे दो-कारक बैकअप कोड शामिल करें" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "कम्युनिटी आईडी शामिल करें।" @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "इनवाइट बैकग्राउंड" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "इनवाइट कोड (वैकल्पिक)" @@ -19471,7 +19220,7 @@ msgstr "इनवाइट मास्किंग" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "सदस्यों को आमंत्रित करें" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "आईपी पता अधिकृत किया गया" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "आयरलैंड" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "इटैलिक" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "इटली" @@ -20120,7 +19869,7 @@ msgstr "कुंजियाँ" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "बाद में" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "लातविया" @@ -20291,11 +20040,6 @@ msgstr "और जानें" msgid "Learn more about Visionary" msgstr "Visionary के बारे में ज़्यादा जानें" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "छोड़ें" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "निजी थ्रेड छोड़ें" msgid "Leave silently" msgstr "चुपचाप छोड़ें" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "कम्युनिटी छोड़ें" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "सदस्य सूची में इस रोल वाले सदस्यों को उनके अपने सेक्शन में दिखाता है।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "लिथुआनिया" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "लोड हो रहा है..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "लोड हो रहा है…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "कम" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "लक्ज़मबर्ग" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "{localizedTime} के लिए रखरखाव निर्धारित है। अनुमानित अवधि: {duration}।" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "क्या आप {userName} को ग्रुप का मालिक बनाना चाहते हैं? आपके मालिक के विशेषाधिकार खत्म हो जाएँगे।" #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "ग्रुप का मालिक बनाएं" @@ -21091,38 +20830,21 @@ msgstr "ग्रुप का मालिक बनाएं" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "सुनिश्चित करें कि यह कोड {PRODUCT_NAME} ऐप में मौजूद कोड से मेल खाता है।" +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "भेजने से पहले सुनिश्चित करें कि यह सही दिख रहा है।" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "इंस्टेंस को अपना बनाएं" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "हानिकारक लिंक" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "माल्टा" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "मैलवेयर वितरण" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "मैलवेयर या खतरनाक लिंक" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "मैलवेयर, क्रेडेंशियल चोरी या नुकसान पहुँचाने वाली फ़ाइलें।" - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "अपनी स्क्रीन या स्ट्रीम शे msgid "Mask Visionary as subscription" msgstr "विजनरी को सदस्यता के रूप में दिखाएँ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "बड़े पैमाने पर स्पैम, धोखाधड़ी, फ़र्ज़ी गिवअवे या अकाउंट का गलत इस्तेमाल।" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "वयस्क सामग्री मीडिया गेट" msgid "Mature content not allowed" msgstr "वयस्क सामग्री की अनुमति नहीं है" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "वयस्क सामग्री या उत्पीड़न" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "वयस्क सामग्री या असुरक्षित गेटिंग" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "वयस्क सामग्री ओवरराइड" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "वयस्क सामग्री नीति का उल्लंघन" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "बिना उचित गेटिंग के वयस्क सामग्री।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "मैसेज" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "मैसेज लिंक" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "मैसेज लिंक" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "DM सूची में मैसेज प्रीव्यू" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "संदेश प्रकाशित" @@ -22211,6 +21908,11 @@ msgstr "मैसेज का समय" msgid "Message unpinned" msgstr "मैसेज अनपिन किया गया" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "आप जिस मैसेज की रिपोर्ट कर रहे हैं" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "मिनेसोटा" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "नाबालिगों के लिए जोखिम, गलत जगह पर वयस्क सामग्री या अवांछित आचरण।" - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "ज़्यादा" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "ज़्यादा ऐक्शन" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "नेस्टेड" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "नीदरलैंड" @@ -24099,7 +23796,7 @@ msgstr "कोई परिणाम नहीं" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "कोई परिणाम नहीं मिला" @@ -24858,6 +24555,16 @@ msgstr "केवल आपके द्वारा आमंत्रित msgid "Only places I can't access anymore" msgstr "केवल वे जगहें जहाँ अब मेरा एक्सेस नहीं है" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "केवल वही रिपोर्ट करें जो आपको ईमानदारी से लगता है कि नियमों को तोड़ता है, और कृपया एक ही रिपोर्ट दो बार न भेजें।" + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "केवल वही रिपोर्ट करें जो आपको ईमानदारी से लगता है कि नियमों को तोड़ता है। रिपोर्ट का दुरुपयोग हमारे <0>कम्युनिटी दिशानिर्देशों के विरुद्ध है।" + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "अपारदर्शिता" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "{instanceName} पर खोलें" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "पॉपअप खोलें" @@ -25379,11 +25084,6 @@ msgstr "सिस्टम सेटिंग्स → गोपनीयता msgid "Open template JSON" msgstr "टेम्पलेट JSON खोलें" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "इस कम्युनिटी के लिए बैन डायलॉग खोलें।" - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "अपनी सेटिंग्स खोलें" msgid "Opened the thread again" msgstr "थ्रेड को फिर से खोला गया" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "एक नए टैब में खुलता है" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "मूल रूप से {date} को बैन किया गय #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "अन्य" @@ -25654,11 +25357,6 @@ msgstr "अन्य रिएक्शन…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "हमारी सुरक्षा टीम इसकी समीक्षा कर रही है। फैसला आने के बाद हम आपको एक DM और ईमेल भेजेंगे।" - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "इस समय <0>{username} को स्वामित्व ट्रांसफ़र नहीं किया जा सका।" #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "स्वामित्व ट्रांसफ़र किया गया" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "JSON रिस्पॉन्स यहां पेस्ट करें" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "मैसेज लिंक पेस्ट करें।" @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "फ़िशिंग, धोखाधड़ी, दुर्भावनापूर्ण लिंक या ऐसे गलत दावे जिनसे असल दुनिया में नुकसान हो सकता है।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "वेब सर्च प्रोवाइडर चुनें" msgid "Pick an emoji" msgstr "एक इमोजी चुनें" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "जारी रखने के लिए एक विकल्प चुनें।" - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "अपने यूज़रनेम के बाद 4-अंकीय msgid "Pick the appearance this administrator account should start with." msgstr "चुनें कि यह एडमिनिस्ट्रेटर अकाउंट शुरू में कैसा दिखे।" -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "समीक्षा करने के लिए नियम चुनें।" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "कृपया कुछ देर प्रतीक्षा करें और फिर से नाम बदलने का प्रयास करें।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "पोलैंड" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "पोर्ट" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "पुर्तगाल" @@ -26872,11 +26555,6 @@ msgstr "रिएक्शन जोड़ने के लिए दबाए msgid "press to remove reaction" msgstr "रिएक्शन हटाने के लिए दबाएँ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "कोई और होने का दिखावा करना, जिसमें धोखा देने वाली AI-जनरेटेड सामग्री भी शामिल है।" - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "<0>{targetUserTag} को तय अवधि के लिए मैसेज भेजने, रिएक्शन देने और वॉइस चैनल से कनेक्ट होने से रोकें।" @@ -27078,11 +26756,6 @@ msgstr "प्राथमिकता वाला स्पीकर" msgid "Privacy" msgstr "गोपनीयता" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "गोपनीयता या प्रतिरूपण" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "गोपनीयता सेटअप सूचना पट्टी msgid "Privacy URL" msgstr "गोपनीयता यूआरएल" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "गोपनीयता का उल्लंघन" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "गोपनीयता का उल्लंघन या डॉक्सिंग" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "गोपनीयता का उल्लंघन या पीछा करना" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "प्रोफ़ाइल प्रकार" msgid "Profile updated" msgstr "प्रोफ़ाइल अपडेट की गई" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "प्रोफ़ाइल, यूज़रनेम या अवतार का उल्लंघन" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "सुरक्षित समूहों के ख़िलाफ़ नफ़रत को बढ़ावा देता है।" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "हिंसक चरमपंथी गतिविधि को बढ़ावा देता है, उसके लिए भर्ती करता है या उसे समन्वित करता है।" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "खुद को नुकसान पहुँचाने या ईटिंग डिसऑर्डर के लिए उकसाने वाला प्रचार या निर्देश।" +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "आप जिस प्रोफ़ाइल की रिपोर्ट कर रहे हैं" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "सर्वनाम: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "दो-कारक प्रमाणीकरण सक्षम करके अपने विजनरी अकाउंट को सुरक्षित रखें। {productName} को सपोर्ट करने के लिए धन्यवाद!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "कम से कम एक यूज़र आईडी या यूज़र टैग दें।" #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "जिस व्यक्ति की आप रिपोर्ट कर रहे हैं, उसके लिए यूज़र आईडी या यूज़रनेम दें।" -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "घोषणा के लिए अपना पूरा कानूनी नाम दें।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "रेडियो बटन से किसी ग्रुप मे msgid "Radio group" msgstr "रेडियो समूह" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "रेड कोऑर्डिनेशन" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "उपहार खरीदने के लिए तैयार ह msgid "Ready to upgrade?" msgstr "अपग्रेड करने के लिए तैयार हैं?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "वजह" @@ -28291,8 +27924,8 @@ msgstr "विंडो का साइज़ और पोज़िशन य #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName} हटाएँ" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "क्या आप {userName} को ग्रुप से हटाना चाहते हैं?" @@ -28419,8 +28052,8 @@ msgstr "पसंदीदा से हटाएँ" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "ग्रुप से हटाएँ" @@ -28458,11 +28091,6 @@ msgstr "सिर्फ़ URL वाले पसंदीदा GIF से ह msgid "Remove icon" msgstr "आइकॉन हटाएँ" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "इसे चैनल से सभी के लिए हटा दें।" - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "पसंदीदा से हटाया गया" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "ग्रुप से हटा दिया गया" @@ -28919,28 +28547,18 @@ msgstr "किसी कम्युनिटी की रिपोर्ट msgid "Report a message" msgstr "मैसेज की रिपोर्ट करें" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "नियम उल्लंघन की रिपोर्ट करें या संपर्क और प्राथमिकताओं को प्रबंधित करने के लिए टूल ढूंढें।" - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "किसी यूज़र प्रोफ़ाइल की रिपोर्ट करें" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "कम्युनिटी की रिपोर्ट करें" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "रिपोर्ट विवरण" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "गैर-कानूनी सामग्री की रिपोर्ट करें" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "समस्या की रिपोर्ट करें" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "मैसेज की रिपोर्ट करें" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "प्रोफ़ाइल की रिपोर्ट करें" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "रिपोर्ट भेजी गई" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "रिपोर्ट का प्रकार" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "यूज़र को रिपोर्ट करें" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "रिपोर्ट किए गए यूज़र का टैग (वैकल्पिक)" @@ -29100,6 +28716,10 @@ msgstr "मध्यम की सभी शर्तें, साथ ही msgid "Resend" msgstr "फिर से भेजें" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "फिर से भेजें ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "फिर से भेजें ({newSecondsRemaining}से)" @@ -29108,7 +28728,7 @@ msgstr "फिर से भेजें ({newSecondsRemaining}से)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "फिर से भेजें ({originalSecondsRemaining}से)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "फिर से भेजें ({resendCooldownSeconds}से)" @@ -29122,7 +28742,7 @@ msgstr "फिर से भेजें ({resendSecondsRemaining}से)" msgid "Resend ({secondsRemaining}s)" msgstr "फिर से भेजें ({secondsRemaining}से)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "कोड फिर से भेजें" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "रोल सफलतापूर्वक अपडेट किए गए" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "रोमानिया" @@ -29947,7 +29567,7 @@ msgstr "सैचुरेशन" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "<0>{displayName} को नमस्ते कहें। आपक msgid "Scale" msgstr "स्केल" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "घोटाले, मैलवेयर या गलत जानकारी" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "अपने ऑथेंटिकेटर ऐप से क्यूआर कोड स्कैन करें।" @@ -30855,11 +30470,6 @@ msgstr "चुनें" msgid "Select {accessibleName}" msgstr "{accessibleName} चुनें" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "एक श्रेणी चुनें" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "ऐसी कम्युनिटी चुनें जहाँ आपके पास {permissionName} की अनुमति हो, या कोई ग्रुप DM जिसके आप सदस्य हों।" #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "कोई देश चुनें" @@ -30911,11 +30521,6 @@ msgstr "रीडायरेक्ट यूआरआई चुनें" msgid "Select a scenario to apply..." msgstr "लागू करने के लिए एक परिदृश्य चुनें..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "उल्लंघन की श्रेणी चुनें।" - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "वह खाता चुनें जिससे आप अपने msgid "Select voice processing mode" msgstr "वॉइस प्रोसेसिंग मोड चुनें" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "चुनें कि आप क्या रिपोर्ट करना चाहते हैं।" #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "अपने निवास का देश चुनें।" #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "चुनें…" @@ -31037,13 +30642,6 @@ msgstr "चयन: {0} (अधिकतम {1})" msgid "Selections" msgstr "चयन" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "खुद को नुकसान पहुँचाना या आत्महत्या" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "एक्शन मैसेज भेजें (इटैलिक म msgid "Send animation" msgstr "एनिमेशन भेजें" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "एक और रिपोर्ट भेजें" @@ -31138,7 +30736,7 @@ msgstr "भेजें बटन" msgid "Send code" msgstr "कोड भेजें" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA रिपोर्ट भेजें" @@ -31158,9 +30756,9 @@ msgstr "{size} तक की फ़ाइलें भेजें" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "फ्रेंड रिक्वेस्ट भेजें" @@ -31220,8 +30818,8 @@ msgstr "थ्रेड्स में संदेश भेजें" msgid "Send messages, images, GIFs and emoji" msgstr "संदेश, चित्र, GIF और इमोजी भेजें" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "रिपोर्ट भेजें" @@ -31255,7 +30853,7 @@ msgstr "इस पिन को अतीत में वापस भेज msgid "Send TTS messages" msgstr "TTS मैसेज भेजें" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "वेरिफ़िकेशन कोड भेजें" @@ -31273,11 +30871,6 @@ msgstr "वॉइस मैसेज भेजें" msgid "Send:" msgstr "भेजा:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "मैलवेयर या खतरनाक लिंक भेजना" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "थीम शेयर करें" msgid "Share voice activity with all friends?" msgstr "सभी दोस्तों के साथ वॉइस गतिविधि शेयर करें?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "बताएं कि हमारी टीम को इसका आकलन करने के लिए क्या चाहिए।" @@ -31709,11 +31302,6 @@ msgstr "बताएं कि हमारी टीम को इसका आ msgid "Share with a friend" msgstr "किसी दोस्त के साथ शेयर करें" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "कम्युनिटी मॉडरेटर के साथ शेयर करें।" - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "शेयर की गई विंडो" msgid "Shared window audio" msgstr "शेयर की गई विंडो का ऑडियो" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "व्यक्तिगत जानकारी शेयर करता है, यूज़र का पीछा करता है या मिलकर निजता का उल्लंघन करता है।" - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "व्यक्तिगत जानकारी शेयर करना" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "स्लाइडर" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "स्लोवाकिया" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "स्लोवेनिया" @@ -32889,11 +32467,6 @@ msgstr "स्लोमोड सिमुलेशन" msgid "Slowmode time remaining" msgstr "स्लोमोड का बचा हुआ समय" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "अपमानजनक शब्द, अमानवीय भाषा या संरक्षित समूहों पर हमले।" - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "इस स्टिकर को तैयार करते समय कुछ गड़बड़ हो गई। कोई दूसरी फ़ाइल आज़माएँ या कुछ देर बाद फिर से कोशिश करें।" #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "कुछ प्रकाशित करते समय गलत हो गया। थोड़ी देर में पुनः प्रयास करें।" @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "मैसेज के बीच साफ़ विज़ुअल सेपरेशन के साथ ज़्यादा जगह वाला लेआउट।" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "स्पेन" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "स्पैम अकाउंट" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "स्पैम वर्गीकरण" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "स्पैम या स्कैम" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "स्पैम या स्कैम कम्युनिटी" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "स्पैम, स्कैम या फ़िशिंग अकाउंट" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "स्पैम, स्कैम या फ़िशिंग" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "मिनिमाइज़ करके शुरू करें" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "फिर से शुरू करें" @@ -33752,22 +33302,26 @@ msgstr "साइन इन रहें" msgid "Step {current} of {total}" msgstr "चरण {current} में से {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "चरण 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "चरण 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "चरण 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "चरण 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "चरण 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "क्या घोषणा चैनल बनना बंद कर msgid "Stop hiding muted channels by default?" msgstr "म्यूट किए गए चैनल को डिफ़ॉल्ट रूप से छिपाना बंद करें?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "मैसेज और फ्रेंड रिक्वेस्ट रोकें।" - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "माइक्रोफ़ोन की जाँच रोकें" @@ -33959,11 +33508,6 @@ msgstr "Node.prototype insertBefore और removeChild को पैच कर msgid "Stop ringing" msgstr "रिंग करना बंद करें" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "इसकी सामग्री और सदस्यों को देखना बंद करें।" - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "मैसेज भेजते समय :) और <3 जैसे आम टेक्स्ट इमोटिकॉन को इमोजी से बदलें" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "स्वीडन" @@ -34804,11 +34348,6 @@ msgstr "नोट जोड़ने के लिए टैप करें" msgid "tar.gz archive" msgstr "tar.gz आर्काइव" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "सुरक्षित विशेषताओं के आधार पर लोगों को टारगेट करता है।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "सेवा की शर्तें" msgid "Terms URL" msgstr "नियम यूआरएल" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "आतंकवाद या हिंसक चरमपंथ" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "थाई" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName} को सुरक्षित रखने में मदद करने के लिए धन्यवाद। हम जल्द से जल्द आपकी रिपोर्ट की समीक्षा करेंगे।" +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "इसे फ़्लैग करने के लिए धन्यवाद" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "हमें बताने के लिए धन्यवाद। यह अपने आप में हमारे नियमों का उल्लंघन नहीं करता है, इसलिए हमने कोई रिपोर्ट नहीं भेजी।" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "हमें बताने के लिए धन्यवाद। यह अपने आप में हमारे नियमों का उल्लंघन नहीं करता है, इसलिए हमने कोई रिपोर्ट नहीं भेजी। यदि यह किसी को लक्षित करता है या अपशब्दों का प्रयोग करता है, तो इसे फिर से रिपोर्ट करें और “अपमानजनक या हानिकारक सामग्री” चुनें।" + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "यह नहीं हो पाया। फिर से कोशि msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "यह कोई मान्य रंग नहीं लग रहा है। हेक्स, rgb(), hsl() या CSS रंग का नाम आज़माएँ।" -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "यह एक मान्य यूआरएल नहीं लग रहा है।" @@ -35104,6 +34653,11 @@ msgstr "आपके दूसरे डिवाइस पर {PRODUCT_NAME} msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} ऐप में साइन इन नहीं किया गया था। आप इस टैब को बंद कर सकते हैं।" +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName} की सुरक्षा टीम आपकी रिपोर्ट की समीक्षा करेगी। हम यह नहीं बताएंगे कि यह आपसे आई है।" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "दिया गया redirect_uri इस ऐप्लिकेशन msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "दिए गए redirect_uri में HTTP या HTTPS का इस्तेमाल होना चाहिए।" +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "रिपोर्ट फ़ॉर्म बदल गया है। कृपया फिर से शुरू करें।" + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "इस इंस्टेंस पर यूज़रनेम टैग पहले से सेट हैं। वे अब बदल नहीं सकते।" #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "वेरिफ़िकेशन कोड अमान्य है या उसकी समय-सीमा खत्म हो गई है।" @@ -36115,13 +35674,8 @@ msgstr "यह सदस्य अब वॉइस से कनेक्टे msgid "This message can only be forwarded to age-restricted channels" msgstr "यह संदेश केवल आयु-प्रतिबंधित चैनलों पर ही अग्रेषित किया जा सकता है" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "यह मैसेज पहले ही डिलीट हो चुका है।" - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "यह संदेश पहले ही प्रकाशित हो चुका है" @@ -36279,11 +35833,6 @@ msgstr "यह थ्रेड बंद है। संदेश भेजन msgid "This thread is locked. Only moderators can send messages." msgstr "यह थ्रेड लॉक है। केवल मॉडरेटर ही संदेश भेज सकते हैं।" -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "इस यूज़र" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "इस यूज़र ने अपनी प्रोफ़ाइल सीमित कर दी है। कुछ जानकारी उन लोगों से छिपी हुई है जो उनके दोस्त नहीं हैं।" @@ -36292,11 +35841,6 @@ msgstr "इस यूज़र ने अपनी प्रोफ़ाइल msgid "This user has no roles in this community." msgstr "इस यूज़र के इस कम्युनिटी में कोई रोल नहीं है।" -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "यह यूज़र पहले से ही कम्युनिटी से बैन है।" - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "यह यूज़र अब उपलब्ध नहीं है।" @@ -36465,16 +36009,6 @@ msgstr "थ्रेड अपडेट किया गया" msgid "Threads" msgstr "थ्रेड्स" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "धमकियाँ, हर जगह पीछा करना या अनचाहा संपर्क।" - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "धमकी, उत्पीड़न या नुकसान" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag} को टाइमआउट किया गया" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "टाइमआउट" @@ -36787,6 +36321,11 @@ msgstr "टोन" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR इमेज को सामान्य रेंज में टोन-मैप करें, जिससे पीक ब्राइटनेस कम हो जाएगी।" +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "बहुत अधिक कोड भेजे गए। {duration} प्रतीक्षा करें और फिर से कोशिश करें।" + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "कम्युनिटी का स्वामित्व ट्रांसफ़र करें" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "ग्रुप का स्वामित्व {userName} को ट्रांसफ़र करें?" @@ -37561,7 +37100,7 @@ msgstr "फ्रेंड रिक्वेस्ट भेजने के #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "यूज़र को अनब्लॉक करें" @@ -37607,16 +37146,6 @@ msgstr "सभी डिवाइस अनडीफ़ेन करें" msgid "Undeafen yourself" msgstr "खुद को अनडीफ़ेन करें" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "नाबालिग या बच्चों की सुरक्षा से जुड़ी चिंता" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "नाबालिग यूज़र" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "जब तक मैं इसे वापस चालू न कर msgid "Unverified email" msgstr "अपुष्ट ईमेल" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "गलत जगह पर अवांछित आचरण या वयस्क सामग्री।" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "अवांछित वयस्क आचरण, टिप्पणियाँ या अनुरोध।" - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "ज़्यादा से ज़्यादा {DISCOVERY_MAX_TAGS} टैग लोगों को आपकी कम्युनिटी ढूंढने में मदद करते हैं। वे डिस्कवरी सर्च में दिखते हैं।" @@ -38840,11 +38359,6 @@ msgstr "लाइट थीम इस्तेमाल करें" msgid "Use native title bar" msgstr "नेटिव टाइटल बार का उपयोग करें" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "इसका उपयोग तभी करें जब यह स्पष्ट रूप से {productName} के नियमों का उल्लंघन करता हो और ऊपर दिए गए विकल्पों में फिट न होता हो।" - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "सिर्फ़ इस कम्युनिटी में इस msgid "User" msgstr "यूज़र" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "यूज़र नाबालिग लगता है, या ग्रूमिंग या बाल शोषण में शामिल है।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "यूज़र डीबग" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "यूज़र आईडी (वैकल्पिक)" @@ -39061,12 +38570,12 @@ msgstr "यूज़र नहीं मिला" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "यूज़र प्रोफ़ाइल" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "यूज़र प्रोफ़ाइल: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "यूज़र सेटिंग्स" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "यूज़र टैग (वैकल्पिक)" @@ -39339,7 +38848,7 @@ msgstr "वेरिफ़ाइड कम्युनिटी" msgid "Verify" msgstr "वेरिफ़ाई करें" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "कोड वेरिफ़ाई करें" @@ -39368,7 +38877,7 @@ msgstr "पुष्टि करें कि यह आप ही हैं" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "अपना ईमेल वेरिफ़ाई करें" @@ -39718,7 +39227,7 @@ msgstr "कोड देखें" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "कम्युनिटी प्रोफ़ाइल देखें" @@ -39751,7 +39260,7 @@ msgstr "उपहार देखें" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "ग्लोबल प्रोफ़ाइल देखें" @@ -39847,26 +39356,6 @@ msgstr "दर्शक स्ट्रीम में शामिल हो msgid "Viewer leaves stream" msgstr "दर्शक स्ट्रीम छोड़ता है" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "उल्लंघन की श्रेणी" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "उल्लंघन यूज़र की प्रोफ़ाइल में है, किसी खास मैसेज में नहीं।" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "हिंसा या हिंसक धमकियाँ" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "हिंसक या ग्राफ़िक सामग्री" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "हमने इस इमोजी का आकार बदलकर msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "हमने इस स्टिकर का आकार बदलकर और इसे कंप्रेस करके 320x320 पिक्सल कर दिया है, लेकिन यह अभी भी {fileSize} का है। सीमा {maxSize} है। कोई सरल इमेज, कम रंग, या छोटी सोर्स फ़ाइल आज़माएँ।" -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "हमने {email} पर एक कोड भेजा है।" @@ -40472,7 +39961,7 @@ msgstr "हम इसे जल्द से जल्द प्रोसेस msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "हम आपका पिछला ईमेल बहाल कर देंगे, पुराने सेशन से साइन आउट कर देंगे, MFA को अक्षम कर देंगे, और एक नए पासवर्ड से आपके खाते को सुरक्षित कर देंगे।" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "हम एक छोटा कोड भेजेंगे, ताकि पुष्टि हो सके कि आपको इस रिपोर्ट के अपडेट मिल सकते हैं।" @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "वेस्ट वर्जीनिया" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "किस तरह के नियम का उल्लंघन किया गया था?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "क्या चल रहा है?" msgid "What's new" msgstr "नया क्या है" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "आपकी रिपोर्ट की वजह क्या है?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "जब कोई कस्टम थ्रेशोल्ड डेट सेट नहीं होती, तो <0>{readMessageHistoryPermissionLabel} अनुमति के बिना सदस्य कोई भी पुराना मैसेज नहीं देख सकते। वे मैसेज सिर्फ़ रियल टाइम में आते हुए ही देख पाएंगे, और क्लाइंट रीस्टार्ट करने पर वे गायब हो जाएंगे।" @@ -40832,11 +40321,6 @@ msgstr "कौन सी कम्युनिटी" msgid "Which conversations" msgstr "कौन सी बातचीत" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "कौन सा नियम तोड़ा गया?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "जब तक पुश-टू-टॉक चालू है, आपका शॉर्टकट आपके माइक्रोफ़ोन को नियंत्रित करता है, इसलिए म्यूट बटन अक्षम है।" @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "आप इस चैनल में फ़ाइलें अटैच नहीं कर सकते।" #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "आप खुद को दोस्त नहीं बना सकते" @@ -41341,7 +40825,7 @@ msgstr "आप इस यूज़र को मैसेज नहीं कर #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "अकाउंट बनाने के लिए आपको सेवा की शर्तों से सहमत होना होगा" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "रिपोर्ट भेजने से पहले आपको अपना ईमेल वेरिफ़ाई करना होगा।" @@ -41891,6 +41375,11 @@ msgstr "आप पुरानी दर पर हैं। इस प्ला msgid "You're sending messages too quickly" msgstr "आप बहुत तेज़ी से मैसेज भेज रहे हैं" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "आप बहुत तेज़ी से रिपोर्ट भेज रहे हैं। बाद में फिर से कोशिश करें।" + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "आप पुराने मैसेज देख रहे हैं" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "आपने ग्रुप DM की अनुमत संख्या से ज़्यादा लोगों को जोड़ दिया है। कुछ लोगों को हटाएँ और फिर से कोशिश करें।" +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "आपने इस मैसेज की पहले ही रिपोर्ट कर दी है।" + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "आपने आज इस प्रोफ़ाइल की पहले ही रिपोर्ट कर दी है।" + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "आपके खाते और सेटिंग्स में क msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "आपकी कार्रवाई पूरी नहीं हो पाई क्योंकि इसे हमारे सुरक्षा सिस्टम ने फ़्लैग किया है। अगर आपको लगता है कि यह गलती से हुआ है, तो कृपया सहायता टीम से संपर्क करें।" +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "आपके जवाब" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "आपका आवेदन समीक्षा के लिए लंबित है। आप अभी भी अपनी लिस्टिंग का विवरण अपडेट कर सकते हैं या आवेदन वापस ले सकते हैं।" @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "ऑडियो चलाने से पहले आपके ब्राउज़र को यूज़र इंटरैक्शन की ज़रूरत है। वॉइस चैट चालू करने के लिए नीचे दिए गए बटन पर क्लिक करें।" #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "आपके बदलाव हर उस समुदाय तक पहुँचेंगे जो इस चैनल को फॉलो करता है, इसमें एक मिनट लग सकता है। हर प्रकाशित संदेश के लिए 3 त्वरित संपादन की अनुमति है, उसके बाद हर 20 मिनट में 1।" @@ -42311,6 +41815,11 @@ msgstr "आपका नया उपनाम, या इसे रीसेट msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "आपका पुराना रिकवरी किट अब काम नहीं करता है। इस नए किट को कहीं सुरक्षित रखें।" +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "आपके विकल्प" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "आपका क्षेत्र" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "आपका नवीनीकरण भुगतान विफल हो गया, लेकिन <0/> <1>{graceDate} तक सक्रिय रहेगी। अपनी सदस्यता बनाए रखने के लिए इससे पहले अपना भुगतान का तरीका अपडेट करें।" +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "आपकी रिपोर्ट नहीं भेजी जा सकी। फिर से कोशिश करें।" + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "आपकी सदस्यता अगले रिन्यूअल msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "आपकी थीम CSS शेयर करने के लिए बहुत बड़ी है। इसे छोटा करें और फिर से कोशिश करें।" -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "आपका यूज़रनेम (वैकल्पिक)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index 4e34e30d7..92fd50a16 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -2081,7 +2081,7 @@ msgstr "Preostalo: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {član} few {člana} other {članova}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Vaša poveznica za pozivnicu istječe za # sekundu.} few {Vaša poveznica za pozivnicu istječe za # sekunde.} other {Vaša poveznica za pozivnicu istječe za # sekundi.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} odabrano" @@ -2957,11 +2957,6 @@ msgstr "Podaci o računu" msgid "Account details unavailable" msgstr "Detalji računa nisu dostupni" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Račun postoji radi slanja neželjene pošte, prijevara ili zlouporabe platforme." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Dodano: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Dodano: {createdDate} • zadnje korišteno: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Dodatni komentari (neobavezno)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Već iskorišteno" msgid "Already set to cancel" msgstr "Već je postavljeno za otkazivanje" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Prijavi ovu poruku i sigurnosnom timu {productName}a" @@ -4576,11 +4566,6 @@ msgstr "Godišnje" msgid "Another checkbox" msgstr "Još jedan potvrdni okvir" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Još jedno jasno kršenje pravila" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Još jedan okrugli potvrdni okvir" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Prijenos zvuka" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austrija" @@ -5620,6 +5605,7 @@ msgstr "Trenutno odsutan" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Trenutno odsutan" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Natrag" @@ -5788,9 +5775,7 @@ msgstr "Rezervni kodovi ponovno su generirani" msgid "Badge" msgstr "Značka" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Zabrani" @@ -5819,7 +5804,7 @@ msgstr "Trajanje zabrane" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Zabrani članovima pristup zajednici, s mogućnošću brisanja njihovih msgid "Ban reason" msgstr "Razlog zabrane" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Zabrani ovog korisnika" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Propusnost" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Zabranjen pristup" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Korisniku {targetUserTag} zabranjen je pristup zajednici" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Prije datuma" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgija" @@ -6031,7 +6006,7 @@ msgstr "Brzina prijenosa podataka" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokiraj" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokiraj" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blokiraj korisnika {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokiraj za sve zajednice" msgid "Block spoiler" msgstr "Spojler u bloku" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blokiraj ovog korisnika" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blokiraj korisnika" msgid "Blocked" msgstr "Blokirano" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blokirano" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Ugrađeni prevoditelji" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bugarska" @@ -6519,16 +6500,6 @@ msgstr "Bugarski" msgid "Bulk delete" msgstr "Skupno brisanje" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Zlostavljanje, ponavljani neželjeni kontakt, uhođenje ili ciljano zlostavljanje." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Zlostavljanje, prijetnje, mržnja, nasilje, napadi ili sadržaj koji potiče samoozljeđivanje." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornija" msgid "Call" msgstr "Poziv" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Postavke poziva i grupnog razgovora" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Promijeni naslovnu sliku" msgid "Change chat embed background" msgstr "Promijeni pozadinu ugrađenog chata" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Promijeni e-poštu" @@ -7150,8 +7116,8 @@ msgstr "Promijeni nadimak prijatelja" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Promijeni nadimak u grupi" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Promijeni jezik" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Promijeni moj nadimak u grupi" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Promjena vlastitog nadimka" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Promijeni vlasnika" @@ -7283,16 +7249,6 @@ msgstr "Promijenite koju glasovnu regiju koristi glasovni kanal." msgid "Change which voice region this channel uses." msgstr "Promijenite koju glasovnu regiju koristi ovaj kanal." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Promijenite tko vas može zvati ili dodati." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Promijenite tko vas može kontaktirati." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "U pristigloj pošti na adresi {emailAddress} potražite poveznicu za aut msgid "Check your inbox for a verification email." msgstr "U pristigloj pošti potražite e-poštu za potvrdu." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Provjerite svoju prijavu" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Potvrdni okviri" @@ -7901,21 +7862,6 @@ msgstr "Naplata je blokirana za ovaj račun. Obratite se {supportEmail} ako treb msgid "Checkout unavailable" msgstr "Naplata nedostupna" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Zabrinutost za sigurnost djece" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Sigurnost djece ili iskorištavanje maloljetnika" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Sigurnost djece ili sadržaj za odrasle" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Odabiri" msgid "Choices: {choiceList}" msgstr "Odabiri: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Odabir" @@ -8122,6 +8068,11 @@ msgstr "Odaberite kategoriju koja najbolje opisuje vašu zajednicu. Možete je p msgid "Choose the premium model" msgstr "Odaberite premium model" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Ponovno odaberite razlog" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Preuzmi poklon" msgid "Claim your account" msgstr "Preuzmite svoj račun" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Preuzmite svoj račun i potvrdite e-poštu kako biste mogli slati prijave." @@ -8352,12 +8303,12 @@ msgstr "Preuzmite svoj račun kako biste iskoristili ovaj poklon." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Preuzmite svoj račun za slanje zahtjeva za prijateljstvo." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Potvrdi svoj račun za slanje izvješća." @@ -8378,11 +8329,6 @@ msgstr "Preuzmite svoj račun da biste pokrenuli 1:1 pozive ili im se pridružil msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Preuzmite svoj poklon i aktivirajte pretplatu na {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Predstavljanje kao druga osoba, brend ili organizacija." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Očisti polje za pretraživanje" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Zatvori prozor" msgid "Close popout" msgstr "Zatvori skočni prozor" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Zatvori ovu izravnu poruku" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Zatvori u područje obavijesti" msgid "Close window" msgstr "Zatvori prozor" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Zatvorite trenutačnu izravnu poruku s korisnikom {dmDisplayName}. Time korisnika ne blokirate i izravnu poruku možete ponovno otvoriti kasnije." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Zatvoriti izravnu poruku s korisnikom {displayName}? Možete je ponovno otvoriti bilo kada." @@ -8837,7 +8773,7 @@ msgstr "Ugljena tema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kod" @@ -8868,7 +8804,7 @@ msgstr "Kod iz aplikacije {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kod ponovno poslan" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Zajednice kojima se možeš pridružiti" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Zajednica" @@ -9131,7 +9065,7 @@ msgstr "Isključi zvuk u zajednici" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Otklanjanje pogrešaka zajednice" @@ -9150,16 +9084,6 @@ msgstr "Zajednica izbrisana" msgid "Community DM" msgstr "Izravne poruke iz zajednice" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Zajednica postoji radi slanja neželjene pošte, prijevara ili zlouporabe platforme." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Zajednica olakšava grupne napade ili ciljano zlostavljanje." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ikona zajednice" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID zajednice" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "ID zajednice je obavezan." @@ -9526,6 +9450,11 @@ msgstr "Potvrdite novu lozinku" msgid "Confirm password" msgstr "Potvrdite lozinku" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Potvrdite izjavu kako biste poslali prijavu." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Nastavi u pregledniku" msgid "Continue to checkout" msgstr "Nastavi na naplatu" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Nastavi s prijavom zajednice" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Nastavi s prijavom korisnika" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Pretvaranje ovog kanala u tekstualni kanal uklonit će sve kanale koji g msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Pretvara dolazni sadržaj u govor, bez obzira na to je li došao iz /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinira napade, hajke ili uznemiravanje ljudi ili zajednica." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL kopiran u međuspremnik" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL kopiran u međuspremnik" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopiraj ID poruke" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopiraj poveznicu poruke" @@ -10643,6 +10553,11 @@ msgstr "Nismo mogli učitati poruke. Pokušajte ponovno kasnije." msgid "Couldn't load settings" msgstr "Nije moguće učitati postavke" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nismo mogli učitati obrazac za prijavu." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nije moguće učitati ovu aplikaciju" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nije moguće obraditi sliku" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nije moguće objaviti ovu poruku" @@ -10825,11 +10740,6 @@ msgstr "Nije moguće poslati pozivnicu" msgid "Couldn't send invite. Try again." msgstr "Nije moguće poslati pozivnicu. Pokušajte ponovno." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nije poslano. Pokušajte ponovno." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Odbrojavanje" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Država prebivališta" @@ -11301,13 +11211,8 @@ msgstr "Stvoreno:" msgid "Credentials" msgstr "Vjerodajnice" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Vjerodostojne prijetnje, eksplicitno nasilje ili veličanje nasilja." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Hrvatska" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Reže zvuk ispod praga glasnoće uz minimalnu potrošnju procesora." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cipar" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Češki" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Češka Republika" @@ -11965,7 +11870,7 @@ msgstr "Otklanjanje pogrešaka kanala" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Otklanjanje pogrešaka zajednice" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Izbrisati temu?" msgid "Delete this invite? Can't be undone." msgstr "Izbrisati ovu pozivnicu? Ne može se poništiti." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Izbriši ovu poruku" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Izbrisati ovu poruku? Ne može se poništiti." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Izbrisati ovu poruku? Ne može se poništiti. Ova poruka će također biti uklonjena iz svake zajednice koja prati ovaj kanal." @@ -12461,11 +12359,6 @@ msgstr "Izbrisati vaše poruke u ovoj zajednici?" msgid "Delete your messages in this conversation?" msgstr "Izbrisati vaše poruke u ovom razgovoru?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Izbrisano" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Odbijeno {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danska" @@ -12554,11 +12447,6 @@ msgstr "Opišite naljepnicu" msgid "Describe this media for screen readers" msgstr "Opišite ovaj medij za čitače zaslona" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Opišite zašto je sadržaj nezakonit" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Odvojeni natpis" msgid "Detail" msgstr "Detalji" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detalji" @@ -13315,11 +13203,6 @@ msgstr "Ime za prikaz (neobavezno)" msgid "Display scaling" msgstr "Skaliranje prikaza" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuira zlonamjerni softver, alate za krađu vjerodajnica ili druge štetne datoteke." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Postavke izravnih poruka i zahtjeva za prijateljstvo" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentacija" msgid "Doesn't allow being added to group DMs" msgstr "Ne dopušta dodavanje u grupne izravne poruke" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Ne blokira. Možete ga kasnije ponovno otvoriti." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Doniraj radije" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Preuzmi izvorne mape kako bi tragovi steka i alati za razvoj upućivali msgid "Download video" msgstr "Preuzmi video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, otkrivanje privatnih podataka ili uhođenje." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, uhođenje, lažno predstavljanje ili neprikladan profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Uredi boju za {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Uredi profil zajednice" @@ -14043,7 +13908,7 @@ msgstr "Uredite nadjačavanja za uloge i članove u ovom kanalu." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Uredi profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Uredi lokalno vrijeme profila" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Uredi objavljenu poruku?" @@ -14191,13 +14056,13 @@ msgstr "Ova kupnja ispunjava uvjete za povrat novca do {windowEndsOn}. Ovo će t #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-pošta" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Adresa e-pošte" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Potrebna je adresa e-pošte." @@ -14721,16 +14586,6 @@ msgstr "Željeni način kodiranja za nova dijeljenja zaslona." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodeci, SVC i unaprijed postavljene vrijednosti protoka" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Potiče samoozljeđivanje" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Potiče samoubojstvo, samoozljeđivanje ili poremećaje prehrane." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Šifriranje od kraja do kraja nije dostupno jer je u pozivu sudionik koj msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Šifriranje od kraja do kraja nije dostupno jer se u ovom glasovnom kanalu nalazi sudionik koji nije podržan." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Ugrožava maloljetnike ili sadrži materijal iskorištavanja djece." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Unesite kôd u formatu ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Unesite valjani URL ili kod predloška za {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Unesite valjanu adresu e-pošte." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Unesite valjanu poveznicu poruke." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Unesite {digitCount}-znamenkasti kod iz svoje aplikacije za provjeru autentičnosti." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Unesite kod prije nastavka." @@ -15008,7 +14858,7 @@ msgstr "Enter za <0><1>spremanje" msgid "Enter username" msgstr "Unesite korisničko ime" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Unesite kod za provjeru" @@ -15017,6 +14867,11 @@ msgstr "Unesite kod za provjeru" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Unesite svoju e-adresu i poslat ćemo vam poveznicu za poništavanje lozinke." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Unesite svoje puno ime i prezime za slanje prijave." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape za <0><1>odustajanje" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonija" @@ -15412,6 +15267,16 @@ msgstr "Istječe {earliest}" msgid "Expires:" msgstr "Istječe:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Objasnite problem" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Objasnite problem za slanje prijave." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Vanjske poveznice mogu biti opasne. Budite oprezni." msgid "Extra large" msgstr "Ekstra veliko" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ekstremistička zajednica" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Uklanjanje prilagođenog URL-a nije uspjelo. Pokušajte ponovno." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Ponovno slanje koda nije uspjelo. Pokušajte ponovno." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Nije uspjelo poništavanje premium statusa." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Slanje koda nije uspjelo. Pokušajte ponovno." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Slanje poruke nije uspjelo. Dodirnite i držite za opcije." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Slanje prijave nije uspjelo. Pokušajte ponovno." @@ -15840,11 +15700,6 @@ msgstr "Prijenos emojija počevši od {startLabel} nije uspio: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Prijenos emojija nije uspio. Pokušajte ponovno." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Lažne tvrdnje koje bi mogle prouzročiti stvarnu štetu." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Pronađite savršenu naljepnicu" msgid "Fingerprint" msgstr "Otisak prsta" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Dovršite postavljanje računa" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Prvo dovršite postavljanje računa" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Dovršite registraciju za slanje zahtjeva za prijateljstvo." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finska" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finski" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Ime i prezime" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Broj sličica u sekundi iznad 30 zahtijeva {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francuska" @@ -16834,10 +16689,10 @@ msgstr "Puna" msgid "Full dynamic range" msgstr "Puni dinamički raspon" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Puno ime i prezime" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Puno ime i prezime (neobavezno za prijave seksualnog zlostavljanja djece)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Njemački" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Njemačka" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Natrag" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Vratite se i unesite valjanu e-adresu." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Lijepo te vidjeti, {username}! Slobodno uđi." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grčka" @@ -17572,11 +17427,6 @@ msgstr "Grčki" msgid "Grid view" msgstr "Prikaz rešetke" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Sadržaj s vrbovanjem ili iskorištavanjem djece." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Korisničko ime" msgid "Hang out with voice, video and screen share" msgstr "Družite se uz glas, video i dijeljenje zaslona" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Uznemiravanje" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Uznemiravanje koje uključuje sadržaj za odrasle" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Uznemiravanje ili zlostavljanje" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Uznemiravanje ili uhođenje" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Uznemiravanje ili ciljano zlostavljanje" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Uznemiravanje ili prijetnje" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardverski ključ" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardverski ubrzano na većini sustava Windows i macOS. Pouzdano za starije uređaje." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Štetne dezinformacije" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ikad kupio" msgid "Has ever purchased override" msgstr "Nadjačavanje za \"ikad kupio\"" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Govor mržnje" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Sakriti vlastito dijeljenje zaslona?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Skriva gumbe za preuzimanje, otvaranje u pregledniku i kopiranje na slikama i videozapisima u ovom kanalu." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Skriva poruke te osobe i onemogućuje joj da vam šalje poruke" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Mađarski" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Mađarska" @@ -18399,6 +18212,11 @@ msgstr "Ja sam opis alata" msgid "I changed my mind" msgstr "Predomislio/la sam se" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Potvrđujem u dobroj vjeri da su podaci i navodi u ovoj prijavi točni i potpuni." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Postavke neaktivnosti" msgid "Idle timeout" msgstr "Istek neaktivnosti" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Ako je uključen maloljetnik, umjesto toga upotrijebite \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Ako račun koristi tu adresu, poslali smo upute za poništavanje lozinke msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Ako macOS zatraži ponovno otvaranje aplikacije {productName}, odaberite Kasnije." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Ako je netko u neposrednoj opasnosti, obratite se lokalnim hitnim službama ako to možete učiniti sigurno." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Ako je netko u neposrednoj opasnosti, prvo kontaktirajte lokalne hitne službe." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Ako vam je netko rekao da ovdje nešto zalijepite, to je prijevara kojom mu možete predati svoj račun na {productName}u." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Ako se radi o CSAM-u ili iskorištavanju maloljetnika, pošaljite prijavu odmah i nemojte ponovno dijeliti materijal." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Ako je ovo vjerodostojna neposredna prijetnja, obratite se i lokalnim hitnim službama." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Ako je ovo neposredna teroristička prijetnja, obratite se i lokalnim hitnim službama." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Ako se ova prijava odnosi na određenu poruku u ovoj zajednici, umjesto toga prijavite tu poruku. Prijave poruka našem sigurnosnom timu daju najjasniji kontekst, a dodavanje detalja u komentarima može nam pomoći da je brže pregledamo. Nastavite s prijavom cijele zajednice samo ako prijava poruke ne bi obuhvatila širi problem." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Ako se ova prijava odnosi na određenu poruku, umjesto toga prijavite tu poruku. Prijave poruka našem sigurnosnom timu daju najjasniji kontekst, a dodavanje detalja u komentarima može nam pomoći da je brže pregledamo. Nastavite s prijavom korisnika u cjelini samo ako ta poruka ne obuhvaća širi problem." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Ako se ova prijava odnosi na određene poruke, prijavite najrelevantniju poruku. Prijave poruka našem sigurnosnom timu daju najjasniji kontekst, a dodavanje detalja u komentarima može nam pomoći da ih brže pregledamo. Nastavite s prijavom korisnika u cjelini samo ako prijava poruke ne bi obuhvatila širi problem." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Ako smatrate da je to nezakonito, navedite koji zakon i zašto." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Zaobiđi ograničenje usporenog načina rada ovog kanala." msgid "Ignore virtual" msgstr "Zanemari virtualne uređaje" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Nezakonita aktivnost" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Nezakonita aktivnost ili nešto drugo" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Nezakonita prodaja, omogućavanje kaznenih djela ili jasno kršenje pravila koje se ne uklapa u gornje kategorije." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Nezakonita prodaja, omogućavanje kaznenih djela ili nezakonite aktivnosti." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Slike" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Slike zalijepljene iz međuspremnika šalju se kao privici, a vi nemate dopuštenje za prilaganje datoteka u ovom kanalu." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Lažno predstavljanje" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Lažno predstavljanje ili obmanjujući medijski sadržaj" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Neaktivno" msgid "Inactive timeout" msgstr "Vrijeme neaktivnosti" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Neprikladan profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Uključi moje dvofaktorske sigurnosne kodove u PDF i ispis" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Uključite ID zajednice." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Pozadinska slika pozivnice" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kod pozivnice (neobavezno)" @@ -19471,7 +19220,7 @@ msgstr "Maskiranje pozivnica" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Pozovi članove" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP adresa autorizirana" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irska" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "U kurzivu" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italija" @@ -20120,7 +19869,7 @@ msgstr "Tipke" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Kasnije" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvija" @@ -20291,11 +20040,6 @@ msgstr "Saznajte više" msgid "Learn more about Visionary" msgstr "Saznajte više o Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Napusti" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Napusti privatnu nit" msgid "Leave silently" msgstr "Napusti tiho" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Napusti zajednicu" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Prikazuje članove s ovom ulogom u zasebnom odjeljku na popisu članova." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litva" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Učitavanje..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Učitavanje…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Niska" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luksemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Održavanje je zakazano za {localizedTime}. Očekivano trajanje: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Želite li da {userName} postane vlasnik grupe? Izgubit ćete vlasničke privilegije." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Postavi za vlasnika grupe" @@ -21091,38 +20830,21 @@ msgstr "Postavi za vlasnika grupe" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Provjeri podudara li se ovaj kod s kodom u aplikaciji {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Provjerite je li sve u redu prije slanja." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Prilagodite svoju instancu" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Zlonamjerne poveznice" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribucija zlonamjernog softvera" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Zlonamjerni softver ili opasne poveznice" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Zlonamjerni softver, krađa vjerodajnica ili štetne datoteke." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskirajte privatne detalje prije dijeljenja zaslona ili prijenosa uživ msgid "Mask Visionary as subscription" msgstr "Maskiraj Visionary kao pretplatu" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Masovna neželjena pošta, prijevare, lažna darivanja ili zlouporaba računa." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Ograničenje medija za sadržaj za odrasle" msgid "Mature content not allowed" msgstr "Sadržaj za odrasle nije dopušten" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Sadržaj za odrasle ili uznemiravanje" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Sadržaj za odrasle ili nesigurno ograničavanje" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Nadjačavanje postavke sadržaja za odrasle" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Kršenje pravila o sadržaju za odrasle" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Sadržaj za odrasle bez odgovarajuće zaštite." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Poruka" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "poveznica poruke" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Poveznica poruke" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Pretpregledi poruka na popisu izravnih poruka" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Poruka objavljena" @@ -22211,6 +21908,11 @@ msgstr "Vrijeme poruke" msgid "Message unpinned" msgstr "Poruka otkvačena" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Poruka koju prijavljujete" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Maloljetnici u opasnosti, sadržaj za odrasle na pogrešnom mjestu ili neželjeno ponašanje." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Više" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Više radnji" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Ugniježđeno" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nizozemska" @@ -24099,7 +23796,7 @@ msgstr "Nema rezultata" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nema rezultata" @@ -24858,6 +24555,16 @@ msgstr "Ovu nit mogu vidjeti samo osobe koje pozovete i moderatori." msgid "Only places I can't access anymore" msgstr "Samo mjesta kojima više ne mogu pristupiti" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Prijavite samo ono za što iskreno vjerujete da krši pravila i, molimo vas, ne šaljite istu prijavu dvaput." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Prijavite samo ono za što iskreno vjerujete da krši pravila. Zlouporaba prijava protivi se našim <0>smjernicama zajednice." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Neprozirnost" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Otvori na {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Otvori skočni izbornik" @@ -25379,11 +25084,6 @@ msgstr "Otvori Postavke sustava → Privatnost i sigurnost → Snimanje zaslona, msgid "Open template JSON" msgstr "Otvori JSON predloška" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Otvorite dijaloški okvir za zabranu u ovoj zajednici." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Otvori postavke" msgid "Opened the thread again" msgstr "Ponovno otvorena nit" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Otvara se u novoj kartici" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Izvorno zabranjen(a) {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Ostalo" @@ -25654,11 +25357,6 @@ msgstr "Druga reakcija…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Naš sigurnosni tim pregledava prijavu. Poslat ćemo vam izravnu poruku i e-poštu kada donesemo odluku." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Vlasništvo trenutačno nije moguće prenijeti na <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Vlasništvo preneseno" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Zalijepite JSON odgovor ovdje" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Zalijepite poveznicu poruke." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, prijevare, zlonamjerne poveznice ili lažne tvrdnje koje bi mogle uzrokovati stvarnu štetu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Odaberite pružatelja web pretraživanja" msgid "Pick an emoji" msgstr "Odaberi emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Odaberite opciju za nastavak." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Odaberi 4-znamenkasti broj nakon svog korisničkog imena" msgid "Pick the appearance this administrator account should start with." msgstr "Odaberite izgled s kojim bi se ovaj administratorski račun trebao pokrenuti." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Odaberite pravilo za pregled." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Pričekajte trenutak pa pokušajte ponovno preimenovati." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Poljska" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "pritisnite za dodavanje reakcije" msgid "press to remove reaction" msgstr "pritisnite za uklanjanje reakcije" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Pretvaranje da ste netko drugi, uključujući obmanjujući sadržaj generiran umjetnom inteligencijom." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Spriječite korisnika <0>{targetUserTag} da šalje poruke, reagira i povezuje se na glasovne kanale na navedeno vrijeme." @@ -27078,11 +26756,6 @@ msgstr "Prioritetni govornik" msgid "Privacy" msgstr "Privatnost" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privatnost ili lažno predstavljanje" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Postavke privatnosti" msgid "Privacy URL" msgstr "URL pravila privatnosti" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Kršenje privatnosti" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Kršenje privatnosti ili doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Kršenje privatnosti ili uhođenje" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Vrsta profila" msgid "Profile updated" msgstr "Profil ažuriran" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Kršenje pravila profila, korisničkog imena ili avatara" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promiče mržnju prema zaštićenim skupinama." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promovira, regrutira ili koordinira nasilne ekstremističke aktivnosti." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promicanje ili upute koje potiču samoozljeđivanje ili poremećaje prehrane." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil koji prijavljujete" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Zamjenice: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Zaštitite svoj Visionary račun omogućavanjem dvostruke provjere autentičnosti. Hvala vam što podržavate {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Unesite barem korisnički ID ili korisničku oznaku." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Unesite ID korisnika ili korisničko ime osobe koju prijavljujete." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Navedite svoje puno zakonsko ime za izjavu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Radio gumbi omogućuju odabir jedne opcije iz grupe." msgid "Radio group" msgstr "Radio grupa" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Koordinacija napada" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Želite kupiti poklon?" msgid "Ready to upgrade?" msgstr "Spremni za nadogradnju?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Razlog" @@ -28291,8 +27924,8 @@ msgstr "Zapamti veličinu i položaj prozora" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Ukloni {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Ukloniti {userName} iz grupe?" @@ -28419,8 +28052,8 @@ msgstr "Ukloni iz favorita" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Ukloni iz grupe" @@ -28458,11 +28091,6 @@ msgstr "Ukloni iz favorita GIF-ova pohranjenih putem URL-a" msgid "Remove icon" msgstr "Ukloni ikonu" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Ukloni je iz kanala za sve." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Uklonjeno iz favorita" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Uklonjen iz grupe" @@ -28919,28 +28547,18 @@ msgstr "Prijavi zajednicu" msgid "Report a message" msgstr "Prijavi poruku" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Prijavite kršenje pravila ili pronađite alate za upravljanje kontaktima i postavkama." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Prijavi korisnički profil" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Prijavi zajednicu" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detalji prijave" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Prijavi nezakonit sadržaj" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Prijavi problem" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Prijavi poruku" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Prijavi profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Prijava poslana" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Vrsta prijave" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Prijavi korisnika" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Oznaka prijavljenog korisnika (neobavezno)" @@ -29100,6 +28716,10 @@ msgstr "Zahtijeva sve što i srednja razina te članstvo u zajednici od najmanje msgid "Resend" msgstr "Ponovno pošalji" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Ponovno pošalji ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Ponovno pošalji ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Ponovno pošalji ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Ponovno pošalji ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Ponovno pošalji ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Ponovno pošalji ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Ponovno pošalji ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Ponovno pošalji kod" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Uloge su uspješno ažurirane" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumunjska" @@ -29947,7 +29567,7 @@ msgstr "Zasićenost" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Pozdravite <0>{displayName}. Vaš razgovor izravnim porukama počinj msgid "Scale" msgstr "Skaliranje" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Prijevare, zlonamjerni softver ili dezinformacije" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Skenirajte QR kod pomoću svoje aplikacije za provjeru autentičnosti." @@ -30855,11 +30470,6 @@ msgstr "Odaberi" msgid "Select {accessibleName}" msgstr "Odaberite {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Odaberite kategoriju" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Odaberite zajednicu u kojoj imate dopuštenje {permissionName} ili grupnu izravnu poruku kojoj pripadate." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Odaberite državu" @@ -30911,11 +30521,6 @@ msgstr "Odaberite URI za preusmjeravanje" msgid "Select a scenario to apply..." msgstr "Odaberite scenarij za primjenu..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Odaberite kategoriju kršenja pravila." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Odaberite račun s kojim se želite prijaviti na novom uređaju." msgid "Select voice processing mode" msgstr "Odaberite način obrade glasa" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Odaberite što želite prijaviti." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Odaberite državu prebivališta." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Odaberi…" @@ -31037,13 +30642,6 @@ msgstr "Odabir: {0} (maks. {1})" msgid "Selections" msgstr "Odabiri" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Samoozljeđivanje ili samoubojstvo" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Pošalji poruku radnje (prikazuje se kurzivom)." msgid "Send animation" msgstr "Pošalji animaciju" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Pošalji još jednu prijavu" @@ -31138,7 +30736,7 @@ msgstr "Gumb za slanje" msgid "Send code" msgstr "Pošalji kod" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Pošalji DSA prijavu" @@ -31158,9 +30756,9 @@ msgstr "Šaljite datoteke do {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Pošalji zahtjev za prijateljstvo" @@ -31220,8 +30818,8 @@ msgstr "Šalji poruke u nitima" msgid "Send messages, images, GIFs and emoji" msgstr "Šaljite poruke, slike, GIF-ove i emotikone" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Pošalji prijavu" @@ -31255,7 +30853,7 @@ msgstr "Vratiti ovu prikvačenu poruku u prošlost?" msgid "Send TTS messages" msgstr "Slanje TTS poruka" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Pošalji kod za provjeru" @@ -31273,11 +30871,6 @@ msgstr "Pošalji glasovnu poruku" msgid "Send:" msgstr "Slanje:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Slanje zlonamjernog softvera ili opasnih poveznica" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Podijeli temu" msgid "Share voice activity with all friends?" msgstr "Podijeliti glasovnu aktivnost sa svim prijateljima?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Podijelite ono što je našem timu potrebno za procjenu." @@ -31709,11 +31302,6 @@ msgstr "Podijelite ono što je našem timu potrebno za procjenu." msgid "Share with a friend" msgstr "Podijeli s prijateljem" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Podijeli s moderatorima zajednice." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Podijeljeni prozor" msgid "Shared window audio" msgstr "Zvuk podijeljenog prozora" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Dijeli osobne podatke, uhodi korisnike ili koordinira zlouporabu privatnosti." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Dijeljenje osobnih podataka" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Klizači" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovačka" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenija" @@ -32889,11 +32467,6 @@ msgstr "Simulacija usporenog načina rada" msgid "Slowmode time remaining" msgstr "Preostalo vrijeme usporenog načina rada" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Uvrede, dehumanizirajući jezik ili napadi na zaštićene skupine." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Nešto je pošlo po zlu tijekom pripreme ove naljepnice. Pokušajte s drugom datotekom ili pokušajte ponovno za nekoliko trenutaka." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Nešto je pošlo po zlu prilikom objavljivanja. Pokušajte ponovno za trenutak." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Prostran izgled s jasnim vizualnim razdvajanjem poruka." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Španjolska" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Račun za neželjenu poštu" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Klasifikacija neželjene pošte" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Neželjena pošta ili prijevara" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Zajednica koja širi neželjeni sadržaj ili prijevare" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Račun za neželjenu poštu, prijevaru ili krađu identiteta" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Neželjena pošta, prijevare ili krađa identiteta" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Pokreni umanjeno" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Počni ispočetka" @@ -33752,22 +33302,26 @@ msgstr "Ostani prijavljen" msgid "Step {current} of {total}" msgstr "Korak {current} od {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Korak 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Korak 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Korak 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Korak 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Korak 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Prekinuti objave u kanalu?" msgid "Stop hiding muted channels by default?" msgstr "Prestati skrivati utišane kanale po zadanim postavkama?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Zaustavite poruke i zahtjeve za prijateljstvo." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Zaustavi test mikrofona" @@ -33959,11 +33508,6 @@ msgstr "Prestani krpati metode Node.prototype insertBefore i removeChild. Aplika msgid "Stop ringing" msgstr "Zaustavi zvonjenje" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Prestanite vidjeti njezin sadržaj i članove." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Zamijeni uobičajene tekstualne izraze, kao što su :) i <3, emojijima prilikom slanja poruka" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Švedska" @@ -34804,11 +34348,6 @@ msgstr "Dodirnite za dodavanje bilješke" msgid "tar.gz archive" msgstr "tar.gz arhiva" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Cilja na ljude na temelju zaštićenih obilježja." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Uvjeti pružanja usluge" msgid "Terms URL" msgstr "URL uvjeta" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terorizam ili nasilni ekstremizam" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tajlandski" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Hvala vam što nam pomažete održati {productName} sigurnim. Pregledat ćemo vašu prijavu što je prije moguće." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Hvala što ste nas upozorili na ovo" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Hvala što ste nam javili. Ovo samo po sebi ne krši naša pravila, stoga nismo poslali prijavu." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Hvala što ste nam javili. Ovo samo po sebi ne krši naša pravila, stoga nismo poslali prijavu. Ako je usmjereno na nekoga ili koristi pogrdne izraze, prijavite to ponovno i odaberite „Zlostavljajući ili štetan sadržaj“." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "To nije uspjelo. Pokušajte ponovno ili odustanite." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Ovo ne izgleda kao valjana boja. Pokušajte s heksadecimalnim zapisom, rgb(), hsl() ili nazivom CSS boje." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Čini se da ovo nije valjan URL." @@ -35104,6 +34653,11 @@ msgstr "Aplikacija {PRODUCT_NAME} na vašem drugom uređaju prikazuje je pod \"P msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Aplikacija {PRODUCT_NAME} nije bila prijavljena. Možete zatvoriti ovaj tab." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Sigurnosni tim {productName} pregledat će vašu prijavu. Nećemo otkriti da je došla od vas." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Navedeni redirect_uri nije registriran za ovu aplikaciju." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Navedeni redirect_uri mora koristiti HTTP ili HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Obrazac prijave se promijenio. Molimo započnite ponovno." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Oznake korisničkog imena na ovoj instanci su već postavljene. Više se ne mogu mijenjati." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Kod za provjeru nije važeći ili je istekao." @@ -36115,13 +35674,8 @@ msgstr "Ovaj član više nije povezan s glasovnim kanalom." msgid "This message can only be forwarded to age-restricted channels" msgstr "Ovu poruku možete proslijediti samo u kanale s ograničenim pristupom prema dobi" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Ova je poruka već izbrisana." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Ova poruka je već objavljena" @@ -36279,11 +35833,6 @@ msgstr "Ova nit je zatvorena. Slanje poruke ponovno će je otvoriti." msgid "This thread is locked. Only moderators can send messages." msgstr "Ova nit je zaključana. Samo moderatori mogu slati poruke." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "ovaj korisnik" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Ovaj je korisnik ograničio svoj profil. Neki su detalji vidljivi samo prijateljima." @@ -36292,11 +35841,6 @@ msgstr "Ovaj je korisnik ograničio svoj profil. Neki su detalji vidljivi samo p msgid "This user has no roles in this community." msgstr "Ovaj korisnik nema uloge u ovoj zajednici." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Ovom je korisniku već zabranjen pristup zajednici." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Ovaj korisnik više nije dostupan." @@ -36465,16 +36009,6 @@ msgstr "Nit ažurirana" msgid "Threads" msgstr "Teme" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Prijetnje, praćenje na više mjesta ili neželjeni kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Prijetnje, uznemiravanje ili nanošenje štete" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Postavljeno je vremensko ograničenje za {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Vremensko ograničenje" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Preslikavanje HDR slika na standardni raspon, smanjujući vršnu svjetlinu." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Poslano je previše kodova. Pričekajte {duration} i pokušajte ponovno." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Prijenos vlasništva zajednice" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Želite li prenijeti vlasništvo grupe na {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Prvo ih deblokirajte da biste poslali zahtjev za prijateljstvo." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Deblokiraj korisnika" @@ -37607,16 +37146,6 @@ msgstr "Uključi zvuk na svim uređajima" msgid "Undeafen yourself" msgstr "Uključi zvuk za sebe" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Zabrinutost zbog maloljetnosti ili sigurnosti djece" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Maloljetni korisnik" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Dok ga ponovno ne uključim" msgid "Unverified email" msgstr "Nepotvrđena e-pošta" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Neželjeno ponašanje ili sadržaj za odrasle na pogrešnom mjestu." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Neželjeno ponašanje, komentari ili zahtjevi za odrasle." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Do {DISCOVERY_MAX_TAGS} oznaka pomaže ljudima da pronađu vašu zajednicu. Prikazuju se u pretraživanju Otkrivanja." @@ -38840,11 +38359,6 @@ msgstr "Koristi svijetlu temu" msgid "Use native title bar" msgstr "Koristi izvornu naslovnu traku" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Koristite samo ako jasno krši pravila {productName} i ne uklapa se u navedeno." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Koristi se samo u ovoj zajednici." msgid "User" msgstr "Korisnik" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Čini se da je korisnik maloljetan ili je uključen u vrbovanje ili iskorištavanje djece." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Otklanjanje pogrešaka korisnika" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID korisnika (neobavezno)" @@ -39061,12 +38570,12 @@ msgstr "Korisnik nije pronađen" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Korisnički profil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Korisnički profil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Korisničke postavke" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Korisnička oznaka (neobavezno)" @@ -39339,7 +38848,7 @@ msgstr "Provjerena zajednica" msgid "Verify" msgstr "Potvrdi" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Potvrdi kod" @@ -39368,7 +38877,7 @@ msgstr "Potvrdite da ste to vi" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Potvrdite svoju e-poštu" @@ -39718,7 +39227,7 @@ msgstr "Prikaži kodove" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Prikaži profil zajednice" @@ -39751,7 +39260,7 @@ msgstr "Prikaži poklone" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Prikaži globalni profil" @@ -39847,26 +39356,6 @@ msgstr "Gledatelj se pridružuje prijenosu" msgid "Viewer leaves stream" msgstr "Gledatelj napušta prijenos" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategorija kršenja" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Kršenje je u korisničkom profilu, a ne u određenoj poruci." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Nasilje ili prijetnje nasiljem" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Nasilan ili eksplicitan sadržaj" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Promijenili smo veličinu i komprimirali ovaj emoji na 128x128 piksela, msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Promijenili smo veličinu i komprimirali ovu naljepnicu na 320x320 piksela, ali je i dalje {fileSize}. Ograničenje je {maxSize}. Pokušajte s jednostavnijom slikom, manje boja ili manjom izvornom datotekom." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Poslali smo kôd na adresu {email}." @@ -40472,7 +39961,7 @@ msgstr "Obradit ćemo ovo što je prije moguće. Primit ćete e-poštu kada vaš msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Vratit ćemo vašu prethodnu e-poštu, odjaviti stare sesije, onemogućiti višefaktorsku provjeru autentičnosti i osigurati vaš račun novom lozinkom." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Poslat ćemo kratak kôd za potvrdu da možete primati obavijesti o ovoj prijavi." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Zapadna Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Koja je vrsta pravila prekršena?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Što se događa?" msgid "What's new" msgstr "Novosti" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Koji je razlog vaše prijave?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Kada prilagođeni granični datum nije postavljen, članovi bez dopuštenja <0>{readMessageHistoryPermissionLabel} ne mogu vidjeti nijednu stariju poruku. Vidjet će samo poruke u stvarnom vremenu, kako stižu, a one će nestati kada ponovno pokrenu svoje klijente." @@ -40832,11 +40321,6 @@ msgstr "Koje zajednice" msgid "Which conversations" msgstr "Koje razgovore" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Koje je pravilo prekršeno?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Dok je uključena značajka pritisni za govor, vaš prečac upravlja mikrofonom, pa je gumb za isključivanje mikrofona onemogućen." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Ne možete priložiti datoteke u ovom kanalu." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Ne možete se sprijateljiti sami sa sobom" @@ -41341,7 +40825,7 @@ msgstr "Ne možete poslati poruku ovom korisniku" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Morate prihvatiti uvjete pružanja usluge kako biste stvorili račun" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Morate potvrditi svoju e-poštu prije slanja prijave." @@ -41891,6 +41375,11 @@ msgstr "Koristite staru cijenu. Trenutna cijena za ovaj plan je {currentSubscrip msgid "You're sending messages too quickly" msgstr "Prebrzo šaljete poruke" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Prebrzo šaljete prijave. Pokušajte ponovno kasnije." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Pregledavate starije poruke" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Dodali ste više osoba nego što grupna izravna poruka dopušta. Uklonite ih nekoliko i pokušajte ponovno." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Već ste prijavili ovu poruku." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Već ste prijavili ovaj profil danas." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Vaši računi i postavke nisu promijenjeni niti izbrisani." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Vaša radnja nije mogla biti dovršena jer ju je naš sigurnosni sustav označio. Ako mislite da je ovo pogreška, obratite se podršci." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Vaši odgovori" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Vaša prijava čeka pregled. I dalje možete ažurirati pojedinosti unosa ili povući prijavu." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Vaš preglednik zahtijeva interakciju korisnika prije nego što se zvuk može reproducirati. Kliknite gumb u nastavku da biste omogućili glasovni chat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Vaše promjene dosežu svaku zajednicu koja prati ovaj kanal, što može potrajati minutu. Svaka objavljena poruka omogućuje 3 brze izmjene, a zatim 1 svakih 20 minuta." @@ -42311,6 +41815,11 @@ msgstr "Vaš novi nadimak ili ostavite prazno za poništavanje." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Vaš stari komplet za oporavak više ne radi. Novi komplet pohranite na sigurno mjesto." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Vaše mogućnosti" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "vaša regija" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Plaćanje za obnovu pretplate nije uspjelo, ali <0/> ostaju aktivne do <1>{graceDate}. Ažurirajte način plaćanja prije tog datuma kako biste zadržali pretplatu." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Vaša prijava nije prošla. Pokušajte ponovno." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Vaša pretplata prebacit će se na godišnju naplatu pri sljedećoj obno msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS vaše teme je prevelik za dijeljenje. Smanjite ga i pokušajte ponovno." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Vaše korisničko ime (neobavezno)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index 174898694..e65965e69 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} maradt" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {tag} other {tag}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {A meghívólinked # másodperc múlva jár le.} other {A meghívólinked # másodperc múlva jár le.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} kiválasztva" @@ -2957,11 +2957,6 @@ msgstr "Fiókadatok" msgid "Account details unavailable" msgstr "A fiók részletei nem érhetők el" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "A fiók spamküldésre, átverésre vagy a platformmal való visszaélésre jött létre." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Hozzáadva: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Hozzáadva: {createdDate} • utoljára használva: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "További megjegyzések (opcionális)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Már beváltva" msgid "Already set to cancel" msgstr "Már be van állítva a lemondás" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Az üzenet bejelentése a(z) {productName} biztonsági csapatának is" @@ -4576,11 +4566,6 @@ msgstr "Éves" msgid "Another checkbox" msgstr "Még egy jelölőnégyzet" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Egy másik egyértelmű szabálysértés" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Még egy kerek jelölőnégyzet" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Hangfeltöltés" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Ausztria" @@ -5620,6 +5605,7 @@ msgstr "Jelenleg távol" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Jelenleg távol" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Vissza" @@ -5788,9 +5775,7 @@ msgstr "Biztonsági kódok újragenerálva" msgid "Badge" msgstr "Jelvény" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Kitiltás" @@ -5819,7 +5804,7 @@ msgstr "Kitiltás időtartama" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Tagok kitiltása a közösségből, a legutóbbi üzeneteik törléséne msgid "Ban reason" msgstr "Kitiltás oka" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Felhasználó kitiltása" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Sávszélesség" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Kitiltva" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Kitiltottuk a közösségből: {targetUserTag}" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Dátum előtt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgium" @@ -6031,7 +6006,7 @@ msgstr "Bitráta" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Letiltás" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Letiltás" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name} letiltása" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Letiltás minden közösségben" msgid "Block spoiler" msgstr "Spoilerblokk" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Felhasználó letiltása" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Felhasználó letiltása" msgid "Blocked" msgstr "Letiltva" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Letiltva" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Beépített fordítók" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgária" @@ -6519,16 +6500,6 @@ msgstr "Bolgár" msgid "Bulk delete" msgstr "Tömeges törlés" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Megfélemlítés, ismételt kéretlen kapcsolatfelvétel, követéses zaklatás vagy célzott bántalmazás." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Zaklatás, fenyegetés, gyűlölet, erőszak, összehangolt támadások vagy önkárosításra ösztönző tartalom." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornia" msgid "Call" msgstr "Hívás" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Hívások és csoportos beszélgetések beállításai" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Borítókép módosítása" msgid "Change chat embed background" msgstr "Csevegésbe ágyazott tartalom hátterének módosítása" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "E-mail-cím módosítása" @@ -7150,8 +7116,8 @@ msgstr "Ismerős becenevének módosítása" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Csoportbeli becenév módosítása" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Nyelv módosítása" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Csoportbeli becenevem módosítása" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Saját becenév módosítása" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Tulajdonos módosítása" @@ -7283,16 +7249,6 @@ msgstr "Módosítsd, hogy egy hangcsatorna melyik hangrégiót használja." msgid "Change which voice region this channel uses." msgstr "Módosítsd, hogy ehhez a csatornához melyik hangrégió tartozzon." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Módosítsd, hogy ki hívhat fel vagy adhat hozzá csoportos beszélgetésekhez." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Állítsd be, hogy ki léphet kapcsolatba veled." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Az engedélyezési linket a(z) {emailAddress} címre küldött e-mailben msgid "Check your inbox for a verification email." msgstr "Keresd az ellenőrző e-mailt a postaládádban." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "A bejelentésed ellenőrzése" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Jelölőnégyzetek" @@ -7901,21 +7862,6 @@ msgstr "Ennél a fióknál le van tiltva a fizetés. Ha segítségre van szüks msgid "Checkout unavailable" msgstr "A fizetés nem elérhető" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Gyermekbiztonsági aggályok" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Gyermekbiztonság vagy kiskorúak kizsákmányolása" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Gyermekbiztonság vagy felnőtt tartalom" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Választási lehetőségek" msgid "Choices: {choiceList}" msgstr "Lehetőségek: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Válassz" @@ -8122,6 +8068,11 @@ msgstr "Válaszd ki a kategóriát, amely a legjobban leírja a közösségedet. msgid "Choose the premium model" msgstr "Válaszd ki a prémium modellt" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Válaszd ki újra az okot" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Ajándék beváltása" msgid "Claim your account" msgstr "Fejezd be a fiókod regisztrációját" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "A bejelentések küldéséhez fejezd be a fiókod regisztrációját, és erősítsd meg az e-mail-címedet." @@ -8352,12 +8303,12 @@ msgstr "Az ajándék beváltásához fejezd be a fiókod regisztrációját." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Fejezd be a fiókod regisztrációját, hogy ismerősjelöléseket küldhess." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Igényeld a fiókodat a jelentések küldéséhez." @@ -8378,11 +8329,6 @@ msgstr "Fejezd be a fiókod regisztrációját, hogy kétszemélyes hívásokat msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Váltsd be az ajándékkódot, hogy aktiváld a(z) {premiumProductName} előfizetésedet!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Más személynek, márkának vagy szervezetnek adja ki magát." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Keresési mező törlése" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Modális ablak bezárása" msgid "Close popout" msgstr "Előugró ablak bezárása" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Közvetlen beszélgetés bezárása" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Bezárás az értesítési területre" msgid "Close window" msgstr "Ablak bezárása" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Bezárod a(z) {dmDisplayName} felhasználóval folytatott közvetlen beszélgetést. Ez nem tiltja le a felhasználót, és később újra megnyithatod a beszélgetést." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Bezárod a(z) {displayName} felhasználóval folytatott közvetlen beszélgetést? Bármikor újra megnyithatod." @@ -8837,7 +8773,7 @@ msgstr "Szén téma" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kód" @@ -8868,7 +8804,7 @@ msgstr "Kód a(z) {productName} alkalmazásból" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kód újraküldve" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Csatlakozható közösségek" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Közösség" @@ -9131,7 +9065,7 @@ msgstr "Hang kikapcsolása közösségi szinten" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Közösségi hibakeresés" @@ -9150,16 +9084,6 @@ msgstr "Közösség törölve" msgid "Community DM" msgstr "Közösségi DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "A közösség spamküldésre, átverésre vagy a platformmal való visszaélésre jött létre." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "A közösség megkönnyíti a tömeges támadásokat vagy a célzott zaklatást." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Közösség ikonja" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Közösségi azonosító" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Közösségi azonosító szükséges." @@ -9526,6 +9450,11 @@ msgstr "Új jelszó megerősítése" msgid "Confirm password" msgstr "Jelszó megerősítése" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Erősítsd meg a nyilatkozatot a bejelentés elküldéséhez." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Folytatás a böngészőben" msgid "Continue to checkout" msgstr "Tovább a fizetéshez" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Tovább a közösség bejelentéséhez" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Tovább a felhasználó bejelentéséhez" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Ennek a csatornának szöveges csatornává alakítása eltávolítja az msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "A bejövő tartalmat beszéddé alakítja, függetlenül attól, hogy a /tts paranccsal érkezett-e." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Személyek vagy közösségek ellen szervez összehangolt támadásokat, tömeges fellépést vagy zaklatást." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL kimásolva a vágólapra" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL kimásolva a vágólapra" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Üzenetazonosító másolása" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Üzenetlink másolása" @@ -10643,6 +10553,11 @@ msgstr "Nem sikerült betölteni a bejegyzéseket. Próbáld meg később." msgid "Couldn't load settings" msgstr "Nem sikerült betölteni a beállításokat" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nem sikerült betölteni a bejelentési űrlapot." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nem sikerült betölteni az alkalmazást" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nem sikerült feldolgozni a képet" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nem sikerült közzétenni ezt az üzenetet" @@ -10825,11 +10740,6 @@ msgstr "Nem sikerült elküldeni a meghívót" msgid "Couldn't send invite. Try again." msgstr "Nem sikerült elküldeni a meghívót. Próbáld újra." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nem sikerült elküldeni. Próbáld újra." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Visszaszámláló" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Lakóhely szerinti ország" @@ -11301,13 +11211,8 @@ msgstr "Létrehozva:" msgid "Credentials" msgstr "Hitelesítő adatok" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Hiteles fenyegetések, explicit erőszak vagy az erőszak dicsőítése." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Horvátország" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Elnémítja a megadott hangerőküszöb alatti hangot, minimális processzorterheléssel." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Ciprus" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Cseh" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Csehország" @@ -11965,7 +11870,7 @@ msgstr "Csatorna hibakeresése" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Közösség hibakeresése" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Törlöd a témát?" msgid "Delete this invite? Can't be undone." msgstr "Törlöd ezt a meghívót? A művelet nem vonható vissza." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Üzenet törlése" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Törlöd ezt az üzenetet? A művelet nem vonható vissza." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Törlöd ezt az üzenetet? Nem vonható vissza. Ez az üzenet eltávolításra kerül minden olyan közösségből is, amely követi ezt a csatornát." @@ -12461,11 +12359,6 @@ msgstr "Törlöd az üzeneteidet ebből a közösségből?" msgid "Delete your messages in this conversation?" msgstr "Törlöd az üzeneteidet ebből a beszélgetésből?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Törölve" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Megtagadva: {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dánia" @@ -12554,11 +12447,6 @@ msgstr "Matrica leírása" msgid "Describe this media for screen readers" msgstr "Média leírása képernyőolvasók számára" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Írd le, miért jogellenes a tartalom" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Különálló borítókép" msgid "Detail" msgstr "Részletesség" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Részletek" @@ -13315,11 +13203,6 @@ msgstr "Megjelenítendő név (opcionális)" msgid "Display scaling" msgstr "Kijelzőméretezés" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Kártevőket, hitelesítőadat-lopásra szolgáló eszközöket vagy más káros fájlokat terjeszt." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM- és ismerősjelölési beállítások" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentáció" msgid "Doesn't allow being added to group DMs" msgstr "Nem engedi, hogy csoportos beszélgetésekhez adják" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Nem tiltja le. Később újra megnyithatod." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Adományozzon helyette" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Töltsd le a forráskód-térképeket, hogy a híváskövetések és a f msgid "Download video" msgstr "Videó letöltése" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, személyes adatok közzététele vagy zaklatás." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, követéses zaklatás, személyazonossággal való visszaélés vagy nem megfelelő profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "{tokenLabel} színének szerkesztése" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Közösségi profil szerkesztése" @@ -14043,7 +13908,7 @@ msgstr "Szerepkörök és tagok egyéni jogosultságainak szerkesztése ebben a #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Profil szerkesztése" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Helyi idő szerkesztése" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Közzétett üzenet szerkesztése?" @@ -14191,13 +14056,13 @@ msgstr "Eddig kérhetsz visszatérítést: {windowEndsOn}. Ezzel az előfizetés #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-mail-cím" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Az e-mail-cím megadása kötelező." @@ -14721,16 +14586,6 @@ msgstr "Az új képernyőmegosztásokhoz használt kódoló beállításai." msgid "Encoder, SVC, and bitrate presets" msgstr "Kódoló, SVC és bitráta előbeállítások" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Önsértésre buzdít" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Öngyilkosságra, önkárosításra vagy étkezési zavarokra buzdít." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "A végpontok közötti titkosítás nem érhető el, mert a hívás egyi msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "A végpontok közötti titkosítás nem érhető el, mert a hangcsatorna egyik résztvevőjének kliense nem támogatja." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Kiskorúakat veszélyeztet, vagy gyermekek kizsákmányolásával kapcsolatos tartalmat tartalmaz." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Írj be egy kódot ABCD-1234 formátumban." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Adj meg egy érvényes sablon-URL-t vagy -kódot a(z) {theOtherPlatform} platformról." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Érvényes e-mail-címet adj meg." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Érvényes üzenetlinket adj meg." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Add meg a hitelesítő alkalmazásod {digitCount} számjegyű kódját." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "A folytatáshoz add meg a kódot." @@ -15008,7 +14858,7 @@ msgstr "Enter a <0><1>mentéshez" msgid "Enter username" msgstr "Felhasználónév megadása" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Add meg az ellenőrző kódot" @@ -15017,6 +14867,11 @@ msgstr "Add meg az ellenőrző kódot" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Add meg az e-mail-címedet, és küldünk egy linket a jelszavad visszaállításához." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Add meg a teljes hivatalos neved a bejelentés elküldéséhez." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc a <0><1>megszakításhoz" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Észtország" @@ -15412,6 +15267,16 @@ msgstr "Lejár ekkor: {earliest}" msgid "Expires:" msgstr "Lejár:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Magyarázd el a problémát" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Magyarázd el a problémát a bejelentés elküldéséhez." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "A külső hivatkozások veszélyesek lehetnek. Légy óvatos." msgid "Extra large" msgstr "Extra nagy" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Szélsőséges közösség" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Nem sikerült eltávolítani az egyéni meghívólinket. Próbáld újra." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Nem sikerült újraküldeni a kódot. Próbáld újra." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "A prémium állapot visszaállítása sikertelen." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Nem sikerült elküldeni a kódot. Próbáld újra." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Az üzenet küldése sikertelen. Tartsd nyomva a további lehetőségekért." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Nem sikerült elküldeni a bejelentést. Próbáld újra." @@ -15840,11 +15700,6 @@ msgstr "Nem sikerült feltölteni az emojikat, a(z) {startLabel} elemtől kezdve msgid "Failed to upload emojis. Try again." msgstr "Nem sikerült feltölteni az emojikat. Próbáld újra." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Valótlan állítások, amelyek valós károkat okozhatnak." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Találd meg a tökéletes matricát" msgid "Fingerprint" msgstr "Ujjlenyomat" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Fiókregisztráció befejezése" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Előbb fejezd be a fiókod regisztrációját" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Fejezd be a regisztrációt, hogy ismerősjelöléseket küldhess." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finnország" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finn" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Vezetéknév és keresztnév" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "A 30 FPS feletti képkockasebességhez {premiumProductName} szükséges" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Franciaország" @@ -16834,10 +16689,10 @@ msgstr "Teljes" msgid "Full dynamic range" msgstr "Teljes dinamikatartomány" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Teljes hivatalos név" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Teljes hivatalos név (opcionális gyermekek szexuális bántalmazásával kapcsolatos bejelentések esetén)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Német" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Németország" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Vissza" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Menj vissza, és adj meg egy érvényes e-mail-címet." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Örülünk, hogy látunk, {username}! Üdv a fedélzeten." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Görögország" @@ -17572,11 +17427,6 @@ msgstr "Görög" msgid "Grid view" msgstr "Rácsos nézet" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Gyermekek szexuális célú behálózása vagy kizsákmányolásukhoz kapcsolódó tartalom." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Azonosító" msgid "Hang out with voice, video and screen share" msgstr "Csevegj hanggal, videóval és képernyőmegosztással" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Zaklatás" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Zaklatás felnőtt tartalommal" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Zaklatás vagy megfélemlítés" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Zaklatás vagy üldözés" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Zaklatás vagy célzott visszaélés" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Zaklatás vagy fenyegetés" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardverkulcs" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardveresen gyorsított a legtöbb Windows és macOS rendszeren. Megbízható régebbi eszközökön is." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Káros félretájékoztatás" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Vásárolt már" msgid "Has ever purchased override" msgstr "Vásárolt már felülbírálása" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Gyűlöletbeszéd" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Elrejted a saját képernyőmegosztásodat?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Elrejti a letöltés, megnyitás böngészőben és másolás gombokat a csatorna képein és videóin." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Elrejti az üzeneteit, és megakadályozza, hogy üzenetet küldjön neked" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Magyar" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Magyarország" @@ -18399,6 +18212,11 @@ msgstr "Én egy buboréksúgó vagyok" msgid "I changed my mind" msgstr "Meggondoltam magam" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Jóhiszeműen kijelentem, hogy az ebben a bejelentésben szereplő információk és állítások pontosak és teljesek." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Inaktivitási beállítások" msgid "Idle timeout" msgstr "Inaktivitási időkorlát" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Ha kiskorú érintett, inkább a(z) „{childSafetyReasonName}” lehetőséget használd." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Ha egy fiók használja ezt a címet, elküldtük a jelszó-visszaállí msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Ha a macOS arra kér, hogy nyissa újra a(z) {productName} alkalmazást, válassza a Később lehetőséget." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Ha valakit közvetlen veszély fenyegethet, értesítsd a helyi segélyszolgálatokat, amennyiben ezt biztonságosan megteheted." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Ha valaki azonnali veszélyben van, először vedd fel a kapcsolatot a helyi segélyhívóval." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Ha valaki azt mondta, hogy illessz be ide valamit, az átverés, amellyel megszerezheti a(z) {productName}-fiókodat." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Ha gyermekek szexuális bántalmazását ábrázoló anyagról (CSAM) vagy kiskorú kizsákmányolásáról van szó, küldd el most a bejelentést, és ne oszd meg újra az anyagot." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Ha valós, közvetlen fenyegetésről van szó, értesítsd a helyi segélyszolgálatokat is." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Ha közvetlen terrorfenyegetésről van szó, értesítsd a helyi segélyszolgálatokat is." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Ha a bejelentés a közösség egy konkrét üzenetére vonatkozik, inkább azt az üzenetet jelentsd be. Az üzenet bejelentése mutatja meg legjobban a körülményeket a biztonsági csapatunknak, a megjegyzésekben megadott részletek pedig gyorsíthatják az elbírálást. Csak akkor jelentsd be az egész közösséget, ha egy üzenet bejelentése nem mutatná meg a probléma teljes körét." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Ha a bejelentés egy konkrét üzenetre vonatkozik, inkább azt az üzenetet jelentsd be. Az üzenet bejelentése mutatja meg legjobban a körülményeket a biztonsági csapatunknak, a megjegyzésekben megadott részletek pedig gyorsíthatják az elbírálást. Csak akkor jelentsd be a felhasználót, ha az üzenet nem mutatja meg a probléma teljes körét." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Ha a bejelentés konkrét üzenetekre vonatkozik, inkább a leginkább idevágó üzenetet jelentsd be. Az üzenet bejelentése mutatja meg legjobban a körülményeket a biztonsági csapatunknak, a megjegyzésekben megadott részletek pedig gyorsíthatják az elbírálást. Csak akkor jelentsd be a felhasználót, ha egy üzenet bejelentése nem mutatná meg a probléma teljes körét." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Ha úgy gondolod, hogy illegális, írd meg, melyik törvényt sérti, és miért." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "A csatorna lassú módjához tartozó várakozási idő figyelmen kívü msgid "Ignore virtual" msgstr "Virtuális eszközök figyelmen kívül hagyása" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Illegális tevékenység" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Illegális tevékenység vagy egyéb" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Illegális értékesítés, bűncselekmény elősegítése vagy egyértelmű szabálysértés, ami nem illik a fenti kategóriákba." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Illegális értékesítés, bűncselekmény elősegítése vagy jogellenes tevékenység." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Képek" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "A vágólapról beillesztett képek mellékletként kerülnek elküldésre, de nincs jogosultságod fájlok csatolására ezen a csatornán." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Megszemélyesítés" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Megszemélyesítés vagy megtévesztő média" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inaktív" msgid "Inactive timeout" msgstr "Inaktivitási időkorlát" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Nem megfelelő profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Tartsa benne a kétfaktoros biztonsági kódjaimat a PDF-be és a kinyomtatott dokumentumba is" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Add meg a közösség azonosítóját." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Meghívó háttere" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Meghívókód (opcionális)" @@ -19471,7 +19220,7 @@ msgstr "Meghívó elrejtése" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Tagok meghívása" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-cím engedélyezve" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Írország" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Dőlt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Olaszország" @@ -20120,7 +19869,7 @@ msgstr "Billentyűk" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Később" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lettország" @@ -20291,11 +20040,6 @@ msgstr "További információ" msgid "Learn more about Visionary" msgstr "Tudj meg többet a Visionary-ról" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Kilépés" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Elhagyod a privát szálat" msgid "Leave silently" msgstr "Kilépés csendben" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Közösség elhagyása" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Az ezzel a szerepkörrel rendelkező tagokat külön szakaszban jeleníti meg a taglistában." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litvánia" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Betöltés..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Betöltés…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Alacsony" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Karbantartás ütemezve ekkorra: {localizedTime}. Várható időtartam: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "{userName} legyen a csoport tulajdonosa? Ekkor elveszíted a tulajdonosi jogosultságaidat." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Csoporttulajdonossá tétel" @@ -21091,38 +20830,21 @@ msgstr "Csoporttulajdonossá tétel" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Győződj meg róla, hogy ez a kód megegyezik a(z) {PRODUCT_NAME} alkalmazásban lévővel." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Ellenőrizd, hogy minden rendben van-e, mielőtt elküldöd." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Szabd a példányt a saját igényeidre" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Rosszindulatú linkek" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Málta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Kártevő terjesztése" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Kártevő vagy veszélyes linkek" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Kártevő, hitelesítő adatok lopása vagy káros fájlok." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Rejtsd el a személyes adataidat a képernyőd vagy streamed megosztása msgid "Mask Visionary as subscription" msgstr "A Visionary megjelenítése normál előfizetésként" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Tömeges spam, csalás, hamis nyereményjátékok vagy fiókokkal való visszaélés." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Felnőtt médiatartalom hozzáférési korlátozása" msgid "Mature content not allowed" msgstr "Felnőtt tartalom nem engedélyezett" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Felnőtt tartalom vagy zaklatás" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Felnőtt tartalom vagy nem megfelelő hozzáférési korlátozás" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Felnőtt tartalom felülbírálása" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "A felnőtt tartalomra vonatkozó irányelvek megsértése" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Felnőtt tartalom megfelelő hozzáférési korlátozás nélkül." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Üzenet" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "üzenet linkje" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Üzenet linkje" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Üzenetelőnézetek a DM-listában" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Üzenet közzétéve" @@ -22211,6 +21908,11 @@ msgstr "Üzenet ideje" msgid "Message unpinned" msgstr "Üzenet rögzítése feloldva" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Az általad bejelentett üzenet" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Kiskorúak veszélyeztetése, nem megfelelő helyen megjelenő felnőtt tartalom vagy nem kívánt viselkedés." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Továbbiak" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "További műveletek" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Beágyazott" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Hollandia" @@ -24099,7 +23796,7 @@ msgstr "Nincs találat" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nincs találat" @@ -24858,6 +24555,16 @@ msgstr "Ezt a szálat csak a meghívott személyek és a moderátorok láthatjá msgid "Only places I can't access anymore" msgstr "Csak azok a helyek, amikhez már nincs hozzáférésem" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Csak olyat jelents be, amiről őszintén úgy gondolod, hogy megszegi a szabályokat, és kérjük, ne küldd el ugyanazt a bejelentést kétszer." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Csak olyat jelents be, amiről őszintén úgy gondolod, hogy megszegi a szabályokat. A bejelentésekkel való visszaélés ellentétes a <0>közösségi irányelveinkkel." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Átlátszatlanság" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Megnyitás itt: {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Felugró ablak megnyitása" @@ -25379,11 +25084,6 @@ msgstr "Nyisd meg a Rendszerbeállítások > Adatvédelem és biztonság > Képe msgid "Open template JSON" msgstr "Sablon JSON-jának megnyitása" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "A közösség kitiltási párbeszédablakának megnyitása." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Beállítások megnyitása" msgid "Opened the thread again" msgstr "Újra megnyitotta a szálat" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Megnyílik egy új lapon" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Eredetileg ekkor lett kitiltva: {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Egyéb" @@ -25654,11 +25357,6 @@ msgstr "További reakciók…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Biztonsági csapatunk felülvizsgálja a bejelentést. DM-et és e-mailt küldünk, amint megszületett a döntés." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "A tulajdonjogot jelenleg nem lehet átruházni <0>{username} részére." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Tulajdonjog átruházva" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Illeszd be ide a JSON-választ" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Illeszd be az üzenet linkjét." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Adathalászat, csalás, rosszindulatú hivatkozások vagy valós károkat okozó hamis állítások." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Válassz webes keresésszolgáltatót" msgid "Pick an emoji" msgstr "Válassz egy emojit" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Válassz egy lehetőséget a folytatáshoz." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Válaszd ki a 4 számjegyű számot a felhasználóneved után" msgid "Pick the appearance this administrator account should start with." msgstr "Válaszd ki a megjelenést, amellyel ez a rendszergazdai fiók induljon." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Válaszd ki az áttekintendő szabályt." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Várj egy pillanatot, majd próbáld újra az átnevezést." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Lengyelország" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugália" @@ -26872,11 +26555,6 @@ msgstr "nyomd meg a reakció hozzáadásához" msgid "press to remove reaction" msgstr "nyomd meg a reakció eltávolításához" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Más személynek adja ki magát, akár megtévesztő, mesterséges intelligenciával létrehozott tartalommal." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Megakadályozza, hogy <0>{targetUserTag} üzeneteket küldjön, reagáljon és hangcsatornákhoz csatlakozzon a megadott időtartamra." @@ -27078,11 +26756,6 @@ msgstr "Elsőbbségi beszélő" msgid "Privacy" msgstr "Adatvédelem" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Adatvédelem vagy személyiséglopás" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Adatvédelmi beállítások értesítősáv" msgid "Privacy URL" msgstr "Adatvédelmi URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Adatvédelmi szabálysértés" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Adatvédelmi szabálysértés vagy doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Adatvédelmi szabálysértés vagy zaklatás" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiltípus" msgid "Profile updated" msgstr "Profil frissítve" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Szabálysértő profil, felhasználónév vagy profilkép" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Gyűlöletet szít védett csoportok ellen." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Erőszakos szélsőséges tevékenységet népszerűsít vagy szervez, illetve arra toboroz." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Önsértésre vagy étkezési zavarokra ösztönző tartalom vagy útmutatás." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Az általad bejelentett profil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Névmások: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Védd a Visionary-fiókodat kétlépcsős azonosítással. Köszönjük, hogy támogatod a(z) {productName} működését!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Adj meg legalább egy felhasználói azonosítót vagy felhasználói címkét." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Add meg a bejelenteni kívánt személy felhasználói azonosítóját vagy felhasználónevét." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Add meg a teljes hivatalos nevedet a nyilatkozathoz." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "A választógombokkal egyetlen lehetőséget választhatsz ki egy csopor msgid "Radio group" msgstr "Választógombok csoportja" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Összehangolt támadás szervezése" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Készen állsz egy ajándék vásárlására?" msgid "Ready to upgrade?" msgstr "Készen állsz a csomagváltásra?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Ok (indoklás)" @@ -28291,8 +27924,8 @@ msgstr "Ablakméret és -pozíció megjegyzése" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Eltávolítás: {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Eltávolítod a(z) {userName} felhasználót a csoportból?" @@ -28419,8 +28052,8 @@ msgstr "Eltávolítás a kedvencekből" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Eltávolítás a csoportból" @@ -28458,11 +28091,6 @@ msgstr "Eltávolítás az URL-en alapuló GIF-kedvencek közül" msgid "Remove icon" msgstr "Ikon eltávolítása" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Eltávolítás a csatornából mindenki számára." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Eltávolítva a kedvencek közül" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Eltávolítva a csoportból" @@ -28919,28 +28547,18 @@ msgstr "Közösség bejelentése" msgid "Report a message" msgstr "Üzenet bejelentése" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Szabálysértés bejelentése, vagy eszközök keresése a kapcsolatok és beállítások kezeléséhez." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Felhasználói profil bejelentése" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Közösség bejelentése" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Bejelentés részletei" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Illegális tartalom bejelentése" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Probléma bejelentése" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Üzenet bejelentése" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Profil bejelentése" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Bejelentés elküldve" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Bejelentés típusa" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Felhasználó bejelentése" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Bejelentett felhasználó címkéje (opcionális)" @@ -29100,6 +28716,10 @@ msgstr "A közepes szint minden feltételét megköveteli, továbbá legalább 1 msgid "Resend" msgstr "Újraküldés" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Újraküldés ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Újraküldés ({newSecondsRemaining} mp)" @@ -29108,7 +28728,7 @@ msgstr "Újraküldés ({newSecondsRemaining} mp)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Újraküldés ({originalSecondsRemaining} mp)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Újraküldés ({resendCooldownSeconds} mp)" @@ -29122,7 +28742,7 @@ msgstr "Újraküldés ({resendSecondsRemaining} mp múlva)" msgid "Resend ({secondsRemaining}s)" msgstr "Újraküldés ({secondsRemaining} mp)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Kód újraküldése" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Szerepkörök sikeresen frissítve" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Románia" @@ -29947,7 +29567,7 @@ msgstr "Telítettség" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Köszönj neki: <0>{displayName}. Itt kezdődik a közvetlen beszél msgid "Scale" msgstr "Méretarány" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Csalások, rosszindulatú programok vagy félretájékoztatás" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Olvasd be a QR-kódot a hitelesítő alkalmazásoddal." @@ -30855,11 +30470,6 @@ msgstr "Kiválasztás" msgid "Select {accessibleName}" msgstr "{accessibleName} kiválasztása" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Kategória kiválasztása" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Válassz egy közösséget, ahol van {permissionName} jogosultságod, vagy egy csoportos beszélgetést, amelynek tagja vagy." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Ország kiválasztása" @@ -30911,11 +30521,6 @@ msgstr "Átirányítási URI kiválasztása" msgid "Select a scenario to apply..." msgstr "Válassz egy alkalmazandó forgatókönyvet…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Válassz egy kategóriát a szabálysértéshez." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Válaszd ki a fiókot, amellyel be szeretnél jelentkezni az új eszköz msgid "Select voice processing mode" msgstr "Hangfeldolgozási mód kiválasztása" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Válaszd ki, mit szeretnél bejelenteni." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Válaszd ki a lakóhelyed szerinti országot." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Kiválasztás…" @@ -31037,13 +30642,6 @@ msgstr "Kijelölés: {0} (max. {1})" msgid "Selections" msgstr "Kiválasztottak" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Önsértés vagy öngyilkosság" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Műveleti üzenet küldése (dőlt betűvel)." msgid "Send animation" msgstr "Animáció küldése" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Másik bejelentés küldése" @@ -31138,7 +30736,7 @@ msgstr "Küldés gomb" msgid "Send code" msgstr "Kód küldése" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA-bejelentés küldése" @@ -31158,9 +30756,9 @@ msgstr "Küldj fájlokat ekkoráig: {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Ismerősnek jelölés" @@ -31220,8 +30818,8 @@ msgstr "Üzenetek küldése szálakban" msgid "Send messages, images, GIFs and emoji" msgstr "Üzenetek, képek, GIF-ek és emojik küldése" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Bejelentés küldése" @@ -31255,7 +30853,7 @@ msgstr "Visszaküldöd ezt a rögzítést az időben?" msgid "Send TTS messages" msgstr "TTS-üzenetek küldése" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Ellenőrző kód küldése" @@ -31273,11 +30871,6 @@ msgstr "Hangüzenet küldése" msgid "Send:" msgstr "Küldés:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Kártevő vagy veszélyes linkek küldése" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Téma megosztása" msgid "Share voice activity with all friends?" msgstr "Megosztod a hangtevékenységedet az összes ismerősöddel?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Oszd meg a csapatunkkal az elbíráláshoz szükséges információkat." @@ -31709,11 +31302,6 @@ msgstr "Oszd meg a csapatunkkal az elbíráláshoz szükséges információkat." msgid "Share with a friend" msgstr "Megosztás egy ismerőssel" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Megosztás a közösségi moderátorokkal." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Megosztott ablak" msgid "Shared window audio" msgstr "Megosztott ablak hangja" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Személyes adatokat oszt meg, felhasználókat zaklat, vagy a magánélet megsértését koordinálja." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Személyes adatok megosztása" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Csúszkák" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Szlovákia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Szlovénia" @@ -32889,11 +32467,6 @@ msgstr "Lassú mód szimulálása" msgid "Slowmode time remaining" msgstr "Lassú mód hátralévő ideje" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Gyalázkodás, dehumanizáló nyelvezet vagy védett csoportok elleni támadások." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Hiba történt a matrica előkészítése során. Próbálj meg egy másik fájlt, vagy próbáld újra később." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Valami hiba történt a közzététel során. Próbáld meg később újra." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Tágas elrendezés, világos vizuális elkülönítéssel az üzenetek között." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanyolország" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamfiók" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spam besorolása" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam vagy átverés" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spamelő vagy csaló közösség" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spamelő, csaló vagy adathalász fiók" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, átverés vagy adathalászat" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Indítás kis méretben" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Újrakezdés" @@ -33752,22 +33302,26 @@ msgstr "Bejelentkezve maradok" msgid "Step {current} of {total}" msgstr "{current}. lépés a {total} -ből" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "1. lépés" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "2. lépés" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "3. lépés" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "4. lépés" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "5. lépés" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Hirdetési csatorna megszüntetése?" msgid "Stop hiding muted channels by default?" msgstr "Kikapcsolod a némított csatornák alapértelmezett elrejtését?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Üzenetek és ismerősjelölések leállítása." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Mikrofonteszt leállítása" @@ -33959,11 +33508,6 @@ msgstr "Állítsd le a Node.prototype insertBefore és removeChild metódusok pa msgid "Stop ringing" msgstr "Csengés leállítása" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Ne lásd többé a tartalmát és a tagjait." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "A gyakori szöveges emotikonok, például :) és <3 cseréje emojikra üzenetküldéskor" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Svédország" @@ -34804,11 +34348,6 @@ msgstr "Koppints jegyzet hozzáadásához" msgid "tar.gz archive" msgstr "tar.gz archívum" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Védett tulajdonságok alapján célozza meg az embereket." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Szolgáltatási feltételek" msgid "Terms URL" msgstr "Szolgáltatási feltételek URL-je" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorizmus vagy erőszakos szélsőségesség" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Köszönjük, hogy segítesz megőrizni a(z) {productName} biztonságát. A bejelentésedet a lehető leghamarabb megvizsgáljuk." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Köszönjük, hogy jelezted" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Köszönjük, hogy szóltál. Ez önmagában nem sérti a szabályainkat, ezért nem küldtünk bejelentést." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Köszönjük, hogy szóltál. Ez önmagában nem sérti a szabályainkat, ezért nem küldtünk bejelentést. Ha valakit célba vesz, vagy gyalázkodó szavakat használ, jelentsd be újra, és válaszd a „Bántalmazó vagy káros tartalom” lehetőséget." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Ez nem sikerült. Próbáld újra, vagy szakítsd meg." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Ez nem tűnik érvényes színnek. Próbálj meg hexadecimális, rgb(), hsl() értéket vagy CSS színnevet használni." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Ez nem tűnik érvényes URL-nek." @@ -35104,6 +34653,11 @@ msgstr "A(z) {PRODUCT_NAME} alkalmazás a másik eszközödön a „Bejelentkez msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "A(z) {PRODUCT_NAME} alkalmazás nem jelentkezett be. Bezárhatod ezt a lapot." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "A(z) {productName} biztonsági csapata áttekinti a bejelentésedet. Nem fogjuk felfedni, hogy tőled érkezett." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "A megadott redirect_uri nincs regisztrálva ehhez az alkalmazáshoz." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "A megadott redirect_uri-nak HTTP vagy HTTPS protokollt kell használnia." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "A bejelentési űrlap megváltozott. Kérjük, kezdd újra." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "A felhasználónév címkéi ezen az instancián már beállítva. Már nem változtathatók meg." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Az ellenőrző kód érvénytelen vagy lejárt." @@ -36115,13 +35674,8 @@ msgstr "Ez a tag már nincs hanghívásban." msgid "This message can only be forwarded to age-restricted channels" msgstr "Ez az üzenet csak korlátozottan megtekinthető csatornákra továbbítható" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Ezt az üzenetet már törölték." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Ez az üzenet már közzé lett téve" @@ -36279,11 +35833,6 @@ msgstr "Ez a szál lezárt. Üzenet küldésével újra megnyithatod." msgid "This thread is locked. Only moderators can send messages." msgstr "Ez a szál lezárva. Csak moderátorok küldhetnek üzeneteket." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "ez a felhasználó" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Ez a felhasználó korlátozta a profilját. Néhány adat rejtve van azok elől, akik nem az ismerősei." @@ -36292,11 +35841,6 @@ msgstr "Ez a felhasználó korlátozta a profilját. Néhány adat rejtve van az msgid "This user has no roles in this community." msgstr "Ennek a felhasználónak nincsenek szerepkörei ebben a közösségben." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Ez a felhasználó már ki van tiltva a közösségből." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Ez a felhasználó már nem elérhető." @@ -36465,16 +36009,6 @@ msgstr "Szál frissítve" msgid "Threads" msgstr "Szálak" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Fenyegetés, több helyen való követés vagy nem kívánt kapcsolatfelvétel." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Fenyegetés, zaklatás vagy bántalmazás" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Ideiglenes korlátozás alkalmazva: {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Ideiglenes korlátozás" @@ -36787,6 +36321,11 @@ msgstr "Tónus" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "A HDR képek tónusleképezése normál tartományba, csökkentve a csúcsfényerőt." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Túl sok kódot küldtünk. Várj {duration}, majd próbáld újra." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Közösség tulajdonjogának átruházása" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Átruházod a csoport tulajdonjogát a(z) {userName} felhasználóra?" @@ -37561,7 +37100,7 @@ msgstr "Ismerősjelölés küldéséhez előbb oldd fel a letiltását." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Felhasználó letiltásának feloldása" @@ -37607,16 +37146,6 @@ msgstr "Hang visszakapcsolása minden eszközön" msgid "Undeafen yourself" msgstr "Saját hang visszakapcsolása" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Korhatár alatti felhasználó vagy gyermekvédelmi aggály" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Korhatár alatti felhasználó" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Amíg vissza nem kapcsolom" msgid "Unverified email" msgstr "Nem ellenőrzött e-mail-cím" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Nem kívánt viselkedés vagy felnőtt tartalom nem megfelelő helyen." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Nem kívánt felnőtt tartalmú viselkedés, megjegyzések vagy kérések." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Akár {DISCOVERY_MAX_TAGS} címke is segíthet az embereknek megtalálni a közösségedet. Ezek megjelennek a Felfedezés keresésben." @@ -38840,11 +38359,6 @@ msgstr "Világos téma használata" msgid "Use native title bar" msgstr "Natív címsor használata" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Csak akkor használd, ha egyértelműen sérti a(z) {productName} szabályait, és nem illik a fentiekbe." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Csak ebben a közösségben használható." msgid "User" msgstr "Felhasználó" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "A felhasználó a megengedett korhatár alattinak tűnik, vagy gyermekek szexuális behálózásában vagy kizsákmányolásában vesz részt." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Felhasználói hibakeresés" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Felhasználói azonosító (opcionális)" @@ -39061,12 +38570,12 @@ msgstr "A felhasználó nem található" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Felhasználói profil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Felhasználói profil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Felhasználói beállítások" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Felhasználói címke (opcionális)" @@ -39339,7 +38848,7 @@ msgstr "Ellenőrzött közösség" msgid "Verify" msgstr "Ellenőrzés" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Kód ellenőrzése" @@ -39368,7 +38877,7 @@ msgstr "Igazold, hogy te vagy az" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "E-mail-cím megerősítése" @@ -39718,7 +39227,7 @@ msgstr "Kódok megtekintése" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Közösségi profil megtekintése" @@ -39751,7 +39260,7 @@ msgstr "Ajándékok megtekintése" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Globális profil megtekintése" @@ -39847,26 +39356,6 @@ msgstr "Néző csatlakozott az élő közvetítéshez" msgid "Viewer leaves stream" msgstr "A néző elhagyja az élő közvetítést" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Szabálysértés kategóriája" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "A szabálysértés a felhasználó profiljában van, nem egy konkrét üzenetben." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Erőszak vagy erőszakos fenyegetés" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Erőszakos vagy felkavaró tartalom" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Átméreteztük és tömörítettük ezt az emojit 128x128 képpontra, d msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Átméreteztük és tömörítettük ezt a matricát 320x320 képpontra, de még mindig {fileSize}. A korlát {maxSize}. Próbálj meg egy egyszerűbb képet, kevesebb színt vagy egy kisebb forrásfájlt használni." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Kódot küldtünk a következő címre: {email}." @@ -40472,7 +39961,7 @@ msgstr "A lehető leghamarabb feldolgozzuk. E-mailt kapsz, ha az archívumod elk msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Visszaállítjuk az előző e-mail címedet, kijelentkeztetünk a régi munkamenetekből, letiltjuk a többfaktoros hitelesítést, és új jelszóval biztosítjuk a fiókodat." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Küldünk egy rövid kódot annak ellenőrzésére, hogy eljutnak-e hozzád a bejelentésről szóló értesítések." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Nyugat-Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Milyen szabályt sértettek meg?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Mi újság?" msgid "What's new" msgstr "Újdonságok" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Mi a bejelentésed oka?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Ha nincs egyéni küszöbdátum, a(z) <0>{readMessageHistoryPermissionLabel} jogosultsággal nem rendelkező tagok nem láthatnak korábbi üzeneteket. Csak az újonnan érkező üzeneteket látják valós időben, és ezek a kliensük újraindításakor eltűnnek." @@ -40832,11 +40321,6 @@ msgstr "Mely közösségek" msgid "Which conversations" msgstr "Mely beszélgetések" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Melyik szabályt szegték meg?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Amíg az adásgomb be van kapcsolva, a billentyűparancs vezérli a mikrofonodat, ezért a némítás gomb nem használható." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Nem csatolhatsz fájlokat ehhez a csatornához." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Nem jelölheted be magad ismerősnek" @@ -41341,7 +40825,7 @@ msgstr "Ezt a felhasználót nem tudod üzenetben elérni" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "A fiók létrehozásához el kell fogadnod a Szolgáltatási feltételeket" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Bejelentés küldése előtt meg kell erősítened az e-mail-címedet." @@ -41891,6 +41375,11 @@ msgstr "Régi díjszabás vonatkozik rád. A csomag jelenlegi ára: {currentSubs msgid "You're sending messages too quickly" msgstr "Túl gyorsan küldesz üzeneteket" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Túl gyorsan küldöd a bejelentéseket. Próbáld újra később." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Régebbi üzeneteket nézel" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Több személyt adtál hozzá, mint amennyit egy csoportos beszélgetés engedélyez. Távolíts el néhányat, és próbáld újra." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Már bejelentetted ezt az üzenetet." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ezt a profilt ma már bejelentetted." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Fiókjaid és beállításaid nem változtak vagy törlődtek." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "A műveletet nem sikerült végrehajtani, mert a biztonsági rendszereink megjelölték. Ha úgy gondolod, ez tévedés, vedd fel a kapcsolatot az ügyfélszolgálattal." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "A válaszaid" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "A jelentkezésed felülvizsgálatra vár. Addig is frissítheted a bejegyzésed adatait, vagy visszavonhatod a jelentkezést." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "A böngésződ felhasználói interakciót igényel a hang lejátszása előtt. Kattints az alábbi gombra a hangcsevegés engedélyezéséhez." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "A módosításaid eljutnak minden, ezt a csatornát követő közösséghez, ami egy percet vehet igénybe. Minden közzétett üzenetnél 3 gyors szerkesztés lehetséges, utána pedig 20 percenként 1." @@ -42311,6 +41815,11 @@ msgstr "Az új beceneved, vagy hagyd üresen az alapértelmezés visszaállítá msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "A régi helyreállító kulcsod már nem működik. Tárold ezt az újat biztonságos helyen." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "A lehetőségeid" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "saját" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "A megújítási fizetés sikertelen volt, de a(z) <0/> továbbra is aktívak eddig: <1>{graceDate}. Addig frissítsd a fizetési módodat, hogy megtartsd az előfizetésedet." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "A bejelentésedet nem sikerült elküldeni. Próbáld újra." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Előfizetésed a következő megújításkor éves számlázásra vált. msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "A téma CSS-e túl nagy a megosztáshoz. Rövidítsd le, majd próbáld újra." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Felhasználóneved (opcionális)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index 55fed3b42..bec5e7dee 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -2081,7 +2081,7 @@ msgstr "Sisa {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {anggota} other {anggota}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, other {Tautan undanganmu akan kedaluwarsa dalam # detik.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} dipilih" @@ -2957,11 +2957,6 @@ msgstr "Data akun" msgid "Account details unavailable" msgstr "Detail akun tidak tersedia" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Akun ini ada untuk mengirim spam, menipu, atau menyalahgunakan platform." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Ditambahkan: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Ditambahkan: {createdDate} • terakhir digunakan: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Komentar tambahan (opsional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Sudah ditukarkan" msgid "Already set to cancel" msgstr "Sudah diatur untuk dibatalkan" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Laporkan juga pesan ini ke Tim Keamanan {productName}" @@ -4576,11 +4566,6 @@ msgstr "Tahunan" msgid "Another checkbox" msgstr "Kotak centang lain" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Pelanggaran aturan yang jelas lainnya" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Kotak centang bulat lainnya" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Unggahan audio" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Sedang tidak di tempat" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Sedang tidak di tempat" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Kembali" @@ -5788,9 +5775,7 @@ msgstr "Kode cadangan dibuat ulang" msgid "Badge" msgstr "Lencana" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Blokir" @@ -5819,7 +5804,7 @@ msgstr "Durasi pemblokiran" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Blokir anggota dari komunitas, dengan opsi untuk menghapus pesan-pesan t msgid "Ban reason" msgstr "Alasan pemblokiran" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Blokir pengguna ini" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandwidth" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Diblokir" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} diblokir dari komunitas" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Sebelum tanggal" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgia" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokir" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokir" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blokir {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokir untuk semua komunitas" msgid "Block spoiler" msgstr "Blokir spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blokir pengguna ini" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blokir pengguna" msgid "Blocked" msgstr "Diblokir" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Diblokir" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Penerjemah bawaan" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Bulgaria" msgid "Bulk delete" msgstr "Hapus massal" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Penindasan, kontak yang tidak diinginkan berulang kali, penguntitan, atau pelecehan yang ditargetkan." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Penindasan, ancaman, kebencian, kekerasan, serangan, atau konten yang mendorong tindakan menyakiti diri sendiri." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Panggilan" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Pengaturan panggilan & obrolan grup" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Ganti banner" msgid "Change chat embed background" msgstr "Ubah latar belakang sematan obrolan" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Ubah email" @@ -7150,8 +7116,8 @@ msgstr "Ubah nama panggilan teman" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Ubah nama panggilan grup" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Ganti bahasa" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Ubah nama panggilan grup saya" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Ubah nama panggilan sendiri" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Ganti pemilik" @@ -7283,16 +7249,6 @@ msgstr "Ubah wilayah suara yang digunakan saluran suara." msgid "Change which voice region this channel uses." msgstr "Ubah wilayah suara yang digunakan saluran ini." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Ubah siapa yang bisa menelepon atau menambahkanmu." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Ubah siapa yang bisa menghubungimu." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Periksa kotak masukmu di {emailAddress} untuk tautan otorisasi." msgid "Check your inbox for a verification email." msgstr "Periksa kotak masukmu untuk email verifikasi." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Periksa laporanmu" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Kotak centang" @@ -7901,21 +7862,6 @@ msgstr "Checkout diblokir untuk akun ini. Hubungi {supportEmail} jika kamu butuh msgid "Checkout unavailable" msgstr "Checkout tidak tersedia" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Masalah keamanan anak" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Keamanan anak atau eksploitasi anak di bawah umur" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Keamanan anak atau konten dewasa" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Pilihan" msgid "Choices: {choiceList}" msgstr "Pilihan: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Pilih" @@ -8122,6 +8068,11 @@ msgstr "Pilih kategori yang paling sesuai dengan komunitasmu. Kamu bisa mengubah msgid "Choose the premium model" msgstr "Pilih model premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Pilih alasan lagi" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Klaim hadiah" msgid "Claim your account" msgstr "Klaim akunmu" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Klaim akunmu dan verifikasi emailmu untuk mengirim laporan." @@ -8352,12 +8303,12 @@ msgstr "Klaim akunmu untuk menukarkan hadiah ini." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Klaim akunmu untuk mengirim permintaan pertemanan." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Klaim akun Anda untuk mengirim laporan." @@ -8378,11 +8329,6 @@ msgstr "Klaim akunmu untuk memulai atau bergabung ke panggilan 1:1." msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Klaim hadiahmu untuk mengaktifkan langganan {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Mengaku sebagai orang, merek, atau organisasi lain." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Hapus input pencarian" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Tutup dialog" msgid "Close popout" msgstr "Tutup pop-out" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Tutup DM ini" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Tutup ke baki" msgid "Close window" msgstr "Tutup jendela" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Tutup DM kamu saat ini dengan {dmDisplayName}. Ini tidak memblokir pengguna, dan kamu bisa membuka DM itu lagi nanti." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Tutup DM kamu dengan {displayName}? Kamu bisa membukanya lagi kapan saja." @@ -8837,7 +8773,7 @@ msgstr "Tema batu bara" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kode" @@ -8868,7 +8804,7 @@ msgstr "Kode dari aplikasi {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kode dikirim ulang" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Komunitas yang bisa Anda ikuti" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Komunitas" @@ -9131,7 +9065,7 @@ msgstr "Bisukan suara masuk di komunitas" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Debug komunitas" @@ -9150,16 +9084,6 @@ msgstr "Komunitas dihapus" msgid "Community DM" msgstr "DM komunitas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Komunitas ini ada untuk mengirim spam, menipu, atau menyalahgunakan platform." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Komunitas ini memfasilitasi perundungan beramai-ramai atau pelecehan yang ditargetkan." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ikon komunitas" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID komunitas" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "ID komunitas wajib diisi." @@ -9526,6 +9450,11 @@ msgstr "Konfirmasi kata sandi baru" msgid "Confirm password" msgstr "Konfirmasi kata sandi" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Konfirmasi pernyataan untuk mengirim laporan." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Lanjutkan di browser Anda" msgid "Continue to checkout" msgstr "Lanjutkan ke pembayaran" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Lanjutkan melaporkan komunitas" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Lanjutkan melaporkan pengguna" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Mengubah saluran ini menjadi saluran teks akan menghapus setiap saluran msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Mengubah konten masuk menjadi ucapan, terlepas dari apakah konten tersebut berasal dari /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Mengoordinasikan penyerangan, pengeroyokan, atau pelecehan terhadap orang atau komunitas." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL disalin ke papan klip" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL disalin ke papan klip" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Salin ID pesan" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Salin tautan pesan" @@ -10643,6 +10553,11 @@ msgstr "Tidak dapat memuat postingan. Coba lagi nanti." msgid "Couldn't load settings" msgstr "Tidak dapat memuat setelan" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Tidak dapat memuat formulir laporan." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Tidak dapat memuat aplikasi ini" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Tidak dapat memproses gambar" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Tidak dapat mempublikasikan pesan ini" @@ -10825,11 +10740,6 @@ msgstr "Tidak dapat mengirim undangan" msgid "Couldn't send invite. Try again." msgstr "Tidak dapat mengirim undangan. Coba lagi." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Tidak dapat mengirimnya. Coba lagi." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Timer hitung mundur" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Negara tempat tinggal" @@ -11301,13 +11211,8 @@ msgstr "Dibuat:" msgid "Credentials" msgstr "Kredensial" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Ancaman yang kredibel, kekerasan grafis, atau glorifikasi kekerasan." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroasia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Memotong audio di bawah ambang kenyaringan dengan penggunaan CPU minimal." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Siprus" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Ceko" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Republik Ceko" @@ -11965,7 +11870,7 @@ msgstr "Saluran debug" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Debug komunitas" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Hapus tema?" msgid "Delete this invite? Can't be undone." msgstr "Hapus undangan ini? Tidak dapat dibatalkan." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Hapus pesan ini" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Hapus pesan ini? Tidak dapat dibatalkan." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Hapus pesan ini? Tidak dapat dibatalkan. Pesan ini juga akan dihapus dari setiap komunitas yang mengikuti saluran ini." @@ -12461,11 +12359,6 @@ msgstr "Hapus pesanmu di komunitas ini?" msgid "Delete your messages in this conversation?" msgstr "Hapus pesanmu di percakapan ini?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Dihapus" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Ditolak {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Denmark" @@ -12554,11 +12447,6 @@ msgstr "Jelaskan stiker" msgid "Describe this media for screen readers" msgstr "Jelaskan media ini untuk pembaca layar" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Jelaskan mengapa konten ini ilegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner terpisah" msgid "Detail" msgstr "Detail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detail" @@ -13315,11 +13203,6 @@ msgstr "Nama tampilan (opsional)" msgid "Display scaling" msgstr "Skala tampilan" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Menyebarkan malware, alat pencuri kredensial, atau file berbahaya lainnya." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Pengaturan DM & permintaan pertemanan" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentasi" msgid "Doesn't allow being added to group DMs" msgstr "Tidak mengizinkan ditambahkan ke DM grup" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Tidak memblokir. Kamu bisa membukanya lagi nanti." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donasi saja" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Unduh peta sumber agar jejak tumpukan dan alat pengembang menunjuk ke su msgid "Download video" msgstr "Unduh video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, informasi pribadi yang terekspos, atau penguntitan." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxing, menguntit, menyamar sebagai orang lain, atau profil yang tidak pantas." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Edit warna untuk {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Edit profil komunitas" @@ -14043,7 +13908,7 @@ msgstr "Edit penimpaan untuk peran dan anggota di saluran ini." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Edit profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Edit waktu lokal profil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Edit pesan yang dipublikasikan?" @@ -14191,13 +14056,13 @@ msgstr "Memenuhi syarat untuk pengembalian dana hingga {windowEndsOn}. Ini juga #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Alamat email" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Alamat email wajib diisi." @@ -14721,16 +14586,6 @@ msgstr "Preferensi encoder untuk berbagi layar baru." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, preset SVC, dan bitrate" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Mendorong tindakan menyakiti diri sendiri" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Mendorong bunuh diri, menyakiti diri sendiri, atau gangguan makan." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Enkripsi end-to-end tidak tersedia karena ada peserta yang tidak didukun msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Enkripsi end-to-end tidak tersedia karena ada peserta yang tidak didukung di saluran suara ini." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Membahayakan anak di bawah umur atau berisi konten eksploitasi anak." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Masukkan kode dalam format ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Masukkan URL atau kode template {theOtherPlatform} yang valid." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Masukkan alamat email yang valid." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Masukkan tautan pesan yang valid." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Masukkan kode {digitCount} digit dari aplikasi autentikatormu." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Masukkan kode sebelum melanjutkan." @@ -15008,7 +14858,7 @@ msgstr "tekan Enter untuk <0><1>menyimpan" msgid "Enter username" msgstr "Masukkan nama pengguna" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Masukkan kode verifikasi" @@ -15017,6 +14867,11 @@ msgstr "Masukkan kode verifikasi" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Masukkan alamat emailmu dan kami akan mengirimkan tautan untuk mengatur ulang kata sandimu." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Masukkan nama lengkap Anda sesuai identitas untuk mengirim laporan." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "tekan Escape untuk <0><1>membatalkan" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Kedaluwarsa pada {earliest}" msgid "Expires:" msgstr "Kedaluwarsa:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Jelaskan masalahnya" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Jelaskan masalahnya untuk mengirim laporan." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Tautan eksternal bisa berbahaya. Berhati-hatilah." msgid "Extra large" msgstr "Ekstra besar" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Komunitas ekstremis" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Gagal menghapus URL kustom. Coba lagi." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Gagal mengirim ulang kode. Coba lagi." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Gagal mengatur ulang status premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Gagal mengirim kode. Coba lagi." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Gagal mengirim pesan. Tahan untuk opsi." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Gagal mengirim laporan. Coba lagi." @@ -15840,11 +15700,6 @@ msgstr "Gagal mengunggah emoji mulai dari {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Gagal mengunggah emoji. Coba lagi." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Klaim palsu yang kemungkinan menyebabkan kerugian di dunia nyata." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Cari stiker yang pas" msgid "Fingerprint" msgstr "Sidik jari" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Selesaikan penyiapan akun" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Selesaikan penyiapan akun dulu" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Selesaikan pendaftaran untuk mengirim permintaan pertemanan." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandia" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nama depan dan belakang" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Frame rate di atas 30 FPS memerlukan {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Prancis" @@ -16834,10 +16689,10 @@ msgstr "Penuh" msgid "Full dynamic range" msgstr "Rentang dinamis penuh" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nama lengkap sesuai identitas" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nama lengkap sesuai identitas (opsional untuk laporan kekerasan seksual terhadap anak)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Jerman" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Jerman" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Kembali" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Kembali dan masukkan email yang valid." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Senang bertemu denganmu, {username}! Selamat datang." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Yunani" @@ -17572,11 +17427,6 @@ msgstr "Yunani" msgid "Grid view" msgstr "Tampilan petak" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Konten grooming atau eksploitasi anak." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Nama pengguna" msgid "Hang out with voice, video and screen share" msgstr "Ngobrol santai dengan suara, video, dan berbagi layar" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Pelecehan" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Pelecehan yang melibatkan konten dewasa" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Pelecehan atau perundungan" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Pelecehan atau penguntitan" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Pelecehan atau penyalahgunaan yang ditargetkan" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Pelecehan atau ancaman" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Kunci hardware" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Menggunakan akselerasi hardware di sebagian besar sistem Windows dan macOS. Andal untuk perangkat lama." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Misinformasi berbahaya" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Pernah membeli" msgid "Has ever purchased override" msgstr "Override pernah membeli" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Ujaran kebencian" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Sembunyikan berbagi layarmu sendiri?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Menyembunyikan tombol unduh, buka di browser, dan salin pada gambar dan video di saluran ini." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Menyembunyikan pesan mereka dan mencegah mereka mengirim pesan kepadamu" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Hungaria" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungaria" @@ -18399,6 +18212,11 @@ msgstr "Saya adalah tooltip" msgid "I changed my mind" msgstr "Saya berubah pikiran" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Saya mengonfirmasi dengan itikad baik bahwa informasi dan tuduhan dalam pemberitahuan ini akurat dan lengkap." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Pengaturan tidak aktif" msgid "Idle timeout" msgstr "Batas waktu tidak aktif" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Jika melibatkan anak di bawah umur, gunakan \"{childSafetyReasonName}\" sebagai gantinya." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Jika sebuah akun menggunakan alamat tersebut, kami telah mengirimkan ins msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Jika macOS meminta untuk keluar dan membuka kembali {productName}, pilih Nanti." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Jika ada orang yang berada dalam bahaya mendesak, hubungi layanan darurat setempat jika kamu bisa melakukannya dengan aman." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Jika seseorang berada dalam bahaya mendesak, hubungi layanan darurat setempat terlebih dahulu." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Jika ada yang menyuruh kamu menempelkan sesuatu di sini, itu penipuan yang bisa memberi mereka akses ke akun {productName} kamu." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Jika ini melibatkan CSAM atau eksploitasi anak di bawah umur, kirim laporannya sekarang dan jangan bagikan materi tersebut lagi." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Jika ini adalah ancaman nyata yang akan segera terjadi, hubungi juga layanan darurat setempat." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Jika ini adalah ancaman teroris yang akan segera terjadi, hubungi juga layanan darurat setempat." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Jika laporan ini tentang pesan tertentu di komunitas ini, laporkan pesan itu saja. Laporan pesan memberikan konteks yang paling jelas kepada tim keamanan kami, dan menambahkan detail di komentar dapat membantu kami meninjaunya lebih cepat. Lanjutkan melaporkan komunitas secara keseluruhan hanya jika melaporkan pesan tidak akan mencakup masalah yang lebih luas." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Jika laporan ini tentang pesan tertentu, laporkan pesan itu saja. Laporan pesan memberikan konteks yang paling jelas kepada tim keamanan kami, dan menambahkan detail di komentar dapat membantu kami meninjaunya lebih cepat. Lanjutkan melaporkan pengguna secara keseluruhan hanya jika pesan tersebut tidak menangkap masalah yang lebih luas." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Jika laporan ini tentang pesan tertentu, laporkan pesan yang paling relevan saja. Laporan pesan memberikan konteks yang paling jelas kepada tim keamanan kami, dan menambahkan detail di komentar dapat membantu kami meninjaunya lebih cepat. Lanjutkan melaporkan pengguna secara keseluruhan hanya jika melaporkan pesan tidak dapat menangkap masalah yang lebih luas." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Jika kamu yakin ini ilegal, sebutkan hukum mana dan alasannya." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Abaikan jeda mode lambat saluran ini." msgid "Ignore virtual" msgstr "Abaikan virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Aktivitas ilegal" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Aktivitas ilegal atau lainnya" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Penjualan ilegal, fasilitasi kriminal, atau pelanggaran aturan yang jelas yang tidak termasuk dalam kategori di atas." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Penjualan ilegal, fasilitasi kriminal, atau aktivitas melanggar hukum." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Gambar" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Gambar yang ditempel dari papan klipmu akan dikirim sebagai lampiran, dan kamu tidak memiliki izin untuk melampirkan file di saluran ini." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Peniruan identitas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Peniruan identitas atau media yang menipu" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Tidak aktif" msgid "Inactive timeout" msgstr "Batas waktu tidak aktif" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Profil tidak pantas" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Sertakan kode cadangan dua faktor saya dalam PDF dan cetakan" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Sertakan ID komunitas." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Latar belakang undangan" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kode undangan (opsional)" @@ -19471,7 +19220,7 @@ msgstr "Penyamaran undangan" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Undang anggota" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Alamat IP diotorisasi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlandia" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Miring" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Tombol" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Nanti" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20291,11 +20040,6 @@ msgstr "Pelajari selengkapnya" msgid "Learn more about Visionary" msgstr "Selengkapnya tentang Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Keluar" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Tinggalkan thread pribadi" msgid "Leave silently" msgstr "Keluar diam-diam" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Keluar dari komunitas" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Mencantumkan anggota dengan peran ini di bagiannya sendiri dalam daftar anggota." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Memuat..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Memuat…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Rendah" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luksemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Pemeliharaan terjadwal pada {localizedTime}. Perkiraan durasi: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Jadikan {userName} pemilik grup? Kamu akan kehilangan hak istimewa pemilik." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Jadikan pemilik grup" @@ -21091,38 +20830,21 @@ msgstr "Jadikan pemilik grup" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Pastikan kode ini cocok dengan yang ada di aplikasi {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Pastikan ini sudah benar sebelum kamu mengirimnya." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Jadikan instance ini milikmu" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Tautan berbahaya" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Penyebaran malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware atau tautan berbahaya" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, pencurian kredensial, atau file berbahaya." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Samarkan detail pribadi sebelum kamu membagikan layar atau melakukan str msgid "Mask Visionary as subscription" msgstr "Samarkan Visionary sebagai langganan" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam massal, penipuan, giveaway palsu, atau penyalahgunaan akun." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Gerbang media konten dewasa" msgid "Mature content not allowed" msgstr "Konten dewasa tidak diizinkan" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Konten dewasa atau pelecehan" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Konten dewasa atau pembatasan yang tidak aman" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Penggantian konten dewasa" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Pelanggaran kebijakan konten dewasa" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Konten dewasa tanpa pembatasan yang sesuai." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Pesan" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "tautan pesan" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Tautan pesan" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Pratinjau pesan di daftar DM" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Pesan dipublikasikan" @@ -22211,6 +21908,11 @@ msgstr "Waktu pesan" msgid "Message unpinned" msgstr "Sematan pesan dilepas" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Pesan yang kamu laporkan" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Anak di bawah umur berisiko, konten dewasa di tempat yang salah, atau perilaku yang tidak diinginkan." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Lainnya" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Tindakan lainnya" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Bertingkat" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Belanda" @@ -24099,7 +23796,7 @@ msgstr "Tidak ada hasil" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Tidak ada hasil" @@ -24858,6 +24555,16 @@ msgstr "Hanya orang yang Anda undang dan moderator yang dapat melihat utas ini." msgid "Only places I can't access anymore" msgstr "Hanya tempat yang tidak bisa saya akses lagi" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Laporkan hanya hal yang kamu yakini dengan jujur melanggar aturan, dan mohon jangan mengirim laporan yang sama dua kali." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Laporkan hanya hal yang kamu yakini dengan jujur melanggar aturan. Penyalahgunaan laporan bertentangan dengan <0>panduan komunitas kami." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opasitas" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Buka di {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Buka popup" @@ -25379,11 +25084,6 @@ msgstr "Buka Pengaturan Sistem → Privasi & Keamanan → Perekaman Layar, lalu msgid "Open template JSON" msgstr "Buka JSON template" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Buka dialog blokir untuk komunitas ini." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Buka pengaturanmu" msgid "Opened the thread again" msgstr "Membuka kembali utas" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Dibuka di tab baru" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Awalnya diblokir pada {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Lainnya" @@ -25654,11 +25357,6 @@ msgstr "Reaksi lain…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Tim keamanan kami sedang meninjaunya. Kami akan mengirimimu DM dan email setelah ada keputusan." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Kepemilikan tidak dapat dialihkan ke <0>{username} saat ini." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Kepemilikan dialihkan" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Tempel respons JSON di sini" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Tempel tautan pesan." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, penipuan, tautan berbahaya, atau klaim palsu yang berpotensi menimbulkan kerugian di dunia nyata." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Pilih penyedia pencarian web" msgid "Pick an emoji" msgstr "Pilih emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Pilih salah satu opsi untuk melanjutkan." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Pilih angka 4 digit setelah nama pengguna Anda" msgid "Pick the appearance this administrator account should start with." msgstr "Pilih tampilan awal untuk akun administrator ini." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Pilih aturan untuk ditinjau." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Harap tunggu sebentar dan coba ganti nama lagi." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polandia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "tekan untuk menambahkan reaksi" msgid "press to remove reaction" msgstr "tekan untuk menghapus reaksi" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Berpura-pura menjadi orang lain, termasuk konten hasil AI yang menipu." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Cegah <0>{targetUserTag} mengirim pesan, bereaksi, dan terhubung ke saluran suara selama durasi yang ditentukan." @@ -27078,11 +26756,6 @@ msgstr "Pembicara prioritas" msgid "Privacy" msgstr "Privasi" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privasi atau peniruan identitas" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Pengaturan privasi" msgid "Privacy URL" msgstr "URL privasi" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Pelanggaran privasi" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Pelanggaran privasi atau doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Pelanggaran privasi atau penguntitan" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Jenis profil" msgid "Profile updated" msgstr "Profil diperbarui" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Pelanggaran profil, nama pengguna, atau avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Mendorong kebencian terhadap kelompok yang dilindungi." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Mempromosikan, merekrut, atau mengoordinasikan aktivitas ekstremisme kekerasan." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promosi atau instruksi yang mendorong tindakan menyakiti diri sendiri atau gangguan makan." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil yang kamu laporkan" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Kata ganti: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Lindungi akun Visionary kamu dengan mengaktifkan autentikasi dua faktor. Terima kasih telah mendukung {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Berikan setidaknya ID pengguna atau tag pengguna." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Berikan ID pengguna atau nama pengguna orang yang kamu laporkan." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Berikan nama lengkap sesuai identitas resmimu untuk deklarasi ini." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Tombol radio memungkinkan pemilihan satu opsi dari sebuah grup." msgid "Radio group" msgstr "Grup radio" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Koordinasi penyerangan" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Siap membeli hadiah?" msgid "Ready to upgrade?" msgstr "Siap upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Alasan" @@ -28291,8 +27924,8 @@ msgstr "Ingat ukuran dan posisi jendela" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Hapus {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Keluarkan {userName} dari grup?" @@ -28419,8 +28052,8 @@ msgstr "Hapus dari favorit" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Keluarkan dari grup" @@ -28458,11 +28091,6 @@ msgstr "Hapus dari GIF favorit khusus URL" msgid "Remove icon" msgstr "Hapus ikon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Hapus dari saluran untuk semua orang." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Dihapus dari favorit" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Dihapus dari grup" @@ -28919,28 +28547,18 @@ msgstr "Laporkan komunitas" msgid "Report a message" msgstr "Laporkan pesan" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Laporkan pelanggaran aturan, atau temukan alat untuk mengelola kontak dan preferensi." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Laporkan profil pengguna" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Laporkan komunitas" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detail laporan" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Laporkan konten ilegal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Laporkan masalah" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Laporkan pesan" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Laporkan profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Laporan terkirim" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Jenis laporan" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Laporkan pengguna" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag pengguna yang dilaporkan (opsional)" @@ -29100,6 +28716,10 @@ msgstr "Memerlukan semua yang ada di tingkat sedang, ditambah menjadi anggota ko msgid "Resend" msgstr "Kirim ulang" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Kirim ulang ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Kirim ulang ({newSecondsRemaining} dtk)" @@ -29108,7 +28728,7 @@ msgstr "Kirim ulang ({newSecondsRemaining} dtk)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Kirim ulang ({originalSecondsRemaining} dtk)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Kirim ulang ({resendCooldownSeconds} dtk)" @@ -29122,7 +28742,7 @@ msgstr "Kirim ulang ({resendSecondsRemaining} dtk)" msgid "Resend ({secondsRemaining}s)" msgstr "Kirim ulang ({secondsRemaining} dtk)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Kirim ulang kode" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Peran berhasil diperbarui" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumania" @@ -29947,7 +29567,7 @@ msgstr "Saturasi" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Sapa <0>{displayName}. DM kamu dimulai di sini." msgid "Scale" msgstr "Skala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Penipuan, malware, atau misinformasi" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Pindai kode QR dengan aplikasi autentikatormu." @@ -30855,11 +30470,6 @@ msgstr "Pilih" msgid "Select {accessibleName}" msgstr "Pilih {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Pilih kategori" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Pilih komunitas tempat kamu punya izin {permissionName}, atau DM grup yang kamu ikuti." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Pilih negara" @@ -30911,11 +30521,6 @@ msgstr "Pilih URI pengalihan" msgid "Select a scenario to apply..." msgstr "Pilih skenario untuk diterapkan..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Pilih kategori pelanggaran." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Pilih akun yang ingin kamu gunakan untuk masuk di perangkat barumu." msgid "Select voice processing mode" msgstr "Pilih mode pemrosesan suara" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Pilih apa yang ingin kamu laporkan." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Pilih negara tempat tinggalmu." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Pilih…" @@ -31037,13 +30642,6 @@ msgstr "Pilihan: {0} (maks. {1})" msgid "Selections" msgstr "Pilihan" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Melukai diri sendiri atau bunuh diri" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Kirim pesan tindakan (ditulis miring)." msgid "Send animation" msgstr "Kirim animasi" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Kirim laporan lain" @@ -31138,7 +30736,7 @@ msgstr "Tombol kirim" msgid "Send code" msgstr "Kirim kode" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Kirim laporan DSA" @@ -31158,9 +30756,9 @@ msgstr "Kirim file hingga {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Kirim permintaan pertemanan" @@ -31220,8 +30818,8 @@ msgstr "Kirim pesan di utas" msgid "Send messages, images, GIFs and emoji" msgstr "Kirim pesan, gambar, GIF, dan emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Kirim laporan" @@ -31255,7 +30853,7 @@ msgstr "Kirim sematan ini kembali ke masa lalu?" msgid "Send TTS messages" msgstr "Kirim pesan TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Kirim kode verifikasi" @@ -31273,11 +30871,6 @@ msgstr "Kirim pesan suara" msgid "Send:" msgstr "Kirim:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Mengirim malware atau tautan berbahaya" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Bagikan tema" msgid "Share voice activity with all friends?" msgstr "Bagikan aktivitas suara dengan semua teman?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Berikan informasi yang tim kami butuhkan untuk menilai ini." @@ -31709,11 +31302,6 @@ msgstr "Berikan informasi yang tim kami butuhkan untuk menilai ini." msgid "Share with a friend" msgstr "Bagikan ke teman" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Bagikan ke moderator komunitas." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Jendela yang dibagikan" msgid "Shared window audio" msgstr "Audio jendela yang dibagikan" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Membagikan info pribadi, menguntit pengguna, atau mengoordinasikan penyalahgunaan privasi." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Berbagi informasi pribadi" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Penggeser" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slowakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulasi mode lambat" msgid "Slowmode time remaining" msgstr "Sisa waktu mode lambat" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Kata-kata hinaan, bahasa yang merendahkan martabat, atau serangan terhadap kelompok yang dilindungi." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Terjadi kesalahan saat menyiapkan stiker ini. Coba file lain atau coba lagi sebentar lagi." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Terjadi kesalahan saat mempublikasikan. Coba lagi sebentar lagi." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Tata letak lapang dengan pemisahan visual yang jelas antarpesan." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanyol" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Akun spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Klasifikasi spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam atau penipuan" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Komunitas spam atau penipuan" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Akun spam, penipuan, atau phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, penipuan, atau phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Mulai diminimalkan" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Mulai lagi" @@ -33752,22 +33302,26 @@ msgstr "Tetap masuk" msgid "Step {current} of {total}" msgstr "Langkah {current} dari {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Langkah 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Langkah 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Langkah 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Langkah 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Langkah 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Berhenti menjadi saluran pengumuman?" msgid "Stop hiding muted channels by default?" msgstr "Berhenti menyembunyikan saluran yang dibisukan secara default?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Hentikan pesan dan permintaan pertemanan." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Hentikan tes mikrofon" @@ -33959,11 +33508,6 @@ msgstr "Berhenti menambal Node.prototype insertBefore dan removeChild. Aplikasi msgid "Stop ringing" msgstr "Berhenti berdering" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Berhenti melihat konten dan anggotanya." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Ganti ekspresi teks umum seperti :) dan <3 dengan emoji saat mengirim pesan" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Swedia" @@ -34804,11 +34348,6 @@ msgstr "Ketuk untuk menambahkan catatan" msgid "tar.gz archive" msgstr "Arsip tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Menargetkan orang berdasarkan karakteristik yang dilindungi." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Ketentuan layanan" msgid "Terms URL" msgstr "URL ketentuan" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terorisme atau ekstremisme kekerasan" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thailand" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Terima kasih telah membantu menjaga {productName} tetap aman. Kami akan meninjau laporanmu sesegera mungkin." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Terima kasih telah menandainya" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Terima kasih sudah memberi tahu kami. Hal ini sendiri tidak melanggar aturan kami, jadi kami tidak mengirim laporan." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Terima kasih sudah memberi tahu kami. Hal ini saja tidak melanggar aturan kami, jadi kami tidak mengirim laporan. Jika ini menargetkan seseorang atau menggunakan hinaan, laporkan lagi dan pilih “Konten yang kasar atau berbahaya”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Tidak berhasil. Coba lagi atau batalkan." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Itu bukan warna yang valid. Coba hex, rgb(), hsl(), atau nama warna CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Itu bukan URL yang valid." @@ -35104,6 +34653,11 @@ msgstr "Aplikasi {PRODUCT_NAME} di perangkat Anda yang lain menampilkannya di ba msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Aplikasi {PRODUCT_NAME} tidak masuk. Anda dapat menutup tab ini." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Tim Keamanan {productName} akan meninjau laporanmu. Kami tidak akan mengungkapkan bahwa laporan itu berasal darimu." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "redirect_uri yang diberikan tidak terdaftar untuk aplikasi ini." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri yang diberikan harus menggunakan HTTP atau HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Formulir laporan berubah. Mulai lagi." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Tag nama pengguna di instance ini sudah diatur. Tag tersebut tidak dapat diubah lagi." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Kode verifikasi tidak valid atau sudah kedaluwarsa." @@ -36115,13 +35674,8 @@ msgstr "Anggota ini sudah tidak terhubung ke suara." msgid "This message can only be forwarded to age-restricted channels" msgstr "Pesan ini hanya dapat diteruskan ke channel yang dibatasi usia" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Pesan ini sudah dihapus." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Pesan ini sudah dipublikasikan" @@ -36279,11 +35833,6 @@ msgstr "Utas ini ditutup. Mengirim pesan akan membukanya kembali." msgid "This thread is locked. Only moderators can send messages." msgstr "Utas ini dikunci. Hanya moderator yang dapat mengirim pesan." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "pengguna ini" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Pengguna ini telah membatasi profilnya. Beberapa detail disembunyikan dari orang yang bukan temannya." @@ -36292,11 +35841,6 @@ msgstr "Pengguna ini telah membatasi profilnya. Beberapa detail disembunyikan da msgid "This user has no roles in this community." msgstr "Pengguna ini tidak memiliki peran di komunitas ini." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Pengguna ini sudah diblokir dari komunitas." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Pengguna ini sudah tidak tersedia." @@ -36465,16 +36009,6 @@ msgstr "Thread diperbarui" msgid "Threads" msgstr "Utas" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Ancaman, menguntit di berbagai ruang, atau kontak yang tidak diinginkan." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Ancaman, pelecehan, atau bahaya" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag} diberi batas waktu" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Beri batas waktu" @@ -36787,6 +36321,11 @@ msgstr "Nada" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Petakan nada gambar HDR ke rentang standar untuk mengurangi kecerahan puncak." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Terlalu banyak kode yang dikirim. Tunggu {duration} lalu coba lagi." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transfer kepemilikan komunitas" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transfer kepemilikan grup ke {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Buka blokir mereka terlebih dahulu untuk mengirim permintaan pertemanan. #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Buka blokir pengguna" @@ -37607,16 +37146,6 @@ msgstr "Aktifkan suara masuk di semua perangkat" msgid "Undeafen yourself" msgstr "Aktifkan suara masukmu" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Di bawah umur atau masalah keamanan anak" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Pengguna di bawah umur" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Sampai saya mengaktifkannya lagi" msgid "Unverified email" msgstr "Email belum terverifikasi" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Perilaku yang tidak diinginkan atau konten dewasa di tempat yang salah." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Perilaku, komentar, atau permintaan dewasa yang tidak diinginkan." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Hingga {DISCOVERY_MAX_TAGS} tag membantu orang menemukan komunitasmu. Tag ini akan muncul di pencarian Discovery." @@ -38840,11 +38359,6 @@ msgstr "Gunakan tema terang" msgid "Use native title bar" msgstr "Gunakan bilah judul bawaan" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Gunakan hanya jika jelas melanggar aturan {productName} dan tidak sesuai dengan pilihan di atas." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Hanya digunakan di komunitas ini." msgid "User" msgstr "Pengguna" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Pengguna tampak di bawah umur, atau terlibat dalam grooming atau eksploitasi anak." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Debug pengguna" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID pengguna (opsional)" @@ -39061,12 +38570,12 @@ msgstr "Pengguna tidak ditemukan" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profil pengguna" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profil pengguna: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Pengaturan pengguna" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag pengguna (opsional)" @@ -39339,7 +38848,7 @@ msgstr "Komunitas terverifikasi" msgid "Verify" msgstr "Verifikasi" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verifikasi kode" @@ -39368,7 +38877,7 @@ msgstr "Verifikasi bahwa ini kamu" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifikasi emailmu" @@ -39718,7 +39227,7 @@ msgstr "Lihat kode" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Lihat profil komunitas" @@ -39751,7 +39260,7 @@ msgstr "Lihat hadiah" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Lihat profil global" @@ -39847,26 +39356,6 @@ msgstr "Penonton bergabung ke siaran" msgid "Viewer leaves stream" msgstr "Penonton meninggalkan siaran" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategori pelanggaran" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Pelanggaran ada di profil pengguna, bukan di pesan tertentu." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Kekerasan atau ancaman kekerasan" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Konten kekerasan atau sadis" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Kami mengubah ukuran dan mengompresi emoji ini menjadi 128x128 piksel, t msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Kami mengubah ukuran dan mengompres stiker ini menjadi 320x320 piksel, tetapi ukurannya masih {fileSize}. Batasnya adalah {maxSize}. Coba gambar yang lebih sederhana, lebih sedikit warna, atau file sumber yang lebih kecil." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Kami telah mengirim kode ke {email}." @@ -40472,7 +39961,7 @@ msgstr "Kami akan memproses ini sesegera mungkin. Kamu akan menerima email saat msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Kami akan memulihkan email Anda sebelumnya, keluar dari sesi lama, menonaktifkan MFA, dan mengamankan akun Anda dengan kata sandi baru." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Kami akan mengirim kode singkat untuk mengonfirmasi bahwa kamu dapat menerima pembaruan tentang laporan ini." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginia Barat" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Jenis aturan apa yang dilanggar?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Ada apa?" msgid "What's new" msgstr "Yang baru" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Apa alasan laporanmu?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Jika tanggal batas kustom tidak diatur, anggota tanpa izin <0>{readMessageHistoryPermissionLabel} tidak dapat melihat riwayat pesan sama sekali. Mereka hanya akan melihat pesan secara real time saat pesan tiba, dan pesan itu akan hilang saat mereka memulai ulang klien." @@ -40832,11 +40321,6 @@ msgstr "Komunitas mana" msgid "Which conversations" msgstr "Percakapan mana" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Aturan mana yang dilanggar?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Saat push-to-talk aktif, pintasanmu yang mengontrol mikrofon, jadi tombol bisukan dinonaktifkan." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Kamu tidak dapat melampirkan file di saluran ini." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Kamu tidak bisa berteman dengan diri sendiri" @@ -41341,7 +40825,7 @@ msgstr "Kamu tidak bisa mengirim pesan ke pengguna ini" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Kamu harus menyetujui ketentuan layanan untuk membuat akun" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Kamu harus memverifikasi emailmu sebelum mengirim laporan." @@ -41891,6 +41375,11 @@ msgstr "Kamu memakai tarif lama. Harga paket ini saat ini adalah {currentSubscri msgid "You're sending messages too quickly" msgstr "Kamu mengirim pesan terlalu cepat" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Kamu mengirim laporan terlalu cepat. Coba lagi nanti." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Kamu sedang melihat pesan lama" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Kamu menambahkan lebih banyak orang daripada yang diizinkan di DM grup. Hapus beberapa lalu coba lagi." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Kamu sudah melaporkan pesan ini." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Kamu sudah melaporkan profil ini hari ini." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Akun dan setelan Anda tidak diubah atau dihapus." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Tindakanmu tidak dapat diselesaikan karena ditandai oleh sistem keamanan kami. Jika menurutmu ini keliru, silakan hubungi dukungan." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Jawabanmu" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Pengajuanmu sedang ditinjau. Kamu masih bisa memperbarui detail pendaftaranmu atau menarik pengajuannya." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Browsermu memerlukan interaksi pengguna sebelum audio dapat diputar. Klik tombol di bawah untuk mengaktifkan obrolan suara." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Perubahan Anda menjangkau setiap komunitas yang mengikuti saluran ini, yang mungkin memerlukan waktu semenit. Setiap pesan yang dipublikasikan mengizinkan 3 pengeditan cepat, lalu 1 setiap 20 menit." @@ -42311,6 +41815,11 @@ msgstr "Nama panggilan barumu, atau kosongkan untuk mengatur ulang." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Kit pemulihan lama Anda tidak berfungsi lagi. Simpan kit baru ini di tempat yang aman." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Pilihanmu" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "wilayahmu" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Pembayaran perpanjanganmu gagal, tetapi <0/> tetap aktif hingga <1>{graceDate}. Perbarui metode pembayaranmu sebelum tanggal itu untuk mempertahankan langgananmu." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Laporanmu tidak terkirim. Coba lagi." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Langgananmu akan beralih ke penagihan tahunan pada perpanjangan berikutn msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS temamu terlalu besar untuk dibagikan. Pangkas lalu coba lagi." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Nama penggunamu (opsional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index 5ec6fd41f..d0f14e0dc 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -2081,7 +2081,7 @@ msgstr "Rimanenti: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {membro} other {membri}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Il tuo link d'invito scade tra # secondo.} many {Il tuo link d'invito scade tra # secondi.} other {Il tuo link d'invito scade tra # secondi.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Selezionati: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Dati account" msgid "Account details unavailable" msgstr "Dettagli account non disponibili" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "L'account esiste per inviare spam, truffare o abusare della piattaforma." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Aggiunto: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Aggiunto: {createdDate} • ultimo utilizzo: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Commenti aggiuntivi (facoltativi)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Già riscattato" msgid "Already set to cancel" msgstr "Già impostato per l'annullamento" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Segnala questo messaggio anche al team di sicurezza di {productName}" @@ -4576,11 +4566,6 @@ msgstr "Annuale" msgid "Another checkbox" msgstr "Un'altra casella di controllo" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Un'altra chiara violazione delle regole" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Un'altra casella di controllo rotonda" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "File audio caricato" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Assente in questo momento" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Assente in questo momento" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Indietro" @@ -5788,9 +5775,7 @@ msgstr "Codici di backup rigenerati" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Banna" @@ -5819,7 +5804,7 @@ msgstr "Durata del ban" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banna i membri dalla community, con l'opzione di eliminare i loro messag msgid "Ban reason" msgstr "Motivo del ban" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Banna questo utente" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Larghezza di banda" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Bannato" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Bannato {targetUserTag} dalla community" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Prima del" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgio" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blocca" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blocca" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blocca {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blocca per tutte le community" msgid "Block spoiler" msgstr "Blocca spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blocca questo utente" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blocca utente" msgid "Blocked" msgstr "Bloccati" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Bloccato" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Traduttori integrati" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Bulgaro" msgid "Bulk delete" msgstr "Elimina in blocco" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Bullismo, contatti indesiderati ripetuti, stalking o abusi mirati." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Bullismo, minacce, incitamento all'odio, violenza, raid o contenuti che promuovono l'autolesionismo." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Chiamata" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Impostazioni chiamate e chat di gruppo" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Cambia banner" msgid "Change chat embed background" msgstr "Cambia sfondo dei contenuti incorporati in chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Cambia email" @@ -7150,8 +7116,8 @@ msgstr "Cambia soprannome amico" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Cambia soprannome del gruppo" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Cambia lingua" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Cambia il mio soprannome nel gruppo" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Cambia il tuo soprannome" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Cambia proprietario" @@ -7283,16 +7249,6 @@ msgstr "Cambia la regione vocale utilizzata da un canale vocale." msgid "Change which voice region this channel uses." msgstr "Cambia la regione vocale utilizzata da questo canale." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Cambia chi può chiamarti o aggiungerti." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Cambia chi può contattarti." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Controlla la tua casella di posta all'indirizzo {emailAddress} per il li msgid "Check your inbox for a verification email." msgstr "Controlla la tua casella di posta per un'email di verifica." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Controlla la tua segnalazione" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Caselle di controllo" @@ -7901,21 +7862,6 @@ msgstr "I pagamenti sono bloccati per questo account. Contatta {supportEmail} se msgid "Checkout unavailable" msgstr "Pagamento non disponibile" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Preoccupazioni sulla sicurezza dei minori" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Sicurezza dei minori o sfruttamento di minori" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Sicurezza dei minori o contenuti per adulti" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Scelte" msgid "Choices: {choiceList}" msgstr "Scelte: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Scegli" @@ -8122,6 +8068,11 @@ msgstr "Scegli la categoria che descrive meglio la tua community. Puoi cambiarla msgid "Choose the premium model" msgstr "Scegli il modello premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Scegli di nuovo il motivo" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Riscatta regalo" msgid "Claim your account" msgstr "Completa la registrazione del tuo account" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Completa la registrazione del tuo account e verifica la tua email per inviare segnalazioni." @@ -8352,12 +8303,12 @@ msgstr "Completa la registrazione del tuo account per riscattare questo regalo." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Completa la registrazione del tuo account per inviare richieste di amicizia." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Rivendica il tuo account per inviare segnalazioni." @@ -8378,11 +8329,6 @@ msgstr "Completa la registrazione del tuo account per avviare o partecipare a ch msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Riscatta il tuo buono regalo per attivare l'abbonamento a {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Fingersi un'altra persona, un brand o un'organizzazione." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Svuota il campo di ricerca" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Chiudi finestra di dialogo" msgid "Close popout" msgstr "Chiudi finestra separata" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Chiudi questo DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Chiudi nell’area di notifica" msgid "Close window" msgstr "Chiudi finestra" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Chiudi il DM corrente con {dmDisplayName}. L’utente non verrà bloccato e potrai riaprire il DM in seguito." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Vuoi chiudere il DM con {displayName}? Puoi riaprirlo in qualsiasi momento." @@ -8837,7 +8773,7 @@ msgstr "Tema carbone" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Codice" @@ -8868,7 +8804,7 @@ msgstr "Codice dall'app {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Codice inviato di nuovo" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Community a cui puoi iscriverti" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9131,7 +9065,7 @@ msgstr "Disattiva l’audio nella community" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Debug community" @@ -9150,16 +9084,6 @@ msgstr "Community eliminata" msgid "Community DM" msgstr "DM della community" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "La community esiste per fare spam, truffe o abusi sulla piattaforma." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "La community facilita attacchi di gruppo o abusi mirati." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Icona della community" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID community" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "L'ID della community è obbligatorio." @@ -9526,6 +9450,11 @@ msgstr "Conferma nuova password" msgid "Confirm password" msgstr "Conferma password" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Conferma la dichiarazione per inviare la segnalazione." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continua nel browser" msgid "Continue to checkout" msgstr "Continua al checkout" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continua per segnalare la community" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continua per segnalare l’utente" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "La conversione di questo canale in un canale di testo rimuoverà tutti i msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Converte il contenuto in arrivo in parlato, indipendentemente dal fatto che provenga da /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordina raid, attacchi organizzati o molestie contro persone o community." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiato negli appunti" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiato negli appunti" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copia ID messaggio" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copia link messaggio" @@ -10643,6 +10553,11 @@ msgstr "Impossibile caricare i post. Riprova più tardi." msgid "Couldn't load settings" msgstr "Impossibile caricare le impostazioni" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Impossibile caricare il modulo di segnalazione." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Impossibile caricare questa applicazione" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Impossibile elaborare l'immagine" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Impossibile pubblicare questo messaggio" @@ -10825,11 +10740,6 @@ msgstr "Impossibile inviare l'invito" msgid "Couldn't send invite. Try again." msgstr "Impossibile inviare l'invito. Riprova." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Impossibile inviare. Riprova." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Timer conto alla rovescia" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Paese di residenza" @@ -11301,13 +11211,8 @@ msgstr "Creato:" msgid "Credentials" msgstr "Credenziali" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Minacce credibili, violenza esplicita o glorificazione della violenza." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croazia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Elimina l’audio al di sotto di una soglia di volume con un utilizzo minimo della CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cipro" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Ceco" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Repubblica Ceca" @@ -11965,7 +11870,7 @@ msgstr "Debug del canale" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Debug della community" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Eliminare il tema?" msgid "Delete this invite? Can't be undone." msgstr "Eliminare questo invito? Non si potrà annullare." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Elimina questo messaggio" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Eliminare questo messaggio? L'operazione non può essere annullata." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Eliminare questo messaggio? Non sarà possibile annullare l'operazione. Questo messaggio verrà rimosso anche da ogni community che segue questo canale." @@ -12461,11 +12359,6 @@ msgstr "Eliminare i tuoi messaggi in questa community?" msgid "Delete your messages in this conversation?" msgstr "Eliminare i tuoi messaggi in questa conversazione?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Eliminato" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Negato {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danimarca" @@ -12554,11 +12447,6 @@ msgstr "Descrivi lo sticker" msgid "Describe this media for screen readers" msgstr "Descrivi questo contenuto multimediale per i lettori schermo" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Descrivi perché il contenuto è illegale" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner separato" msgid "Detail" msgstr "Dettaglio" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Dettagli" @@ -13315,11 +13203,6 @@ msgstr "Nome visualizzato (facoltativo)" msgid "Display scaling" msgstr "Scala visualizzazione" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuisce malware, strumenti per rubare credenziali o altri file dannosi." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Impostazioni DM e richieste di amicizia" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentazione" msgid "Doesn't allow being added to group DMs" msgstr "Non consente di essere aggiunto ai DM di gruppo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "L’utente non verrà bloccato. Puoi riaprire il DM in seguito." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Dona invece" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Scarica le mappe sorgente in modo che le tracce dello stack e gli strume msgid "Download video" msgstr "Scarica video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, divulgazione di informazioni private o stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, impersonificazione o profilo inappropriato." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Modifica colore per {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Modifica profilo community" @@ -14043,7 +13908,7 @@ msgstr "Modifica le eccezioni ai permessi di ruoli e membri in questo canale." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Modifica profilo" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Modifica l'ora locale del profilo" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Modifica messaggio pubblicato?" @@ -14191,13 +14056,13 @@ msgstr "Idoneo per un rimborso fino al {windowEndsOn}. Questo annullerà anche i #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Indirizzo email" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Indirizzo email obbligatorio." @@ -14721,16 +14586,6 @@ msgstr "Preferenza dell'encoder per le nuove condivisioni schermo." msgid "Encoder, SVC, and bitrate presets" msgstr "Codifica, SVC e preimpostazioni bitrate" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Incitamento all'autolesionismo" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Incoraggia il suicidio, l'autolesionismo o i disturbi alimentari." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "La crittografia end-to-end non è disponibile perché uno dei partecipan msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "La crittografia end-to-end non è disponibile perché uno dei partecipanti al canale vocale utilizza un client non supportato." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Mette in pericolo i minori o ospita contenuti di sfruttamento minorile." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Invio" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Inserisci un codice nel formato ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Inserisci un URL o un codice modello {theOtherPlatform} valido." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Inserisci un indirizzo email valido." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Inserisci un link del messaggio valido." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Inserisci il codice di {digitCount} cifre dalla tua app di autenticazione." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Inserisci il codice prima di continuare." @@ -15008,7 +14858,7 @@ msgstr "Invio per <0><1>salvare" msgid "Enter username" msgstr "Inserisci nome utente" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Inserisci il codice di verifica" @@ -15017,6 +14867,11 @@ msgstr "Inserisci il codice di verifica" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Inserisci la tua email e ti invieremo un link per reimpostare la password." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Inserisci il tuo nome e cognome legali per inviare la segnalazione." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc per <0><1>annullare" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Scade il {earliest}" msgid "Expires:" msgstr "Scade:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Spiega il problema" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Spiega il problema per inviare la segnalazione." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "I link esterni possono essere pericolosi. Fai attenzione." msgid "Extra large" msgstr "Molto grande" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Community estremista" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Impossibile rimuovere l'URL personalizzato. Riprova." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Nuovo invio del codice non riuscito. Riprova." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Impossibile reimpostare lo stato Premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Invio codice non riuscito. Riprova." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Impossibile inviare il messaggio. Tieni premuto per le opzioni." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Invio della segnalazione non riuscito. Riprova." @@ -15840,11 +15700,6 @@ msgstr "Caricamento emoji non riuscito a partire da {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Caricamento emoji non riuscito. Riprova." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Affermazioni false che potrebbero causare danni nel mondo reale." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Trova lo sticker perfetto" msgid "Fingerprint" msgstr "Impronta digitale" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Completa la configurazione dell'account" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Completa prima la configurazione dell'account" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Completa la registrazione per inviare richieste di amicizia." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandese" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nome e cognome" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "I frame rate superiori a 30 FPS richiedono {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francia" @@ -16834,10 +16689,10 @@ msgstr "Completa" msgid "Full dynamic range" msgstr "Gamma dinamica completa" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nome e cognome legali" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nome e cognome legali (facoltativo per le segnalazioni di abusi sessuali su minori)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Tedesco" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Germania" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Indietro" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Torna indietro e inserisci un'email valida." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Ciao {username}! Benvenuto." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grecia" @@ -17572,11 +17427,6 @@ msgstr "Greco" msgid "Grid view" msgstr "Visualizzazione a griglia" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Contenuti di adescamento o sfruttamento di minori." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Nome utente" msgid "Hang out with voice, video and screen share" msgstr "Chiacchiera con voce, video e condivisione schermo" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Molestie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Molestie con contenuti per adulti" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Molestie o bullismo" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Molestie o stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Molestie o abusi mirati" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Molestie o minacce" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Chiave hardware" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Accelerazione hardware sulla maggior parte dei sistemi Windows e macOS. Affidabile per i dispositivi meno recenti." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Disinformazione dannosa" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ha effettuato almeno un acquisto" msgid "Has ever purchased override" msgstr "Override dello stato di acquisto pregresso" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Incitamento all'odio" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Nascondere la tua condivisione schermo?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Nasconde i pulsanti Scarica, Apri nel browser e Copia per immagini e video in questo canale." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Nasconde i messaggi di questa persona e le impedisce di inviarti messaggi" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ungherese" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungheria" @@ -18399,6 +18212,11 @@ msgstr "Sono un suggerimento" msgid "I changed my mind" msgstr "Ho cambiato idea" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Confermo in buona fede che le informazioni e le affermazioni contenute in questa segnalazione sono accurate e complete." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Impostazioni inattività" msgid "Idle timeout" msgstr "Timeout di inattività" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Se è coinvolto un minore, usa invece \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Se un account utilizza quell'indirizzo, ti abbiamo inviato le istruzioni msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Se macOS ti chiede di chiudere e riaprire {productName}, scegli Più tardi." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Se qualcuno potrebbe essere in pericolo immediato, contatta i servizi di emergenza locali, se puoi farlo in sicurezza." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Se qualcuno è in pericolo immediato, contatta prima i servizi di emergenza locali." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Se qualcuno ti ha chiesto di copiare e incollare qualcosa qui, è una truffa che potrebbe consentire loro di accedere al tuo account {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Se si tratta di CSAM o sfruttamento di un minore, invia subito la segnalazione e non ricondividere il materiale." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Se si tratta di una minaccia imminente e credibile, contatta anche i servizi di emergenza locali." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Se si tratta di una minaccia terroristica imminente, contatta anche i servizi di emergenza locali." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Se questa segnalazione riguarda un messaggio specifico in questa community, segnala direttamente quel messaggio. Le segnalazioni dei messaggi danno al nostro team di sicurezza un contesto più chiaro; aggiungere dettagli nei commenti può aiutarci a esaminarle più rapidamente. Segnala l’intera community solo se la segnalazione di un singolo messaggio non descriverebbe adeguatamente il problema più ampio." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Se questa segnalazione riguarda un messaggio specifico, segnala direttamente quel messaggio. Le segnalazioni dei messaggi danno al nostro team di sicurezza un contesto più chiaro; aggiungere dettagli nei commenti può aiutarci a esaminarle più rapidamente. Segnala l’utente nel suo complesso solo se quel messaggio non descrive adeguatamente il problema più ampio." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Se questa segnalazione riguarda messaggi specifici, segnala direttamente quello più pertinente. Le segnalazioni dei messaggi danno al nostro team di sicurezza un contesto più chiaro; aggiungere dettagli nei commenti può aiutarci a esaminarle più rapidamente. Segnala l’utente nel suo complesso solo se la segnalazione di un singolo messaggio non descriverebbe adeguatamente il problema più ampio." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Se ritieni che sia illegale, indica quale legge e perché." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignora l’intervallo di attesa della modalità lenta di questo canale." msgid "Ignore virtual" msgstr "Ignora virtuale" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Attività illecita" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Attività illecita o altro" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Vendite illegali, favoreggiamento di attività criminali o una chiara violazione delle regole non elencata sopra." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Vendite illegali, favoreggiamento di attività criminali o attività illecite." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Immagini" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Le immagini incollate dagli appunti vengono inviate come allegati e non hai il permesso di allegare file in questo canale." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Impersonificazione" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Impersonificazione o contenuti ingannevoli" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inattivo" msgid "Inactive timeout" msgstr "Timeout inattività" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Profilo inappropriato" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Includi i miei codici di backup a due fattori nel PDF e nella stampa" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Includi l'ID della community." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Sfondo invito" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Codice invito (facoltativo)" @@ -19471,7 +19220,7 @@ msgstr "Mascheramento inviti" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invita membri" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Indirizzo IP autorizzato" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "In corsivo" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Tasti" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Più tardi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lettonia" @@ -20291,11 +20040,6 @@ msgstr "Scopri di più" msgid "Learn more about Visionary" msgstr "Scopri di più su Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Abbandona" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Lascia il thread privato" msgid "Leave silently" msgstr "Abbandona in silenzio" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Abbandona la community" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Elenca i membri con questo ruolo in una sezione dedicata nell'elenco dei membri." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Caricamento..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Caricamento…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Basso" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Lussemburgo" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Manutenzione programmata per le {localizedTime}. Durata prevista: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Rendere {userName} il proprietario del gruppo? Perderai i privilegi di proprietario." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Nomina proprietario del gruppo" @@ -21091,38 +20830,21 @@ msgstr "Nomina proprietario del gruppo" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Assicurati che questo codice corrisponda a quello nell'app {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Assicurati che sia tutto corretto prima di inviare." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personalizza la tua istanza" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Link dannosi" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribuzione di malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware o link pericolosi" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, furto di credenziali o file dannosi." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Nascondi i dettagli privati prima di condividere lo schermo o lo streami msgid "Mask Visionary as subscription" msgstr "Maschera Visionary come abbonamento" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam di massa, frodi, finti concorsi o abusi dell'account." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Blocco di accesso ai media per adulti" msgid "Mature content not allowed" msgstr "Contenuti per adulti non consentiti" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Contenuti per adulti o molestie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Contenuti per adulti o controlli di accesso inadeguati" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Eccezione per i contenuti per adulti" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Violazione delle norme sui contenuti per adulti" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Contenuti per adulti senza le dovute restrizioni." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Messaggio" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "link del messaggio" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Link messaggio" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Anteprime dei messaggi nell’elenco dei DM" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Messaggio pubblicato" @@ -22211,6 +21908,11 @@ msgstr "Ora del messaggio" msgid "Message unpinned" msgstr "Messaggio rimosso dai messaggi fissati" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Messaggio che stai segnalando" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minori a rischio, contenuti per adulti fuori luogo o condotta indesiderata." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Altro" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Altre azioni" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Annidato" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Paesi Bassi" @@ -24099,7 +23796,7 @@ msgstr "Nessun risultato" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nessun risultato trovato" @@ -24858,6 +24555,16 @@ msgstr "Solo le persone che inviti e i moderatori possono vedere questa discussi msgid "Only places I can't access anymore" msgstr "Solo i luoghi a cui non posso più accedere" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Segnala solo ciò che ritieni sinceramente violi le regole e, per favore, non inviare due volte la stessa segnalazione." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Segnala solo ciò che ritieni sinceramente violi le regole. L'uso improprio delle segnalazioni va contro le nostre <0>linee guida della community." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacità" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Apri su {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Apri popup" @@ -25379,11 +25084,6 @@ msgstr "Apri Impostazioni di Sistema → Privacy e Sicurezza → Registrazione s msgid "Open template JSON" msgstr "Apri il JSON del modello" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Apri la finestra di dialogo del ban per questa community." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Apri le impostazioni" msgid "Opened the thread again" msgstr "Riattivata la discussione" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Si apre in una nuova scheda" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Bannato originariamente il {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Altro" @@ -25654,11 +25357,6 @@ msgstr "Altra reazione…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Il nostro team di sicurezza lo sta esaminando. Ti invieremo un messaggio diretto e un'email quando avremo raggiunto un verdetto." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Non è stato possibile trasferire la proprietà a <0>{username} in questo momento." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Proprietà trasferita" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Incolla qui la risposta JSON" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Incolla il link del messaggio." @@ -26260,11 +25958,6 @@ msgstr "PagGiù" msgid "PgUp" msgstr "PagSu" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, frodi, link dannosi o affermazioni false che possono causare danni nel mondo reale." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Scegli un motore di ricerca web" msgid "Pick an emoji" msgstr "Scegli un'emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Scegli un'opzione per continuare." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Scegli il numero di 4 cifre dopo il tuo nome utente" msgid "Pick the appearance this administrator account should start with." msgstr "Scegli l'aspetto che questo account amministratore dovrebbe avere all'inizio." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Scegli la regola da rivedere." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Attendi un momento e prova a rinominare di nuovo." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polonia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Porta" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portogallo" @@ -26872,11 +26555,6 @@ msgstr "premi per aggiungere una reazione" msgid "press to remove reaction" msgstr "premi per rimuovere la reazione" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Fingersi qualcun altro, inclusi contenuti ingannevoli generati dall'IA." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Impedisci a <0>{targetUserTag} di inviare messaggi, reagire e connettersi ai canali vocali per la durata specificata." @@ -27078,11 +26756,6 @@ msgstr "Priorità di parola" msgid "Privacy" msgstr "Privacy" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacy o impersonificazione" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Impostazioni privacy" msgid "Privacy URL" msgstr "URL privacy" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Violazione della privacy" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Violazione della privacy o doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Violazione della privacy o stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Tipo di profilo" msgid "Profile updated" msgstr "Profilo aggiornato" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Violazione del profilo, del nome utente o dell'avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promuove l'odio contro gruppi protetti." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promuove o coordina attività estremiste violente, oppure recluta persone per svolgerle." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promozione o istruzioni che incoraggiano l'autolesionismo o i disturbi alimentari." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profilo che stai segnalando" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronomi: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Proteggi il tuo account Visionary abilitando l'autenticazione a due fattori. Grazie per supportare {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Fornisci almeno un ID utente o un tag utente." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Inserisci l'ID utente o il nome utente della persona che stai segnalando." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Inserisci il tuo nome e cognome legali per la dichiarazione." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "I pulsanti radio consentono di selezionare un'opzione da un gruppo." msgid "Radio group" msgstr "Gruppo di opzioni" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordinamento raid" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Vuoi fare un regalo?" msgid "Ready to upgrade?" msgstr "Vuoi fare l'upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Motivo" @@ -28291,8 +27924,8 @@ msgstr "Ricorda dimensioni e posizione della finestra" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Rimuovi {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Rimuovere {userName} dal gruppo?" @@ -28419,8 +28052,8 @@ msgstr "Rimuovi dai preferiti" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Rimuovi dal gruppo" @@ -28458,11 +28091,6 @@ msgstr "Rimuovi dalle GIF preferite salvate solo tramite URL" msgid "Remove icon" msgstr "Rimuovi icona" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Rimuovilo dal canale per tutti." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Rimosso dai preferiti" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Rimosso dal gruppo" @@ -28919,28 +28547,18 @@ msgstr "Segnala una community" msgid "Report a message" msgstr "Segnala un messaggio" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Segnala una violazione delle regole o trova gli strumenti per gestire contatti e preferenze." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Segnala un profilo utente" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Segnala community" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Dettagli segnalazione" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Segnala contenuto illegale" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Segnala un problema" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Segnala messaggio" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Segnala profilo" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Segnalazione inviata" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Tipo di segnalazione" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Segnala utente" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag utente segnalato (facoltativo)" @@ -29100,6 +28716,10 @@ msgstr "Richiede tutti i requisiti del livello medio e l’appartenenza alla com msgid "Resend" msgstr "Invia di nuovo" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Invia di nuovo ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Invia di nuovo ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Invia di nuovo ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Invia di nuovo ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Invia di nuovo ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Invia di nuovo ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Invia di nuovo ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Reinvia codice" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Ruoli aggiornati correttamente" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29947,7 +29567,7 @@ msgstr "Saturazione" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Saluta <0>{displayName}. Il tuo DM inizia qui." msgid "Scale" msgstr "Scala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Truffe, malware o disinformazione" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scansiona il codice QR con l'app di autenticazione." @@ -30855,11 +30470,6 @@ msgstr "Seleziona" msgid "Select {accessibleName}" msgstr "Seleziona {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Seleziona una categoria" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Seleziona una community in cui hai il permesso {permissionName} o un DM di gruppo a cui appartieni." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Seleziona un Paese" @@ -30911,11 +30521,6 @@ msgstr "Seleziona un URI di reindirizzamento" msgid "Select a scenario to apply..." msgstr "Seleziona uno scenario da applicare..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Seleziona una categoria di violazione." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Seleziona l'account con cui vuoi accedere sul tuo nuovo dispositivo." msgid "Select voice processing mode" msgstr "Seleziona la modalità di elaborazione vocale" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Seleziona cosa vuoi segnalare." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Seleziona il tuo Paese di residenza." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Seleziona…" @@ -31037,13 +30642,6 @@ msgstr "Selezione: {0} (max {1})" msgid "Selections" msgstr "Selezioni" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Autolesionismo o suicidio" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Invia un messaggio di azione (visualizzato in corsivo)." msgid "Send animation" msgstr "Invia animazione" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Invia un'altra segnalazione" @@ -31138,7 +30736,7 @@ msgstr "Pulsante invia" msgid "Send code" msgstr "Invia codice" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Invia segnalazione DSA" @@ -31158,9 +30756,9 @@ msgstr "Invia file fino a {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Invia richiesta d'amicizia" @@ -31220,8 +30818,8 @@ msgstr "Invia messaggi nei thread" msgid "Send messages, images, GIFs and emoji" msgstr "Invia messaggi, immagini, GIF ed emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Invia segnalazione" @@ -31255,7 +30853,7 @@ msgstr "Vuoi rimandare indietro nel tempo questo messaggio fissato?" msgid "Send TTS messages" msgstr "Invia messaggi TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Invia codice di verifica" @@ -31273,11 +30871,6 @@ msgstr "Invia messaggio vocale" msgid "Send:" msgstr "Invio:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Invio di malware o link pericolosi" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Condividi tema" msgid "Share voice activity with all friends?" msgstr "Condividere l'attività vocale con tutti gli amici?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Condividi ciò che serve al nostro team per valutare la situazione." @@ -31709,11 +31302,6 @@ msgstr "Condividi ciò che serve al nostro team per valutare la situazione." msgid "Share with a friend" msgstr "Condividi con un amico" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Condividi con i moderatori della community." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Finestra condivisa" msgid "Shared window audio" msgstr "Audio della finestra condivisa" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Condivide informazioni personali, perseguita gli utenti o coordina violazioni della privacy." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Condivisione di informazioni personali" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Cursori" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovacchia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulazione modalità lenta" msgid "Slowmode time remaining" msgstr "Tempo rimanente per la modalità lenta" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Insulti, linguaggio disumanizzante o attacchi a gruppi protetti." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Si è verificato un errore durante la preparazione di questo sticker. Prova un altro file o riprova tra un momento." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Si è verificato un errore durante la pubblicazione. Riprova tra poco." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Layout spazioso con chiara separazione visiva tra i messaggi." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spagna" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Account spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Classificazione spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam o truffa" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Community di spam o truffe" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Account di spam, truffe o phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, truffe o phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Avvia ridotto a icona" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Ricomincia" @@ -33752,22 +33302,26 @@ msgstr "Resta connesso" msgid "Step {current} of {total}" msgstr "Passaggio {current} di {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Passaggio 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Passaggio 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Passaggio 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Passaggio 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Passaggio 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Smettere di essere un canale di annunci?" msgid "Stop hiding muted channels by default?" msgstr "Smettere di nascondere i canali silenziati per impostazione predefinita?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Interrompi messaggi e richieste di amicizia." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Interrompi test del microfono" @@ -33959,11 +33508,6 @@ msgstr "Smetti di applicare patch a Node.prototype insertBefore e removeChild. L msgid "Stop ringing" msgstr "Interrompi lo squillo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Smetti di vedere i suoi contenuti e i suoi membri." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Sostituisci le espressioni comuni come :) e <3 con emoji quando invii i messaggi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Svezia" @@ -34804,11 +34348,6 @@ msgstr "Tocca per aggiungere una nota" msgid "tar.gz archive" msgstr "Archivio tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Prende di mira persone in base a caratteristiche protette." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Termini di servizio" msgid "Terms URL" msgstr "URL termini" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismo o estremismo violento" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tailandese" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Grazie per aver contribuito a rendere {productName} un luogo sicuro. Esamineremo la tua segnalazione il prima possibile." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Grazie per averlo segnalato" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Grazie per avercelo detto. Di per sé, questo non viola le nostre regole, quindi non abbiamo inviato alcuna segnalazione." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Grazie per avercelo detto. Di per sé, questo non viola le nostre regole, quindi non abbiamo inviato alcuna segnalazione. Se prende di mira qualcuno o usa insulti, segnalalo di nuovo e scegli «Contenuti offensivi o dannosi»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Non ha funzionato. Riprova o annulla." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Non sembra un colore valido. Prova un valore esadecimale, rgb(), hsl() o un nome di colore CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Non sembra un URL valido." @@ -35104,6 +34653,11 @@ msgstr "L'app {PRODUCT_NAME} sul tuo altro dispositivo la mostra sotto \"Accesso msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "L'app {PRODUCT_NAME} non è stata autenticata. Puoi chiudere questa scheda." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Il team di sicurezza di {productName} esaminerà la tua segnalazione. Non riveleremo che proviene da te." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Il valore redirect_uri fornito non è registrato per questa applicazione msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Il valore redirect_uri fornito deve usare HTTP o HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Il modulo di segnalazione è cambiato. Ricomincia." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "I tag del nome utente su questa istanza sono già impostati. Non possono più essere modificati." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Il codice di verifica non è valido o è scaduto." @@ -36115,13 +35674,8 @@ msgstr "Questo membro non è più connesso alla chat vocale." msgid "This message can only be forwarded to age-restricted channels" msgstr "Questo messaggio può essere inoltrato solo a canali con restrizioni d'età" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Questo messaggio è già stato eliminato." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Questo messaggio è già stato pubblicato" @@ -36279,11 +35833,6 @@ msgstr "Questo thread è chiuso. L'invio di un messaggio lo riaprirà." msgid "This thread is locked. Only moderators can send messages." msgstr "Questo thread è bloccato. Solo i moderatori possono inviare messaggi." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "questo utente" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Questo utente ha limitato il proprio profilo. Alcuni dettagli sono nascosti alle persone che non sono suoi amici." @@ -36292,11 +35841,6 @@ msgstr "Questo utente ha limitato il proprio profilo. Alcuni dettagli sono nasco msgid "This user has no roles in this community." msgstr "Questo utente non ha ruoli in questa community." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Questo utente è già bannato dalla community." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Questo utente non è più disponibile." @@ -36465,16 +36009,6 @@ msgstr "Thread aggiornato" msgid "Threads" msgstr "Thread" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Minacce, stalking tra spazi o contatti indesiderati." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Minacce, molestie o danni" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Messo in timeout {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Metti in timeout" @@ -36787,6 +36321,11 @@ msgstr "Tono" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mappa le immagini HDR all'intervallo standard, riducendo la luminosità di picco." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Troppi codici inviati. Attendi {duration} e riprova." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Trasferisci la proprietà della community" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Trasferire la proprietà del gruppo a {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Sblocca prima l’utente per inviare una richiesta di amicizia." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Sblocca utente" @@ -37607,16 +37146,6 @@ msgstr "Riattiva l'audio su tutti i dispositivi" msgid "Undeafen yourself" msgstr "Riattiva l'audio" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Minorenne o rischio per la sicurezza dei bambini" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Utente minorenne" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Finché non lo riattivo" msgid "Unverified email" msgstr "Email non verificata" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Condotta indesiderata o contenuti per adulti nel posto sbagliato." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Comportamenti, commenti o richieste per adulti indesiderati." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Fino a {DISCOVERY_MAX_TAGS} tag aiutano le persone a trovare la tua community. Vengono visualizzati nella ricerca di Scopri." @@ -38840,11 +38359,6 @@ msgstr "Usa tema chiaro" msgid "Use native title bar" msgstr "Usa la barra del titolo nativa" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Usalo solo se viola chiaramente le regole di {productName} e non rientra nelle categorie precedenti." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Usato solo in questa community." msgid "User" msgstr "Utente" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "L'utente sembra minorenne o è coinvolto in adescamento o sfruttamento di minori." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Debug utente" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID utente (facoltativo)" @@ -39061,12 +38570,12 @@ msgstr "Utente non trovato" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profilo utente" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profilo utente: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Impostazioni utente" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag utente (facoltativo)" @@ -39339,7 +38848,7 @@ msgstr "Community verificata" msgid "Verify" msgstr "Verifica" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verifica codice" @@ -39368,7 +38877,7 @@ msgstr "Verifica la tua identità" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifica la tua email" @@ -39718,7 +39227,7 @@ msgstr "Visualizza codici" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Visualizza profilo della community" @@ -39751,7 +39260,7 @@ msgstr "Visualizza regali" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Visualizza profilo globale" @@ -39847,26 +39356,6 @@ msgstr "Spettatore si unisce allo stream" msgid "Viewer leaves stream" msgstr "Spettatore abbandona lo stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Categoria della violazione" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "La violazione riguarda il profilo dell'utente, non un messaggio specifico." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violenza o minacce di violenza" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Contenuti violenti o cruenti" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Abbiamo ridimensionato e compresso questa emoji a 128x128 pixel, ma la d msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Abbiamo ridimensionato e compresso questo sticker a 320x320 pixel, ma la dimensione è ancora di {fileSize}. Il limite è {maxSize}. Prova un’immagine più semplice, meno colori o un file sorgente più piccolo." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Abbiamo inviato un codice a {email}." @@ -40472,7 +39961,7 @@ msgstr "Lo elaboreremo il prima possibile. Riceverai un'email quando il tuo arch msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Ripristineremo la tua email precedente, disconnetteremo le sessioni attive, disabiliteremo l'autenticazione a più fattori e metteremo in sicurezza il tuo account con una nuova password." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Ti invieremo un codice per confermare che puoi ricevere aggiornamenti su questa segnalazione." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginia Occidentale" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Che tipo di regola è stata infranta?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Cosa succede?" msgid "What's new" msgstr "Novità" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Qual è il motivo della tua segnalazione?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Quando non è impostata una data di soglia personalizzata, i membri senza il permesso <0>{readMessageHistoryPermissionLabel} non possono visualizzare i messaggi precedenti. Vedranno solo i messaggi in tempo reale man mano che arrivano e scompariranno quando riavvieranno i loro client." @@ -40832,11 +40321,6 @@ msgstr "Quali community" msgid "Which conversations" msgstr "Quali conversazioni" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Quale regola è stata infranta?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Quando il push-to-talk è attivo, la scorciatoia controlla il microfono, quindi il pulsante per disattivarlo è disabilitato." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Non puoi allegare file in questo canale." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Non puoi essere amico di te stesso" @@ -41341,7 +40825,7 @@ msgstr "Non puoi inviare messaggi a questo utente" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Devi accettare i termini di servizio per creare un account" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Devi verificare la tua email prima di inviare una segnalazione." @@ -41891,6 +41375,11 @@ msgstr "Hai un piano con una tariffa precedente. Il prezzo attuale per questo pi msgid "You're sending messages too quickly" msgstr "Stai inviando messaggi troppo velocemente" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Invii segnalazioni troppo velocemente. Riprova più tardi." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Stai visualizzando messaggi meno recenti" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Hai aggiunto più persone di quelle consentite in un DM di gruppo. Rimuovine alcune e riprova." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Hai già segnalato questo messaggio." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Hai già segnalato questo profilo oggi." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "I tuoi account e le tue impostazioni non sono stati modificati o elimina msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "La tua azione non può essere completata perché è stata segnalata dai nostri sistemi di sicurezza. Se pensi che sia un errore, contatta l'assistenza." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Le tue risposte" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "La tua candidatura è in attesa di valutazione. Puoi comunque aggiornare i dettagli della scheda o ritirare la candidatura." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Il tuo browser richiede un'interazione prima di poter riprodurre l'audio. Clicca il pulsante qui sotto per abilitare la chat vocale." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Le tue modifiche raggiungono tutte le community che seguono questo canale e potrebbero richiedere un minuto. Ogni messaggio pubblicato consente 3 modifiche rapide, poi 1 ogni 20 minuti." @@ -42311,6 +41815,11 @@ msgstr "Il tuo nuovo soprannome; lascia vuoto per reimpostarlo." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Il tuo vecchio kit di recupero non funziona più. Conserva questo nuovo in un posto sicuro." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Le tue opzioni" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "la tua regione" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Il pagamento del rinnovo non è andato a buon fine, ma i <0/> rimangono attivi fino al <1>{graceDate}. Aggiorna il metodo di pagamento prima di allora per mantenere il tuo abbonamento." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "La tua segnalazione non è stata inviata. Riprova." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Il tuo abbonamento passerà alla fatturazione annuale al prossimo rinnov msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Il CSS del tuo tema è troppo grande per essere condiviso. Riduci le dimensioni e riprova." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Il tuo nome utente (facoltativo)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index 91cdd357f..4c3222f7e 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -2081,7 +2081,7 @@ msgstr "残り{remainingSlotCount}枠" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount}{memberCount, plural, one {人のメンバー} other {人のメンバー}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {招待リンクは#秒後に期限切れになります。} other {招待リンクは#秒後に期限切れになります。}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount}件選択済み" @@ -2957,11 +2957,6 @@ msgstr "アカウントデータ" msgid "Account details unavailable" msgstr "アカウント情報がありません" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "スパム、詐欺、またはプラットフォームの悪用を目的としたアカウントです。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "追加日: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "追加日: {createdDate} • 最終使用日: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "その他のコメント(任意)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "使用済み" msgid "Already set to cancel" msgstr "キャンセル設定済み" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "このメッセージを{productName}安全チームにも報告する" @@ -4576,11 +4566,6 @@ msgstr "年額" msgid "Another checkbox" msgstr "別のチェックボックス" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "その他の明らかなルール違反" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "別の丸いチェックボックス" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "音声アップロード" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "オーストリア" @@ -5620,6 +5605,7 @@ msgstr "現在離席中" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "現在離席中" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "戻る" @@ -5788,9 +5775,7 @@ msgstr "バックアップコードを再生成しました" msgid "Badge" msgstr "バッジ" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "BAN" @@ -5819,7 +5804,7 @@ msgstr "BANの期間" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "メンバーをコミュニティからBANし、必要に応じて直近 msgid "Ban reason" msgstr "BANの理由" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "このユーザーをBANする" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "帯域幅" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "BAN済み" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag}さんをコミュニティからBANしました" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "以前" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "ベルギー" @@ -6031,7 +6006,7 @@ msgstr "ビットレート" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "ブロック" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "ブロック" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name}をブロック" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "すべてのコミュニティでブロック" msgid "Block spoiler" msgstr "ネタバレブロック" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "このユーザーをブロック" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "ユーザーをブロック" msgid "Blocked" msgstr "ブロック中" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "ブロック中" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "内蔵翻訳ツール" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "ブルガリア" @@ -6519,16 +6500,6 @@ msgstr "ブルガリア語" msgid "Bulk delete" msgstr "一括削除" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "いじめ、望まない接触の繰り返し、ストーカー行為、特定の相手を狙った嫌がらせ。" - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "いじめ、脅迫、ヘイト、暴力、荒らし、または自傷行為を助長するコンテンツ。" - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "カリフォルニア州" msgid "Call" msgstr "通話" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "通話とグループチャットの設定" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "バナーを変更" msgid "Change chat embed background" msgstr "チャット埋め込みの背景を変更" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "メールアドレスを変更" @@ -7150,8 +7116,8 @@ msgstr "友達のニックネームを変更" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "グループニックネームを変更" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "言語を変更" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "グループニックネームを変更" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "自分のニックネームを変更" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "オーナーを変更" @@ -7283,16 +7249,6 @@ msgstr "ボイスチャンネルで使用するボイスリージョンを変更 msgid "Change which voice region this channel uses." msgstr "このチャンネルで使用するボイスリージョンを変更します。" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "あなたに通話をかけたり、あなたを追加したりできる人を変更します。" - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "あなたに連絡できる人を変更します。" - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "{emailAddress}の受信トレイで認証リンクをご確認くださ msgid "Check your inbox for a verification email." msgstr "受信トレイに確認メールが届いているかご確認ください。" +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "報告内容の確認" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "チェックボックス" @@ -7901,21 +7862,6 @@ msgstr "このアカウントでは購入手続きがブロックされていま msgid "Checkout unavailable" msgstr "購入手続きを利用できません" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "児童の安全に関する懸念" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "児童の安全または未成年者の搾取" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "児童の安全または成人向けコンテンツ" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "選択肢" msgid "Choices: {choiceList}" msgstr "選択肢: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "選択" @@ -8122,6 +8068,11 @@ msgstr "あなたのコミュニティに最も合うカテゴリを選択して msgid "Choose the premium model" msgstr "プレミアムモデルを選択" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "理由を選び直す" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "ギフトを受け取る" msgid "Claim your account" msgstr "アカウントを登録" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "報告を送信するには、アカウントを登録してメールアドレスを確認してください。" @@ -8352,12 +8303,12 @@ msgstr "ギフトを受け取るにはアカウントを登録してください #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "友達リクエストを送信するにはアカウントを登録してください。" -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "アカウントを請求して、レポートを送信してください。" @@ -8378,11 +8329,6 @@ msgstr "1対1の通話を開始、または参加するにはアカウントを msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "ギフトを受け取って、{premiumProductName}サブスクリプションを有効にしましょう!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "他人、ブランド、または組織になりすます行為。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "検索入力をクリア" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "モーダルを閉じる" msgid "Close popout" msgstr "ピクチャインピクチャを閉じる" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "このDMを閉じる" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "閉じるときにタスクトレイに格納" msgid "Close window" msgstr "ウィンドウを閉じる" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "{dmDisplayName}さんとのDMを閉じます。この操作では相手はブロックされず、後でDMを再開できます。" - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "{displayName}さんとのDMを閉じますか?いつでも再開できます。" @@ -8837,7 +8773,7 @@ msgstr "石炭テーマ" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "コード" @@ -8868,7 +8804,7 @@ msgstr "{productName}アプリのコード" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "コードを再送しました" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "参加できるコミュニティ" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "コミュニティ" @@ -9131,7 +9065,7 @@ msgstr "コミュニティスピーカーミュート" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "コミュニティデバッグ" @@ -9150,16 +9084,6 @@ msgstr "コミュニティを削除しました" msgid "Community DM" msgstr "コミュニティDM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "スパム、詐欺、またはプラットフォームの悪用を目的としたコミュニティです。" - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "集団攻撃や標的型嫌がらせを助長しているコミュニティです。" - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "コミュニティアイコン" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "コミュニティID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "コミュニティIDは必須です。" @@ -9526,6 +9450,11 @@ msgstr "新しいパスワード(確認)" msgid "Confirm password" msgstr "パスワード(確認)" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "報告を送信するには、この表明を確認してください。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "ブラウザで続ける" msgid "Continue to checkout" msgstr "チェックアウトに進む" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "コミュニティの報告に進む" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "ユーザーの報告に進む" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "このチャンネルをテキストチャンネルに変換すると、 msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "/ttsコマンドで送信されたかどうかにかかわらず、受信したコンテンツを音声に変換します。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "個人またはコミュニティに対する襲撃、集団的嫌がらせ、またはハラスメントを組織する行為。" - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URLをクリップボードにコピーしました" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URLをクリップボードにコピーしました" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "メッセージIDをコピー" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "メッセージリンクをコピー" @@ -10643,6 +10553,11 @@ msgstr "投稿を読み込めませんでした。後でもう一度お試しく msgid "Couldn't load settings" msgstr "設定を読み込めませんでした" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "報告フォームを読み込めませんでした。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "このアプリを読み込めませんでした" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "画像を処理できませんでした" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "このメッセージを公開できませんでした" @@ -10825,11 +10740,6 @@ msgstr "招待を送信できませんでした" msgid "Couldn't send invite. Try again." msgstr "招待を送信できませんでした。もう一度お試しください。" -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "送信できませんでした。もう一度お試しください。" - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "カウントダウンタイマー" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "居住国" @@ -11301,13 +11211,8 @@ msgstr "作成日:" msgid "Credentials" msgstr "認証情報" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "信憑性のある脅迫、露骨な暴力、または暴力の賛美。" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "クロアチア" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "ラウドネスのしきい値を下回る音声をカットします。CPU負荷は最小限です。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "キプロス" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "チェコ語" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "チェコ" @@ -11965,7 +11870,7 @@ msgstr "チャンネルをデバッグ" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "コミュニティをデバッグ" @@ -12151,7 +12056,6 @@ msgstr "デラウェア州" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "デラウェア州" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "テーマを削除しますか?" msgid "Delete this invite? Can't be undone." msgstr "この招待を削除しますか?この操作は元に戻せません。" -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "このメッセージを削除" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "このメッセージを削除しますか?この操作は元に戻せません。" #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "このメッセージを削除しますか?元に戻すことはできません。このメッセージは、このチャンネルをフォローしているすべてのコミュニティからも削除されます。" @@ -12461,11 +12359,6 @@ msgstr "このコミュニティの自分のメッセージを削除しますか msgid "Delete your messages in this conversation?" msgstr "この会話の自分のメッセージを削除しますか?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "削除済み" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions}を拒否しました" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "デンマーク" @@ -12554,11 +12447,6 @@ msgstr "スタンプの説明" msgid "Describe this media for screen readers" msgstr "スクリーンリーダー用のメディアの説明" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "コンテンツが違法である理由を説明してください" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "バナーを分離表示" msgid "Detail" msgstr "詳細" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "詳細" @@ -13315,11 +13203,6 @@ msgstr "表示名(任意)" msgid "Display scaling" msgstr "表示サイズ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "マルウェア、認証情報を盗むツール、その他の有害なファイルを配布する。" - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM・友達リクエスト設定" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "ドキュメント" msgid "Doesn't allow being added to group DMs" msgstr "グループDMへの追加を許可していません" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "ブロックはしません。後でまた開けます。" - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "代わりに寄付する" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "開発者ツールで実際のソースを指すように、ソースマ msgid "Download video" msgstr "動画をダウンロード" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "個人情報の暴露、プライベートな情報の公開、ストーカー行為。" - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "個人情報の暴露、ストーカー行為、なりすまし、不適切なプロフィール。" - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "{tokenLabel}のカラーを編集" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "コミュニティプロフィールを編集" @@ -14043,7 +13908,7 @@ msgstr "このチャンネルでのロールとメンバーの上書き設定を #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "プロフィールを編集" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "プロフィールの現地時間を編集" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "投稿メッセージを編集しますか?" @@ -14191,13 +14056,13 @@ msgstr "{windowEndsOn}まで払い戻しの対象となります。これによ #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "メールアドレス" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "メールアドレス" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "メールアドレスは必須です。" @@ -14721,16 +14586,6 @@ msgstr "新しい画面共有のエンコーダー設定" msgid "Encoder, SVC, and bitrate presets" msgstr "エンコーダー、SVC、ビットレートプリセット" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "自傷行為の助長" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "自殺、自傷行為、摂食障害を助長するコンテンツ。" - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "サポートされていない参加者がいるため、この通話で msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "サポートされていない参加者がこのボイスチャンネルにいるため、エンドツーエンド暗号化は利用できません。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "未成年者を危険にさらしたり、児童搾取コンテンツをホストしたりする行為。" - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "コードを「ABCD-1234」の形式で入力してください。" @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "有効な{theOtherPlatform}テンプレートURLまたはコードを入力してください。" #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "有効なメールアドレスを入力してください。" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "有効なメッセージリンクを入力してください。" @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "認証アプリに表示された{digitCount}桁のコードを入力してください。" #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "続行する前にコードを入力してください。" @@ -15008,7 +14858,7 @@ msgstr "Enterで<0><1>保存" msgid "Enter username" msgstr "ユーザー名を入力" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "認証コードを入力" @@ -15017,6 +14867,11 @@ msgstr "認証コードを入力" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "メールアドレスを入力してください。パスワードをリセットするためのリンクをお送りします。" +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "報告を送信するには、法律上の氏名を入力してください。" + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escキーで<0><1>キャンセル" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "エストニア" @@ -15412,6 +15267,16 @@ msgstr "有効期限: {earliest}" msgid "Expires:" msgstr "有効期限:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "問題を説明してください" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "報告を送信するには、問題を説明してください。" + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "外部リンクには危険が伴う場合があります。ご注意く msgid "Extra large" msgstr "特大" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "過激派コミュニティ" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "カスタムURLの削除に失敗しました。もう一度お試しください。" #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "コードの再送信に失敗しました。もう一度お試しください。" @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "プレミアム状態のリセットに失敗しました。" #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "コードの送信に失敗しました。もう一度お試しください。" @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "メッセージを送信できませんでした。長押しでオプションを表示します。" #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "報告の送信に失敗しました。もう一度お試しください。" @@ -15840,11 +15700,6 @@ msgstr "{startLabel}以降の絵文字のアップロードに失敗しました msgid "Failed to upload emojis. Try again." msgstr "絵文字のアップロードに失敗しました。もう一度お試しください。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "現実世界に危害を及ぼす可能性のある虚偽の主張。" - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "ぴったりのスタンプを見つけよう" msgid "Fingerprint" msgstr "指紋認証" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "アカウントのセットアップを完了" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "まずアカウントのセットアップを完了してください" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "友達リクエストを送信するには、アカウント登録を完了してください。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "フィンランド" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "フィンランド語" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "氏名" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "30 FPSを超えるフレームレートには{premiumProductName}が必要です" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "フランス" @@ -16834,10 +16689,10 @@ msgstr "完全な日時" msgid "Full dynamic range" msgstr "フルダイナミックレンジ" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "氏名" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "法律上の氏名(児童性的虐待に関する報告では任意)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "ドイツ語" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "ドイツ" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "戻る" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "戻って有効なメールアドレスを入力してください。" @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "{username}さん、会えてうれしいです!ようこそ!" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "ギリシャ" @@ -17572,11 +17427,6 @@ msgstr "ギリシャ語" msgid "Grid view" msgstr "グリッド表示" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "グルーミングまたは児童搾取コンテンツ。" - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "ハンドル" msgid "Hang out with voice, video and screen share" msgstr "音声、ビデオ、画面共有で交流しよう" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "ハラスメント" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "成人向けコンテンツを含むハラスメント" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "ハラスメントまたはいじめ" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "ハラスメントまたはストーカー行為" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "ハラスメントまたは特定の相手への嫌がらせ" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "ハラスメントまたは脅迫" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "ハードウェアキー" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "ほとんどのWindows、macOSでハードウェアアクセラレーションに対応。古いデバイスでも安定しています。" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "有害な誤情報" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "購入履歴あり" msgid "Has ever purchased override" msgstr "購入履歴を上書き" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "ヘイトスピーチ" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "自分の画面共有を非表示にしますか?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "このチャンネルの画像や動画のダウンロード、ブラウザで開く、コピーボタンを非表示にします。" +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "相手のメッセージを非表示にし、相手があなたにダイレクトメッセージを送れないようにします" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "ハンガリー語" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "ハンガリー" @@ -18399,6 +18212,11 @@ msgstr "ツールチップです" msgid "I changed my mind" msgstr "やっぱりやめます" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "私は、本通知に記載された情報および申し立てが正確かつ完全であることを、誠意をもって確認します。" + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "アイドル設定" msgid "Idle timeout" msgstr "アイドル状態のタイムアウト" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "未成年者が関係している場合は、「{childSafetyReasonName}」を使用してください。" - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "そのアドレスを使用しているアカウントがあれば、パ msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "macOSで{productName}の終了と再起動を求められたら、「後で」を選択してください。" -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "もし誰かが差し迫った危険に晒されている場合、安全にできるのであれば、地域の緊急サービスに連絡してください。" +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "誰かに差し迫った危険がある場合は、まず現地の警察や救急などの緊急通報先に連絡してください。" #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "誰かがここに何かを貼り付けるように言ってきたら、それは詐欺で、あなたの{productName}アカウントを相手に渡してしまう可能性があります。" -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "児童性的虐待コンテンツ(CSAM)や未成年者の搾取に関する場合は、今すぐ報告を送信してください。その素材を再共有しないでください。" - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "差し迫った脅威がある場合は、地域の緊急サービスにも連絡してください。" - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "差し迫ったテロの脅威である場合は、地域の緊急サービスにも連絡してください。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "このコミュニティ内の特定のメッセージに関する報告の場合は、そのメッセージを直接報告してください。メッセージを報告していただくと、安全チームが状況をより正確に把握できます。コメントで詳細を追加していただけると、より迅速に確認できます。メッセージの報告では問題の全体像を伝えきれない場合にのみ、コミュニティ全体の報告に進んでください。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "特定のメッセージに関する報告の場合は、そのメッセージ自体を報告してください。メッセージの報告は、安全チームが状況をより正確に把握するのに役立ち、コメントで詳細を追加することで、より迅速な審査が可能になります。メッセージだけでは問題全体を伝えきれない場合にのみ、ユーザー全体を報告してください。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "特定のメッセージに関する報告の場合は、最も関連性の高いメッセージを報告してください。メッセージを報告していただくと、安全チームが状況をより正確に把握できます。コメントで詳細を追加すると、より迅速に確認できます。メッセージの報告では問題の全体像を伝えきれない場合にのみ、ユーザー全体を報告する手続きに進んでください。" +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "もし違法だと考える場合は、どの法律に違反しているか、その理由を説明してください。" #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "このチャンネルのスローモードのクールダウンを無視 msgid "Ignore virtual" msgstr "仮想デバイスを無視" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "違法行為" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "違法行為、またはその他" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "違法な販売、犯罪を助長する行為、または上記のいずれにも当てはまらない明確なルール違反。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "違法な販売、犯罪幇助、または違法行為。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "画像" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "クリップボードから貼り付けた画像は添付ファイルとして送信されますが、このチャンネルではファイルを添付する権限がありません。" -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "なりすまし" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "なりすましまたは誤解を招くメディア" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "非アクティブ" msgid "Inactive timeout" msgstr "非アクティブ時のタイムアウト" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "不適切なプロフィール" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "2要素認証のバックアップコードをPDFと印刷物に含める" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "コミュニティIDを含めてください。" @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "招待背景" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "招待コード(任意)" @@ -19471,7 +19220,7 @@ msgstr "招待のマスク" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "メンバーを招待" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IPアドレスを認証しました" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "アイルランド" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "イタリック" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "イタリア" @@ -20120,7 +19869,7 @@ msgstr "キー" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "後で" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "ラトビア" @@ -20291,11 +20040,6 @@ msgstr "詳細はこちら" msgid "Learn more about Visionary" msgstr "Visionary について詳しく見る" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "脱退" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "プライベートスレッドを退出しますか?" msgid "Leave silently" msgstr "通知なしで退出" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "コミュニティを脱退" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "このロールを持つメンバーは、メンバーリスト内で専用のセクションに表示されます。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "リトアニア" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "読み込み中..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "読み込み中…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "低" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "ルクセンブルク" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "メンテナンスは{localizedTime}に予定されています。所要時間: {duration}。" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "{userName}さんをグループのオーナーにしますか?オーナー権限は失われます。" #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "グループのオーナーにする" @@ -21091,38 +20830,21 @@ msgstr "グループのオーナーにする" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "{PRODUCT_NAME} アプリ内のコードが一致していることを確認してください。" +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "送信する前に、内容が正しいか確認してください。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "インスタンスをカスタマイズ" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "悪意のあるリンク" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "マルタ" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "マルウェア配布" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "マルウェアまたは危険なリンク" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "マルウェア、認証情報の窃取、または有害なファイル。" - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "画面やストリームを共有する前に、個人情報を隠しま msgid "Mask Visionary as subscription" msgstr "Visionaryをサブスクリプションとして表示" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "大量のスパム、詐欺、偽のプレゼント企画、またはアカウントの不正利用。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "成人向けコンテンツのメディアゲート" msgid "Mature content not allowed" msgstr "成人向けコンテンツは許可されていません" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "成人向けコンテンツまたはハラスメント" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "成人向けコンテンツまたは不適切な制限設定" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "成人向けコンテンツのオーバーライド" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "成人向けコンテンツポリシー違反" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "適切な制限が設定されていない成人向けコンテンツ。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "メッセージ" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "メッセージリンク" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "メッセージリンク" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "DMリストのメッセージプレビュー" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "メッセージを公開しました" @@ -22211,6 +21908,11 @@ msgstr "メッセージ時刻" msgid "Message unpinned" msgstr "メッセージのピン留めを解除しました" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "報告するメッセージ" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "ミネソタ州" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "未成年者を危険にさらす行為、不適切な場所での成人向けコンテンツ、または迷惑行為。" - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "その他" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "その他の操作" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "ネスト" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "オランダ" @@ -24099,7 +23796,7 @@ msgstr "結果なし" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "結果が見つかりませんでした" @@ -24858,6 +24555,16 @@ msgstr "招待したユーザーとモデレーターのみがこのスレッド msgid "Only places I can't access anymore" msgstr "アクセスできなくなった場所のみ" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "ルール違反だと正直に思うものだけを報告してください。同じ報告を複数回送信しないでください。" + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "ルール違反だと正直に思うものだけを報告してください。報告の悪用は、当社の<0>コミュニティガイドラインに違反します。" + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "不透明度" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "{instanceName}で開く" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "ポップアップを開く" @@ -25379,11 +25084,6 @@ msgstr "システム設定 → プライバシーとセキュリティ → 画 msgid "Open template JSON" msgstr "テンプレートJSONを開く" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "このコミュニティのBANダイアログを開く。" - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "設定を開く" msgid "Opened the thread again" msgstr "スレッドを再度開きました" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "新しいタブで開きます" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "元々 {date} にBANされました" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "その他" @@ -25654,11 +25357,6 @@ msgstr "その他のリアクション…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Fluxerの安全チームが内容を確認しています。結果が出ましたら、DMとメールでお知らせします。" - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "現在、<0>{username}に所有権を移行できませんでした。" #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "所有権を移行しました" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "JSONレスポンスをここに貼り付け" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "メッセージのリンクを貼り付けてください。" @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "フィッシング、詐欺、悪意のあるリンク、または現実世界に危害を及ぼす可能性のある虚偽の主張。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "ウェブ検索プロバイダーを選択" msgid "Pick an emoji" msgstr "絵文字を選択" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "続行するにはオプションを選択してください。" - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "ユーザー名の後に続く4桁の数字を選択" msgid "Pick the appearance this administrator account should start with." msgstr "この管理者アカウントの初期の外観を選択してください。" -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "確認するルールを選択してください。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "しばらく待ってから、もう一度名前の変更をお試しください。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "ポーランド" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "ポート" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "ポルトガル" @@ -26872,11 +26555,6 @@ msgstr "押してリアクションを追加" msgid "press to remove reaction" msgstr "押してリアクションを削除" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "他人になりすます行為(誤解を招くAI生成コンテンツを含む)。" - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "指定した期間、<0>{targetUserTag}はメッセージの送信、リアクション、ボイスチャンネルへの接続ができなくなります。" @@ -27078,11 +26756,6 @@ msgstr "優先スピーカー" msgid "Privacy" msgstr "プライバシー" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "プライバシーまたはなりすまし" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "プライバシー設定の通知バー" msgid "Privacy URL" msgstr "プライバシーポリシーのURL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "プライバシー侵害" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "プライバシー侵害または個人情報の暴露" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "プライバシー侵害またはストーカー行為" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "プロフィールタイプ" msgid "Profile updated" msgstr "プロフィールを更新しました" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "プロフィール、ユーザー名、またはアバターの違反" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "保護対象のグループに対する憎悪を助長する行為。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "暴力的な過激派活動を助長、勧誘、または組織する行為。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "自傷行為や摂食障害を助長または指示する内容。" +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "報告するプロフィール" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "代名詞: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "2段階認証を有効にして、Visionaryアカウントを保護しましょう。{productName}をご利用いただきありがとうございます!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "ユーザーIDまたはユーザーのタグを少なくとも1つ入力してください。" #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "報告する相手のユーザーIDまたはユーザー名を入力してください。" -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "申告のために本名を入力してください。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "ラジオボタンでは、グループから1つのオプションを msgid "Radio group" msgstr "ラジオグループ" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "レイドの組織化" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "ギフトを購入しますか?" msgid "Ready to upgrade?" msgstr "アップグレードしますか?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "理由" @@ -28291,8 +27924,8 @@ msgstr "ウィンドウのサイズと位置を記憶する" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName}を削除" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "{userName}をグループから削除しますか?" @@ -28419,8 +28052,8 @@ msgstr "お気に入りから削除" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "グループから削除" @@ -28458,11 +28091,6 @@ msgstr "URLのみで保存されたGIFをお気に入りから削除" msgid "Remove icon" msgstr "アイコンを削除" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "チャンネルから削除して、全員に表示されないようにします。" - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "お気に入りから削除しました" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "グループから削除しました" @@ -28919,28 +28547,18 @@ msgstr "コミュニティを報告" msgid "Report a message" msgstr "メッセージを報告" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "ルール違反を報告したり、連絡や設定を管理するツールを見つけたりできます。" - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "ユーザープロフィールを報告" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "コミュニティを報告" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "報告の詳細" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "違法コンテンツを報告" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "問題を報告" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "メッセージを報告" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "プロフィールを報告" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "報告を送信しました" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "報告の種類" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "ユーザーを報告" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "報告対象ユーザーのタグ(任意)" @@ -29100,6 +28716,10 @@ msgstr "「中」のすべての条件に加えて、コミュニティのメン msgid "Resend" msgstr "再送" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "再送({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "再送({newSecondsRemaining}秒)" @@ -29108,7 +28728,7 @@ msgstr "再送({newSecondsRemaining}秒)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "再送({originalSecondsRemaining}秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "再送({resendCooldownSeconds}秒)" @@ -29122,7 +28742,7 @@ msgstr "再送({resendSecondsRemaining}秒)" msgid "Resend ({secondsRemaining}s)" msgstr "再送({secondsRemaining}秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "コードを再送" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "ロールを更新しました" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "ルーマニア" @@ -29947,7 +29567,7 @@ msgstr "彩度" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "<0>{displayName}さんに挨拶しましょう。DMはここから msgid "Scale" msgstr "表示サイズ" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "詐欺、マルウェア、誤情報" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "認証アプリでQRコードをスキャンしてください。" @@ -30855,11 +30470,6 @@ msgstr "選択" msgid "Select {accessibleName}" msgstr "{accessibleName}を選択" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "カテゴリを選択" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "{permissionName}の権限を持つコミュニティ、または参加しているグループDMを選択してください。" #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "国を選択" @@ -30911,11 +30521,6 @@ msgstr "リダイレクトURIを選択" msgid "Select a scenario to apply..." msgstr "適用するシナリオを選択…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "違反カテゴリを選択してください。" - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "新しいデバイスでサインインするアカウントを選択し msgid "Select voice processing mode" msgstr "音声処理モードを選択" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "報告する内容を選択してください。" #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "お住まいの国を選択してください。" #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "選択…" @@ -31037,13 +30642,6 @@ msgstr "選択範囲: {0} (最大 {1})" msgid "Selections" msgstr "選択" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "自傷行為または自殺" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "アクションメッセージを送信します(斜体で表示され msgid "Send animation" msgstr "アニメーションを送信" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "別の報告を送信" @@ -31138,7 +30736,7 @@ msgstr "送信ボタン" msgid "Send code" msgstr "コードを送信" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA報告を送信" @@ -31158,9 +30756,9 @@ msgstr "{size}までファイルを送信" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "友達リクエストを送信" @@ -31220,8 +30818,8 @@ msgstr "スレッドでメッセージを送信" msgid "Send messages, images, GIFs and emoji" msgstr "メッセージ、画像、GIF、絵文字を送信" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "報告を送信" @@ -31255,7 +30853,7 @@ msgstr "このピンを過去に戻しますか?" msgid "Send TTS messages" msgstr "TTSメッセージを送信" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "認証コードを送信" @@ -31273,11 +30871,6 @@ msgstr "ボイスメッセージを送信" msgid "Send:" msgstr "送信:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "マルウェアや危険なリンクの送信" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "テーマを共有" msgid "Share voice activity with all friends?" msgstr "すべての友達と音声アクティビティを共有しますか?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "チームが評価するために必要な情報を共有してください。" @@ -31709,11 +31302,6 @@ msgstr "チームが評価するために必要な情報を共有してくださ msgid "Share with a friend" msgstr "友達に共有" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "コミュニティのモデレーターに共有できます。" - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "共有ウィンドウ" msgid "Shared window audio" msgstr "共有ウィンドウの音声" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "個人情報の共有、ストーカー行為、プライバシー侵害の共謀。" - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "個人情報の共有" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "スライダー" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "スロバキア" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "スロベニア" @@ -32889,11 +32467,6 @@ msgstr "スローモードのシミュレーション" msgid "Slowmode time remaining" msgstr "スローモード残り時間" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "差別的な中傷、人間性を否定する表現、保護対象グループへの攻撃。" - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "このスタンプの準備中に問題が発生しました。別のファイルをお試しいただくか、しばらくしてからもう一度お試しください。" #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "公開中に問題が発生しました。しばらくしてからもう一度お試しください。" @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "メッセージがはっきりと区別できる、ゆったりとしたレイアウト。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "スペイン" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "スパムアカウント" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "スパム分類" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "スパムまたは詐欺" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "スパムまたは詐欺目的のコミュニティ" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "スパム、詐欺、またはフィッシングアカウント" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "スパム、詐欺、フィッシング" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "最小化して起動" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "最初からやり直す" @@ -33752,22 +33302,26 @@ msgstr "ログインしたままにする" msgid "Step {current} of {total}" msgstr "{current} / {total} ステップ" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "ステップ1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "ステップ2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "ステップ3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "ステップ4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "ステップ5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "アナウンスチャンネルを停止しますか?" msgid "Stop hiding muted channels by default?" msgstr "ミュートしたチャンネルをデフォルトで非表示にするのをやめますか?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "メッセージと友達リクエストが届かなくなります。" - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "マイクテストを停止" @@ -33959,11 +33508,6 @@ msgstr "Node.prototype の insertBefore と removeChild のパッチ適用を停 msgid "Stop ringing" msgstr "呼び出しを停止" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "コンテンツやメンバーが表示されなくなります。" - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "メッセージ送信時に、:) や <3 などの一般的なテキスト顔文字を絵文字に置き換えます" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "スウェーデン" @@ -34804,11 +34348,6 @@ msgstr "タップしてメモを追加" msgid "tar.gz archive" msgstr "tar.gzアーカイブ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "保護対象の属性を理由に特定の人を狙う行為。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "利用規約" msgid "Terms URL" msgstr "利用規約URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "テロまたは暴力的過激主義" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "タイ語" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName}を安全に保つためのご協力ありがとうございます。できるだけ早くご報告内容を確認いたします。" +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "お知らせいただきありがとうございます" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "お知らせいただきありがとうございます。この内容だけでは規約違反にはあたらないため、報告は送信されませんでした。" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "お知らせいただきありがとうございます。この内容だけでは規約違反にはあたらないため、報告は送信されませんでした。もし誰かを標的にしたり、差別的な言葉を使用したりしている場合は、再度報告して「攻撃的または有害なコンテンツ」を選択してください。" + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "うまくいきませんでした。もう一度試すか、キャンセ msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "有効な色ではありません。16進数、rgb()、hsl()、またはCSSの色名をお試しください。" -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "有効なURLではないようです。" @@ -35104,6 +34653,11 @@ msgstr "他のデバイスの{PRODUCT_NAME}アプリで「他のデバイスで msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} アプリでサインインが完了していません。このタブは閉じることができます。" +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName}の安全チームがあなたの報告を確認します。あなたからの報告であることは明かしません。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "指定されたredirect_uriは、このアプリケーションに登録 msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "指定されたredirect_uriはHTTPまたはHTTPSを使用する必要があります。" +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "報告フォームが変更されました。最初からやり直してください。" + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "このインスタンスのユーザー名タグはすでに設定されています。これ以上変更することはできません。" #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "認証コードが無効であるか、有効期限が切れています。" @@ -36115,13 +35674,8 @@ msgstr "このメンバーはすでにボイスチャンネルに接続してい msgid "This message can only be forwarded to age-restricted channels" msgstr "このメッセージは年齢制限のあるチャンネルにのみ転送できます" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "このメッセージはすでに削除されています。" - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "このメッセージはすでに公開されています" @@ -36279,11 +35833,6 @@ msgstr "このスレッドは閉じられています。メッセージを送信 msgid "This thread is locked. Only moderators can send messages." msgstr "このスレッドはロックされています。モデレーターのみメッセージを送信できます。" -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "このユーザー" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "このユーザーはプロフィールを制限しています。一部の詳細は、友達ではない人には非表示になります。" @@ -36292,11 +35841,6 @@ msgstr "このユーザーはプロフィールを制限しています。一部 msgid "This user has no roles in this community." msgstr "このユーザーはこのコミュニティでロールを持っていません。" -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "このユーザーはすでにコミュニティからBANされています。" - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "このユーザーは利用できなくなりました。" @@ -36465,16 +36009,6 @@ msgstr "スレッドを更新しました" msgid "Threads" msgstr "スレッド" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "脅迫、コミュニティをまたいだつきまとい、望まない接触。" - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "脅迫、ハラスメント、または危害" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag}をタイムアウトしました" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "タイムアウト" @@ -36787,6 +36321,11 @@ msgstr "トーン" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR画像を標準範囲にトーンマップし、ピーク輝度を下げます。" +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "送信されたコードが多すぎます。{duration}待ってから、もう一度お試しください。" + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "コミュニティの所有権を移行" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "グループの所有権を{userName}に移行しますか?" @@ -37561,7 +37100,7 @@ msgstr "友達リクエストを送信するには、まずブロックを解除 #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "ブロック解除" @@ -37607,16 +37146,6 @@ msgstr "すべてのデバイスのスピーカーミュートを解除" msgid "Undeafen yourself" msgstr "自分のスピーカーミュートを解除" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "未成年または児童の安全に関する懸念" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "未成年ユーザー" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "自分でオンにするまで" msgid "Unverified email" msgstr "未確認のメールアドレス" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "望まない行為、またはふさわしくない場所での成人向けコンテンツ。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "望まない性的な言動、コメント、または要求。" - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "最大{DISCOVERY_MAX_TAGS}個のタグで、あなたのコミュニティを見つけやすくしましょう。これらのタグは「見つける」の検索結果に表示されます。" @@ -38840,11 +38359,6 @@ msgstr "ライトテーマを使用" msgid "Use native title bar" msgstr "ネイティブのタイトルバーを使用" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "{productName}のルールに明らかに違反し、上記のいずれにも当てはまらない場合にのみ使用してください。" - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "このコミュニティでのみ使用されます。" msgid "User" msgstr "ユーザー" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "ユーザーが未成年であるか、グルーミングまたは児童搾取に関与している可能性があります。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "ユーザーデバッグ" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ユーザーID(任意)" @@ -39061,12 +38570,12 @@ msgstr "ユーザーが見つかりません" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "ユーザープロフィール" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "ユーザープロフィール: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "ユーザー設定" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "ユーザーのタグ(任意)" @@ -39339,7 +38848,7 @@ msgstr "認証済みコミュニティ" msgid "Verify" msgstr "認証" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "コードを確認" @@ -39368,7 +38877,7 @@ msgstr "ご本人確認" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "メールアドレスを確認" @@ -39718,7 +39227,7 @@ msgstr "コードを表示" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "コミュニティプロフィールを見る" @@ -39751,7 +39260,7 @@ msgstr "ギフトを見る" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "グローバルプロフィールを見る" @@ -39847,26 +39356,6 @@ msgstr "視聴者が配信に参加" msgid "Viewer leaves stream" msgstr "視聴者が配信を退出" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "違反カテゴリ" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "違反は特定のメッセージではなく、ユーザーのプロフィールにあります。" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "暴力または暴力的な脅迫" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "暴力的なコンテンツまたは露骨なコンテンツ" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "この絵文字を128x128ピクセルにリサイズして圧縮しま msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "このスタンプを320x320ピクセルにリサイズして圧縮しましたが、まだ{fileSize}あります。上限は{maxSize}です。よりシンプルな画像、少ない色数、または小さいソースファイルをお試しください。" -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "{email}にコードを送信しました。" @@ -40472,7 +39961,7 @@ msgstr "できるだけ早く処理します。アーカイブの準備ができ msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "以前のメールアドレスを復元し、古いセッションからサインアウトし、MFAを無効にして、新しいパスワードでアカウントを保護します。" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "この報告に関する最新情報を受け取れることを確認するため、認証コードを送信します。" @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "ウェストバージニア州" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "どのようなルール違反ですか?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "いまどうしてる?" msgid "What's new" msgstr "新機能" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "報告の理由は何ですか?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "カスタムの履歴表示期間を設定しない場合、<0>{readMessageHistoryPermissionLabel}の権限がないメンバーは過去のメッセージを閲覧できません。メッセージはリアルタイムでのみ表示され、クライアントを再起動すると表示されなくなります。" @@ -40832,11 +40321,6 @@ msgstr "コミュニティを選択" msgid "Which conversations" msgstr "会話の種類" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "違反しているルールはどれですか?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "プッシュトゥトークがオンの場合、ショートカットでマイクを操作するため、ミュートボタンは無効になります。" @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "このチャンネルにはファイルを添付できません。" #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "自分を友達に追加することはできません" @@ -41341,7 +40825,7 @@ msgstr "このユーザーにはメッセージを送信できません" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "アカウントを作成するには利用規約に同意する必要があります" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "報告を送信する前に、メールアドレスの確認が必要です。" @@ -41891,6 +41375,11 @@ msgstr "旧料金プランをご利用中です。このプランの現在の価 msgid "You're sending messages too quickly" msgstr "メッセージの送信ペースが速すぎます" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "報告の送信間隔が短すぎます。しばらくしてからもう一度お試しください。" + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "過去のメッセージを表示しています" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "グループDMの参加人数上限を超えています。数人を削除してから、もう一度お試しください。" +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "このメッセージはすでに報告済みです。" + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "このプロフィールは本日すでに報告済みです。" + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "アカウントや設定は変更・削除されていません。" msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "安全システムによって不適切な操作と判断されたため、処理を完了できませんでした。誤りだと思われる場合は、サポートにお問い合わせください。" +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "あなたの回答" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "現在、申請内容を審査中です。引き続き掲載内容を更新したり、申請を取り下げたりすることができます。" @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "お使いのブラウザでは、音声の再生にユーザー操作が必要です。音声チャットを有効にするには、下のボタンをクリックしてください。" #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "変更内容は、このチャンネルをフォローしているすべてのコミュニティに反映されます。反映には1分ほどかかる場合があります。公開されたメッセージごとに、3回のクイック編集が可能で、その後は20分ごとに1回の編集が可能です。" @@ -42311,6 +41815,11 @@ msgstr "新しいニックネーム。空白のままにするとリセットさ msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "古いリカバリーキットはもう使えません。新しいキットは安全な場所に保管してください。" +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "選択肢" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "お住まいの地域" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "更新の支払いに失敗しましたが、<0/>は<1>{graceDate}まで有効です。それまでに支払い方法を更新して、サブスクリプションを継続してください。" +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "報告を送信できませんでした。もう一度お試しください。" + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "次回の更新時に、サブスクリプションが年額請求に切 msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "テーマのCSSが大きすぎるため共有できません。サイズを小さくしてからもう一度お試しください。" -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "あなたのユーザー名(任意)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index e4334b7f5..a459280c6 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount}개 남음" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "멤버 {renderedMemberCount}{memberCount, plural, one {명} other {명}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {초대 링크는 #초 후에 만료됩니다.} other {초대 링크는 #초 후에 만료됩니다.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount}개 선택됨" @@ -2957,11 +2957,6 @@ msgstr "계정 데이터" msgid "Account details unavailable" msgstr "계정 정보를 불러올 수 없습니다" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "스팸, 사기 또는 플랫폼 악용을 목적으로 생성된 계정입니다." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "추가일: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "추가일: {createdDate} • 마지막 사용: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "추가 의견 (선택 사항)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "이미 사용됨" msgid "Already set to cancel" msgstr "이미 취소 예정" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "{productName} 안전팀에도 이 메시지를 신고" @@ -4576,11 +4566,6 @@ msgstr "연간" msgid "Another checkbox" msgstr "다른 체크박스" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "그 밖의 명백한 규칙 위반" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "다른 원형 체크박스" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "오디오 업로드" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "오스트리아" @@ -5620,6 +5605,7 @@ msgstr "지금은 부재중" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "지금은 부재중" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "뒤로" @@ -5788,9 +5775,7 @@ msgstr "백업 코드 재생성 완료" msgid "Badge" msgstr "배지" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "차단" @@ -5819,7 +5804,7 @@ msgstr "차단 기간" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "커뮤니티에서 멤버를 차단하고, 최근 메시지를 삭제할 msgid "Ban reason" msgstr "차단 사유" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "이 사용자 차단" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "대역폭" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "차단됨" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag}님을 커뮤니티에서 차단했습니다" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "날짜 이전" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "벨기에" @@ -6031,7 +6006,7 @@ msgstr "비트 전송률" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "차단" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "차단" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name}님 차단" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "모든 커뮤니티에서 차단" msgid "Block spoiler" msgstr "블록 스포일러" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "이 사용자 차단" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "사용자 차단" msgid "Blocked" msgstr "차단됨" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "차단됨" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "내장 번역기" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "불가리아" @@ -6519,16 +6500,6 @@ msgstr "불가리아어" msgid "Bulk delete" msgstr "일괄 삭제" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "괴롭힘, 원치 않는 반복적인 연락, 스토킹 또는 특정인을 겨냥한 악의적 행위." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "괴롭힘, 협박, 혐오, 폭력, 레이드 또는 자해를 조장하는 콘텐츠." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "캘리포니아" msgid "Call" msgstr "통화" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "통화 및 그룹 채팅 설정" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "배너 변경" msgid "Change chat embed background" msgstr "채팅 임베드 배경 변경" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "이메일 변경" @@ -7150,8 +7116,8 @@ msgstr "친구 닉네임 변경" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "그룹 닉네임 변경" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "언어 변경" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "내 그룹 닉네임 변경" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "내 닉네임 변경" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "소유자 변경" @@ -7283,16 +7249,6 @@ msgstr "음성 채널이 사용하는 음성 지역을 변경합니다." msgid "Change which voice region this channel uses." msgstr "이 채널의 음성 지역을 변경합니다." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "나에게 전화하거나 나를 추가할 수 있는 사람을 변경합니다." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "나에게 연락할 수 있는 사람을 변경합니다." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "{emailAddress}으로 전송된 인증 링크를 받은 편지함에서 msgid "Check your inbox for a verification email." msgstr "받은 편지함에서 인증 이메일을 확인하세요." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "신고 내용 확인" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "체크박스" @@ -7901,21 +7862,6 @@ msgstr "이 계정은 결제가 차단되었습니다. 도움이 필요하시면 msgid "Checkout unavailable" msgstr "결제 이용 불가" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "아동 안전 문제" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "아동 안전 또는 미성년자 착취" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "아동 안전 또는 성인 콘텐츠" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "선택 항목" msgid "Choices: {choiceList}" msgstr "선택지: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "선택" @@ -8122,6 +8068,11 @@ msgstr "커뮤니티를 가장 잘 나타내는 카테고리를 선택하세요. msgid "Choose the premium model" msgstr "프리미엄 모델 선택" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "사유를 다시 선택하세요" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "선물 받기" msgid "Claim your account" msgstr "계정 등록하기" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "계정을 등록하고 이메일을 인증해야 신고를 보낼 수 있습니다." @@ -8352,12 +8303,12 @@ msgstr "선물을 받으려면 계정을 등록하세요." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "친구 요청을 보내려면 계정을 등록하세요." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "계정을 등록하여 신고를 보내세요." @@ -8378,11 +8329,6 @@ msgstr "1:1 통화를 시작하거나 참여하려면 계정을 등록하세요. msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "{premiumProductName} 구독을 활성화하려면 선물을 받으세요!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "다른 사람, 브랜드 또는 기관을 사칭하는 행위." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "검색어 지우기" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "모달 닫기" msgid "Close popout" msgstr "PIP 닫기" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "이 DM 닫기" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "트레이로 닫기" msgid "Close window" msgstr "창 닫기" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "{dmDisplayName}님과의 현재 DM을 닫습니다. 이 작업은 사용자를 차단하지 않으며, 나중에 DM을 다시 열 수 있습니다." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "{displayName}님과의 DM을 닫으시겠어요? 언제든지 다시 열 수 있습니다." @@ -8837,7 +8773,7 @@ msgstr "석탄 테마" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "코드" @@ -8868,7 +8804,7 @@ msgstr "{productName} 앱의 코드" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "코드 재전송됨" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "가입할 수 있는 커뮤니티" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "커뮤니티" @@ -9131,7 +9065,7 @@ msgstr "커뮤니티 소리 끄기" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "커뮤니티 디버그" @@ -9150,16 +9084,6 @@ msgstr "커뮤니티 삭제됨" msgid "Community DM" msgstr "커뮤니티 DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "스팸, 사기 또는 플랫폼 악용을 목적으로 만들어진 커뮤니티입니다." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "집단 공격 또는 표적 학대를 조장하는 커뮤니티입니다." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "커뮤니티 아이콘" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "커뮤니티 ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "커뮤니티 ID는 필수 항목입니다." @@ -9526,6 +9450,11 @@ msgstr "새 비밀번호 확인" msgid "Confirm password" msgstr "비밀번호 확인" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "신고를 보내려면 선언 내용을 확인하세요." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "브라우저에서 계속하기" msgid "Continue to checkout" msgstr "결제 계속하기" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "커뮤니티 신고 계속하기" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "사용자 신고 계속하기" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "이 채널을 텍스트 채널로 전환하면 팔로우하는 모든 msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "/tts 명령어로 보냈는지 여부와 관계없이 수신된 콘텐츠를 음성으로 변환합니다." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "특정인이나 커뮤니티를 겨냥한 레이드, 집단 공격, 괴롭힘을 조율합니다." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL이 클립보드에 복사되었습니다" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL이 클립보드에 복사되었습니다" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "메시지 ID 복사" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "메시지 링크 복사" @@ -10643,6 +10553,11 @@ msgstr "게시물을 불러올 수 없습니다. 나중에 다시 시도하세 msgid "Couldn't load settings" msgstr "설정을 불러올 수 없습니다" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "신고 양식을 불러오지 못했습니다." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "이 애플리케이션을 불러올 수 없습니다" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "이미지를 처리할 수 없습니다" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "메시지를 게시할 수 없습니다" @@ -10825,11 +10740,6 @@ msgstr "초대를 보낼 수 없습니다" msgid "Couldn't send invite. Try again." msgstr "초대를 보낼 수 없습니다. 다시 시도해 주세요." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "보낼 수 없습니다. 다시 시도해 주세요." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "카운트다운 타이머" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "거주 국가" @@ -11301,13 +11211,8 @@ msgstr "생성됨:" msgid "Credentials" msgstr "자격 증명" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "신빙성 있는 위협, 노골적인 폭력 또는 폭력 미화." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "크로아티아" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "음량 임계값보다 작은 소리를 차단하며 CPU 사용량이 매우 적습니다." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "키프로스" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "체코어" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "체코" @@ -11965,7 +11870,7 @@ msgstr "채널 디버그" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "커뮤니티 디버그" @@ -12151,7 +12056,6 @@ msgstr "델라웨어" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "델라웨어" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "테마를 삭제할까요?" msgid "Delete this invite? Can't be undone." msgstr "초대를 삭제할까요? 이 작업은 되돌릴 수 없습니다." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "이 메시지 삭제" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "이 메시지를 삭제할까요? 이 작업은 되돌릴 수 없습니다." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "이 메시지를 삭제하시겠어요? 삭제하면 복구할 수 없습니다. 이 메시지는 팔로우하는 모든 커뮤니티에서도 삭제됩니다." @@ -12461,11 +12359,6 @@ msgstr "이 커뮤니티에서 내 메시지를 삭제할까요?" msgid "Delete your messages in this conversation?" msgstr "이 대화에서 내 메시지를 삭제할까요?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "삭제됨" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions}을(를) 거부했습니다" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "덴마크" @@ -12554,11 +12447,6 @@ msgstr "스티커를 설명해 주세요" msgid "Describe this media for screen readers" msgstr "스크린 리더를 위해 이 미디어를 설명해 주세요" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "해당 콘텐츠가 불법인 이유를 설명해 주세요" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "분리형 배너" msgid "Detail" msgstr "디테일" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "세부 정보" @@ -13315,11 +13203,6 @@ msgstr "표시 이름 (선택 사항)" msgid "Display scaling" msgstr "화면 배율" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "멀웨어, 계정 정보 탈취 도구 또는 기타 유해 파일을 배포합니다." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM 및 친구 요청 설정" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "문서" msgid "Doesn't allow being added to group DMs" msgstr "그룹 DM 추가를 허용하지 않음" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "차단하지 않습니다. 나중에 다시 열 수 있습니다." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "대신 기부하기" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "개발자 도구에서 실제 소스 코드를 가리키도록 소스 msgid "Download video" msgstr "비디오 다운로드" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "신상 유출, 개인 정보 노출, 스토킹." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "신상 유출, 스토킹, 사칭 또는 부적절한 프로필." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "{tokenLabel} 색상 편집" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "커뮤니티 프로필 편집" @@ -14043,7 +13908,7 @@ msgstr "이 채널의 역할 및 멤버 권한을 수정합니다." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "프로필 편집" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "프로필 현지 시간 편집" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "게시된 메시지를 수정하시겠어요?" @@ -14191,13 +14056,13 @@ msgstr "{windowEndsOn}까지 환불받을 수 있습니다. 구독도 즉시 취 #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "이메일" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "이메일 주소" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "이메일 주소를 입력해 주세요." @@ -14721,16 +14586,6 @@ msgstr "새 화면 공유에 사용할 인코더 설정입니다." msgid "Encoder, SVC, and bitrate presets" msgstr "인코더, SVC 및 비트 전송률 사전 설정" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "자해 조장" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "자살, 자해 또는 섭식 장애 조장." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "지원되지 않는 참여자가 통화에 참여 중이므로 종단 msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "지원되지 않는 참여자가 이 음성 채널에 있어 종단 간 암호화를 사용할 수 없습니다." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "미성년자를 위험에 빠뜨리거나 아동 착취 콘텐츠를 호스팅합니다." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "ABCD-1234 형식으로 코드를 입력하세요." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "유효한 {theOtherPlatform} 템플릿 URL 또는 코드를 입력하세요." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "유효한 이메일 주소를 입력하세요." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "유효한 메시지 링크를 입력하세요." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "인증 앱의 {digitCount}자리 코드를 입력하세요." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "계속하려면 코드를 입력하세요." @@ -15008,7 +14858,7 @@ msgstr "Enter 키를 눌러 <0><1>저장" msgid "Enter username" msgstr "사용자 이름 입력" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "인증 코드 입력" @@ -15017,6 +14867,11 @@ msgstr "인증 코드 입력" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "이메일 주소를 입력하시면 비밀번호 재설정 링크를 보내드립니다." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "신고를 보내려면 실명을 입력하세요." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc 키를 눌러 <0><1>취소" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "에스토니아" @@ -15412,6 +15267,16 @@ msgstr "{earliest} 만료" msgid "Expires:" msgstr "만료:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "문제 설명" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "신고를 보내려면 문제를 설명하세요." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "외부 링크는 위험할 수 있습니다. 주의하세요." msgid "Extra large" msgstr "아주 크게" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "극단주의 커뮤니티" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "맞춤 URL을 제거하지 못했습니다. 다시 시도해 주세요." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "코드 재전송에 실패했습니다. 다시 시도해 주세요." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "프리미엄 상태 초기화에 실패했습니다." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "코드를 보내지 못했습니다. 다시 시도해 주세요." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "메시지 전송 실패. 길게 눌러 옵션을 확인하세요." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "신고 전송에 실패했습니다. 다시 시도해 주세요." @@ -15840,11 +15700,6 @@ msgstr "{startLabel}부터 이모티콘 업로드 실패: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "이모티콘 업로드에 실패했습니다. 다시 시도해 주세요." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "실제 피해를 야기할 수 있는 허위 주장." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "원하는 스티커를 찾아보세요" msgid "Fingerprint" msgstr "지문" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "계정 설정 완료" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "먼저 계정 설정을 완료하세요" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "친구 요청을 보내려면 가입을 완료하세요." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "핀란드" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "핀란드어" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "성과 이름" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "30FPS를 초과하는 프레임 속도에는 {premiumProductName}이(가) 필요합니다" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "프랑스" @@ -16834,10 +16689,10 @@ msgstr "전체" msgid "Full dynamic range" msgstr "풀 다이내믹 레인지" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "실명" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "실명 (아동 성학대 신고의 경우 선택 사항)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "독일어" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "독일" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "뒤로 가기" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "돌아가서 유효한 이메일을 입력하세요." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "{username}님, 반갑습니다! 환영합니다." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "그리스" @@ -17572,11 +17427,6 @@ msgstr "그리스어" msgid "Grid view" msgstr "격자 보기" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "그루밍 또는 아동 착취 콘텐츠입니다." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "핸들" msgid "Hang out with voice, video and screen share" msgstr "음성, 영상, 화면 공유로 함께 시간을 보내세요" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "괴롭힘" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "성인 콘텐츠 관련 괴롭힘" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "괴롭힘 또는 따돌림" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "괴롭힘 또는 스토킹" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "괴롭힘 또는 표적 공격" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "괴롭힘 또는 위협" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "하드웨어 키" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "대부분의 Windows 및 macOS 기기에서 하드웨어 가속을 지원합니다. 구형 기기에서도 안정적입니다." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "유해한 허위 정보" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "구매한 적 있음" msgid "Has ever purchased override" msgstr "구매 이력 재정의" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "혐오 발언" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "내 화면 공유를 숨길까요?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "이 채널의 이미지 및 동영상에 대한 다운로드, 브라우저에서 열기, 복사 버튼을 숨깁니다." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "상대방의 메시지가 숨겨지고, 상대방은 회원님에게 메시지를 보낼 수 없게 됩니다" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "헝가리어" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "헝가리" @@ -18399,6 +18212,11 @@ msgstr "툴팁입니다" msgid "I changed my mind" msgstr "마음이 바뀌었어요" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "본 신고에 담긴 정보와 주장이 정확하고 완전함을 선의로 확인합니다." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "자리 비움 설정" msgid "Idle timeout" msgstr "자리 비움 시간" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "미성년자가 관련된 경우, 대신 \"{childSafetyReasonName}\"을(를) 사용하세요." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "해당 주소를 사용하는 계정이 있다면, 비밀번호 재설 msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "macOS에서 {productName}을(를) 종료 후 다시 열기하라는 메시지가 표시되면 나중에를 선택하세요." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "누군가 즉각적인 위험에 처해 있다면, 안전하게 조치할 수 있는 경우 현지 응급 서비스에 연락하세요." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "누군가 즉각적인 위험에 처해 있다면 먼저 현지 긴급 신고 번호로 연락하세요." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "누군가 여기에 무언가를 붙여넣으라고 했다면, 이는 {productName} 계정을 빼앗길 수 있는 사기입니다." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "아동 성착취물 또는 미성년자 착취와 관련된 경우, 지금 바로 신고하고 해당 자료를 다시 공유하지 마세요." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "신빙성 있는 임박한 위협이라면 현지 응급 서비스에도 연락하세요." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "임박한 테러 위협이라면 현지 응급 서비스에도 연락하세요." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "이 신고가 이 커뮤니티의 특정 메시지에 관한 것이라면 해당 메시지를 신고해 주세요. 메시지 신고는 안전팀에 가장 명확한 맥락을 제공하며, 의견란에 세부 정보를 추가하면 더 빠르게 검토할 수 있습니다. 메시지 신고로 더 큰 문제를 파악할 수 없는 경우에만 커뮤니티 전체 신고를 진행해 주세요." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "특정 메시지에 대한 신고라면 해당 메시지를 직접 신고해 주세요. 메시지 신고는 안전팀이 상황을 명확하게 파악하는 데 도움이 되며, 의견란에 세부 정보를 추가하면 더 빠르게 검토할 수 있습니다. 메시지 신고로 전체적인 문제를 파악하기 어려운 경우에만 사용자 전체 신고를 진행해 주세요." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "특정 메시지에 대한 신고라면, 해당 메시지를 직접 신고해 주세요. 메시지 신고는 안전팀이 상황을 명확하게 파악하는 데 도움이 되며, 의견란에 세부 정보를 추가하면 더 빠르게 검토할 수 있습니다. 메시지 신고만으로는 전체적인 문제를 파악하기 어렵다고 판단될 경우에만 사용자 전체 신고를 진행해 주세요." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "불법이라고 생각하시면 어떤 법을 위반했는지와 그 이유를 설명해 주세요." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "이 채널의 슬로우 모드 제한을 무시합니다." msgid "Ignore virtual" msgstr "가상 기기 무시" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "불법 활동" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "불법 활동 또는 기타" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "불법 판매, 범죄 조장 또는 위에 해당하지 않는 명확한 규칙 위반." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "불법 판매, 범죄 조장 또는 불법 활동." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "이미지" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "클립보드에서 붙여넣은 이미지는 첨부파일로 전송됩니다. 이 채널에서는 파일을 첨부할 권한이 없습니다." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "사칭" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "사칭 또는 기만적인 미디어" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "비활성" msgid "Inactive timeout" msgstr "비활성 시간 제한" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "부적절한 프로필" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "2단계 인증 백업 코드를 PDF 및 인쇄물에 포함" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "커뮤니티 ID를 포함하세요." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "초대 배경" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "초대 코드 (선택 사항)" @@ -19471,7 +19220,7 @@ msgstr "초대 마스킹" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "멤버 초대" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP 주소 승인됨" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "아일랜드" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "기울임꼴" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "이탈리아" @@ -20120,7 +19869,7 @@ msgstr "키" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "나중에" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "라트비아" @@ -20291,11 +20040,6 @@ msgstr "자세히 알아보기" msgid "Learn more about Visionary" msgstr "Visionary에 대해 자세히 알아보기" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "나가기" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "비공개 스레드 나가기" msgid "Leave silently" msgstr "알림 없이 나가기" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "커뮤니티 나가기" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "이 역할을 가진 멤버를 멤버 목록에 별도 섹션으로 표시합니다." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "리투아니아" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "불러오는 중..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "불러오는 중…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "낮음" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "룩셈부르크" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "{localizedTime}에 예정된 점검이 있습니다. 예상 소요 시간: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "{userName}님을 그룹 소유자로 지정하시겠어요? 소유자 권한을 잃게 됩니다." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "그룹 소유자로 지정" @@ -21091,38 +20830,21 @@ msgstr "그룹 소유자로 지정" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "{PRODUCT_NAME} 앱에 있는 이 코드를 확인하세요." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "보내기 전에 내용이 맞는지 확인하세요." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "인스턴스를 나만의 것으로 만들기" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "악성 링크" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "몰타" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "악성코드 유포" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "악성코드 또는 위험한 링크" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "악성코드, 계정 정보 탈취 또는 유해 파일." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "화면 또는 스트림을 공유하기 전에 비공개 세부 정보 msgid "Mask Visionary as subscription" msgstr "Visionary를 구독으로 표시" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "대량 스팸, 사기, 가짜 경품 또는 계정 남용." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "성인 콘텐츠 미디어 게이트" msgid "Mature content not allowed" msgstr "성인 콘텐츠는 허용되지 않습니다" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "성인 콘텐츠 또는 괴롭힘" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "성인 콘텐츠 또는 부적절한 연령 제한" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "성인 콘텐츠 재정의" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "성인 콘텐츠 정책 위반" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "적절한 연령 제한이 없는 성인 콘텐츠입니다." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "메시지" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "메시지 링크" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "메시지 링크" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "DM 목록의 메시지 미리보기" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "메시지가 게시되었습니다" @@ -22211,6 +21908,11 @@ msgstr "메시지 시간" msgid "Message unpinned" msgstr "메시지 고정 해제됨" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "신고하려는 메시지" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "미네소타" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "위험에 처한 미성년자, 부적절한 장소의 성인 콘텐츠, 원치 않는 행위." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "더 보기" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "더 보기" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "중첩" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "네덜란드" @@ -24099,7 +23796,7 @@ msgstr "결과 없음" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "검색 결과 없음" @@ -24858,6 +24555,16 @@ msgstr "초대받은 사람과 관리자만 이 스레드를 볼 수 있습니 msgid "Only places I can't access anymore" msgstr "더 이상 액세스할 수 없는 곳만" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "규칙을 위반했다고 솔직하게 생각하는 내용만 신고해 주시고, 같은 신고를 두 번 보내지 마세요." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "규칙을 위반했다고 솔직하게 믿는 내용만 신고해 주세요. 신고를 오용하는 것은 저희의 <0>커뮤니티 가이드라인에 위배됩니다." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "불투명도" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "{instanceName}에서 열기" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "팝업 열기" @@ -25379,11 +25084,6 @@ msgstr "시스템 설정 → 개인 정보 보호 및 보안 → 화면 녹화 msgid "Open template JSON" msgstr "템플릿 JSON 열기" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "이 커뮤니티의 차단 대화 상자를 엽니다." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "설정 열기" msgid "Opened the thread again" msgstr "스레드를 다시 열었습니다" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "새 탭에서 열립니다" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "{date}에 차단되었습니다" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "기타" @@ -25654,11 +25357,6 @@ msgstr "다른 반응…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "안전팀에서 검토 중입니다. 결정이 내려지면 DM과 이메일로 알려드릴게요." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "현재 <0>{username}님에게 소유권을 이전할 수 없습니다." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "소유권이 이전되었습니다" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "여기에 JSON 응답을 붙여넣으세요" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "메시지 링크를 붙여넣으세요." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "피싱, 사기, 악성 링크 또는 실제 피해를 유발할 수 있는 허위 주장." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "웹 검색 공급자 선택" msgid "Pick an emoji" msgstr "이모티콘 선택" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "계속하려면 옵션을 선택하세요." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "사용자 이름 뒤에 오는 4자리 숫자 선택" msgid "Pick the appearance this administrator account should start with." msgstr "이 관리자 계정에서 처음 사용할 테마를 선택하세요." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "검토할 규칙을 선택하세요." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "잠시 후 다시 이름을 변경해 주세요." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "폴란드" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "포트" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "포르투갈" @@ -26872,11 +26555,6 @@ msgstr "눌러서 반응 추가" msgid "press to remove reaction" msgstr "눌러서 반응 삭제" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "다른 사람을 사칭하거나 기만적인 AI 생성 콘텐츠를 사용하는 행위." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "<0>{targetUserTag}님이 지정된 기간 동안 메시지를 보내거나, 반응하거나, 음성 채널에 연결하는 것을 방지합니다." @@ -27078,11 +26756,6 @@ msgstr "우선 발언권" msgid "Privacy" msgstr "개인정보 보호" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "개인정보 또는 사칭" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "개인정보 설정 알림" msgid "Privacy URL" msgstr "개인정보처리방침 URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "개인정보 침해" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "개인정보 침해 또는 신상 털기" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "개인정보 침해 또는 스토킹" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "프로필 유형" msgid "Profile updated" msgstr "프로필 업데이트 완료" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "프로필, 사용자 이름 또는 아바타 위반" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "보호 대상 집단에 대한 증오 조장." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "폭력적인 극단주의 활동을 조장, 모집 또는 조정합니다." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "자해 또는 섭식 장애를 조장하거나 지시하는 내용." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "신고하려는 프로필" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "대명사: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "2단계 인증을 활성화하여 Visionary 계정을 보호하세요. {productName}을(를) 지원해 주셔서 감사합니다!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "사용자 ID 또는 사용자 태그 중 하나 이상을 입력해 주세요." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "신고하려는 사람의 사용자 ID 또는 사용자 이름을 입력하세요." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "법적 진술을 위해 본인의 법적 성명 전체를 입력해 주세요." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "라디오 버튼으로 그룹 내 옵션 중 하나를 선택할 수 있 msgid "Radio group" msgstr "라디오 그룹" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "레이드 조율" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "선물할 준비가 되셨나요?" msgid "Ready to upgrade?" msgstr "업그레이드할 준비가 되셨나요?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "사유" @@ -28291,8 +27924,8 @@ msgstr "창 크기 및 위치 기억" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName} 제거" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "{userName}님을 그룹에서 내보낼까요?" @@ -28419,8 +28052,8 @@ msgstr "즐겨찾기에서 삭제" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "그룹에서 내보내기" @@ -28458,11 +28091,6 @@ msgstr "URL 전용 GIF 즐겨찾기에서 제거" msgid "Remove icon" msgstr "아이콘 삭제" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "모든 사람에게 보이지 않도록 채널에서 삭제합니다." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "즐겨찾기에서 삭제됨" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "그룹에서 제외됨" @@ -28919,28 +28547,18 @@ msgstr "커뮤니티 신고" msgid "Report a message" msgstr "메시지 신고" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "규칙 위반을 신고하거나 연락처 및 환경설정 관리 도구를 찾아보세요." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "사용자 프로필 신고" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "커뮤니티 신고" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "신고 세부정보" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "불법 콘텐츠 신고" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "문제 신고" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "메시지 신고" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "프로필 신고" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "신고 완료" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "신고 유형" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "사용자 신고" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "신고 사용자 태그 (선택 사항)" @@ -29100,6 +28716,10 @@ msgstr "보통 수준의 모든 조건에 더해, 커뮤니티에 가입한 지 msgid "Resend" msgstr "재전송" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "재전송 ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "재전송 ({newSecondsRemaining}초)" @@ -29108,7 +28728,7 @@ msgstr "재전송 ({newSecondsRemaining}초)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "재전송 ({originalSecondsRemaining}초)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "재전송 ({resendCooldownSeconds}초)" @@ -29122,7 +28742,7 @@ msgstr "재전송 ({resendSecondsRemaining}초)" msgid "Resend ({secondsRemaining}s)" msgstr "재전송 ({secondsRemaining}초)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "코드 재전송" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "역할이 업데이트되었습니다" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "루마니아" @@ -29947,7 +29567,7 @@ msgstr "채도" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "<0>{displayName}님께 인사해 보세요. DM이 여기에서 시 msgid "Scale" msgstr "크기" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "사기, 멀웨어 또는 잘못된 정보" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "인증 앱으로 QR 코드를 스캔하세요." @@ -30855,11 +30470,6 @@ msgstr "선택" msgid "Select {accessibleName}" msgstr "{accessibleName} 선택" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "카테고리 선택" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "{permissionName} 권한이 있는 커뮤니티 또는 속해 있는 그룹 DM을 선택하세요." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "국가 선택" @@ -30911,11 +30521,6 @@ msgstr "리디렉션 URI 선택" msgid "Select a scenario to apply..." msgstr "적용할 시나리오를 선택하세요..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "위반 카테고리를 선택하세요." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "새 기기에서 로그인할 계정을 선택하세요." msgid "Select voice processing mode" msgstr "음성 처리 모드 선택" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "신고할 항목을 선택하세요." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "거주 국가를 선택하세요." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "선택…" @@ -31037,13 +30642,6 @@ msgstr "선택: {0} (최대 {1})" msgid "Selections" msgstr "선택 항목" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "자해 또는 자살" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "액션 메시지 보내기 (기울임꼴로 표시)." msgid "Send animation" msgstr "애니메이션 전송" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "다른 신고 보내기" @@ -31138,7 +30736,7 @@ msgstr "보내기 버튼" msgid "Send code" msgstr "코드 전송" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA 신고 보내기" @@ -31158,9 +30756,9 @@ msgstr "{size}까지 파일을 보내세요" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "친구 요청 보내기" @@ -31220,8 +30818,8 @@ msgstr "스레드에서 메시지 보내기" msgid "Send messages, images, GIFs and emoji" msgstr "메시지, 이미지, GIF, 이모티콘을 보내세요" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "신고 보내기" @@ -31255,7 +30853,7 @@ msgstr "이 핀을 과거로 돌려보낼까요?" msgid "Send TTS messages" msgstr "TTS 메시지 보내기" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "인증 코드 전송" @@ -31273,11 +30871,6 @@ msgstr "음성 메시지 보내기" msgid "Send:" msgstr "송신:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "악성 코드 또는 위험한 링크 전송" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "테마 공유" msgid "Share voice activity with all friends?" msgstr "모든 친구와 음성 활동을 공유하시겠어요?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "저희 팀이 평가하는 데 필요한 내용을 공유해 주세요." @@ -31709,11 +31302,6 @@ msgstr "저희 팀이 평가하는 데 필요한 내용을 공유해 주세요." msgid "Share with a friend" msgstr "친구에게 공유하기" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "커뮤니티 모더레이터와 공유합니다." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "공유된 창" msgid "Shared window audio" msgstr "공유된 창 오디오" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "개인 정보를 공유하거나, 다른 사용자를 스토킹하거나, 개인 정보 침해를 조장합니다." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "개인 정보 공유" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "슬라이더" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "슬로바키아" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "슬로베니아" @@ -32889,11 +32467,6 @@ msgstr "슬로우 모드 시뮬레이션" msgid "Slowmode time remaining" msgstr "슬로우 모드 남은 시간" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "비하 발언, 비인간적 표현, 보호 대상 집단에 대한 공격." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "스티커를 준비하는 중에 문제가 발생했습니다. 다른 파일을 시도하거나 잠시 후에 다시 시도해 주세요." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "게시하는 동안 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "메시지 사이 여백이 넉넉하고 구분이 명확한 레이아웃입니다." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "스페인" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "스팸 계정" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "스팸 분류" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "스팸 또는 사기" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "스팸 또는 사기성 커뮤니티" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "스팸, 사기 또는 피싱 계정" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "스팸, 사기 또는 피싱" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "최소화하여 시작" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "다시 시작" @@ -33752,22 +33302,26 @@ msgstr "로그인 상태 유지" msgid "Step {current} of {total}" msgstr "단계 {current}/{total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "1단계" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "2단계" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "3단계" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "4단계" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "5단계" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "공지 채널 사용을 중지하시겠어요?" msgid "Stop hiding muted channels by default?" msgstr "음소거된 채널을 기본적으로 숨기지 않을까요?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "메시지와 친구 요청을 차단합니다." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "마이크 테스트 중지" @@ -33959,11 +33508,6 @@ msgstr "Node.prototype insertBefore 및 removeChild 패치를 중지합니다. msgid "Stop ringing" msgstr "벨 울림 중지" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "커뮤니티의 콘텐츠와 멤버가 더 이상 보이지 않습니다." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "메시지를 보낼 때 :) 및 <3 같은 문자 기호를 이모티콘으로 바꿉니다" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "스웨덴" @@ -34804,11 +34348,6 @@ msgstr "메모를 추가하려면 탭하세요" msgid "tar.gz archive" msgstr "tar.gz 아카이브" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "보호 대상 특성을 이유로 한 표적 공격." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "이용약관" msgid "Terms URL" msgstr "이용약관 URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "테러 또는 폭력적 극단주의" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "태국어" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName}을(를) 안전하게 유지하는 데 도움을 주셔서 감사합니다. 최대한 빨리 신고 내용을 검토하겠습니다." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "알려 주셔서 감사합니다" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "알려 주셔서 감사합니다. 이 내용만으로는 규칙을 위반하지 않아 신고를 보내지 않았습니다." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "알려 주셔서 감사합니다. 이 내용만으로는 저희 규칙을 위반하지 않아 신고를 보내지 않았습니다. 특정인을 겨냥하거나 비하 표현을 사용했다면 다시 신고하고 “악의적이거나 유해한 콘텐츠”를 선택해 주세요." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "완료하지 못했습니다. 다시 시도하거나 취소하세요." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "유효한 색상이 아닌 것 같아요. HEX, rgb(), hsl() 또는 CSS 색상 이름을 사용해 보세요." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "유효한 URL이 아닌 것 같아요." @@ -35104,6 +34653,11 @@ msgstr "다른 기기의 {PRODUCT_NAME} 앱에서 '다른 기기에서 로그인 msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} 앱에 로그인하지 않았습니다. 이 탭을 닫을 수 있습니다." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName} 안전팀이 신고 내용을 검토합니다. 회원님이 신고했다는 사실은 밝히지 않습니다." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "제공된 redirect_uri가 이 애플리케이션에 등록되지 않았 msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "제공된 redirect_uri는 HTTP 또는 HTTPS를 사용해야 합니다." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "신고 양식이 변경되었습니다. 다시 시작해 주세요." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "이 인스턴스의 사용자 이름 태그는 이미 설정되었습니다. 더 이상 변경할 수 없습니다." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "인증 코드가 유효하지 않거나 만료되었습니다." @@ -36115,13 +35674,8 @@ msgstr "이 멤버는 더 이상 음성 채팅에 연결되어 있지 않습니 msgid "This message can only be forwarded to age-restricted channels" msgstr "이 메시지는 연령 제한 채널로만 전달할 수 있습니다." -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "이 메시지는 이미 삭제되었습니다." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "이 메시지는 이미 게시되었습니다" @@ -36279,11 +35833,6 @@ msgstr "이 스레드는 닫혔습니다. 메시지를 보내면 다시 열립 msgid "This thread is locked. Only moderators can send messages." msgstr "이 스레드는 잠겼습니다. 메시지는 관리자만 보낼 수 있습니다." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "이 사용자" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "이 사용자는 프로필을 제한했습니다. 친구가 아닌 사람에게는 일부 세부 정보가 숨겨집니다." @@ -36292,11 +35841,6 @@ msgstr "이 사용자는 프로필을 제한했습니다. 친구가 아닌 사 msgid "This user has no roles in this community." msgstr "이 사용자는 이 커뮤니티에서 역할이 없습니다." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "이 사용자는 이미 커뮤니티에서 차단되었습니다." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "이 사용자를 더 이상 찾을 수 없습니다." @@ -36465,16 +36009,6 @@ msgstr "스레드 업데이트됨" msgid "Threads" msgstr "스레드" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "위협, 다른 공간에서 따라다니기 또는 원치 않는 연락." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "위협, 괴롭힘 또는 유해 행위" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag}님을 타임아웃 처리했습니다" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "타임아웃" @@ -36787,6 +36321,11 @@ msgstr "톤 매핑" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR 이미지를 표준 범위로 톤 매핑하여 최고 밝기를 줄입니다." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "코드를 너무 많이 보냈습니다. {duration} 후에 다시 시도해 주세요." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "커뮤니티 소유권 이전" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "{userName}님에게 그룹 소유권을 이전하시겠어요?" @@ -37561,7 +37100,7 @@ msgstr "친구 요청을 보내려면 먼저 차단을 해제하세요." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "차단 해제" @@ -37607,16 +37146,6 @@ msgstr "모든 기기 소리 켜기" msgid "Undeafen yourself" msgstr "내 소리 켜기" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "미성년자 또는 아동 안전 관련 우려" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "미성년자 사용자" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "다시 켤 때까지" msgid "Unverified email" msgstr "인증되지 않은 이메일" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "원치 않는 행동 또는 부적절한 장소의 성인 콘텐츠." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "원치 않는 성적인 행동, 발언 또는 요구." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "최대 {DISCOVERY_MAX_TAGS}개의 태그로 커뮤니티를 더 쉽게 찾을 수 있습니다. 이 태그는 디스커버리 검색에 표시됩니다." @@ -38840,11 +38359,6 @@ msgstr "라이트 테마 사용" msgid "Use native title bar" msgstr "기본 제목 표시줄 사용" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "{productName}의 규칙을 명확히 위반하고 위에 해당하지 않는 경우에만 사용하세요." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "이 커뮤니티에서만 사용됩니다." msgid "User" msgstr "사용자" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "사용자가 미성년자로 보이거나, 그루밍 또는 아동 착취와 관련되어 있습니다." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "사용자 디버그" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "사용자 ID (선택 사항)" @@ -39061,12 +38570,12 @@ msgstr "사용자를 찾을 수 없습니다" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "사용자 프로필" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "사용자 프로필: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "사용자 설정" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "사용자 태그 (선택 사항)" @@ -39339,7 +38848,7 @@ msgstr "인증된 커뮤니티" msgid "Verify" msgstr "인증하기" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "코드 확인" @@ -39368,7 +38877,7 @@ msgstr "본인 인증하기" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "이메일 주소 인증" @@ -39718,7 +39227,7 @@ msgstr "코드 보기" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "커뮤니티 프로필 보기" @@ -39751,7 +39260,7 @@ msgstr "선물 보기" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "글로벌 프로필 보기" @@ -39847,26 +39356,6 @@ msgstr "스트림에 시청자 참여" msgid "Viewer leaves stream" msgstr "스트림에서 시청자 나감" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "위반 카테고리" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "위반 사항이 특정 메시지가 아닌 사용자 프로필에 있습니다." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "폭력 또는 폭력 위협" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "폭력적이거나 잔인한 콘텐츠" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "이모티콘 크기를 128x128픽셀로 조정하고 압축했지만, msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "스티커 크기를 320x320픽셀로 조정하고 압축했지만, 여전히 {fileSize}입니다. 제한은 {maxSize}입니다. 더 간단한 이미지, 더 적은 색상 또는 더 작은 원본 파일을 사용해 보세요." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "{email}(으)로 코드를 전송했습니다." @@ -40472,7 +39961,7 @@ msgstr "최대한 빨리 처리해 드릴게요. 아카이브가 준비되면 msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "이전 이메일로 복원하고, 이전 세션에서 로그아웃하며, MFA를 비활성화하고, 새 비밀번호로 계정을 안전하게 보호해 드립니다." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "회원님의 신고 진행 상황을 알려드릴 수 있도록, 확인 코드를 보내드릴게요." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "웨스트버지니아" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "어떤 종류의 규칙이 위반되었나요?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "무슨 일이 일어나고 있나요?" msgid "What's new" msgstr "새로운 기능" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "신고 사유가 무엇인가요?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "사용자 지정 임계값 날짜가 설정되지 않은 경우, <0>{readMessageHistoryPermissionLabel} 권한이 없는 멤버는 이전 메시지를 볼 수 없습니다. 메시지가 도착하는 대로 실시간으로만 볼 수 있으며, 클라이언트를 다시 시작하면 사라집니다." @@ -40832,11 +40321,6 @@ msgstr "커뮤니티 선택" msgid "Which conversations" msgstr "대화 선택" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "어떤 규칙이 위반되었나요?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "눌러서 말하기가 켜져 있는 동안에는 단축키로 마이크를 제어하므로 음소거 버튼이 비활성화됩니다." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "이 채널에서는 파일을 첨부할 수 없습니다." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "자신을 친구로 추가할 수 없습니다" @@ -41341,7 +40825,7 @@ msgstr "이 사용자에게 메시지를 보낼 수 없습니다" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "계정을 만들려면 서비스 약관에 동의해야 합니다" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "신고를 보내려면 이메일을 인증해야 합니다." @@ -41891,6 +41375,11 @@ msgstr "기존 요금제를 사용 중입니다. 현재 이 플랜의 가격은 msgid "You're sending messages too quickly" msgstr "메시지를 너무 빨리 보내고 있습니다" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "신고를 너무 자주 보내고 있습니다. 나중에 다시 시도해 주세요." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "이전 메시지를 보고 있습니다" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "그룹 DM에 허용된 인원보다 많은 사람을 추가했습니다. 몇 명을 빼고 다시 시도해 주세요." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "이미 이 메시지를 신고했습니다." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "이미 오늘 이 프로필을 신고했습니다." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "계정 및 설정은 변경되거나 삭제되지 않았습니다." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "요청하신 작업이 안전 시스템에 감지되어 완료되지 않았습니다. 오류라고 생각하시면 고객지원팀에 문의해 주세요." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "회원님의 답변" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "신청이 검토 대기 중입니다. 등록 정보를 업데이트하거나 신청을 철회할 수 있습니다." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "오디오를 재생하려면 브라우저에서 사용자 작업이 필요합니다. 음성 채팅을 활성화하려면 아래 버튼을 클릭하세요." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "변경사항이 이 채널을 구독하는 모든 커뮤니티에 적용되며, 적용되는 데 1분 정도 걸릴 수 있습니다. 게시된 각 메시지는 3번까지 빠르게 수정할 수 있으며, 그 후에는 20분마다 1번씩 수정할 수 있습니다." @@ -42311,6 +41815,11 @@ msgstr "새로운 닉네임입니다. 비워두면 초기화됩니다." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "기존 복구 키는 더 이상 작동하지 않습니다. 새 복구 키를 안전한 곳에 보관하세요." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "회원님의 선택지" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "현재 지역" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "갱신 결제에 실패했지만 <0/>은 <1>{graceDate}까지 계속 활성 상태입니다. 구독을 유지하려면 그 전에 결제 수단을 업데이트하세요." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "신고가 전송되지 않았습니다. 다시 시도해 주세요." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "다음 갱신 시 구독이 연간 결제로 전환됩니다." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "테마 CSS가 너무 커서 공유할 수 없습니다. 크기를 줄인 다음 다시 시도해 주세요." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "내 사용자 이름 (선택 사항)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index 9439ce7de..fa12461d1 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -2081,7 +2081,7 @@ msgstr "Liko {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {narys} few {nariai} many {nario} other {narių}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Jūsų kvietimo nuoroda baigs galioti po # sekundės.} few {Jūsų kvietimo nuoroda baigs galioti po # sekundžių.} other {Jūsų kvietimo nuoroda baigs galioti po # sekundžių.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Pasirinkta: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Paskyros duomenys" msgid "Account details unavailable" msgstr "Paskyros duomenys neprieinami" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Paskyra skirta šlamštui, sukčiavimui arba piktnaudžiavimui platforma." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Pridėta: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Pridėta: {createdDate} • paskutinį kartą naudota: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Papildomi komentarai (nebūtina)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Jau išpirkta" msgid "Already set to cancel" msgstr "Jau nustatyta atšaukti" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Taip pat pranešti apie šią žinutę „{productName}“ saugos komandai" @@ -4576,11 +4566,6 @@ msgstr "Metinis" msgid "Another checkbox" msgstr "Dar vienas žymimasis langelis" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Dar vienas akivaizdus taisyklių pažeidimas" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Dar vienas apvalus žymimasis langelis" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Garso įrašo įkėlimas" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austrija" @@ -5620,6 +5605,7 @@ msgstr "Šiuo metu nesu prie kompiuterio" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Šiuo metu nesu prie kompiuterio" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Atgal" @@ -5788,9 +5775,7 @@ msgstr "Atsarginiai kodai sugeneruoti iš naujo" msgid "Badge" msgstr "Ženklelis" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Užblokuoti" @@ -5819,7 +5804,7 @@ msgstr "Užblokavimo trukmė" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Užblokuokite bendruomenės narius su galimybe ištrinti jų neseniai i msgid "Ban reason" msgstr "Užblokavimo priežastis" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Užblokuoti šį naudotoją" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Pralaidumas" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Užblokuotas" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} užblokuotas bendruomenėje" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Iki datos" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgija" @@ -6031,7 +6006,7 @@ msgstr "Bitų srautas" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokuoti" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokuoti" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blokuoti {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokuoti visose bendruomenėse" msgid "Block spoiler" msgstr "Spoilerio blokas" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blokuoti šį naudotoją" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blokuoti naudotoją" msgid "Blocked" msgstr "Užblokuoti" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Užblokuota" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Integruoti vertėjai" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarija" @@ -6519,16 +6500,6 @@ msgstr "bulgarų" msgid "Bulk delete" msgstr "Masinis ištrynimas" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Patyčios, pasikartojantis nepageidaujamas bendravimas, persekiojimas ar tikslingas piktnaudžiavimas." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Patyčios, grasinimai, neapykanta, smurtas, reidai ar turinys, skatinantis žaloti save." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornija" msgid "Call" msgstr "Skambutis" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Skambučių ir grupinių pokalbių nustatymai" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Keisti reklamjuostę" msgid "Change chat embed background" msgstr "Pakeisti pokalbio įterpties foną" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Keisti el. paštą" @@ -7150,8 +7116,8 @@ msgstr "Pakeisti draugo slapyvardį" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Keisti grupės slapyvardį" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Keisti kalbą" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Keisti savo slapyvardį grupėje" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Keisti savo slapyvardį" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Keisti savininką" @@ -7283,16 +7249,6 @@ msgstr "Pakeiskite, kurį balso regioną naudoja balso kanalas." msgid "Change which voice region this channel uses." msgstr "Pakeiskite, kurį balso regioną naudoja šis kanalas." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Pakeiskite, kas gali jums skambinti ar jus pridėti." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Pakeiskite, kas gali su jumis susisiekti." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Patikrinkite gautuosius el. laiškus adresu {emailAddress} ir ieškokite msgid "Check your inbox for a verification email." msgstr "Patikrinkite savo gautuosius, ar nėra patvirtinimo el. laiško." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Peržiūrėkite savo pranešimą" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Žymimieji langeliai" @@ -7901,21 +7862,6 @@ msgstr "Šiai paskyrai atsiskaitymas yra užblokuotas. Jei reikia pagalbos, susi msgid "Checkout unavailable" msgstr "Atsiskaitymas negalimas" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Vaikų saugumo problemos" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Vaikų saugumas arba nepilnamečių išnaudojimas" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Vaikų saugumas arba suaugusiesiems skirtas turinys" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Pasirinkimai" msgid "Choices: {choiceList}" msgstr "Pasirinkimai: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Pasirinkti" @@ -8122,6 +8068,11 @@ msgstr "Pasirinkite kategoriją, kuri geriausiai apibūdina jūsų bendruomenę. msgid "Choose the premium model" msgstr "Pasirinkite „Premium“ modelį" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Pasirinkite priežastį iš naujo" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Atsiimti dovaną" msgid "Claim your account" msgstr "Užregistruokite paskyrą" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Norėdami siųsti pranešimus, užregistruokite paskyrą ir patvirtinkite el. pašto adresą." @@ -8352,12 +8303,12 @@ msgstr "Užregistruokite paskyrą, kad atsiimtumėte šią dovaną." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Norėdami siųsti draugystės užklausas, užregistruokite paskyrą." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Tvirtinkite savo paskyrą, kad galėtumėte siųsti pranešimus." @@ -8378,11 +8329,6 @@ msgstr "Užregistruokite paskyrą, kad galėtumėte pradėti 1:1 skambučius arb msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Atsiimkite dovaną, kad aktyvuotumėte {premiumProductName} prenumeratą!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Apsimetinėjimas kitu asmeniu, prekės ženklu ar organizacija." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Išvalyti paieškos lauką" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Uždaryti langą" msgid "Close popout" msgstr "Uždaryti iššokantįjį langą" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Uždaryti šį tiesioginį pokalbį" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Uždaryti į dėklą" msgid "Close window" msgstr "Uždaryti langą" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Uždarykite dabartinį tiesioginį pokalbį su „{dmDisplayName}“. Naudotojas nebus užblokuotas, o pokalbį galėsite vėliau vėl atidaryti." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Uždaryti tiesioginį pokalbį su „{displayName}“? Jį galite bet kada atidaryti iš naujo." @@ -8837,7 +8773,7 @@ msgstr "Anglies tema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kodas" @@ -8868,7 +8804,7 @@ msgstr "Kodas iš „{productName}“ programėlės" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kodas išsiųstas iš naujo" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Bendruomenės, prie kurių galite prisijungti" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Bendruomenė" @@ -9131,7 +9065,7 @@ msgstr "Išjungti garsą bendruomenėje" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Bendruomenės derinimas" @@ -9150,16 +9084,6 @@ msgstr "Bendruomenė ištrinta" msgid "Community DM" msgstr "Bendruomenės DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Bendruomenė skirta šlamštui, sukčiavimui arba piktnaudžiavimui platforma." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Bendruomenė sudaro sąlygas masiniam užsipuldinėjimui arba tiksliniam priekabiavimui." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Bendruomenės piktograma" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Bendruomenės ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Būtinas bendruomenės ID." @@ -9526,6 +9450,11 @@ msgstr "Patvirtinkite naują slaptažodį" msgid "Confirm password" msgstr "Patvirtinti slaptažodį" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Patvirtinkite pareiškimą, kad išsiųstumėte pranešimą." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Tęsti naršyklėje" msgid "Continue to checkout" msgstr "Tęsti į kasą" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Tęsti ir pranešti apie bendruomenę" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Tęsti ir pranešti apie naudotoją" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Konvertavus šį kanalą į tekstinį, bus pašalinti visi jį sekantys msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Konvertuoja gaunamą turinį į kalbą, nepriklausomai nuo to, ar jis gautas iš /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinuoja reidus, masinius puolimus ar priekabiavimą prieš asmenis ar bendruomenes." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL nukopijuotas į iškarpinę" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL nukopijuotas į iškarpinę" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopijuoti žinutės ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopijuoti žinutės nuorodą" @@ -10643,6 +10553,11 @@ msgstr "Nepavyko įkelti įrašų. Pabandykite vėliau." msgid "Couldn't load settings" msgstr "Nepavyko įkelti nuostatų" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nepavyko įkelti pranešimo formos." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nepavyko įkelti šios programos" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nepavyko apdoroti paveikslėlio" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nepavyko paskelbti šio pranešimo" @@ -10825,11 +10740,6 @@ msgstr "Nepavyko išsiųsti kvietimo" msgid "Couldn't send invite. Try again." msgstr "Nepavyko išsiųsti kvietimo. Bandykite dar kartą." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nepavyko išsiųsti. Bandykite dar kartą." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Atgalinės atskaitos laikmatis" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Gyvenamoji šalis" @@ -11301,13 +11211,8 @@ msgstr "Sukurta:" msgid "Credentials" msgstr "prisijungimo duomenys" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Patikimi grasinimai, smurtinis turinys ar smurto šlovinimas." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatija" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Nukerta garsą, tylesnį už nustatytą ribą, ir beveik nenaudoja procesoriaus." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Kipras" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "čekų" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Čekija" @@ -11965,7 +11870,7 @@ msgstr "Derinti kanalą" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Derinti bendruomenę" @@ -12151,7 +12056,6 @@ msgstr "Delaveras" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaveras" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Ištrinti temą?" msgid "Delete this invite? Can't be undone." msgstr "Ištrinti šį kvietimą? Atšaukti nebus galima." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Ištrinti šią žinutę" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Ištrinti šią žinutę? Veiksmo anuliuoti negalima." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Ištrinti šį pranešimą? Negalima atšaukti. Šis pranešimas taip pat bus pašalintas iš kiekvienos bendruomenės, sekančios šį kanalą." @@ -12461,11 +12359,6 @@ msgstr "Ištrinti savo žinutes šioje bendruomenėje?" msgid "Delete your messages in this conversation?" msgstr "Ištrinti savo žinutes šiame pokalbyje?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Ištrinta" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Uždrausta {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danija" @@ -12554,11 +12447,6 @@ msgstr "Aprašykite lipduką" msgid "Describe this media for screen readers" msgstr "Aprašykite šią mediją ekrano skaitytuvams" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Apibūdinkite, kodėl turinys yra neteisėtas" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Atskirta reklamjuostė" msgid "Detail" msgstr "Detalumas" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Išsami informacija" @@ -13315,11 +13203,6 @@ msgstr "Rodomasis vardas (pasirinktinai)" msgid "Display scaling" msgstr "Ekrano mastelis" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Platina kenkėjiškas programas, kredencialus vagiančius įrankius ar kitus žalingus failus." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM ir draugystės užklausų nustatymai" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentacija" msgid "Doesn't allow being added to group DMs" msgstr "Neleidžia pridėti prie grupės DM" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Neužblokuoja. Vėliau galėsite jį vėl atidaryti." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Paaukoti vietoj to" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Atsisiųskite šaltinio žemėlapius, kad krovimo sekos ir kūrėjo įra msgid "Download video" msgstr "Atsisiųsti vaizdo įrašą" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doksingas, paviešinta privati informacija arba persekiojimas." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doksingas, persekiojimas, apsimetinėjimas kitu asmeniu ar netinkamas profilis." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Redaguoti „{tokenLabel}“ spalvą" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Redaguoti bendruomenės profilį" @@ -14043,7 +13908,7 @@ msgstr "Redaguoti šio kanalo vaidmenų ir narių perrašymus." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Redaguoti profilį" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Redaguoti profilio vietinį laiką" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Redaguoti paskelbtą žinutę?" @@ -14191,13 +14056,13 @@ msgstr "Galite susigrąžinti pinigus iki {windowEndsOn}. Tai taip pat nedelsian #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "El. paštas" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "El. pašto adresas" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Reikalingas el. pašto adresas." @@ -14721,16 +14586,6 @@ msgstr "Pageidaujamas naujų ekrano bendrinimų kodavimo būdas." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoderio, SVC ir bitų perdavimo spartos išankstiniai nustatymai" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Skatina žalotis" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Skatina savižudybę, žalojimąsi ar valgymo sutrikimus." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Šifravimas nuo galo iki galo nepasiekiamas, nes šiame skambutyje yra n msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Šifravimas nuo galo iki galo nepasiekiamas, nes šiame balso kanale yra nepalaikomas dalyvis." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Kelia pavojų nepilnamečiams arba talpina vaikų išnaudojimo turinį." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Įveskite kodą formatu ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Įveskite tinkamą „{theOtherPlatform}“ šablono URL arba kodą." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Įveskite galiojantį el. pašto adresą." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Įveskite galiojančią žinutės nuorodą." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Įveskite {digitCount} skaitmenų kodą iš savo autentifikavimo programėlės." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Įveskite kodą prieš tęsdami." @@ -15008,7 +14858,7 @@ msgstr "Paspauskite „Enter“, kad <0><1>išsaugotumėte" msgid "Enter username" msgstr "Įveskite naudotojo vardą" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Įveskite patvirtinimo kodą" @@ -15017,6 +14867,11 @@ msgstr "Įveskite patvirtinimo kodą" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Įveskite savo el. pašto adresą ir atsiųsime jums nuorodą slaptažodžiui nustatyti iš naujo." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Įveskite savo vardą ir pavardę pagal asmens dokumentą, kad galėtumėte išsiųsti pranešimą." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Paspauskite „Escape“, kad <0><1>atšauktumėte" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estija" @@ -15412,6 +15267,16 @@ msgstr "Baigiasi {earliest}" msgid "Expires:" msgstr "Baigiasi:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Paaiškinkite problemą" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Paaiškinkite problemą, kad galėtumėte išsiųsti pranešimą." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Išorinės nuorodos gali būti pavojingos. Būkite atsargūs." msgid "Extra large" msgstr "Itin didelis" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ekstremistinė bendruomenė" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Nepavyko pašalinti pasirinktinio URL. Bandykite dar kartą." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Nepavyko iš naujo išsiųsti kodo. Bandykite dar kartą." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Nepavyko iš naujo nustatyti „Premium“ būsenos." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Nepavyko išsiųsti kodo. Bandykite dar kartą." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Nepavyko išsiųsti žinutės. Paspauskite ir palaikykite, kad pamatytumėte parinktis." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Nepavyko išsiųsti pranešimo. Bandykite dar kartą." @@ -15840,11 +15700,6 @@ msgstr "Nepavyko įkelti jaustukų, pradedant nuo {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Nepavyko įkelti jaustukų. Bandykite dar kartą." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Melagingi teiginiai, galintys sukelti realią žalą." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Raskite tobulą lipduką" msgid "Fingerprint" msgstr "Piršto atspaudas" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Baigti paskyros nustatymą" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Pirmiausia užbaikite paskyros nustatymą" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Užbaikite registraciją, kad galėtumėte siųsti draugystės užklausas." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Suomija" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Suomių" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Vardas ir pavardė" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Didesniam nei 30 FPS kadrų dažniui reikalingas {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Prancūzija" @@ -16834,10 +16689,10 @@ msgstr "Visas" msgid "Full dynamic range" msgstr "Visas dinaminis diapazonas" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Visas vardas ir pavardė" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Visas vardas ir pavardė pagal asmens dokumentą (nebūtina pranešant apie seksualinę prievartą prieš vaikus)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "vokiečių" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Vokietija" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Grįžti" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Grįžkite ir įveskite galiojantį el. pašto adresą." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Malonu matyti, {username}! Sveiki atvykę." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Graikija" @@ -17572,11 +17427,6 @@ msgstr "graikų" msgid "Grid view" msgstr "Tinklelio rodinys" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Vaikų viliojimo arba išnaudojimo turinys." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Pseudonimas" msgid "Hang out with voice, video and screen share" msgstr "Bendraukite balsu, vaizdo įrašais ir dalindamiesi ekranu" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Priekabiavimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Priekabiavimas, susijęs su suaugusiesiems skirtu turiniu" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Priekabiavimas ar patyčios" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Priekabiavimas ar persekiojimas" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Priekabiavimas ar tikslinis piktnaudžiavimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Priekabiavimas ar grasinimai" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Fizinis raktas" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Spartinamas aparatine įranga daugumoje Windows ir macOS sistemų. Patikimas senesniuose įrenginiuose." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Žalinga dezinformacija" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "kada nors pirko" msgid "Has ever purchased override" msgstr "kada nors pirko (nepaisyti)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Neapykantos kalba" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18163,6 +17971,11 @@ msgstr "Slėpti savo ekrano bendrinimą?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Slepia atsisiuntimo, atidarymo naršyklėje ir kopijavimo mygtukus vaizdeliams ir vaizdo įrašams šiame kanale." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Paslepia šio naudotojo žinutes ir neleidžia rašyti jums" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18319,7 +18132,7 @@ msgid "Hungarian" msgstr "vengrų" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Vengrija" @@ -18400,6 +18213,11 @@ msgstr "Aš esu patarimas" msgid "I changed my mind" msgstr "Persigalvojau" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Sąžiningai patvirtinu, kad šiame pranešime pateikta informacija ir teiginiai yra tikslūs ir išsamūs." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18461,11 +18279,6 @@ msgstr "Neaktyvumo nustatymai" msgid "Idle timeout" msgstr "Neaktyvumo laikas" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Jei tai susiję su nepilnamečiu, vietoj to naudokite „{childSafetyReasonName}“." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18476,45 +18289,20 @@ msgstr "Jei paskyra naudojama šiuo adresu, išsiuntėme slaptažodžio nustatym msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Jei „macOS“ paprašys uždaryti ir iš naujo atidaryti {productName}, pasirinkite Vėliau." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Jei kam nors gresia tiesioginis pavojus ir galite tai padaryti saugiai, susisiekite su vietos pagalbos tarnybomis." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Jei kam nors gresia tiesioginis pavojus, pirmiausia kreipkitės į vietines pagalbos tarnybas." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Jei kas nors liepė jums čia ką nors įklijuoti, tai sukčiavimas, kuriuo jie gali perimti jūsų „{productName}“ paskyrą." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Jei tai susiję su vaikų seksualinio išnaudojimo medžiaga (CSAM) arba nepilnamečio išnaudojimu, išsiųskite pranešimą dabar ir nesidalykite šia medžiaga dar kartą." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Jei grėsmė reali ir neišvengiama, susisiekite ir su vietos pagalbos tarnybomis." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Jei tai yra neišvengiama teroristinė grėsmė, susisiekite ir su vietos pagalbos tarnybomis." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Jei šis pranešimas yra apie konkrečią žinutę šioje bendruomenėje, geriau praneškite apie tą žinutę. Pranešimai apie žinutes mūsų saugos komandai suteikia aiškiausią kontekstą, o išsamesnė informacija komentaruose padeda peržiūrėti greičiau. Apie visą bendruomenę praneškite tik tuo atveju, jei pranešimas apie žinutę neapimtų platesnės problemos." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Jei šis pranešimas yra apie konkrečią žinutę, geriau praneškite apie tą žinutę. Pranešimai apie žinutes mūsų saugos komandai suteikia aiškiausią kontekstą, o išsamesnė informacija komentaruose padeda peržiūrėti greičiau. Apie visą naudotoją praneškite tik tuo atveju, jei ta žinutė neapima platesnės problemos." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Jei šis pranešimas yra apie konkrečias žinutes, geriau praneškite apie tinkamiausią žinutę. Pranešimai apie žinutes mūsų saugos komandai suteikia aiškiausią kontekstą, o išsamesnė informacija komentaruose padeda peržiūrėti greičiau. Apie visą naudotoją praneškite tik tuo atveju, jei pranešimas apie žinutę neapimtų platesnės problemos." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Jei manote, kad tai neteisėta, nurodykite, kokį įstatymą ir kodėl." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18601,28 +18389,6 @@ msgstr "Ignoruoti šio kanalo lėtojo režimo apribojimą." msgid "Ignore virtual" msgstr "Ignoruoti virtualius" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Neteisėta veikla" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Neteisėta veikla ar kas nors kita" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Neteisėta prekyba, nusikalstamos veikos palengvinimas arba aiškus taisyklių pažeidimas, kuris netelpa į aukščiau nurodytas kategorijas." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Neteisėta prekyba, nusikalstamos veikos palengvinimas arba neteisėta veikla." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18717,18 +18483,6 @@ msgstr "Vaizdai" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Iš iškarpinės įklijuoti vaizdai siunčiami kaip priedai, o jūs neturite leidimo pridėti failų šiame kanale." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Apsimetinėjimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Apsimetinėjimas ar apgaulinga medija" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18911,11 +18665,6 @@ msgstr "Neaktyvus" msgid "Inactive timeout" msgstr "Neaktyvumo laikas" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Netinkamas profilis" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18964,7 +18713,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Įtraukti mano dviejų veiksnių atsarginius kodus į PDF ir spausdintą kopiją" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Įveskite bendruomenės ID." @@ -19404,7 +19153,7 @@ msgid "Invite background" msgstr "Kvietimo fonas" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kvietimo kodas (nebūtina)" @@ -19472,7 +19221,7 @@ msgstr "Kvietimų maskavimas" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Kviesti narius" @@ -19651,7 +19400,7 @@ msgid "IP address authorized" msgstr "IP adresas patvirtintas" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Airija" @@ -19691,7 +19440,7 @@ msgid "Italic" msgstr "Kursyvas" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italija" @@ -20121,7 +19870,7 @@ msgstr "Klavišai" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20231,7 +19980,7 @@ msgid "Later" msgstr "Vėliau" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvija" @@ -20292,11 +20041,6 @@ msgstr "Sužinoti daugiau" msgid "Learn more about Visionary" msgstr "Sužinokite daugiau apie „Visionary“" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Palikti" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20337,11 +20081,6 @@ msgstr "Palikti privatų pokalbį" msgid "Leave silently" msgstr "Išeiti tyliai" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Palikti bendruomenę" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20800,7 +20539,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Narių sąraše rodo narius, turinčius šį vaidmenį, atskirame skyriuje." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lietuva" @@ -20894,7 +20633,7 @@ msgid "Loading..." msgstr "Įkeliama..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Įkeliama…" @@ -21024,7 +20763,7 @@ msgid "Low" msgstr "Žemas" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Liuksemburgas" @@ -21076,14 +20815,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Techninė priežiūra numatyta {localizedTime}. Numatoma trukmė: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Padaryti {userName} grupės savininku? Prarasite savininko teises." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Padaryti grupės savininku" @@ -21092,38 +20831,21 @@ msgstr "Padaryti grupės savininku" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Įsitikinkite, kad šis kodas sutampa su kodu programėlėje {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Įsitikinkite, kad viskas atrodo gerai, prieš siųsdami." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Pritaikykite instanciją sau" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Kenkėjiškos nuorodos" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Kenkėjiškos programinės įrangos platinimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Kenkėjiškos programos arba pavojingos nuorodos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Kenkėjiškos programos, prisijungimo duomenų vagystė arba žalingi failai." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21409,11 +21131,6 @@ msgstr "Paslėpti asmeninę informaciją prieš bendrinant ekraną ar transliaci msgid "Mask Visionary as subscription" msgstr "Rodyti „Visionary“ kaip prenumeratą" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Masinis šlamštas, sukčiavimas, netikri dovanų žaidimai arba piktnaudžiavimas paskyra." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21492,31 +21209,11 @@ msgstr "Brandaus turinio medijos vartai" msgid "Mature content not allowed" msgstr "Brandus turinys neleidžiamas" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Brandus turinys arba priekabiavimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Brandus turinys arba nesaugus filtravimas" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Brandaus turinio nepaisymas" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Brandaus turinio politikos pažeidimas" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Brandus turinys be tinkamo filtravimo." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21960,13 +21657,13 @@ msgstr "Žinutė" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22129,7 +21826,7 @@ msgid "message link" msgstr "nuoroda į žinutę" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Žinutės nuoroda" @@ -22168,7 +21865,7 @@ msgid "Message previews in the DM list" msgstr "Žinučių peržiūros DM sąraše" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Pranešimas paskelbtas" @@ -22212,6 +21909,11 @@ msgstr "Žinučių laikas" msgid "Message unpinned" msgstr "Žinutė atsegta" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Žinutė, apie kurią pranešate" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22423,11 +22125,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Rizika nepilnamečiams, netinkamoje vietoje esantis suaugusiesiems skirtas turinys arba nepageidaujamas elgesys." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22634,7 +22331,7 @@ msgstr "Daugiau" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Daugiau veiksmų" @@ -23360,7 +23057,7 @@ msgid "Nested" msgstr "Įdėta" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nyderlandai" @@ -24100,7 +23797,7 @@ msgstr "Nėra rezultatų" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nieko nerasta" @@ -24859,6 +24556,16 @@ msgstr "Šią temą matys tik pakviesti žmonės ir moderatoriai." msgid "Only places I can't access anymore" msgstr "Tik vietos, kurių nebegaliu pasiekti" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Praneškite tik tai, ką sąžiningai laikote taisyklių pažeidimu, ir prašome nesiųsti to paties pranešimo du kartus." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Praneškite tik tai, ką sąžiningai laikote taisyklių pažeidimu. Piktnaudžiavimas pranešimais prieštarauja mūsų <0>bendruomenės gairėms." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24928,11 +24635,9 @@ msgstr "Neskaidrumas" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25307,7 +25012,7 @@ msgid "Open on {instanceName}" msgstr "Atidaryti „{instanceName}“" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Atidaryti išskleidžiamąjį sąrašą" @@ -25380,11 +25085,6 @@ msgstr "Atidarykite „System Settings“ → „Privacy & Security“ → „Sc msgid "Open template JSON" msgstr "Atidaryti šablono JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Atidaryti užblokavimo dialogo langą šioje bendruomenėje." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25486,6 +25186,11 @@ msgstr "Atidaryti savo nustatymus" msgid "Opened the thread again" msgstr "Vėl atidaryta tema" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Atsidaro naujoje kortelėje" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25622,9 +25327,7 @@ msgstr "Iš pradžių užblokuota {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Kita" @@ -25655,11 +25358,6 @@ msgstr "Kita reakcija…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Mūsų saugos komanda peržiūri pranešimą. Kai priimsime sprendimą, atsiųsime jums tiesioginę žinutę ir el. laišką." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25756,7 +25454,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Šiuo metu nepavyko perduoti nuosavybės naudotojui <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Nuosavybė perduota" @@ -25957,7 +25655,7 @@ msgid "Paste the JSON response here" msgstr "Įklijuokite JSON atsakymą čia" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Įklijuokite žinutės nuorodą." @@ -26261,11 +25959,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Sukčiavimas, apgaulė, kenkėjiškos nuorodos ar melagingi teiginiai, galintys sukelti realią žalą." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26301,11 +25994,6 @@ msgstr "Pasirinkite žiniatinklio paieškos teikėją" msgid "Pick an emoji" msgstr "Pasirinkite jaustuką" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Pasirinkite parinktį, kad tęstumėte." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26331,11 +26019,6 @@ msgstr "Pasirinkite 4 skaitmenų skaičių po savo vardo" msgid "Pick the appearance this administrator account should start with." msgstr "Pasirinkite, kokią išvaizdą iš pradžių naudos ši administratoriaus paskyra." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Pasirinkite taisyklę, kurią norite peržiūrėti." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26608,7 +26291,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Palaukite ir bandykite pervadinti dar kartą." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Lenkija" @@ -26660,7 +26343,7 @@ msgid "Port" msgstr "Prievadas" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugalija" @@ -26873,11 +26556,6 @@ msgstr "paspauskite, kad pridėtumėte reakciją" msgid "press to remove reaction" msgstr "paspauskite, kad pašalintumėte reakciją" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Apsimetinėjimas kitu asmeniu, įskaitant apgaulingą dirbtinio intelekto sukurtą turinį." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Neleisti <0>{targetUserTag} nurodytą laiką siųsti žinučių, reaguoti ir prisijungti prie balso kanalų." @@ -27079,11 +26757,6 @@ msgstr "Prioritetinis kalbėtojas" msgid "Privacy" msgstr "Privatumas" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privatumas arba apsimetinėjimas kitu asmeniu" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27104,21 +26777,6 @@ msgstr "Privatumo nustatymų pranešimas" msgid "Privacy URL" msgstr "Privatumo URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Privatumo pažeidimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Privatumo pažeidimas arba asmens duomenų atskleidimas" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Privatumo pažeidimas arba persekiojimas" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27281,25 +26939,10 @@ msgstr "Profilio tipas" msgid "Profile updated" msgstr "Profilis atnaujintas" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Profilio, naudotojo vardo ar avataro pažeidimas" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Skatina neapykantą saugomoms grupėms." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Propaguoja, verbuoja ar koordinuoja smurtinę ekstremistinę veiklą." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Savižalos ar valgymo sutrikimų skatinimas arba nurodymai, kaip tai daryti." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profilis, apie kurį pranešate" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27330,20 +26973,15 @@ msgstr "Įvardžiai: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Apsaugokite savo „Visionary“ paskyrą įjungdami dviejų veiksnių autentifikavimą. Dėkojame, kad palaikote „{productName}“!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Pateikite bent naudotojo ID arba naudotojo žymą." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Nurodykite asmens, apie kurį pranešate, naudotojo ID arba naudotojo vardą." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Nurodykite savo vardą ir pavardę deklaracijai." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27702,13 +27340,6 @@ msgstr "Radijo mygtukai leidžia pasirinkti vieną parinktį iš grupės." msgid "Radio group" msgstr "Radijo mygtukų grupė" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Reidų koordinavimas" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27832,8 +27463,10 @@ msgstr "Pasiruošę pirkti dovaną?" msgid "Ready to upgrade?" msgstr "Pasiruošę atnaujinti?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Priežastis" @@ -28292,8 +27925,8 @@ msgstr "Prisiminti lango dydį ir padėtį" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28329,8 +27962,8 @@ msgstr "Pašalinti „{engineName}“" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Pašalinti „{userName}“ iš grupės?" @@ -28420,8 +28053,8 @@ msgstr "Pašalinti iš mėgstamiausių" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Pašalinti iš grupės" @@ -28459,11 +28092,6 @@ msgstr "Pašalinti iš mėgstamiausių GIF (tik URL)" msgid "Remove icon" msgstr "Pašalinti piktogramą" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Pašalinti ją iš kanalo visiems." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28579,7 +28207,7 @@ msgid "Removed from favorites" msgstr "Pašalinta iš mėgstamiausių" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Pašalinta iš grupės" @@ -28920,28 +28548,18 @@ msgstr "Pranešti apie bendruomenę" msgid "Report a message" msgstr "Pranešti apie žinutę" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Praneškite apie taisyklių pažeidimą arba raskite įrankius kontaktams ir nuostatoms tvarkyti." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Pranešti apie naudotojo profilį" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Pranešti apie bendruomenę" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Išsami pranešimo informacija" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Pranešti apie neteisėtą turinį" @@ -28951,30 +28569,28 @@ msgid "Report issue" msgstr "Pranešti apie problemą" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Pranešti apie žinutę" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Pranešti apie profilį" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Pranešimas išsiųstas" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Pranešimo tipas" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Pranešti apie naudotoją" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Naudotojo, apie kurį pranešama, žyma (pasirinktinai)" @@ -29101,6 +28717,10 @@ msgstr "Reikalingi visi vidutinio lygio reikalavimai ir narystė bendruomenėje msgid "Resend" msgstr "Siųsti iš naujo" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Siųsti iš naujo ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Siųsti iš naujo ({newSecondsRemaining} s)" @@ -29109,7 +28729,7 @@ msgstr "Siųsti iš naujo ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Siųsti iš naujo ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Siųsti iš naujo ({resendCooldownSeconds} s)" @@ -29123,7 +28743,7 @@ msgstr "Siųsti iš naujo ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Siųsti iš naujo ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Siųsti kodą iš naujo" @@ -29842,7 +29462,7 @@ msgid "Roles updated successfully" msgstr "Vaidmenys sėkmingai atnaujinti" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumunija" @@ -29948,7 +29568,7 @@ msgstr "Sodrumas" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30094,11 +29714,6 @@ msgstr "Pasveikinkite <0>{displayName}. Jūsų tiesioginis pokalbis prasided msgid "Scale" msgstr "Mastelis" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Sukčiavimas, kenkėjiškos programos ar dezinformacija" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Nuskaitykite QR kodą naudodami savo autentifikavimo programėlę." @@ -30856,11 +30471,6 @@ msgstr "Pasirinkti" msgid "Select {accessibleName}" msgstr "Pasirinkite „{accessibleName}“" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Pasirinkite kategoriją" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30893,7 +30503,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Pasirinkite bendruomenę, kurioje turite leidimą „{permissionName}“, arba grupės DM pokalbį, kuriam priklausote." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Pasirinkite šalį" @@ -30912,11 +30522,6 @@ msgstr "Pasirinkite nukreipimo URI" msgid "Select a scenario to apply..." msgstr "Pasirinkite scenarijų, kurį norite taikyti..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Pasirinkite pažeidimo kategoriją." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30973,17 +30578,17 @@ msgstr "Pasirinkite paskyrą, su kuria norite prisijungti naujame įrenginyje." msgid "Select voice processing mode" msgstr "Pasirinkite balso apdorojimo režimą" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Pasirinkite, apie ką norite pranešti." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Pasirinkite savo gyvenamosios vietos šalį." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Pasirinkite…" @@ -31038,13 +30643,6 @@ msgstr "Pasirinkta: {0} (daugiausia {1})" msgid "Selections" msgstr "Pasirinkimai" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Savižala ar savižudybė" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31122,7 +30720,7 @@ msgstr "Siųsti veiksmo žinutę (apgaubia kursyvu)." msgid "Send animation" msgstr "Siųsti animaciją" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Siųsti kitą pranešimą" @@ -31139,7 +30737,7 @@ msgstr "Siuntimo mygtukas" msgid "Send code" msgstr "Siųsti kodą" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Siųsti DSA pranešimą" @@ -31159,9 +30757,9 @@ msgstr "Siųskite failus iki {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Siųsti draugystės užklausą" @@ -31221,8 +30819,8 @@ msgstr "Siųsti žinutes gijose" msgid "Send messages, images, GIFs and emoji" msgstr "Siųskite žinutes, vaizdus, GIF ir jaustukus" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Siųsti pranešimą" @@ -31256,7 +30854,7 @@ msgstr "Išsiųsti šį prisegimą atgal į praeitį?" msgid "Send TTS messages" msgstr "Siųsti TTS žinutes" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Siųsti patvirtinimo kodą" @@ -31274,11 +30872,6 @@ msgstr "Siųsti balso žinutę" msgid "Send:" msgstr "Siųsti:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Kenksmingų programų ar pavojingų nuorodų siuntimas" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31702,7 +31295,7 @@ msgstr "Bendrinti temą" msgid "Share voice activity with all friends?" msgstr "Bendrinti balso aktyvumą su visais draugais?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Pateikite tai, ko mūsų komandai reikia šiam atvejui įvertinti." @@ -31710,11 +31303,6 @@ msgstr "Pateikite tai, ko mūsų komandai reikia šiam atvejui įvertinti." msgid "Share with a friend" msgstr "Bendrinti su draugu" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Bendrinti su bendruomenės moderatoriais." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31758,16 +31346,6 @@ msgstr "Bendrinamas langas" msgid "Shared window audio" msgstr "Bendrinamo lango garsas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Bendrina asmeninę informaciją, persekioja naudotojus arba koordinuoja privatumo pažeidimus." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Asmeninės informacijos bendrinimas" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32759,12 +32337,12 @@ msgid "Sliders" msgstr "Slankikliai" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakija" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovėnija" @@ -32890,11 +32468,6 @@ msgstr "Lėtojo režimo modeliavimas" msgid "Slowmode time remaining" msgstr "Lėtojo režimo likęs laikas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Įžeidūs epitetai, nužmoginanti kalba ar išpuoliai prieš saugomas grupes." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33095,7 +32668,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Nepavyko paruošti šio lipduko. Pabandykite kitą failą arba bandykite dar kartą po akimirkos." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Paskelbiant įvyko klaida. Pabandykite dar kartą po akimirkos." @@ -33303,40 +32876,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Erdvus išdėstymas, kuriame žinutės aiškiai atskirtos viena nuo kitos." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Ispanija" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Šlamšto paskyra" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Šlamšto klasifikacija" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Šlamštas arba sukčiavimas" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Šlamšto arba sukčiavimo bendruomenė" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Šlamšto, sukčiavimo ar duomenų viliojimo paskyra" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Šlamštas, sukčiavimas ar duomenų viliojimas" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33629,9 +33177,11 @@ msgstr "Pradėti sumažintą" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Pradėti iš naujo" @@ -33753,22 +33303,26 @@ msgstr "Likti prisijungus" msgid "Step {current} of {total}" msgstr "Žingsnis {current} iš {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "1 žingsnis" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "2 žingsnis" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "3 žingsnis" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "4 žingsnis" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "5 žingsnis" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33936,11 +33490,6 @@ msgstr "Nustoti būti skelbimų kanalu?" msgid "Stop hiding muted channels by default?" msgstr "Nebeslėpti nutildytų kanalų pagal numatytuosius nustatymus?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Nebegausite žinučių ir draugystės užklausų." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Sustabdyti mikrofono testą" @@ -33960,11 +33509,6 @@ msgstr "Nustoti taisyti Node.prototype insertBefore ir removeChild. Programa vė msgid "Stop ringing" msgstr "Nebeskambinti" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Nebematysite jo turinio ir narių." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34345,7 +33889,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Siunčiant žinutes pakeisti įprastas tekstines šypsenėles, tokias kaip :) ir <3, jaustukais" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Švedija" @@ -34805,11 +34349,6 @@ msgstr "Palieskite, kad pridėtumėte pastabą" msgid "tar.gz archive" msgstr "tar.gz archyvas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Taikosi į žmones dėl saugomų savybių." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34886,11 +34425,6 @@ msgstr "Paslaugų teikimo sąlygos" msgid "Terms URL" msgstr "Sąlygų URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terorizmas arba smurtinis ekstremizmas" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35031,10 +34565,25 @@ msgid "Thai" msgstr "tajų" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Dėkojame, kad padedate užtikrinti „{productName}“ saugumą. Jūsų pranešimą peržiūrėsime kuo greičiau." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Ačiū, kad atkreipėte į tai dėmesį" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Dėkojame, kad mums pranešėte. Tai savaime nepažeidžia mūsų taisyklių, todėl pranešimo nesiuntėme." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Dėkojame, kad mums pranešėte. Tai savaime nepažeidžia mūsų taisyklių, todėl pranešimo nesiuntėme. Jei tai nukreipta prieš kokį nors asmenį arba vartojami įžeidžiantys epitetai, praneškite apie tai dar kartą ir pasirinkite „Įžeidžiantis ar žalingas turinys“." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35049,7 +34598,7 @@ msgstr "Nepavyko. Pabandykite dar kartą arba atšaukite." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Panašu, kad tai nėra tinkama spalva. Bandykite šešioliktainį kodą, rgb(), hsl() arba CSS spalvos pavadinimą." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Atrodo, tai nėra tinkamas URL." @@ -35105,6 +34654,11 @@ msgstr "„{PRODUCT_NAME}“ programa jūsų kitame įrenginyje rodoma skiltyje msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "„{PRODUCT_NAME}“ programa nebuvo prisijungta. Galite uždaryti šią skirtuką." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "„{productName}“ saugos komanda peržiūrės jūsų pranešimą. Mes neatskleisime, kad jį pateikėte jūs." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35309,6 +34863,11 @@ msgstr "Pateiktas „redirect_uri“ neužregistruotas šiai programai." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Pateiktas „redirect_uri“ turi naudoti HTTP arba HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Pranešimo forma pasikeitė. Pradėkite iš naujo." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35360,7 +34919,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Šioje instancijoje vartotojo vardų žymos jau nustatytos. Jų nebegalima pakeisti." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Patvirtinimo kodas neteisingas arba jo galiojimo laikas baigėsi." @@ -36116,13 +35675,8 @@ msgstr "Šis narys nebėra prisijungęs prie balso pokalbio." msgid "This message can only be forwarded to age-restricted channels" msgstr "Šią žinutę galima persiųsti tik į amžiaus apribojimų turinčius kanalus" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Ši žinutė jau ištrinta." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Ši žinutė jau buvo paskelbta" @@ -36280,11 +35834,6 @@ msgstr "Ši tema uždaryta. Atsiųskite žinutę, kad ją vėl atidarytumėte." msgid "This thread is locked. Only moderators can send messages." msgstr "Ši tema užrakinta. Tik moderatoriai gali siųsti žinutes." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "šis naudotojas" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Šis naudotojas apribojo savo profilį. Dalis informacijos nematoma žmonėms, kurie nėra jo draugai." @@ -36293,11 +35842,6 @@ msgstr "Šis naudotojas apribojo savo profilį. Dalis informacijos nematoma žmo msgid "This user has no roles in this community." msgstr "Šis naudotojas neturi vaidmenų šioje bendruomenėje." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Šis naudotojas jau užblokuotas bendruomenėje." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Šis naudotojas nebepasiekiamas." @@ -36466,16 +36010,6 @@ msgstr "Sriegis atnaujintas" msgid "Threads" msgstr "Gijos" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Grasinimai, persekiojimas įvairiose erdvėse ar nepageidaujamas bendravimas." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Grasinimai, priekabiavimas ar žala" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36571,7 +36105,7 @@ msgstr "Laikinai apribotas {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Laikinai apriboti" @@ -36788,6 +36322,11 @@ msgstr "Tonas" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tonuoti HDR vaizdus į standartinį diapazoną, sumažinant didžiausią ryškumą." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Išsiųsta per daug kodų. Palaukite {duration} ir bandykite dar kartą." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36861,7 +36400,7 @@ msgid "Transfer community ownership" msgstr "Perduoti bendruomenės nuosavybės teises" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Perduoti grupės nuosavybę naudotojui „{userName}“?" @@ -37562,7 +37101,7 @@ msgstr "Pirmiausia atblokuokite juos, kad galėtumėte išsiųsti draugystės u #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Atblokuoti naudotoją" @@ -37608,16 +37147,6 @@ msgstr "Įjungti garsą visuose įrenginiuose" msgid "Undeafen yourself" msgstr "Įjungti garsą sau" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Nepilnametis naudotojas arba vaikų saugumo problema" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Nepilnametis naudotojas" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38269,16 +37798,6 @@ msgstr "Kol vėl įjungsiu" msgid "Unverified email" msgstr "Nepatvirtintas el. paštas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Nepageidaujamas elgesys arba brandus turinys netinkamoje vietoje." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Nepageidaujamas brandaus pobūdžio elgesys, komentarai ar prašymai." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Iki {DISCOVERY_MAX_TAGS} žymų padeda žmonėms rasti jūsų bendruomenę. Jos rodomos Atradimo paieškoje." @@ -38841,11 +38360,6 @@ msgstr "Naudoti šviesiąją temą" msgid "Use native title bar" msgstr "Naudoti sistemos pavadinimo juostą" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Naudokite tik tuo atveju, jei tai aiškiai pažeidžia {productName} taisykles ir netinka aukščiau nurodytiems atvejams." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39001,11 +38515,6 @@ msgstr "Naudojama tik šioje bendruomenėje." msgid "User" msgstr "Naudotojas" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Naudotojas atrodo nepilnametis arba yra susijęs su viliojimu ar vaikų išnaudojimu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39022,7 +38531,7 @@ msgid "User debug" msgstr "Naudotojo derinimas" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Naudotojo ID (pasirinktinai)" @@ -39062,12 +38571,12 @@ msgstr "Naudotojas nerastas" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Naudotojo profilis" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Naudotojo profilis: {tag}" @@ -39082,7 +38591,7 @@ msgid "User settings" msgstr "Naudotojo nustatymai" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Naudotojo žyma (pasirinktinai)" @@ -39340,7 +38849,7 @@ msgstr "Patvirtinta bendruomenė" msgid "Verify" msgstr "Patvirtinti" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Patvirtinti kodą" @@ -39369,7 +38878,7 @@ msgstr "Patvirtinkite, kad tai jūs" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Patvirtinkite savo el. paštą" @@ -39719,7 +39228,7 @@ msgstr "Peržiūrėti kodus" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Peržiūrėti bendruomenės profilį" @@ -39752,7 +39261,7 @@ msgstr "Peržiūrėti dovanas" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Peržiūrėti visuotinį profilį" @@ -39848,26 +39357,6 @@ msgstr "Žiūrintysis prisijungia prie srauto" msgid "Viewer leaves stream" msgstr "Žiūrintysis palieka srautą" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Pažeidimo kategorija" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Pažeidimas yra naudotojo profilyje, o ne konkrečioje žinutėje." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Smurtas ar smurtiniai grasinimai" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Smurtinis arba grafinis turinys" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40422,7 +39911,7 @@ msgstr "Pakeitėme šio jaustuko dydį ir suglaudinome jį iki 128x128 pikselių msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Šį lipduką pakeitėme ir suglaudinome iki 320x320 pikselių, bet jo dydis vis dar yra {fileSize}. Limitas yra {maxSize}. Pabandykite paprastesnį paveikslėlį, mažiau spalvų arba mažesnį šaltinio failą." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Išsiuntėme kodą į {email}." @@ -40473,7 +39962,7 @@ msgstr "Apdorosime tai kuo greičiau. Gausite el. laišką, kai archyvas bus par msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Atkursime jūsų ankstesnį el. paštą, atsijungsime nuo senų sesijų, išjungsime dvigubą autentifikaciją ir apsaugosime jūsų paskyrą nauju slaptažodžiu." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Atsiųsime trumpą kodą, kad patvirtintume, jog galite gauti naujienas apie šį pranešimą." @@ -40715,11 +40204,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Vakarų Virdžinija" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Kokia taisyklė buvo pažeista?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40756,6 +40240,11 @@ msgstr "Kas naujo?" msgid "What's new" msgstr "Kas naujo" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Kokia jūsų pranešimo priežastis?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Kai nenustatyta pasirinktinė ribinė data, nariai, neturintys <0>{readMessageHistoryPermissionLabel} leidimo, negali peržiūrėti jokių ankstesnių žinučių. Jie matys žinutes tik realiuoju laiku, kai jos ateis, ir žinutės dings, kai jie iš naujo paleis programą." @@ -40833,11 +40322,6 @@ msgstr "Kurios bendruomenės" msgid "Which conversations" msgstr "Kurie pokalbiai" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Kokia taisyklė buvo pažeista?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Kai įjungtas kalbėjimas paspaudus, mikrofoną valdo jūsų spartusis klavišas, todėl nutildymo mygtukas išjungtas." @@ -41278,7 +40762,7 @@ msgid "You can't attach files in this channel." msgstr "Negalite pridėti failų šiame kanale." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Negalite draugauti su savimi" @@ -41342,7 +40826,7 @@ msgstr "Negalite siųsti žinučių šiam naudotojui" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41607,7 +41091,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Norėdami sukurti paskyrą, turite sutikti su paslaugų teikimo sąlygomis" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Prieš siųsdami pranešimą turite patvirtinti savo el. pašto adresą." @@ -41892,6 +41376,11 @@ msgstr "Jums taikomas senas tarifas. Dabartinė šio plano kaina yra {currentSub msgid "You're sending messages too quickly" msgstr "Žinutes siunčiate per greitai" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Siunčiate pranešimus per greitai. Bandykite vėliau." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41916,6 +41405,16 @@ msgstr "Peržiūrite senesnes žinutes" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Pridėjote daugiau žmonių, nei leidžia grupės DM. Pašalinkite kelis ir bandykite dar kartą." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Jau pranešėte apie šią žinutę." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Jau šiandien pranešėte apie šį profilį." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42080,6 +41579,11 @@ msgstr "Jūsų paskyros ir nustatymai nebuvo pakeisti ar ištrinti." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Jūsų veiksmas negalėjo būti atliktas, nes jį pažymėjo mūsų saugos sistemos. Jei manote, kad tai klaida, susisiekite su palaikymo komanda." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Jūsų atsakymai" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Jūsų paraiška laukia peržiūros. Vis dar galite atnaujinti savo įrašo informaciją arba atšaukti paraišką." @@ -42090,7 +41594,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Jūsų naršyklė reikalauja naudotojo veiksmo, kad būtų galima paleisti garsą. Spustelėkite žemiau esantį mygtuką, kad įjungtumėte balso pokalbį." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Jūsų pakeitimai pasieks visas šį kanalą sekančias bendruomenes, tai gali užtrukti minutę. Kiekvienas paskelbtas pranešimas leidžia atlikti 3 greitus pakeitimus, vėliau po 1 kas 20 minučių." @@ -42312,6 +41816,11 @@ msgstr "Jūsų naujas slapyvardis arba palikite tuščią, kad jį atstatytumėt msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Jūsų senasis atkūrimo rinkinys nebeveikia. Šį naująjį laikykite saugioje vietoje." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Jūsų galimybės" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42371,6 +41880,11 @@ msgstr "jūsų regionas" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Prenumeratos atnaujinimo mokėjimas nepavyko, bet <0/> liks aktyvios iki <1>{graceDate}. Iki tol atnaujinkite mokėjimo būdą, kad išsaugotumėte prenumeratą." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Nepavyko išsiųsti jūsų pranešimo. Bandykite dar kartą." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42465,11 +41979,6 @@ msgstr "Jūsų prenumerata bus pakeista į metinį atsiskaitymą per kitą atnau msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Jūsų temos CSS per didelis, kad būtų galima bendrinti. Apkarpykite jį ir bandykite dar kartą." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Jūsų naudotojo vardas (nebūtina)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 05a5f2702..52fae03e0 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -2081,7 +2081,7 @@ msgstr "Nog {remainingSlotCount} beschikbaar" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {lid} other {leden}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Je uitnodigingslink verloopt over # seconde.} other {Je uitnodigingslink verloopt over # seconden.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} geselecteerd" @@ -2957,11 +2957,6 @@ msgstr "Accountgegevens" msgid "Account details unavailable" msgstr "Accountgegevens niet beschikbaar" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Dit account is bedoeld om te spammen, op te lichten of misbruik te maken van het platform." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Toegevoegd: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Toegevoegd: {createdDate} • voor het laatst gebruikt: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Extra opmerkingen (optioneel)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Al ingewisseld" msgid "Already set to cancel" msgstr "Al opgezegd" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Meld dit bericht ook bij het veiligheidsteam van {productName}" @@ -4576,11 +4566,6 @@ msgstr "Jaarlijks" msgid "Another checkbox" msgstr "Nog een selectievakje" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Nog een duidelijke regelovertreding" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Nog een rond selectievakje" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Audio uploaden" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Oostenrijk" @@ -5620,6 +5605,7 @@ msgstr "Nu afwezig" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Nu afwezig" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Terug" @@ -5788,9 +5775,7 @@ msgstr "Back-upcodes opnieuw gegenereerd" msgid "Badge" msgstr "Badge" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Verbannen" @@ -5819,7 +5804,7 @@ msgstr "Duur van verbanning" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Leden uit de community verbannen, met de mogelijkheid om hun recente ber msgid "Ban reason" msgstr "Reden van verbanning" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Deze gebruiker verbannen" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandbreedte" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Verbannen" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} is verbannen uit de community" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Vóór datum" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "België" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokkeren" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokkeren" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name} blokkeren" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokkeren voor alle communities" msgid "Block spoiler" msgstr "Spoilerblok" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Deze gebruiker blokkeren" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Gebruiker blokkeren" msgid "Blocked" msgstr "Geblokkeerd" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Geblokkeerd" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Ingebouwde vertalers" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarije" @@ -6519,16 +6500,6 @@ msgstr "Bulgaars" msgid "Bulk delete" msgstr "Meerdere tegelijk verwijderen" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Pesten, herhaaldelijk ongewenst contact, stalken of gerichte intimidatie." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Pesten, bedreigingen, haat, geweld, raids of inhoud die zelfbeschadiging aanmoedigt." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Californië" msgid "Call" msgstr "Bellen" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Instellingen voor gesprekken en groepschats" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Banner wijzigen" msgid "Change chat embed background" msgstr "Achtergrond voor chat-embed wijzigen" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "E-mailadres wijzigen" @@ -7150,8 +7116,8 @@ msgstr "Bijnaam van vriend wijzigen" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Groepsbijnaam wijzigen" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Taal wijzigen" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Mijn groepsbijnaam wijzigen" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Eigen bijnaam wijzigen" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Eigenaar wijzigen" @@ -7283,16 +7249,6 @@ msgstr "Wijzig de spraakregio die een spraakkanaal gebruikt." msgid "Change which voice region this channel uses." msgstr "Wijzig de spraakregio die dit kanaal gebruikt." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Wijzig wie jou kan bellen of toevoegen." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Wijzig wie jou kan bereiken." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Controleer je inbox op {emailAddress} voor de autorisatielink." msgid "Check your inbox for a verification email." msgstr "Controleer je inbox voor een verificatie-e-mail." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Controleer je melding" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Selectievakjes" @@ -7901,21 +7862,6 @@ msgstr "Afrekenen is geblokkeerd voor dit account. Neem contact op met {supportE msgid "Checkout unavailable" msgstr "Afrekenen niet beschikbaar" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Bezorgdheid over kinderveiligheid" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Kinderveiligheid of uitbuiting van minderjarigen" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Kinderveiligheid of inhoud voor volwassenen" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Keuzes" msgid "Choices: {choiceList}" msgstr "Keuzes: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Kiezen" @@ -8122,6 +8068,11 @@ msgstr "Kies de categorie die het beste bij je community past. Je kunt dit op el msgid "Choose the premium model" msgstr "Kies het premiummodel" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Kies de reden opnieuw" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Cadeau inwisselen" msgid "Claim your account" msgstr "Voltooi de registratie van je account" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Voltooi de registratie van je account en verifieer je e-mailadres om meldingen te versturen." @@ -8352,12 +8303,12 @@ msgstr "Voltooi de registratie van je account om dit cadeau in te wisselen." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Voltooi de registratie van je account om vriendschapsverzoeken te versturen." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Claim je account om meldingen te versturen." @@ -8378,11 +8329,6 @@ msgstr "Voltooi de registratie van je account om een-op-eengesprekken te starten msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Wissel je cadeau in om je {premiumProductName}-abonnement te activeren!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Zich voordoen als een andere persoon, merk of organisatie." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Zoekopdracht wissen" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Dialoogvenster sluiten" msgid "Close popout" msgstr "Pop-out sluiten" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Deze DM sluiten" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Sluiten naar systeemvak" msgid "Close window" msgstr "Venster sluiten" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Sluit je huidige DM met {dmDisplayName}. Dit blokkeert de gebruiker niet en je kunt de DM later opnieuw openen." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Je DM met {displayName} sluiten? Je kunt deze op elk moment opnieuw openen." @@ -8837,7 +8773,7 @@ msgstr "Kolenzwart thema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Code" @@ -8868,7 +8804,7 @@ msgstr "Code van de {productName}-app" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Code opnieuw verzonden" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Communities waar je lid van kunt worden" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9131,7 +9065,7 @@ msgstr "Geluid uitschakelen in community" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Community debuggen" @@ -9150,16 +9084,6 @@ msgstr "Community verwijderd" msgid "Community DM" msgstr "Community-DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "De community is opgezet om te spammen, op te lichten of het platform te misbruiken." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "De community faciliteert groepsgewijze aanvallen of gerichte intimidatie." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Communitypictogram" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Community-ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Community-ID is verplicht." @@ -9526,6 +9450,11 @@ msgstr "Bevestig nieuw wachtwoord" msgid "Confirm password" msgstr "Wachtwoord bevestigen" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Bevestig de verklaring om de melding te verzenden." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Doorgaan in je browser" msgid "Continue to checkout" msgstr "Doorgaan naar afrekenen" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Doorgaan met community melden" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Doorgaan met gebruiker melden" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Het omzetten van dit kanaal naar een tekstkanaal verwijdert elk kanaal d msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Zet binnenkomende inhoud om in spraak, ongeacht of deze met /tts is verstuurd." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coördineert raids, georganiseerde verstoringsacties of intimidatie tegen personen of communities." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL gekopieerd naar klembord" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL gekopieerd naar klembord" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Bericht-ID kopiëren" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Link van bericht kopiëren" @@ -10643,6 +10553,11 @@ msgstr "Kon posts niet laden. Probeer het later opnieuw." msgid "Couldn't load settings" msgstr "Instellingen konden niet worden geladen" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Kon het meldingsformulier niet laden." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Deze applicatie kon niet worden geladen" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Afbeelding kon niet worden verwerkt" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Kon dit bericht niet publiceren" @@ -10825,11 +10740,6 @@ msgstr "Uitnodiging kon niet worden verzonden" msgid "Couldn't send invite. Try again." msgstr "Kon uitnodiging niet versturen. Probeer opnieuw." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Kon het niet verzenden. Probeer opnieuw." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Afteltimer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Land van verblijf" @@ -11301,13 +11211,8 @@ msgstr "Gemaakt:" msgid "Credentials" msgstr "Inloggegevens" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Geloofwaardige bedreigingen, expliciet geweld of verheerlijking van geweld." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatië" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Dempt geluid onder een volumedrempel met minimaal CPU-gebruik." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cyprus" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tsjechisch" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tsjechië" @@ -11965,7 +11870,7 @@ msgstr "Kanaal debuggen" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Community debuggen" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Thema verwijderen?" msgid "Delete this invite? Can't be undone." msgstr "Deze uitnodiging verwijderen? Kan niet ongedaan worden gemaakt." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Dit bericht verwijderen" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Dit bericht verwijderen? Kan niet ongedaan worden gemaakt." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Bericht verwijderen? Dit kan niet ongedaan worden gemaakt. Dit bericht wordt ook verwijderd uit elke community die dit kanaal volgt." @@ -12461,11 +12359,6 @@ msgstr "Je berichten in deze community verwijderen?" msgid "Delete your messages in this conversation?" msgstr "Je berichten in dit gesprek verwijderen?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Verwijderd" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions} geweigerd" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Denemarken" @@ -12554,11 +12447,6 @@ msgstr "Beschrijf de sticker" msgid "Describe this media for screen readers" msgstr "Beschrijf dit media-item voor schermlezers" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Beschrijf waarom de inhoud illegaal is" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Losgekoppelde banner" msgid "Detail" msgstr "Detail" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Details" @@ -13315,11 +13203,6 @@ msgstr "Weergavenaam (optioneel)" msgid "Display scaling" msgstr "Weergaveschaal" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Verspreidt malware, hulpmiddelen om inloggegevens te stelen of andere schadelijke bestanden." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Instellingen voor DM's en vriendschapsverzoeken" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentatie" msgid "Doesn't allow being added to group DMs" msgstr "Staat toevoegen aan groeps-DM's niet toe" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Blokkeert niet. Je kunt later opnieuw openen." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Doneer in plaats daarvan" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Download source maps zodat stack traces en de developer tools verwijzen msgid "Download video" msgstr "Video downloaden" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxing, openbaar maken van privé-informatie of stalken." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxing, stalken, je voordoen als iemand anders of een ongepast profiel." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Kleur bewerken voor {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Communityprofiel bewerken" @@ -14043,7 +13908,7 @@ msgstr "Aangepaste toegangsrechten voor rollen en leden in dit kanaal bewerken." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Profiel bewerken" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Lokale tijd profiel bewerken" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Gepubliceerde bericht bewerken?" @@ -14191,13 +14056,13 @@ msgstr "Komt in aanmerking voor een terugbetaling tot {windowEndsOn}. Hiermee wo #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-mailadres" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-mailadres is verplicht." @@ -14721,16 +14586,6 @@ msgstr "Encodervoorkeur voor nieuwe schermdeelsessies." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder-, SVC- en bitrate-presets" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Zet aan tot zelfbeschadiging" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Moedigt zelfmoord, zelfbeschadiging of eetstoornissen aan." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "End-to-end-versleuteling is niet beschikbaar omdat een deelnemer in dit msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "End-to-end-versleuteling is niet beschikbaar omdat een deelnemer in dit spraakkanaal deze niet ondersteunt." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Brengt minderjarigen in gevaar of bevat materiaal waarin kinderen worden uitgebuit." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Voer een code in met de indeling ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Voer een geldige sjabloon-URL of -code van {theOtherPlatform} in." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Voer een geldig e-mailadres in." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Voer een geldige berichtlink in." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Voer de code van {digitCount} cijfers uit je authenticator-app in." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Voer de code in voordat je verdergaat." @@ -15008,7 +14858,7 @@ msgstr "Enter om <0><1>op te slaan" msgid "Enter username" msgstr "Gebruikersnaam invoeren" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Voer verificatiecode in" @@ -15017,6 +14867,11 @@ msgstr "Voer verificatiecode in" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Voer je e-mailadres in en we sturen je een link om je wachtwoord opnieuw in te stellen." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Vul je volledige officiële naam in om de melding te verzenden." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc om te <0><1>annuleren" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estland" @@ -15412,6 +15267,16 @@ msgstr "Verloopt op {earliest}" msgid "Expires:" msgstr "Verloopt:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Leg het probleem uit" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Leg het probleem uit om de melding te verzenden." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Externe links kunnen gevaarlijk zijn. Wees voorzichtig." msgid "Extra large" msgstr "Extra groot" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremistische community" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Kon de aangepaste URL niet verwijderen. Probeer het opnieuw." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Code opnieuw verzenden mislukt. Probeer het opnieuw." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Premiumstatus opnieuw instellen mislukt." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Verzenden van code mislukt. Probeer het opnieuw." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Verzenden mislukt. Houd ingedrukt voor opties." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Melding verzenden mislukt. Probeer het opnieuw." @@ -15840,11 +15700,6 @@ msgstr "Uploaden van emoji's vanaf {startLabel} mislukt: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Uploaden van emoji's mislukt. Probeer het opnieuw." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Onjuiste beweringen die waarschijnlijk schade in de echte wereld veroorzaken." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Vind de perfecte sticker" msgid "Fingerprint" msgstr "Vingerafdruk" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Accountregistratie voltooien" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Voltooi eerst de registratie van je account" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Voltooi je registratie om vriendschapsverzoeken te versturen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Fins" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Voor- en achternaam" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Framesnelheden boven 30 FPS vereisen {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Frankrijk" @@ -16834,10 +16689,10 @@ msgstr "Volledig" msgid "Full dynamic range" msgstr "Volledig dynamisch bereik" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Volledige officiële naam" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Volledige officiële naam (optioneel voor meldingen van seksueel misbruik van kinderen)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Duits" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Duitsland" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Terug" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Ga terug en voer een geldig e-mailadres in." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Leuk je te zien, {username}! Welkom." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Griekenland" @@ -17572,11 +17427,6 @@ msgstr "Grieks" msgid "Grid view" msgstr "Rasterweergave" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming of inhoud met kinderuitbuiting." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Gebruikersnaam" msgid "Hang out with voice, video and screen share" msgstr "Blijf hangen met spraak, video en scherm delen" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Intimidatie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Intimidatie met inhoud voor volwassenen" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Intimidatie of pesten" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Intimidatie of stalking" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Intimidatie of gerichte pesterijen" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Intimidatie of bedreigingen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Hardwarebeveiligingssleutel" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Hardwareversneld op de meeste Windows- en macOS-systemen. Betrouwbaar voor oudere apparaten." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Schadelijke onjuiste informatie" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Heeft ooit een aankoop gedaan" msgid "Has ever purchased override" msgstr "Status \"Ooit iets gekocht\" forceren" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Haatzaaierij" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Je eigen schermdeling verbergen?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Verbergt de knoppen voor downloaden, openen in browser en kopiëren voor afbeeldingen en video's in dit kanaal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Verbergt de berichten van deze persoon en voorkomt dat diegene je berichten stuurt" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Hongaars" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hongarije" @@ -18399,6 +18212,11 @@ msgstr "Ik ben een tooltip" msgid "I changed my mind" msgstr "Ik heb me bedacht" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Ik verklaar te goeder trouw dat de informatie en de beweringen in deze melding juist en volledig zijn." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Inactiviteitsinstellingen" msgid "Idle timeout" msgstr "Time-out bij inactiviteit" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Als er een minderjarige bij betrokken is, gebruik dan in plaats daarvan \"{childSafetyReasonName}\"." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Als een account dat adres gebruikt, hebben we instructies voor het opnie msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Als macOS vraagt om {productName} af te sluiten en opnieuw te openen, kies dan Later." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Als iemand mogelijk direct gevaar loopt, neem dan contact op met de lokale hulpdiensten als je dat veilig kunt doen." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Als iemand in direct gevaar is, neem dan eerst contact op met de lokale hulpdiensten." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Als iemand je heeft gevraagd om hier iets te plakken, is dat oplichting waarmee die persoon toegang tot je {productName}-account kan krijgen." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Als dit CSAM of uitbuiting van een minderjarige betreft, verstuur de melding dan nu en deel het materiaal niet opnieuw." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Als dit een geloofwaardige, directe dreiging is, neem dan ook contact op met de lokale hulpdiensten." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Als dit een directe terroristische dreiging is, neem dan ook contact op met de lokale hulpdiensten." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Als deze melding over een specifiek bericht in deze community gaat, meld dan dat bericht. Meldingen over berichten geven ons veiligheidsteam de duidelijkste context. Extra details in de opmerkingen kunnen ons helpen de melding sneller te beoordelen. Meld de community als geheel alleen als het melden van één bericht het bredere probleem niet voldoende duidelijk zou maken." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Als deze melding over een specifiek bericht gaat, meld dan dat bericht. Meldingen over berichten geven ons veiligheidsteam de duidelijkste context. Extra details in de opmerkingen kunnen ons helpen de melding sneller te beoordelen. Meld de gebruiker zelf alleen als dat bericht het bredere probleem niet voldoende duidelijk maakt." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Als deze melding over specifieke berichten gaat, meld dan het meest relevante bericht. Meldingen over berichten geven ons veiligheidsteam de duidelijkste context. Extra details in de opmerkingen kunnen ons helpen de melding sneller te beoordelen. Meld de gebruiker zelf alleen als het melden van één bericht het bredere probleem niet voldoende duidelijk zou maken." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Als je denkt dat het illegaal is, geef dan aan welke wet en waarom." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Negeer de wachttijd van slowmodus in dit kanaal." msgid "Ignore virtual" msgstr "Virtuele audio negeren" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Illegale activiteit" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Illegale activiteit of iets anders" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Illegale verkoop, het faciliteren van criminaliteit of een duidelijke regelovertreding die niet onder de bovenstaande categorieën valt." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Illegale verkoop, het faciliteren van criminaliteit of onwettige activiteiten." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Afbeeldingen" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Afbeeldingen die je vanuit je klembord plakt, worden als bijlagen verzonden. Je hebt geen toestemming om bestanden bij te voegen in dit kanaal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Zich voordoen als iemand anders" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Zich voordoen als iemand anders of misleidende media" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactief" msgid "Inactive timeout" msgstr "Inactiviteitstime-out" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Ongepast profiel" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Voeg mijn tweefactorback-upcodes toe aan de PDF en de afdruk" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Voer de community-ID in." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Achtergrond van uitnodiging" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Uitnodigingscode (optioneel)" @@ -19471,7 +19220,7 @@ msgstr "Uitnodigingen maskeren" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Leden uitnodigen" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-adres geautoriseerd" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ierland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Cursief" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italië" @@ -20120,7 +19869,7 @@ msgstr "Toetsen" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Later" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letland" @@ -20291,11 +20040,6 @@ msgstr "Meer informatie" msgid "Learn more about Visionary" msgstr "Meer informatie over Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Verlaten" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Privéthread verlaten" msgid "Leave silently" msgstr "Stil verlaten" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Community verlaten" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Toont leden met deze rol in een eigen sectie in de ledenlijst." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litouwen" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Laden..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Laden…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Laag" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Onderhoud gepland voor {localizedTime}. Verwachte duur: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Wil je {userName} de groepseigenaar maken? Je verliest dan je eigenaarsrechten." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Groepseigenaar maken" @@ -21091,38 +20830,21 @@ msgstr "Groepseigenaar maken" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Zorg ervoor dat deze code overeenkomt met die in de {PRODUCT_NAME} app." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Controleer of dit klopt voordat je het verstuurt." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Maak de instantie helemaal van jou" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Kwaadaardige links" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Malwaredistributie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware of gevaarlijke links" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, diefstal van inloggegevens of schadelijke bestanden." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskeer privégegevens voordat je je scherm of stream deelt." msgid "Mask Visionary as subscription" msgstr "Visionary weergeven als abonnement" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massale spam, fraude, neppe winacties of misbruik van accounts." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Toegangscontrole voor media voor volwassenen" msgid "Mature content not allowed" msgstr "Inhoud voor volwassenen niet toegestaan" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Inhoud voor volwassenen of intimidatie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Inhoud voor volwassenen of onveilige toegangscontrole" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Afwijkende instelling voor inhoud voor volwassenen" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Overtreding van beleid voor inhoud voor volwassenen" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Inhoud voor volwassenen zonder de juiste toegangscontrole." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Bericht" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "berichtlink" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Berichtlink" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Berichtvoorbeelden in de DM-lijst" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Bericht gepubliceerd" @@ -22211,6 +21908,11 @@ msgstr "Tijdstip van bericht" msgid "Message unpinned" msgstr "Bericht niet meer vastgezet" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Bericht dat je meldt" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minderjarigen in gevaar, inhoud voor volwassenen op de verkeerde plek of ongewenst gedrag." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Meer" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Meer opties" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Genest" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nederland" @@ -24099,7 +23796,7 @@ msgstr "Geen resultaten" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Geen resultaten gevonden" @@ -24858,6 +24555,16 @@ msgstr "Alleen mensen die je uitnodigt en moderators kunnen dit topic zien." msgid "Only places I can't access anymore" msgstr "Alleen plaatsen waar ik geen toegang meer toe heb" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Meld alleen iets waarvan je oprecht denkt dat het de regels overtreedt, en stuur niet twee keer dezelfde melding." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Meld alleen iets waarvan je oprecht denkt dat het de regels overtreedt. Misbruik van meldingen gaat in tegen onze <0>communityrichtlijnen." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Dekking" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Openen op {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Keuzelijst openen" @@ -25379,11 +25084,6 @@ msgstr "Open Systeeminstellingen → Privacy en beveiliging → Schermopname en msgid "Open template JSON" msgstr "Sjabloon-JSON openen" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Open het dialoogvenster om iemand uit deze community te verbannen." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Open je instellingen" msgid "Opened the thread again" msgstr "De thread opnieuw geopend" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Opent in een nieuw tabblad" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Oorspronkelijk verbannen op {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Overig" @@ -25654,11 +25357,6 @@ msgstr "Andere reactie…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Ons veiligheidsteam bekijkt het. We sturen je een DM en e-mail zodra we een besluit hebben genomen." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Eigendom kon op dit moment niet worden overgedragen aan <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Eigendom overgedragen" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Plak het JSON-antwoord hier" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Plak de berichtlink." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraude, schadelijke links of valse beweringen die waarschijnlijk schade in de echte wereld veroorzaken." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Kies een webzoekmachine" msgid "Pick an emoji" msgstr "Kies een emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Kies een optie om verder te gaan." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Kies het 4-cijferige nummer achter je gebruikersnaam" msgid "Pick the appearance this administrator account should start with." msgstr "Kies het uiterlijk waarmee dit beheerdersaccount moet beginnen." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Kies de regel om te beoordelen." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Wacht even en probeer de naam opnieuw te wijzigen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polen" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Poort" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "tik om een reactie toe te voegen" msgid "press to remove reaction" msgstr "tik om de reactie te verwijderen" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Doen alsof je iemand anders bent, inclusief misleidende, door AI gegenereerde content." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Voorkom gedurende de opgegeven tijd dat <0>{targetUserTag} berichten verstuurt, reageert en verbinding maakt met spraakkanalen." @@ -27078,11 +26756,6 @@ msgstr "Prioriteitsspreker" msgid "Privacy" msgstr "Privacy" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacy of identiteitsmisbruik" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Privacy-instellingen banner" msgid "Privacy URL" msgstr "Privacy-URL" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Privacyschending" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Schending van privacy of doxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Privacyschending of stalking" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profieltype" msgid "Profile updated" msgstr "Profiel bijgewerkt" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Overtreding profiel, gebruikersnaam of avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Bevordert haat tegen beschermde groepen." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promoot, rekruteert voor of coördineert gewelddadige extremistische activiteiten." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promotie of instructies die zelfbeschadiging of eetstoornissen aanmoedigen." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profiel dat je meldt" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Voornaamwoorden: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Bescherm je Visionary-account door tweefactorauthenticatie in te schakelen. Bedankt voor je steun aan {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Geef minimaal een gebruikers-ID of een gebruikerstag op." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Geef de gebruikers-ID of gebruikersnaam op van de persoon die je meldt." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Vul je volledige officiële naam in voor de verklaring." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Met keuzerondjes kun je één optie uit een groep selecteren." msgid "Radio group" msgstr "Keuzerondjes" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Raidcoördinatie" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Cadeau kopen?" msgid "Ready to upgrade?" msgstr "Klaar om te upgraden?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Reden" @@ -28291,8 +27924,8 @@ msgstr "Venstergrootte en -positie onthouden" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName} verwijderen" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "{userName} uit de groep verwijderen?" @@ -28419,8 +28052,8 @@ msgstr "Verwijderen uit favorieten" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Uit groep verwijderen" @@ -28458,11 +28091,6 @@ msgstr "Verwijderen uit URL-gebaseerde GIF-favorieten" msgid "Remove icon" msgstr "Pictogram verwijderen" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Verwijder het voor iedereen uit het kanaal." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Verwijderd uit favorieten" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Uit groep verwijderd" @@ -28919,28 +28547,18 @@ msgstr "Meld een community" msgid "Report a message" msgstr "Meld een bericht" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Meld een regelovertreding, of vind tools om contacten en voorkeuren te beheren." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Een gebruikersprofiel melden" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Community melden" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Meldingsdetails" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Meld illegale inhoud" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Probleem melden" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Bericht melden" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Profiel melden" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Melding verzonden" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Type melding" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Gebruiker melden" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag van gemelde gebruiker (optioneel)" @@ -29100,6 +28716,10 @@ msgstr "Vereist alles van het niveau Gemiddeld, plus dat je minimaal 10 minuten msgid "Resend" msgstr "Opnieuw verzenden" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Opnieuw verzenden ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Opnieuw verzenden ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Opnieuw verzenden ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Opnieuw verzenden ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Opnieuw verzenden ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Opnieuw verzenden ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Opnieuw verzenden ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Code opnieuw verzenden" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Rollen succesvol bijgewerkt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Roemenië" @@ -29947,7 +29567,7 @@ msgstr "Verzadiging" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Zeg hallo tegen <0>{displayName}. Je DM begint hier." msgid "Scale" msgstr "Schaal" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Oplichting, malware of misinformatie" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scan de QR-code met je authenticatie-app." @@ -30855,11 +30470,6 @@ msgstr "Selecteren" msgid "Select {accessibleName}" msgstr "Selecteer {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Kies een categorie" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Selecteer een community waar je de machtiging {permissionName} hebt, of een groeps-DM waarvan je lid bent." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Kies een land" @@ -30911,11 +30521,6 @@ msgstr "Selecteer een omleidings-URI" msgid "Select a scenario to apply..." msgstr "Selecteer een scenario om toe te passen..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Kies een categorie voor de overtreding." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Selecteer het account waarmee je wilt inloggen op je nieuwe apparaat." msgid "Select voice processing mode" msgstr "Selecteer spraakverwerkingsmodus" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Selecteer wat je wilt melden." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Selecteer je woonland." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Selecteer…" @@ -31037,13 +30642,6 @@ msgstr "Selectie: {0} (max. {1})" msgid "Selections" msgstr "Selecties" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Zelfbeschadiging of zelfmoord" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Stuur een actiebericht (wordt cursief weergegeven)." msgid "Send animation" msgstr "Animatie verzenden" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Stuur nog een melding" @@ -31138,7 +30736,7 @@ msgstr "Verzendknop" msgid "Send code" msgstr "Code verzenden" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA-melding verzenden" @@ -31158,9 +30756,9 @@ msgstr "Bestanden verzenden tot {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Vriendschapsverzoek sturen" @@ -31220,8 +30818,8 @@ msgstr "Berichten verzenden in threads" msgid "Send messages, images, GIFs and emoji" msgstr "Berichten, afbeeldingen, GIF's en emoji's versturen" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Melding verzenden" @@ -31255,7 +30853,7 @@ msgstr "Deze pin terug in de tijd sturen?" msgid "Send TTS messages" msgstr "TTS-berichten verzenden" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Verificatiecode verzenden" @@ -31273,11 +30871,6 @@ msgstr "Spraakbericht verzenden" msgid "Send:" msgstr "Verzenden:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Malware of gevaarlijke links versturen" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Thema delen" msgid "Share voice activity with all friends?" msgstr "Spraakactiviteit delen met alle vrienden?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Deel wat ons team nodig heeft om dit te beoordelen." @@ -31709,11 +31302,6 @@ msgstr "Deel wat ons team nodig heeft om dit te beoordelen." msgid "Share with a friend" msgstr "Delen met een vriend" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Delen met communitymoderators." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Gedeeld venster" msgid "Shared window audio" msgstr "Audio van gedeeld venster" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Deelt persoonlijke informatie, stalkt gebruikers of coördineert privacyschendingen." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Persoonlijke informatie delen" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Schuifregelaars" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slowakije" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenië" @@ -32889,11 +32467,6 @@ msgstr "Slowmodussimulatie" msgid "Slowmode time remaining" msgstr "Resterende tijd voor slowmodus" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Scheldwoorden, ontmenselijkende taal of aanvallen op beschermde groepen." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Er is iets misgegaan bij het voorbereiden van deze sticker. Probeer een ander bestand of probeer het over een ogenblik opnieuw." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Er ging iets mis bij het publiceren. Probeer het later opnieuw." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Ruime lay-out met duidelijke visuele scheiding tussen berichten." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanje" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamaccount" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spamclassificatie" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam of oplichting" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spam- of oplichtingscommunity" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam-, oplichtings- of phishingaccount" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, oplichting of phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Starten geminimaliseerd" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Opnieuw beginnen" @@ -33752,22 +33302,26 @@ msgstr "Aangemeld blijven" msgid "Step {current} of {total}" msgstr "Stap {current} van {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Stap 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Stap 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Stap 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Stap 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Stap 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Stoppen als aankondigingskanaal?" msgid "Stop hiding muted channels by default?" msgstr "Gedempte kanalen niet meer standaard verbergen?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Berichten en vriendschapsverzoeken stoppen." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Microfoontest stoppen" @@ -33959,11 +33508,6 @@ msgstr "Stop met het aanpassen van insertBefore en removeChild op Node.prototype msgid "Stop ringing" msgstr "Stoppen met bellen" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Je ziet de inhoud en leden niet meer." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Vervang veelgebruikte tekstgezichtjes zoals :) en <3 door emoji wanneer je berichten verstuurt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Zweden" @@ -34804,11 +34348,6 @@ msgstr "Tik om een notitie toe te voegen" msgid "tar.gz archive" msgstr "tar.gz-archief" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Richt zich op mensen op basis van beschermde kenmerken." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Gebruiksvoorwaarden" msgid "Terms URL" msgstr "URL voor voorwaarden" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorisme of gewelddadig extremisme" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thais" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Bedankt dat je helpt om {productName} veilig te houden. We bekijken je melding zo snel mogelijk." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Bedankt dat je dit aankaart" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Bedankt dat je het ons laat weten. Dit is op zichzelf geen overtreding van onze regels, dus we hebben geen melding verstuurd." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Bedankt dat je het ons laat weten. Dit is op zichzelf geen overtreding van onze regels, dus we hebben geen melding verstuurd. Als het op iemand gericht is of scheldwoorden bevat, meld het dan opnieuw en kies “Beledigende of schadelijke inhoud”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Dat werkte niet. Probeer het opnieuw of annuleer." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Dat lijkt geen geldige kleur. Probeer hex, rgb(), hsl() of een CSS-kleurnaam." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Dat lijkt geen geldige URL." @@ -35104,6 +34653,11 @@ msgstr "De {PRODUCT_NAME}-app op je andere apparaat toont dit onder 'Inloggen op msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "De app {PRODUCT_NAME} was niet aangemeld. Je kunt dit tabblad sluiten." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Het veiligheidsteam van {productName} bekijkt je melding. We maken niet bekend dat de melding van jou komt." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "De opgegeven redirect_uri is niet geregistreerd voor deze app." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "De opgegeven redirect_uri moet HTTP of HTTPS gebruiken." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Het meldingsformulier is gewijzigd. Begin opnieuw." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "De gebruikersnaamtags op dit exemplaar zijn al ingesteld. Ze kunnen niet meer worden gewijzigd." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "De verificatiecode is ongeldig of verlopen." @@ -36115,13 +35674,8 @@ msgstr "Dit lid is niet meer verbonden met een spraakkanaal." msgid "This message can only be forwarded to age-restricted channels" msgstr "Dit bericht kan alleen worden doorgestuurd naar kanalen met leeftijdsbeperking" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Dit bericht is al verwijderd." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Dit bericht is al gepubliceerd" @@ -36279,11 +35833,6 @@ msgstr "Dit topic is gesloten. Een bericht sturen opent het opnieuw." msgid "This thread is locked. Only moderators can send messages." msgstr "Dit topic is vergrendeld. Alleen moderators kunnen berichten sturen." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "deze gebruiker" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Deze gebruiker heeft de zichtbaarheid van het profiel beperkt. Sommige gegevens zijn alleen voor vrienden zichtbaar." @@ -36292,11 +35841,6 @@ msgstr "Deze gebruiker heeft de zichtbaarheid van het profiel beperkt. Sommige g msgid "This user has no roles in this community." msgstr "Deze gebruiker heeft geen rollen in deze community." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Deze gebruiker is al verbannen uit de community." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Deze gebruiker is niet meer beschikbaar." @@ -36465,16 +36009,6 @@ msgstr "Thread bijgewerkt" msgid "Threads" msgstr "Threads" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Bedreigingen, iemand op verschillende plekken blijven volgen of ongewenst contact." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Bedreigingen, intimidatie of schade" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag} een time-out gegeven" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Time-out" @@ -36787,6 +36321,11 @@ msgstr "Toon" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR-afbeeldingen omzetten naar standaardbereik, waardoor de piekhelderheid wordt verminderd." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Te veel codes verzonden. Wacht {duration} en probeer het opnieuw." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Community-eigendom overdragen" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Groepseigendom overdragen aan {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Deblokkeer diegene eerst om een vriendschapsverzoek te sturen." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Deblokkeer gebruiker" @@ -37607,16 +37146,6 @@ msgstr "Geluid op alle apparaten inschakelen" msgid "Undeafen yourself" msgstr "Je geluid inschakelen" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Gebruiker onder de minimumleeftijd of zorgen over kindveiligheid" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Gebruiker onder de minimumleeftijd" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Tot ik het weer aanzet" msgid "Unverified email" msgstr "E-mailadres niet geverifieerd" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Ongewenst gedrag of inhoud voor volwassenen op de verkeerde plek." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Ongewenst seksueel getint gedrag, opmerkingen of verzoeken." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Voeg maximaal {DISCOVERY_MAX_TAGS} tags toe om mensen te helpen je community te vinden. Ze verschijnen in de zoekresultaten van Ontdekken." @@ -38840,11 +38359,6 @@ msgstr "Licht thema gebruiken" msgid "Use native title bar" msgstr "Systeemeigen titelbalk gebruiken" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Alleen gebruiken als het duidelijk de regels van {productName} schendt en niet hierboven past." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Alleen in deze community gebruikt." msgid "User" msgstr "Gebruiker" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Gebruiker lijkt onder de minimumleeftijd te zijn, of is betrokken bij grooming of uitbuiting van kinderen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Gebruiker debuggen" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Gebruikers-ID (optioneel)" @@ -39061,12 +38570,12 @@ msgstr "Gebruiker niet gevonden" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Gebruikersprofiel" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Gebruikersprofiel: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Gebruikersinstellingen" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Gebruikerstag (optioneel)" @@ -39339,7 +38848,7 @@ msgstr "Geverifieerde community" msgid "Verify" msgstr "Verifiëren" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Code verifiëren" @@ -39368,7 +38877,7 @@ msgstr "Verifieer dat jij het bent" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifieer je e-mailadres" @@ -39718,7 +39227,7 @@ msgstr "Codes bekijken" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Communityprofiel bekijken" @@ -39751,7 +39260,7 @@ msgstr "Cadeaus bekijken" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Algemeen profiel bekijken" @@ -39847,26 +39356,6 @@ msgstr "Kijker is bij de stream gekomen" msgid "Viewer leaves stream" msgstr "Kijker verlaat stream" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Overtredingscategorie" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "De overtreding bevindt zich in het profiel van de gebruiker, niet in een specifiek bericht." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Geweld of gewelddadige dreigementen" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Gewelddadige of schokkende inhoud" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "We hebben deze emoji verkleind en gecomprimeerd naar 128x128 pixels, maa msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "We hebben deze sticker verkleind en gecomprimeerd naar 320x320 pixels, maar de bestandsgrootte is nog steeds {fileSize}. De limiet is {maxSize}. Probeer een eenvoudigere afbeelding, minder kleuren of een kleiner bronbestand." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "We hebben een code gestuurd naar {email}." @@ -40472,7 +39961,7 @@ msgstr "We verwerken dit zo snel mogelijk. Je ontvangt een e-mail wanneer je arc msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "We herstellen je vorige e-mailadres, melden oude sessies af, schakelen MFA uit en beveiligen je account met een nieuw wachtwoord." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "We sturen een korte code om te bevestigen dat je updates over deze melding kunt ontvangen." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Welke regel is overtreden?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Wat is er aan de hand?" msgid "What's new" msgstr "Nieuw" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Wat is de reden voor je melding?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Als er geen aangepaste drempeldatum is ingesteld, kunnen leden zonder de <0>{readMessageHistoryPermissionLabel}-machtiging geen historische berichten bekijken. Ze zien alleen berichten in realtime zodra ze binnenkomen, en deze verdwijnen wanneer ze hun client opnieuw opstarten." @@ -40832,11 +40321,6 @@ msgstr "Welke communities" msgid "Which conversations" msgstr "Welke gesprekken" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Welke regel is overtreden?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Zolang push-to-talk is ingeschakeld, bedient je sneltoets je microfoon. Daarom is de knop om te dempen uitgeschakeld." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Je kunt geen bestanden bijvoegen in dit kanaal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Je kunt jezelf geen vriendschapsverzoek sturen" @@ -41341,7 +40825,7 @@ msgstr "Je kunt deze gebruiker geen bericht sturen" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Je moet akkoord gaan met de gebruiksvoorwaarden om een account aan te maken" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Je moet je e-mailadres verifiëren voordat je een melding kunt versturen." @@ -41891,6 +41375,11 @@ msgstr "Je hebt een oud tarief. De huidige prijs voor dit abonnement is {current msgid "You're sending messages too quickly" msgstr "Je verstuurt te snel berichten" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Je stuurt te snel meldingen. Probeer het later opnieuw." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Je bekijkt oudere berichten" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Je hebt meer mensen toegevoegd dan een groeps-DM toestaat. Verwijder er een paar en probeer het opnieuw." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Je hebt dit bericht al gemeld." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Je hebt dit profiel vandaag al gemeld." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Je accounts en instellingen zijn niet gewijzigd of verwijderd." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Je actie kon niet worden voltooid omdat deze is gemarkeerd door onze veiligheidssystemen. Als je denkt dat dit een fout is, neem dan contact op met de ondersteuning." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Je antwoorden" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Je aanvraag wacht op beoordeling. Je kunt de gegevens van je vermelding nog bijwerken of de aanvraag intrekken." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Je browser vereist interactie voordat audio kan worden afgespeeld. Klik op de knop hieronder om spraakchat in te schakelen." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Je wijzigingen bereiken elke community die dit kanaal volgt, wat even kan duren. Elk gepubliceerd bericht staat 3 snelle bewerkingen toe, daarna 1 per 20 minuten." @@ -42311,6 +41815,11 @@ msgstr "Je nieuwe bijnaam, of laat leeg om deze te resetten." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Je oude herstelkit werkt niet meer. Bewaar deze nieuwe ergens veilig." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Je opties" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "je regio" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Je verlengingsbetaling is mislukt, maar je <0/> blijven actief tot <1>{graceDate}. Werk je betaalmethode vóór die tijd bij om je abonnement te behouden." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Je melding is niet verzonden. Probeer het opnieuw." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Je abonnement wordt bij de volgende verlenging omgezet naar jaarlijkse f msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "De CSS van je thema is te groot om te delen. Kort de CSS in en probeer het opnieuw." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Je gebruikersnaam (optioneel)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index a3152499a..d8598599c 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} igjen" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {medlem} other {medlemmer}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Invitasjonslenken din utløper om # sekund.} other {Invitasjonslenken din utløper om # sekunder.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} valgt" @@ -2957,11 +2957,6 @@ msgstr "Kontodata" msgid "Account details unavailable" msgstr "Kontodetaljer utilgjengelige" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Kontoen eksisterer for å spamme, svindle eller misbruke plattformen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Lagt til: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Lagt til: {createdDate} • sist brukt: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Ytterligere kommentarer (valgfritt)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Allerede innløst" msgid "Already set to cancel" msgstr "Allerede satt til å avsluttes" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Rapporter også denne meldingen til sikkerhetsteamet hos {productName}" @@ -4576,11 +4566,6 @@ msgstr "Årlig" msgid "Another checkbox" msgstr "En annen avkrysningsboks" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Et annet tydelig brudd på reglene" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "En annen rund avkrysningsboks" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Lydopplasting" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Østerrike" @@ -5620,6 +5605,7 @@ msgstr "Borte akkurat nå" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Borte akkurat nå" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Tilbake" @@ -5788,9 +5775,7 @@ msgstr "Reservekoder er fornyet" msgid "Badge" msgstr "Merke" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Utesteng" @@ -5819,7 +5804,7 @@ msgstr "Varighet for utestengelse" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Utesteng medlemmer fra fellesskapet, med mulighet til å slette de nylig msgid "Ban reason" msgstr "Årsak til utestengelse" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Utesteng denne brukeren" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Båndbredde" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Utestengt" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Utestengte {targetUserTag} fra fellesskapet" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Før dato" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgia" @@ -6031,7 +6006,7 @@ msgstr "Bithastighet" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blokker" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokker" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blokker {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blokker for alle fellesskap" msgid "Block spoiler" msgstr "Spoilerblokk" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blokker denne brukeren" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blokker bruker" msgid "Blocked" msgstr "Blokkert" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blokkert" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Innebygde oversettere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Bulgarsk" msgid "Bulk delete" msgstr "Massesletting" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Mobbing, gjentatt uønsket kontakt, personforfølgelse eller målrettet trakassering." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Mobbing, trusler, hat, vold, raid eller innhold som oppfordrer til selvskading." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Anrop" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Innstillinger for samtaler og gruppechat" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Endre banner" msgid "Change chat embed background" msgstr "Endre bakgrunn for innebygde invitasjoner" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Endre e-postadresse" @@ -7150,8 +7116,8 @@ msgstr "Endre vennens kallenavn" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Endre kallenavn i gruppen" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Endre språk" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Endre kallenavnet mitt i gruppen" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Endre eget kallenavn" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Endre eier" @@ -7283,16 +7249,6 @@ msgstr "Endre hvilken taleregion en talekanal bruker." msgid "Change which voice region this channel uses." msgstr "Endre hvilken taleregion denne kanalen bruker." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Endre hvem som kan ringe eller legge deg til." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Endre hvem som kan nå deg." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Sjekk innboksen din på {emailAddress} for autorisasjonslenken." msgid "Check your inbox for a verification email." msgstr "Se etter en bekreftelsesmelding i innboksen din." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Se over rapporten din" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Avkrysningsbokser" @@ -7901,21 +7862,6 @@ msgstr "Betaling er blokkert for denne kontoen. Kontakt {supportEmail} hvis du t msgid "Checkout unavailable" msgstr "Betaling er utilgjengelig" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Bekymringer knyttet til barns sikkerhet" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Barns sikkerhet eller utnyttelse av mindreårige" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Barns sikkerhet eller vokseninnhold" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Valg" msgid "Choices: {choiceList}" msgstr "Valgmuligheter: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Velg" @@ -8122,6 +8068,11 @@ msgstr "Velg kategorien som best beskriver fellesskapet ditt. Du kan endre dette msgid "Choose the premium model" msgstr "Velg premiummodellen" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Velg årsaken på nytt" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Hent gave" msgid "Claim your account" msgstr "Fullfør registreringen av kontoen din" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Fullfør registreringen av kontoen din og bekreft e-postadressen din for å sende rapporter." @@ -8352,12 +8303,12 @@ msgstr "Fullfør registreringen av kontoen din for å løse inn denne gaven." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Fullfør registreringen av kontoen din for å sende venneforespørsler." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Gjør krav på kontoen din for å sende rapporter." @@ -8378,11 +8329,6 @@ msgstr "Fullfør registreringen av kontoen din for å starte eller bli med i 1:1 msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Hent gaven din for å aktivere {premiumProductName}-abonnementet ditt!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Utgir seg for å være en annen person, et annet merke eller en annen organisasjon." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Tøm søkefelt" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Lukk dialog" msgid "Close popout" msgstr "Lukk bilde-i-bilde" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Lukk denne direktemeldingssamtalen" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Lukk til systemstatusfelt" msgid "Close window" msgstr "Lukk vinduet" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Lukk den nåværende direktemeldingssamtalen med {dmDisplayName}. Dette blokkerer ikke brukeren, og du kan åpne samtalen igjen senere." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Lukke direktemeldingssamtalen med {displayName}? Du kan åpne den igjen når som helst." @@ -8837,7 +8773,7 @@ msgstr "Kull-tema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kode" @@ -8868,7 +8804,7 @@ msgstr "Kode fra {productName}-appen" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kode sendt på nytt" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Fellesskap du kan bli med i" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Fellesskap" @@ -9131,7 +9065,7 @@ msgstr "Slå av lyden i fellesskapet" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Feilsøking for fellesskap" @@ -9150,16 +9084,6 @@ msgstr "Fellesskap slettet" msgid "Community DM" msgstr "Fellesskaps-DM" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Fellesskapet eksisterer for å spamme, svindle eller misbruke plattformen." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Fellesskapet legger til rette for hets eller målrettet trakassering." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Fellesskapsikon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Fellesskaps-ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Fellesskaps-ID er påkrevd." @@ -9526,6 +9450,11 @@ msgstr "Bekreft nytt passord" msgid "Confirm password" msgstr "Bekreft passord" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Bekreft erklæringen for å sende rapporten." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Fortsett i nettleseren din" msgid "Continue to checkout" msgstr "Fortsett til kassen" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Fortsett for å rapportere fellesskapet" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Fortsett for å rapportere brukeren" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Å konvertere denne kanalen til en tekstkanal fjerner alle kanaler som f msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Konverterer innkommende innhold til tale, uavhengig av om det kom fra /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordinerer raid, organiserte angrep eller trakassering mot personer eller fellesskap." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL kopiert til utklippstavlen" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL kopiert til utklippstavlen" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopier meldings-ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopier meldingslenke" @@ -10643,6 +10553,11 @@ msgstr "Kunne ikke laste inn innlegg. Prøv igjen senere." msgid "Couldn't load settings" msgstr "Kunne ikke laste inn innstillinger" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Kunne ikke laste inn rapportskjemaet." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Kunne ikke laste inn denne appen" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Kunne ikke behandle bildet" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Kunne ikke publisere denne meldingen" @@ -10825,11 +10740,6 @@ msgstr "Kunne ikke sende invitasjon" msgid "Couldn't send invite. Try again." msgstr "Kunne ikke sende invitasjon. Prøv igjen." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Kunne ikke sende. Prøv igjen." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Nedtellingstidtaker" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Bostedsland" @@ -11301,13 +11211,8 @@ msgstr "Opprettet:" msgid "Credentials" msgstr "Påloggingsinformasjon" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Troverdige trusler, grov vold eller forherligelse av vold." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Kutter lyd under en lydstyrketerskel med minimal CPU-bruk." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Kypros" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tsjekkisk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tsjekkia" @@ -11965,7 +11870,7 @@ msgstr "Feilsøk kanal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Feilsøk fellesskap" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Slette tema?" msgid "Delete this invite? Can't be undone." msgstr "Slette denne invitasjonen? Kan ikke angres." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Slett denne meldingen" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Slette denne meldingen? Kan ikke angres." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Slett denne meldingen? Kan ikke angres. Denne meldingen fjernes også fra alle fellesskap som følger denne kanalen." @@ -12461,11 +12359,6 @@ msgstr "Slette meldingene dine i dette fellesskapet?" msgid "Delete your messages in this conversation?" msgstr "Slette meldingene dine i denne samtalen?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Slettet" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Nektet {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danmark" @@ -12554,11 +12447,6 @@ msgstr "Beskriv klistremerket" msgid "Describe this media for screen readers" msgstr "Beskriv dette mediet for skjermlesere" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Beskriv hvorfor innholdet er ulovlig" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Løsrevet banner" msgid "Detail" msgstr "Detaljert" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detaljer" @@ -13315,11 +13203,6 @@ msgstr "Visningsnavn (valgfritt)" msgid "Display scaling" msgstr "Skalering av visning" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuerer skadelig programvare, verktøy som stjeler påloggingsinformasjon eller andre skadelige filer." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Innstillinger for direktemeldinger og venneforespørsler" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentasjon" msgid "Doesn't allow being added to group DMs" msgstr "Tillater ikke å bli lagt til i gruppechatter" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Blokkerer ikke. Du kan åpne den igjen senere." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Doner i stedet" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Last ned kildekart for å få stakkspor og utviklerverktøy til å peke msgid "Download video" msgstr "Last ned video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doksing, utlevering av privat informasjon eller personforfølgelse." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doksing, personforfølgelse, å utgi seg for å være noen andre eller en upassende profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Rediger farge for {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Rediger fellesskapsprofil" @@ -14043,7 +13908,7 @@ msgstr "Rediger egendefinerte tilgangstillatelser for roller og medlemmer i denn #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Rediger profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Rediger lokal tid på profilen" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Rediger publisert melding?" @@ -14191,13 +14056,13 @@ msgstr "Du kan få refusjon frem til {windowEndsOn}. Dette vil også avslutte ab #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-post" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-postadresse" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-postadresse er påkrevd." @@ -14721,16 +14586,6 @@ msgstr "Foretrukket kodingsmetode for nye skjermdelinger." msgid "Encoder, SVC, and bitrate presets" msgstr "Koder, SVC og bitratemaler" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Oppmuntring til selvskading" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Oppmuntring til selvmord, selvskading eller spiseforstyrrelser." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Ende-til-ende-kryptering er utilgjengelig fordi en deltaker som ikke st msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Ende-til-ende-kryptering er utilgjengelig fordi en deltaker som ikke støttes, er i denne talekanalen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Setter mindreårige i fare eller inneholder innhold som utnytter barn." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Skriv inn en kode i formatet ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Skriv inn en gyldig mal-URL eller malkode fra {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Skriv inn en gyldig e-postadresse." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Skriv inn en gyldig meldingslenke." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Skriv inn den {digitCount}-sifrede koden fra autentiseringsappen din." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Skriv inn koden før du fortsetter." @@ -15008,7 +14858,7 @@ msgstr "Enter for å <0><1>lagre" msgid "Enter username" msgstr "Skriv inn brukernavn" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Skriv inn bekreftelseskoden" @@ -15017,6 +14867,11 @@ msgstr "Skriv inn bekreftelseskoden" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Skriv inn e-postadressen din, så sender vi deg en lenke for å tilbakestille passordet ditt." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Skriv inn ditt fulle juridiske navn for å sende rapporten." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc for å <0><1>avbryte" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estland" @@ -15412,6 +15267,16 @@ msgstr "Utløper {earliest}" msgid "Expires:" msgstr "Utløper:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Forklar problemet" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Forklar problemet for å sende rapporten." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Eksterne lenker kan være farlige. Vær forsiktig." msgid "Extra large" msgstr "Ekstra stor" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ekstremistisk fellesskap" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Kunne ikke fjerne egendefinert URL. Prøv igjen." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Kunne ikke sende kode på nytt. Prøv igjen." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Kunne ikke tilbakestille premiumstatus." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Kunne ikke sende kode. Prøv igjen." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Kunne ikke sende melding. Hold inne for alternativer." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Rapporten ble ikke sendt. Prøv igjen." @@ -15840,11 +15700,6 @@ msgstr "Kunne ikke laste opp emojier fra {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Kunne ikke laste opp emojier. Prøv igjen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Falske påstander som sannsynligvis vil forårsake skade i den virkelige verden." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Finn det perfekte klistremerket" msgid "Fingerprint" msgstr "Fingeravtrykk" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Fullfør kontooppsett" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Fullfør kontooppsettet først" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Fullfør registreringen for å sende venneforespørsler." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finsk" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Fornavn og etternavn" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Bildefrekvenser over 30 FPS krever {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Frankrike" @@ -16834,10 +16689,10 @@ msgstr "Full" msgid "Full dynamic range" msgstr "Fullt dynamisk område" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Fullt juridisk navn" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Fullt juridisk navn (valgfritt for rapporter om seksuelle overgrep mot barn)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Tysk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Tyskland" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Gå tilbake" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Gå tilbake og skriv inn en gyldig e-postadresse." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Hyggelig å se deg, {username}! Velkommen skal du være." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Hellas" @@ -17572,11 +17427,6 @@ msgstr "Gresk" msgid "Grid view" msgstr "Rutenettvisning" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming eller innhold som utnytter barn." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Brukernavn" msgid "Hang out with voice, video and screen share" msgstr "Vær sammen med tale, video og skjermdeling" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Trakassering" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Trakassering med voksent innhold" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Trakassering eller mobbing" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Trakassering eller personforfølgelse" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Trakassering eller målrettede krenkelser" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Trakassering eller trusler" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Maskinvarenøkkel" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Maskinvareakselerert på de fleste Windows- og macOS-systemer. Pålitelig for eldre enheter." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Skadelig feilinformasjon" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Har kjøpt tidligere" msgid "Has ever purchased override" msgstr "Overstyring av «Har kjøpt tidligere»" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hatefulle ytringer" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Skjule din egen skjermdeling?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Skjuler knappene for nedlasting, åpne i nettleser og kopier på bilder og videoer i denne kanalen." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Skjuler meldingene deres og stopper dem fra å sende deg meldinger" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ungarsk" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungarn" @@ -18399,6 +18212,11 @@ msgstr "Jeg er et verktøytips" msgid "I changed my mind" msgstr "Jeg ombestemte meg" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Jeg bekrefter i god tro at opplysningene og påstandene i denne rapporten er nøyaktige og fullstendige." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Innstillinger for inaktivitet" msgid "Idle timeout" msgstr "Tidsavbrudd ved inaktivitet" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Hvis en mindreårig er involvert, bruk «{childSafetyReasonName}» i stedet." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Hvis en konto bruker den adressen, har vi sendt instruksjoner for tilbak msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Hvis macOS ber om å avslutte og starte {productName} på nytt, velg Senere." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Hvis noen kan være i umiddelbar fare, kontakt lokale nødetater hvis du kan gjøre det trygt." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Hvis noen er i umiddelbar fare, kontakt de lokale nødetatene først." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Hvis noen ba deg om å lime inn noe her, er det en svindel som kan gi dem tilgang til din {productName}-konto." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Hvis dette involverer CSAM eller utnyttelse av en mindreårig, send rapporten nå og ikke del materialet på nytt." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Hvis dette er en troverdig, overhengende trussel, kontakt også lokale nødetater." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Hvis dette er en overhengende terrortrussel, kontakt også lokale nødetater." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Hvis denne rapporten gjelder en bestemt melding i dette fellesskapet, rapporter heller den meldingen. Rapporter om meldinger gir sikkerhetsteamet vårt det tydeligste bildet av saken, og flere detaljer i kommentarfeltet kan hjelpe oss å behandle rapporten raskere. Fortsett bare med å rapportere hele fellesskapet hvis en rapport om en melding ikke dekker det større problemet." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Hvis denne rapporten gjelder en bestemt melding, rapporter heller den meldingen. Rapporter om meldinger gir sikkerhetsteamet vårt det tydeligste bildet av saken, og flere detaljer i kommentarfeltet kan hjelpe oss å behandle rapporten raskere. Fortsett bare med å rapportere brukeren som helhet hvis meldingen ikke viser det større problemet." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Hvis denne rapporten gjelder bestemte meldinger, rapporter heller den mest relevante meldingen. Rapporter om meldinger gir sikkerhetsteamet vårt det tydeligste bildet av saken, og flere detaljer i kommentarfeltet kan hjelpe oss å behandle rapporten raskere. Fortsett bare med å rapportere brukeren som helhet hvis en rapport om en melding ikke dekker det større problemet." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Hvis du mener det er ulovlig, si hvilken lov og hvorfor." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorer ventetiden for sakte modus i denne kanalen." msgid "Ignore virtual" msgstr "Ignorer virtuelle enheter" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Ulovlig aktivitet" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Ulovlig aktivitet eller noe annet" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Ulovlig salg, medvirkning til kriminalitet eller et tydelig regelbrudd som ikke passer inn ovenfor." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Ulovlig salg, medvirkning til kriminalitet eller ulovlig aktivitet." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Bilder limt inn fra utklippstavlen sendes som vedlegg, og du har ikke tillatelse til å legge ved filer i denne kanalen." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Utgir seg for å være en annen" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Utgir seg for å være noen andre eller bruker villedende medieinnhold" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inaktiv" msgid "Inactive timeout" msgstr "Tidsgrense for inaktivitet" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Upassende profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Inkluder sikkerhetskopikodene mine for totrinnsbekreftelse i PDF-en og utskriften" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Inkluder fellesskaps-ID-en." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Invitasjonsbakgrunn" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Invitasjonskode (valgfritt)" @@ -19471,7 +19220,7 @@ msgstr "Invitasjonsmaskering" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Inviter medlemmer" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-adresse godkjent" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursiv" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Taster" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Senere" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20291,11 +20040,6 @@ msgstr "Les mer" msgid "Learn more about Visionary" msgstr "Finn ut mer om Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Forlat" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Forlat privat tråd" msgid "Leave silently" msgstr "Forlat uten varsel" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Forlat fellesskapet" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Viser medlemmer med denne rollen i en egen seksjon i medlemslisten." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litauen" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Laster inn …" #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Laster inn …" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Lav" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Vedlikehold er planlagt til {localizedTime}. Forventet varighet: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Gjøre {userName} til gruppeeier? Du mister eierrettighetene dine." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Gjør til gruppeeier" @@ -21091,38 +20830,21 @@ msgstr "Gjør til gruppeeier" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Sørg for at denne koden samsvarer med den i {PRODUCT_NAME}-appen." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Sjekk at dette ser riktig ut før du sender det." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Tilpass instansen din" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Skadelige lenker" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribusjon av skadelig programvare" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Skadelig programvare eller farlige lenker" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Skadelig programvare, tyveri av påloggingsinformasjon eller skadelige filer." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Masker private detaljer før du deler skjermen eller strømmen din." msgid "Mask Visionary as subscription" msgstr "Vis Visionary som et vanlig abonnement" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massespam, svindel, falske gaveutdelinger eller misbruk av kontoer." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Tilgangskontroll for voksent medieinnhold" msgid "Mature content not allowed" msgstr "Voksent innhold er ikke tillatt" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Voksent innhold eller trakassering" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Voksent innhold eller mangelfull tilgangskontroll" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Overstyring av innstilling for voksent innhold" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Brudd på retningslinjer for voksent innhold" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Voksent innhold uten riktig aldersgrense." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Melding" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "meldingslenke" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Meldingslenke" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Forhåndsvisninger av meldinger i listen over direktemeldingssamtaler" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Melding publisert" @@ -22211,6 +21908,11 @@ msgstr "Tidspunkt for melding" msgid "Message unpinned" msgstr "Melding løsnet" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Meldingen du rapporterer" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Mindreårige i fare, voksent innhold på feil sted eller uønsket oppførsel." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mer" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Flere handlinger" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Nestet" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nederland" @@ -24099,7 +23796,7 @@ msgstr "Ingen resultater" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Ingen resultater funnet" @@ -24858,6 +24555,16 @@ msgstr "Kun personer du inviterer og moderatorer kan se denne tråden." msgid "Only places I can't access anymore" msgstr "Bare steder jeg ikke lenger har tilgang til" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Rapporter kun det du ærlig tror bryter reglene, og ikke send samme rapport to ganger." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Rapporter kun det du ærlig mener bryter reglene. Misbruk av rapporter går mot våre <0>retningslinjer for fellesskapet." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Dekkraft" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Åpne på {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Åpne popup" @@ -25379,11 +25084,6 @@ msgstr "Åpne Systeminnstillinger → Personvern og sikkerhet → Skjermopptak, msgid "Open template JSON" msgstr "Åpne mal-JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Åpne dialogen for utestenging fra dette fellesskapet." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Åpne innstillingene dine" msgid "Opened the thread again" msgstr "Åpnet tråden igjen" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Åpnes i en ny fane" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Opprinnelig utestengt den {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Annet" @@ -25654,11 +25357,6 @@ msgstr "Annen reaksjon …" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Sikkerhetsteamet vårt gjennomgår den. Vi sender deg en direktemelding og en e-post når vi har tatt en avgjørelse." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Eierskap kunne ikke overføres til <0>{username} akkurat nå." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Eierskap overført" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Lim inn JSON-svaret her" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Lim inn meldingslenken." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, svindel, skadelige lenker eller falske påstander som sannsynligvis vil forårsake skade i den virkelige verden." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Velg en søkeleverandør" msgid "Pick an emoji" msgstr "Velg en emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Velg et alternativ for å fortsette." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Velg firesifret tall etter brukernavnet ditt" msgid "Pick the appearance this administrator account should start with." msgstr "Velg utseendet denne administratorkontoen skal starte med." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Velg regelen du vil se gjennom." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Vent litt, og prøv å endre navn på nytt." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polen" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "trykk for å legge til reaksjon" msgid "press to remove reaction" msgstr "trykk for å fjerne reaksjon" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Utgir seg for å være noen andre, inkludert villedende KI-generert innhold." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Hindre <0>{targetUserTag} i å sende meldinger, reagere og koble til talekanaler i den angitte perioden." @@ -27078,11 +26756,6 @@ msgstr "Prioritert taler" msgid "Privacy" msgstr "Personvern" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Personvern eller identitetsmisbruk" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Personverninnstillinger" msgid "Privacy URL" msgstr "URL til personvernreglene" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Personvernbrudd" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Personvernbrudd eller doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Personvernbrudd eller personforfølgelse" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiltype" msgid "Profile updated" msgstr "Profilen er oppdatert" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Regelbrudd i profil, brukernavn eller avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Fremmer hat mot beskyttede grupper." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Fremmer, rekrutterer til eller koordinerer voldelig ekstremistisk aktivitet." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Oppfordring til eller veiledning om selvskading eller spiseforstyrrelser." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profilen du rapporterer" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronomen: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Beskytt Visionary-kontoen din ved å aktivere tofaktorautentisering. Takk for at du støtter {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Oppgi en bruker-ID eller en brukertagg, eller begge deler." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Oppgi enten en bruker-ID eller et brukernavn for personen du rapporterer." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Oppgi fullt juridisk navn for erklæringen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Radioknapper lar deg velge ett alternativ fra en gruppe." msgid "Radio group" msgstr "Radiogruppe" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Raidkoordinering" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Klar til å kjøpe en gave?" msgid "Ready to upgrade?" msgstr "Klar for å oppgradere?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Årsak" @@ -28291,8 +27924,8 @@ msgstr "Husk vindusstørrelse og -posisjon" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Fjern {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Fjerne {userName} fra gruppen?" @@ -28419,8 +28052,8 @@ msgstr "Fjern fra favoritter" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Fjern fra gruppe" @@ -28458,11 +28091,6 @@ msgstr "Fjern fra URL-baserte GIF-favoritter" msgid "Remove icon" msgstr "Fjern ikon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Fjern den fra kanalen for alle." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Fjernet fra favoritter" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Fjernet fra gruppen" @@ -28919,28 +28547,18 @@ msgstr "Rapporter et fellesskap" msgid "Report a message" msgstr "Rapporter en melding" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Rapporter et regelbrudd, eller finn verktøy for å administrere kontakt og preferanser." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Rapporter en brukerprofil" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Rapporter fellesskap" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Rapportdetaljer" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Rapporter ulovlig innhold" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Rapporter problem" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Rapporter melding" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Rapporter profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Rapport sendt" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Rapporttype" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Rapporter bruker" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Brukertagg til rapportert bruker (valgfritt)" @@ -29100,6 +28716,10 @@ msgstr "Krever alt under «Middels», i tillegg til minst 10 minutters medlemska msgid "Resend" msgstr "Send på nytt" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Send på nytt ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Send på nytt ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Send på nytt ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Send på nytt ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Send på nytt ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Send på nytt ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Send på nytt ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Send kode på nytt" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roller er oppdatert" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29947,7 +29567,7 @@ msgstr "Metning" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Si hei til <0>{displayName}. Samtalen deres starter her." msgid "Scale" msgstr "Skalering" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Svindel, skadelig programvare eller feilinformasjon" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Skann QR-koden med autentiseringsappen din." @@ -30855,11 +30470,6 @@ msgstr "Velg" msgid "Select {accessibleName}" msgstr "Velg {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Velg en kategori" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Velg et fellesskap der du har tillatelsen {permissionName}, eller en gruppechat du er medlem av." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Velg et land" @@ -30911,11 +30521,6 @@ msgstr "Velg en omdirigerings-URI" msgid "Select a scenario to apply..." msgstr "Velg et scenario du vil bruke …" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Velg en kategori for brudd på retningslinjene." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Velg kontoen du vil logge på med på den nye enheten din." msgid "Select voice processing mode" msgstr "Velg modus for talebehandling" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Velg hva du vil rapportere." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Velg bostedsland." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Velg …" @@ -31037,13 +30642,6 @@ msgstr "Utdrag: {0} (maks. {1})" msgid "Selections" msgstr "Valg" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Selvskading eller selvmord" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Send en handlingsmelding (vises i kursiv)." msgid "Send animation" msgstr "Send animasjon" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Send en ny rapport" @@ -31138,7 +30736,7 @@ msgstr "Send-knapp" msgid "Send code" msgstr "Send kode" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Send DSA-rapport" @@ -31158,9 +30756,9 @@ msgstr "Send filer opptil {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Send venneforespørsel" @@ -31220,8 +30818,8 @@ msgstr "Send meldinger i tråder" msgid "Send messages, images, GIFs and emoji" msgstr "Send meldinger, bilder, GIF-er og emojier" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Send rapport" @@ -31255,7 +30853,7 @@ msgstr "Sende denne festede meldingen tilbake i tid?" msgid "Send TTS messages" msgstr "Send tekst-til-tale-meldinger" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Send bekreftelseskode" @@ -31273,11 +30871,6 @@ msgstr "Send talemelding" msgid "Send:" msgstr "Send:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Sender skadelig programvare eller farlige lenker" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Del tema" msgid "Share voice activity with all friends?" msgstr "Dele taleaktivitet med alle venner?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Del det teamet vårt trenger for å vurdere dette." @@ -31709,11 +31302,6 @@ msgstr "Del det teamet vårt trenger for å vurdere dette." msgid "Share with a friend" msgstr "Del med en venn" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Del med fellesskapsmoderatorer." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Delt vindu" msgid "Shared window audio" msgstr "Lyd fra delt vindu" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Deler personopplysninger, forfølger brukere eller koordinerer personvernbrudd." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Deling av personlig informasjon" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Skyveknapper" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulering av sakte modus" msgid "Slowmode time remaining" msgstr "Gjenstående tid i sakte modus" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Skjellsord, nedverdigende språk eller angrep på beskyttede grupper." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Noe gikk galt under klargjøringen av dette klistremerket. Prøv en annen fil, eller prøv igjen om en liten stund." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Noe gikk galt da meldingen ble publisert. Prøv igjen om et øyeblikk." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Romslig oppsett med tydelig visuelt skille mellom meldinger." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spania" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamkonto" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spamklassifisering" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam eller svindel" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Fellesskap for spam eller svindel" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam-, svindel- eller phishing-konto" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, svindel eller phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Start minimert" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Start på nytt" @@ -33752,22 +33302,26 @@ msgstr "Forbli pålogget" msgid "Step {current} of {total}" msgstr "Trinn {current} av {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Trinn 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Trinn 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Trinn 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Trinn 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Trinn 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Slutte å være en kunngjøringskanal?" msgid "Stop hiding muted channels by default?" msgstr "Slutte å skjule dempede kanaler som standard?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Stopp meldinger og venneforespørsler." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Stopp mikrofontest" @@ -33959,11 +33508,6 @@ msgstr "Slutt å tilpasse insertBefore og removeChild i Node.prototype. Appen vi msgid "Stop ringing" msgstr "Stopp ringing" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Slutt å se innholdet og medlemmene." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Bytt vanlige tekstansikter som :) og <3 ut med emoji når du sender meldinger" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Sverige" @@ -34804,11 +34348,6 @@ msgstr "Trykk for å legge til et notat" msgid "tar.gz archive" msgstr "tar.gz-arkiv" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Retter seg mot personer basert på beskyttede egenskaper." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Vilkår for bruk" msgid "Terms URL" msgstr "URL til vilkårene" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorisme eller voldelig ekstremisme" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thai" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Takk for at du hjelper oss med å holde {productName} trygt. Vi vil gjennomgå rapporten din så snart som mulig." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Takk for at du flagget dette" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Takk for at du ga oss beskjed. Dette bryter ikke i seg selv reglene våre, så vi sendte ingen rapport." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Takk for at du ga oss beskjed. Dette bryter ikke reglene våre alene, så vi sendte ingen rapport. Hvis det retter seg mot noen eller bruker skjellsord, rapporter det igjen og velg «Støtende eller skadelig innhold»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Det fungerte ikke. Prøv igjen eller avbryt." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Det ser ikke ut som en gyldig farge. Prøv heksadesimal, rgb(), hsl() eller et CSS-fargenavn." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Det ser ikke ut som en gyldig URL." @@ -35104,6 +34653,11 @@ msgstr "Appen {PRODUCT_NAME} på den andre enheten din viser det under «Logger msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Appen {PRODUCT_NAME} ble ikke logget inn. Du kan lukke denne fanen." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Sikkerhetsteamet hos {productName} vil gjennomgå rapporten din. Vi vil ikke avsløre at den kom fra deg." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Den oppgitte redirect_uri er ikke registrert for denne appen." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den oppgitte redirect_uri må bruke HTTP eller HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Rapportskjemaet er endret. Start på nytt." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Brukernavnstilene på denne instansen er allerede satt. De kan ikke lenger endres." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Bekreftelseskoden er ugyldig eller utløpt." @@ -36115,13 +35674,8 @@ msgstr "Dette medlemmet er ikke lenger koblet til tale." msgid "This message can only be forwarded to age-restricted channels" msgstr "Denne meldingen kan bare videresendes til kanaler med aldersbegrensning" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Denne meldingen er allerede slettet." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Denne meldingen er allerede publisert" @@ -36279,11 +35833,6 @@ msgstr "Denne tråden er stengt. Å sende en melding vil åpne den igjen." msgid "This thread is locked. Only moderators can send messages." msgstr "Denne tråden er låst. Kun moderatorer kan sende meldinger." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "denne brukeren" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Denne brukeren har begrenset profilen sin. Enkelte detaljer er skjult for personer som ikke er venner med dem." @@ -36292,11 +35841,6 @@ msgstr "Denne brukeren har begrenset profilen sin. Enkelte detaljer er skjult fo msgid "This user has no roles in this community." msgstr "Denne brukeren har ingen roller i dette fellesskapet." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Denne brukeren er allerede utestengt fra fellesskapet." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Denne brukeren er ikke lenger tilgjengelig." @@ -36465,16 +36009,6 @@ msgstr "Tråd oppdatert" msgid "Threads" msgstr "Tråder" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Trusler, forfølging på tvers av områder eller uønsket kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Trusler, trakassering eller skade" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Ga {targetUserTag} timeout" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Gi timeout" @@ -36787,6 +36321,11 @@ msgstr "Tone" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tilpass tonene i HDR-bilder til standard dynamisk område for å redusere maksimal lysstyrke." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "For mange koder er sendt. Vent {duration}, og prøv igjen." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Overfør eierskap for fellesskapet" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Overføre gruppeeierskap til {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Opphev blokkeringen først for å sende en venneforespørsel." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Opphev blokkering av bruker" @@ -37607,16 +37146,6 @@ msgstr "Slå på lyden på alle enheter" msgid "Undeafen yourself" msgstr "Slå på lyden for deg selv" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Bekymring for mindreårige eller barns sikkerhet" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Mindreårig bruker" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Til jeg slår den på igjen" msgid "Unverified email" msgstr "Ubekreftet e-post" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Uønsket oppførsel eller voksent innhold på feil sted." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Uønsket oppførsel, kommentarer eller forespørsler av voksen karakter." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Opptil {DISCOVERY_MAX_TAGS} tagger hjelper folk med å finne fellesskapet ditt. De vises i søket i Oppdag." @@ -38840,11 +38359,6 @@ msgstr "Bruk lyst tema" msgid "Use native title bar" msgstr "Bruk systemets tittellinje" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Bruk bare hvis det tydelig bryter reglene til {productName} og ikke passer inn under noe av det ovenfor." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Brukes kun i dette fellesskapet." msgid "User" msgstr "Bruker" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Brukeren ser ut til å være mindreårig, eller er involvert i grooming eller utnyttelse av barn." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Brukerfeilsøking" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Bruker-ID (valgfritt)" @@ -39061,12 +38570,12 @@ msgstr "Brukeren ble ikke funnet" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Brukerprofil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Brukerprofil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Brukerinnstillinger" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Brukertagg (valgfritt)" @@ -39339,7 +38848,7 @@ msgstr "Verifisert fellesskap" msgid "Verify" msgstr "Bekreft" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Bekreft kode" @@ -39368,7 +38877,7 @@ msgstr "Bekreft at det er deg" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Bekreft e-posten din" @@ -39718,7 +39227,7 @@ msgstr "Vis koder" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Vis fellesskapsprofil" @@ -39751,7 +39260,7 @@ msgstr "Se gaver" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Vis global profil" @@ -39847,26 +39356,6 @@ msgstr "Seer blir med i strømmen" msgid "Viewer leaves stream" msgstr "Seer forlater strømmen" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategori for brudd" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Bruddet er i brukerens profil, ikke en spesifikk melding." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Vold eller voldelige trusler" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Voldelig eller grafisk innhold" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Vi endret størrelsen og komprimerte denne emojien til 128x128 piksler, msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Vi endret størrelsen og komprimerte dette klistremerket til 320x320 piksler, men det er fortsatt {fileSize}. Grensen er {maxSize}. Prøv et enklere bilde, færre farger eller en mindre kildefil." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Vi sendte en kode til {email}." @@ -40472,7 +39961,7 @@ msgstr "Vi behandler dette så snart som mulig. Du får en e-post når arkivet d msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Vi gj" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Vi sender deg en kort kode for å bekrefte at du kan motta oppdateringer om denne rapporten." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Vest-Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Hva slags regel ble brutt?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Hva skjer?" msgid "What's new" msgstr "Nyheter" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Hva er årsaken til rapporten din?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Når en egendefinert grensedato ikke er angitt, kan medlemmer uten tillatelsen <0>{readMessageHistoryPermissionLabel} ikke se eldre meldinger. De ser bare meldinger i sanntid etter hvert som de kommer, og meldingene forsvinner når de starter appen på nytt." @@ -40832,11 +40321,6 @@ msgstr "Hvilke fellesskap" msgid "Which conversations" msgstr "Hvilke samtaler" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Hvilken regel ble brutt?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Når «Trykk for å snakke» er på, styrer snarveien mikrofonen din, så dempeknappen er deaktivert." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Du kan ikke legge ved filer i denne kanalen." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Du kan ikke bli venn med deg selv" @@ -41341,7 +40825,7 @@ msgstr "Du kan ikke sende melding til denne brukeren" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Du må godta vilkårene for bruk for å opprette en konto" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Du må bekrefte e-postadressen din før du sender en rapport." @@ -41891,6 +41375,11 @@ msgstr "Du har en eldre pris. Gjeldende pris for denne planen er {currentSubscri msgid "You're sending messages too quickly" msgstr "Du sender meldinger for raskt" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Du sender rapporter for fort. Prøv igjen senere." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Du ser på eldre meldinger" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Du har lagt til flere personer enn en gruppechat tillater. Fjern noen og prøv igjen." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Du har allerede rapportert denne meldingen." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Du har allerede rapportert denne profilen i dag." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Kontoene og innstillingene dine er ikke endret eller slettet." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Handlingen din kunne ikke fullføres fordi den ble flagget av sikkerhetssystemene våre. Hvis du mener dette er en feil, kan du kontakte kundestøtte." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Dine svar" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Søknaden din venter på gjennomgang. Du kan fortsatt oppdatere oppføringsdetaljene eller trekke tilbake søknaden." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Nettleseren din krever brukerinteraksjon før lyd kan spilles av. Klikk på knappen nedenfor for å aktivere talechat." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Endringene dine når alle lokalsamfunn som følger denne kanalen, noe som kan ta et minutt. Hver publiserte melding tillater 3 raske redigeringer, deretter 1 hver 20. minutt." @@ -42311,6 +41815,11 @@ msgstr "Det nye kallenavnet ditt, eller la det stå tomt for å tilbakestille de msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Ditt gamle gjenopprettingssett fungerer ikke lenger. Oppbevar dette nye et trygt sted." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Dine alternativer" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "din region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Betalingen for fornyelsen mislyktes, men <0/> forblir aktive frem til <1>{graceDate}. Oppdater betalingsmåten din før den tid for å beholde abonnementet." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Rapporten din ble ikke sendt. Prøv igjen." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Abonnementet ditt byttes til årlig fakturering ved neste fornyelse." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS-en for temaet ditt er for stor til å deles. Gjør den mindre og prøv igjen." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Brukernavnet ditt (valgfritt)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index c1cbf5891..7fe7f63ff 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -2081,7 +2081,7 @@ msgstr "Pozostało: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {członek} few {członków} many {członków} other {członka}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Twój link z zaproszeniem wygaśnie za # sekundę.} few {Twój link z zaproszeniem wygaśnie za # sekundy.} many {Twój link z zaproszeniem wygaśnie za # sekund.} other {Twój link z zaproszeniem wygaśnie za # sekundy.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Wybrano: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Dane konta" msgid "Account details unavailable" msgstr "Szczegóły konta niedostępne" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Konto służy do spamowania, oszukiwania lub nadużywania platformy." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Dodano: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Dodano: {createdDate} • ostatnio używano: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Dodatkowe uwagi (opcjonalnie)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Już odebrano" msgid "Already set to cancel" msgstr "Anulowanie już zaplanowane" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Zgłoś tę wiadomość również zespołowi ds. bezpieczeństwa {productName}" @@ -4576,11 +4566,6 @@ msgstr "Rocznie" msgid "Another checkbox" msgstr "Kolejne pole wyboru" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Inne wyraźne naruszenie zasad" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Kolejne okrągłe pole wyboru" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Przesyłanie audio" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Chwilowo mnie nie ma" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Chwilowo mnie nie ma" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Wstecz" @@ -5788,9 +5775,7 @@ msgstr "Kody zapasowe wygenerowane ponownie" msgid "Badge" msgstr "Odznaka" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Zbanuj" @@ -5819,7 +5804,7 @@ msgstr "Czas trwania bana" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banuj członków w społeczności, z możliwością usunięcia ich ostat msgid "Ban reason" msgstr "Powód zbanowania" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Zbanuj tego użytkownika" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Przepustowość" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Zbanowany" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Zbanowano {targetUserTag} w społeczności" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Przed datą" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgia" @@ -6031,7 +6006,7 @@ msgstr "Przepływność" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Zablokuj" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blokuj" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Zablokuj użytkownika {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Zablokuj we wszystkich społecznościach" msgid "Block spoiler" msgstr "Spoiler blokowy" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Zablokuj tego użytkownika" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Zablokuj użytkownika" msgid "Blocked" msgstr "Zablokowani" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Zablokowano" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Wbudowane translatory" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bułgaria" @@ -6519,16 +6500,6 @@ msgstr "Bułgarski" msgid "Bulk delete" msgstr "Masowe usuwanie" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Nękanie, powtarzające się niechciane kontakty, prześladowanie lub ukierunkowane znęcanie się." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Nękanie, groźby, nienawiść, przemoc, naloty lub treści zachęcające do samookaleczeń." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornia" msgid "Call" msgstr "Połącz" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Ustawienia połączeń i czatów grupowych" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Zmień baner" msgid "Change chat embed background" msgstr "Zmień tło podglądu zaproszenia na czacie" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Zmień adres e-mail" @@ -7150,8 +7116,8 @@ msgstr "Zmień pseudonim znajomego" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Zmień pseudonim w grupie" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Zmień język" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Zmień mój pseudonim w grupie" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Zmień własny pseudonim" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Zmień właściciela" @@ -7283,16 +7249,6 @@ msgstr "Zmień region głosowy używany przez kanał głosowy." msgid "Change which voice region this channel uses." msgstr "Zmień region głosowy używany przez ten kanał." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Zmień, kto może do Ciebie dzwonić lub Cię dodawać." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Zmień, kto może się z Tobą kontaktować." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Sprawdź skrzynkę odbiorczą pod adresem {emailAddress} w poszukiwaniu msgid "Check your inbox for a verification email." msgstr "Sprawdź, czy w Twojej skrzynce odbiorczej jest wiadomość weryfikacyjna." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Sprawdź swoje zgłoszenie" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Pola wyboru" @@ -7901,21 +7862,6 @@ msgstr "Realizacja zakupu jest zablokowana dla tego konta. Skontaktuj się z {su msgid "Checkout unavailable" msgstr "Płatność niedostępna" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Zagrożenie bezpieczeństwa dzieci" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Bezpieczeństwo dzieci lub wykorzystywanie nieletnich" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Bezpieczeństwo dzieci lub treści dla dorosłych" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Opcje" msgid "Choices: {choiceList}" msgstr "Dostępne wartości: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Wybierz" @@ -8122,6 +8068,11 @@ msgstr "Wybierz kategorię, która najlepiej opisuje Twoją społeczność. Moż msgid "Choose the premium model" msgstr "Wybierz model premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Wybierz powód ponownie" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Odbierz prezent" msgid "Claim your account" msgstr "Dokończ rejestrację swojego konta" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Dokończ rejestrację konta i zweryfikuj swój adres e-mail, aby wysyłać zgłoszenia." @@ -8352,12 +8303,12 @@ msgstr "Dokończ rejestrację konta, aby odebrać ten prezent." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Dokończ rejestrację konta, aby wysyłać zaproszenia do znajomych." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Zgłoś swoje konto, aby wysyłać raporty." @@ -8378,11 +8329,6 @@ msgstr "Dokończ rejestrację konta, aby rozpoczynać rozmowy 1:1 lub do nich do msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Odbierz swój prezent, aby aktywować subskrypcję {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Podszywanie się pod inną osobę, markę lub organizację." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Wyczyść pole wyszukiwania" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Zamknij okno" msgid "Close popout" msgstr "Zamknij okienko" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Zamknij tę rozmowę prywatną" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Pozostaw w zasobniku systemowym po zamknięciu" msgid "Close window" msgstr "Zamknij okno" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Zamknij obecną rozmowę z {dmDisplayName}. Nie blokuje to użytkownika i możesz później ponownie otworzyć tę rozmowę." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Zamknąć rozmowę prywatną z {displayName}? Możesz ją ponownie otworzyć w każdej chwili." @@ -8837,7 +8773,7 @@ msgstr "Węglowy motyw" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kod" @@ -8868,7 +8804,7 @@ msgstr "Kod z aplikacji {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kod wysłany ponownie" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Społeczności, do których możesz dołączyć" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Społeczność" @@ -9131,7 +9065,7 @@ msgstr "Wyłącz dźwięk w społeczności" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Debugowanie społeczności" @@ -9150,16 +9084,6 @@ msgstr "Społeczność usunięta" msgid "Community DM" msgstr "Wiadomości prywatne od członków społeczności" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Społeczność istnieje, aby spamować, oszukiwać lub nadużywać platformy." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Społeczność ułatwia nękanie grupowe lub ukierunkowane ataki." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ikona społeczności" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Identyfikator społeczności" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Identyfikator społeczności jest wymagany." @@ -9526,6 +9450,11 @@ msgstr "Potwierdź nowe hasło" msgid "Confirm password" msgstr "Potwierdź hasło" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Potwierdź oświadczenie, aby wysłać zgłoszenie." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Kontynuuj w przeglądarce" msgid "Continue to checkout" msgstr "Przejdź do płatności" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Kontynuuj zgłaszanie społeczności" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Kontynuuj zgłaszanie użytkownika" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Konwersja tego kanału na kanał tekstowy spowoduje usunięcie wszystkic msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Konwertuje przychodzące treści na mowę, niezależnie od tego, czy pochodzą z /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Koordynuje naloty, zmasowane ataki lub nękanie osób bądź społeczności." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Skopiowano adres URL do schowka" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Skopiowano adres URL do schowka" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopiuj identyfikator wiadomości" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopiuj link do wiadomości" @@ -10643,6 +10553,11 @@ msgstr "Nie udało się wczytać postów. Spróbuj ponownie później." msgid "Couldn't load settings" msgstr "Nie można załadować ustawień" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nie udało się załadować formularza zgłoszenia." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nie udało się wczytać tej aplikacji" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nie udało się przetworzyć obrazu" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nie udało się opublikować tej wiadomości" @@ -10825,11 +10740,6 @@ msgstr "Nie udało się wysłać zaproszenia" msgid "Couldn't send invite. Try again." msgstr "Nie udało się wysłać zaproszenia. Spróbuj ponownie." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nie udało się wysłać. Spróbuj ponownie." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Minutnik" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Kraj zamieszkania" @@ -11301,13 +11211,8 @@ msgstr "Utworzono:" msgid "Credentials" msgstr "Dane uwierzytelniające" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Wiarygodne groźby, drastyczna przemoc lub gloryfikacja przemocy." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Chorwacja" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Wycisza dźwięk poniżej progu głośności, minimalnie obciążając procesor." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cypr" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Czeski" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Czechy" @@ -11965,7 +11870,7 @@ msgstr "Debuguj kanał" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Debuguj społeczność" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Usunąć motyw?" msgid "Delete this invite? Can't be undone." msgstr "Usunąć to zaproszenie? Tej operacji nie można cofnąć." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Usuń tę wiadomość" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Usunąć tę wiadomość? Tej operacji nie można cofnąć." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Usunąć tę wiadomość? Nie można tego cofnąć. Ta wiadomość zostanie również usunięta ze wszystkich społeczności, które obserwują ten kanał." @@ -12461,11 +12359,6 @@ msgstr "Usunąć Twoje wiadomości w tej społeczności?" msgid "Delete your messages in this conversation?" msgstr "Usunąć Twoje wiadomości w tej rozmowie?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Usunięto" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Odmówiono {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dania" @@ -12554,11 +12447,6 @@ msgstr "Opisz naklejkę" msgid "Describe this media for screen readers" msgstr "Opisz ten element multimedialny dla czytników ekranu" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Opisz, co sprawia, że treść jest nielegalna" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Odłączony baner" msgid "Detail" msgstr "Szczegół" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Szczegóły" @@ -13315,11 +13203,6 @@ msgstr "Nazwa wyświetlana (opcjonalnie)" msgid "Display scaling" msgstr "Skalowanie wyświetlania" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Rozpowszechnia złośliwe oprogramowanie, narzędzia do kradzieży danych uwierzytelniających lub inne szkodliwe pliki." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "PW" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Ustawienia DM i zaproszeń do znajomych" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentacja" msgid "Doesn't allow being added to group DMs" msgstr "Nie zezwala na dodawanie do czatów grupowych" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Nie blokuje. Możesz ponownie otworzyć później." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Przekaż darowiznę zamiast tego" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Pobierz mapy źródłowe, aby ślady stosu i narzędzia deweloperskie ws msgid "Download video" msgstr "Pobierz wideo" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, ujawnienie prywatnych informacji lub stalking." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, stalking, podszywanie się pod kogoś lub nieodpowiedni profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Edytuj kolor dla {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Edytuj profil w społeczności" @@ -14043,7 +13908,7 @@ msgstr "Edytuj indywidualne uprawnienia ról i członków w tym kanale." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Edytuj profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Edytuj czas lokalny profilu" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Edytować opublikowaną wiadomość?" @@ -14191,13 +14056,13 @@ msgstr "Zwrot możliwy do {windowEndsOn}. Spowoduje to również natychmiastowe #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Adres e-mail" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Adres e-mail jest wymagany." @@ -14721,16 +14586,6 @@ msgstr "Preferowana metoda kodowania dla nowych udostępnień ekranu." msgid "Encoder, SVC, and bitrate presets" msgstr "Koder, SVC i presety przepustowości" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Zachęca do samookaleczeń" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Zachęca do samobójstwa, samookaleczeń lub zaburzeń odżywiania." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Szyfrowanie end-to-end jest niedostępne, ponieważ uczestnik tej rozmow msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Szyfrowanie end-to-end jest niedostępne, ponieważ uczestnik tego kanału głosowego korzysta z nieobsługiwanego klienta." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Zagraża nieletnim lub zawiera treści związane z wykorzystywaniem dzieci." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Wpisz kod w formacie ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Wprowadź prawidłowy adres URL lub kod szablonu {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Wpisz prawidłowy adres e-mail." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Wprowadź prawidłowy link do wiadomości." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Wprowadź {digitCount}-cyfrowy kod z aplikacji uwierzytelniającej." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Wpisz kod, aby kontynuować." @@ -15008,7 +14858,7 @@ msgstr "naciśnij Enter, aby <0><1>zapisać" msgid "Enter username" msgstr "Wpisz nazwę użytkownika" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Wpisz kod weryfikacyjny" @@ -15017,6 +14867,11 @@ msgstr "Wpisz kod weryfikacyjny" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Wpisz swój adres e-mail, a wyślemy Ci link do zresetowania hasła." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Podaj swoje pełne imię i nazwisko, aby wysłać zgłoszenie." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "naciśnij Esc, aby <0><1>anulować" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Wygasa {earliest}" msgid "Expires:" msgstr "Wygasa:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Wyjaśnij problem" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Wyjaśnij problem, aby wysłać zgłoszenie." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Linki zewnętrzne mogą być niebezpieczne. Zachowaj ostrożność." msgid "Extra large" msgstr "Bardzo duże" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Ekstremistyczna społeczność" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Nie udało się usunąć niestandardowego adresu URL. Spróbuj ponownie." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Nie udało się ponownie wysłać kodu. Spróbuj ponownie." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Nie udało się zresetować stanu Premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Nie udało się wysłać kodu. Spróbuj ponownie." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Nie udało się wysłać wiadomości. Przytrzymaj, aby wyświetlić opcje." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Nie udało się wysłać zgłoszenia. Spróbuj ponownie." @@ -15840,11 +15700,6 @@ msgstr "Nie udało się przesłać emoji, zaczynając od {startLabel}: {errorMsg msgid "Failed to upload emojis. Try again." msgstr "Nie udało się przesłać emoji. Spróbuj ponownie." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Fałszywe twierdzenia, które mogą spowodować rzeczywiste szkody." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Znajdź idealną naklejkę" msgid "Fingerprint" msgstr "Odcisk palca" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Zakończ konfigurowanie konta" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Najpierw dokończ konfigurację konta" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Dokończ rejestrację, aby wysyłać zaproszenia do znajomych." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Fiński" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Imię i nazwisko" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Liczba klatek powyżej 30 kl./s wymaga {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Francja" @@ -16834,10 +16689,10 @@ msgstr "Pełny" msgid "Full dynamic range" msgstr "Pełny zakres dynamiki" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Imię i nazwisko" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Pełne imię i nazwisko jak w dokumencie tożsamości (opcjonalnie w zgłoszeniach dotyczących seksualnego wykorzystywania dzieci)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Niemiecki" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Niemcy" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Wróć" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Wróć i wprowadź prawidłowy adres e-mail." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Miło Cię widzieć, {username}! Witaj." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grecja" @@ -17572,11 +17427,6 @@ msgstr "Grecki" msgid "Grid view" msgstr "Widok siatki" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Treści związane z groomingiem lub wykorzystywaniem dzieci." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Nazwa użytkownika" msgid "Hang out with voice, video and screen share" msgstr "Porozmawiajcie przez głos, wideo i udostępniajcie ekran" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Nękanie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Nękanie z użyciem treści dla dorosłych" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Nękanie lub zastraszanie" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Nękanie lub prześladowanie" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Nękanie lub ataki wymierzone w konkretne osoby" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Nękanie lub groźby" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Klucz sprzętowy" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Przyspieszany sprzętowo w większości systemów Windows i macOS. Niezawodny na starszych urządzeniach." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Szkodliwa dezinformacja" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Ma historię zakupów" msgid "Has ever purchased override" msgstr "Wymuszenie historii zakupów" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Mowa nienawiści" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Ukryć udostępnianie własnego ekranu?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Ukrywa przyciski pobierania, otwierania w przeglądarce i kopiowania dla obrazów i filmów w tym kanale." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Ukrywa wiadomości tej osoby i uniemożliwia jej wysyłanie Ci wiadomości" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Węgierski" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Węgry" @@ -18399,6 +18212,11 @@ msgstr "Jestem podpowiedzią" msgid "I changed my mind" msgstr "Jednak rezygnuję" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Potwierdzam w dobrej wierze, że informacje i zarzuty zawarte w tym zgłoszeniu są dokładne i kompletne." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Ustawienia nieaktywności" msgid "Idle timeout" msgstr "Limit czasu bezczynności" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Jeśli sprawa dotyczy osoby nieletniej, wybierz zamiast tego „{childSafetyReasonName}”." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Jeśli konto korzysta z tego adresu, wysłaliśmy instrukcje resetowania msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Jeśli macOS poprosi o ponowne uruchomienie programu {productName}, wybierz opcję Później." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Jeśli ktoś może być w bezpośrednim niebezpieczeństwie, skontaktuj się z lokalnymi służbami ratunkowymi, o ile możesz to zrobić bezpiecznie." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Jeśli ktoś jest w bezpośrednim niebezpieczeństwie, najpierw skontaktuj się z lokalnymi służbami ratunkowymi." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Jeśli ktoś polecił Ci wkleić coś tutaj, to oszustwo, które może pozwolić tej osobie przejąć Twoje konto {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Jeśli zgłoszenie dotyczy materiałów CSAM lub wykorzystywania nieletnich, wyślij je teraz i nie udostępniaj ponownie tych materiałów." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Jeśli to wiarygodne, bezpośrednie zagrożenie, skontaktuj się również z lokalnymi służbami ratunkowymi." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Jeśli to bezpośrednie zagrożenie terrorystyczne, skontaktuj się również z lokalnymi służbami ratunkowymi." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Jeśli to zgłoszenie dotyczy konkretnej wiadomości w tej społeczności, zgłoś tę wiadomość. Zgłoszenia wiadomości zapewniają naszemu zespołowi ds. bezpieczeństwa najjaśniejszy kontekst, a dodanie szczegółów w komentarzach może przyspieszyć naszą weryfikację. Kontynuuj zgłaszanie całej społeczności tylko wtedy, gdy zgłoszenie wiadomości nie oddałoby szerszego problemu." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Jeśli zgłoszenie dotyczy konkretnej wiadomości, zgłoś tę wiadomość. Zgłoszenia wiadomości najlepiej przedstawiają kontekst naszemu zespołowi ds. bezpieczeństwa, a dodatkowe szczegóły w komentarzach mogą przyspieszyć rozpatrzenie sprawy. Kontynuuj ogólne zgłoszenie użytkownika tylko wtedy, gdy ta wiadomość nie oddaje szerszego problemu." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Jeśli zgłoszenie dotyczy konkretnych wiadomości, zgłoś tę najistotniejszą. Zgłoszenia wiadomości najlepiej przedstawiają kontekst naszemu zespołowi ds. bezpieczeństwa, a dodatkowe szczegóły w komentarzach mogą przyspieszyć rozpatrzenie sprawy. Kontynuuj ogólne zgłoszenie użytkownika tylko wtedy, gdy zgłoszenie wiadomości nie oddałoby szerszego problemu." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Jeśli uważasz, że jest to nielegalne, podaj, o jakie prawo chodzi i dlaczego." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Pomijaj czas oczekiwania między wiadomościami w trybie wolnym tego kan msgid "Ignore virtual" msgstr "Ignoruj wirtualne" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Nielegalna działalność" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Nielegalna działalność lub coś innego" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Nielegalna sprzedaż, ułatwianie przestępstw lub wyraźne naruszenie zasad, które nie pasuje do powyższych kategorii." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Nielegalna sprzedaż, ułatwianie przestępstw lub niezgodna z prawem działalność." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Obrazy" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Obrazy wklejone ze schowka są wysyłane jako załączniki, a Ty nie masz uprawnień do załączania plików na tym kanale." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Podszywanie się" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Podszywanie się lub treści wprowadzające w błąd" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Nieaktywne" msgid "Inactive timeout" msgstr "Limit czasu braku aktywności" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Nieodpowiedni profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Dołącz moje dwuskładnikowe kody zapasowe do pliku PDF i wydruku" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Podaj identyfikator społeczności." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Tło zaproszenia" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Kod zaproszenia (opcjonalnie)" @@ -19471,7 +19220,7 @@ msgstr "Maskowanie zaproszeń" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Zaproś członków" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Adres IP autoryzowany" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlandia" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursywa" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Włochy" @@ -20120,7 +19869,7 @@ msgstr "Klawisze" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Później" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Łotwa" @@ -20291,11 +20040,6 @@ msgstr "Dowiedz się więcej" msgid "Learn more about Visionary" msgstr "Dowiedz się więcej o Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Opuść" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Opuść wątek prywatny" msgid "Leave silently" msgstr "Opuść po cichu" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Opuść społeczność" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Wyświetla członków z tą rolą w osobnej sekcji na liście członków." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litwa" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Ładowanie..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Ładowanie…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Niski" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luksemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Zaplanowano prace konserwacyjne na {localizedTime}. Przewidywany czas trwania: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Ustawić {userName} jako właściciela grupy? Stracisz uprawnienia właściciela." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Ustaw jako właściciela grupy" @@ -21091,38 +20830,21 @@ msgstr "Ustaw jako właściciela grupy" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Upewnij się, że ten kod pasuje do kodu w aplikacji {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Upewnij się, że wszystko wygląda dobrze, zanim wyślesz." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Spersonalizuj swoją instancję" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Złośliwe linki" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Rozpowszechnianie złośliwego oprogramowania" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Złośliwe oprogramowanie lub niebezpieczne linki" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Złośliwe oprogramowanie, kradzież danych uwierzytelniających lub szkodliwe pliki." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskuj prywatne dane przed udostępnieniem ekranu lub transmisji." msgid "Mask Visionary as subscription" msgstr "Pokazuj Visionary jako subskrypcję" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Masowy spam, oszustwa, fałszywe konkursy lub nadużycia konta." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Potwierdzenie dostępu do multimediów dla dorosłych" msgid "Mature content not allowed" msgstr "Treści dla dorosłych niedozwolone" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Treści dla dorosłych lub nękanie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Treści dla dorosłych lub niewłaściwe ograniczenia dostępu" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Indywidualne ustawienie treści dla dorosłych" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Naruszenie zasad dotyczących treści dla dorosłych" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Treści dla dorosłych bez odpowiednich ograniczeń dostępu." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Wiadomość" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "link do wiadomości" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Link do wiadomości" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Podglądy wiadomości na liście rozmów prywatnych" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Wiadomość opublikowana" @@ -22211,6 +21908,11 @@ msgstr "Czas wiadomości" msgid "Message unpinned" msgstr "Wiadomość odpięta" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Wiadomość, którą zgłaszasz" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Nieletni w niebezpieczeństwie, treści dla dorosłych w niewłaściwym miejscu lub niepożądane zachowanie." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Więcej" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Więcej działań" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Zagnieżdżone" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Niderlandy" @@ -24099,7 +23796,7 @@ msgstr "Brak wyników" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Brak wyników" @@ -24858,6 +24555,16 @@ msgstr "Tylko osoby, które zaprosisz, oraz moderatorzy mogą zobaczyć ten wąt msgid "Only places I can't access anymore" msgstr "Tylko miejsca, do których nie mam już dostępu" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Zgłaszaj tylko to, co Twoim zdaniem faktycznie narusza zasady, i nie wysyłaj tego samego zgłoszenia dwa razy." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Zgłaszaj tylko to, co Twoim zdaniem narusza zasady. Nadużywanie zgłoszeń jest niezgodne z naszymi <0>zasadami społeczności." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Krycie" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Otwórz na {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Otwórz listę" @@ -25379,11 +25084,6 @@ msgstr "Otwórz Ustawienia systemowe → Prywatność i ochrona → Nagrywanie msgid "Open template JSON" msgstr "Otwórz szablon JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Otwórz okno banowania w tej społeczności." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Otwórz ustawienia" msgid "Opened the thread again" msgstr "Ponownie otwarto wątek" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Otwiera się w nowej karcie" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Pierwotnie zbanowany dnia {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Inne" @@ -25654,11 +25357,6 @@ msgstr "Inna reakcja…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Nasz zespół ds. bezpieczeństwa rozpatruje sprawę. Gdy podejmiemy decyzję, wyślemy Ci wiadomość prywatną i e-mail." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Nie udało się przenieść własności na <0>{username} w tym momencie." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Własność przeniesiona" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Wklej odpowiedź JSON tutaj" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Wklej link do wiadomości." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, oszustwa, złośliwe linki lub fałszywe twierdzenia, które mogą spowodować szkody w świecie rzeczywistym." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Wybierz dostawcę wyszukiwania w sieci" msgid "Pick an emoji" msgstr "Wybierz emotikonę" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Wybierz opcję, aby kontynuować." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Wybierz 4-cyfrową liczbę po swojej nazwie użytkownika" msgid "Pick the appearance this administrator account should start with." msgstr "Wybierz początkowy wygląd interfejsu dla tego konta administratora." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Wybierz regułę do sprawdzenia." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Poczekaj chwilę i spróbuj zmienić nazwę ponownie." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polska" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugalia" @@ -26872,11 +26555,6 @@ msgstr "naciśnij, aby dodać reakcję" msgid "press to remove reaction" msgstr "naciśnij, aby usunąć reakcję" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Podszywanie się pod inną osobę, w tym treści generowane przez sztuczną inteligencję, które mają na celu oszukanie." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Na określony czas uniemożliwiaj użytkownikowi <0>{targetUserTag} wysyłanie wiadomości, reagowanie i łączenie się z kanałami głosowymi." @@ -27078,11 +26756,6 @@ msgstr "Mówca priorytetowy" msgid "Privacy" msgstr "Prywatność" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Prywatność lub podszywanie się" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Konfiguracja prywatności" msgid "Privacy URL" msgstr "Adres URL polityki prywatności" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Naruszenie prywatności" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Naruszenie prywatności lub doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Naruszenie prywatności lub nękanie" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Typ profilu" msgid "Profile updated" msgstr "Profil zaktualizowany" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Naruszenie zasad dotyczących profilu, nazwy użytkownika lub awatara" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promuje nienawiść wobec grup chronionych." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promuje lub koordynuje działalność ekstremistyczną opartą na przemocy albo rekrutuje do niej." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promowanie lub instrukcje zachęcające do samookaleczeń lub zaburzeń odżywiania." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profil, który zgłaszasz" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Zaimki: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Chroń swoje konto Visionary, włączając uwierzytelnianie dwuskładnikowe. Dziękujemy za wspieranie {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Podaj identyfikator użytkownika lub tag użytkownika." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Podaj identyfikator lub nazwę użytkownika osoby, którą zgłaszasz." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Podaj swoje pełne imię i nazwisko do oświadczenia." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Przyciski opcji pozwalają wybrać jedną opcję z grupy." msgid "Radio group" msgstr "Grupa przycisków opcji" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Koordynacja nalotu" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Chcesz kupić prezent?" msgid "Ready to upgrade?" msgstr "Chcesz ulepszyć?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Powód" @@ -28291,8 +27924,8 @@ msgstr "Zapamiętaj rozmiar i położenie okna" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Usuń {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Usunąć użytkownika {userName} z grupy?" @@ -28419,8 +28052,8 @@ msgstr "Usuń z ulubionych" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Usuń z grupy" @@ -28458,11 +28091,6 @@ msgstr "Usuń z ulubionych GIF-ów zapisanych na podstawie adresu URL" msgid "Remove icon" msgstr "Usuń ikonę" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Usuń ją z kanału dla wszystkich." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Usunięto z ulubionych" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Usunięto z grupy" @@ -28919,28 +28547,18 @@ msgstr "Zgłoś społeczność" msgid "Report a message" msgstr "Zgłoś wiadomość" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Zgłoś naruszenie zasad lub znajdź narzędzia do zarządzania kontaktami i preferencjami." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Zgłoś profil użytkownika" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Zgłoś społeczność" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Szczegóły zgłoszenia" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Zgłoś nielegalne treści" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Zgłoś problem" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Zgłoś wiadomość" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Zgłoś profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Zgłoszenie wysłane" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Typ zgłoszenia" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Zgłoś użytkownika" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag zgłoszonego użytkownika (opcjonalnie)" @@ -29100,6 +28716,10 @@ msgstr "Wymaga spełnienia wszystkich warunków z poziomu średniego oraz bycia msgid "Resend" msgstr "Wyślij ponownie" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Wyślij ponownie ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Wyślij ponownie ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Wyślij ponownie ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Wyślij ponownie ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Wyślij ponownie ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Wyślij ponownie ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Wyślij ponownie ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Wyślij kod ponownie" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Role zaktualizowane pomyślnie" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumunia" @@ -29947,7 +29567,7 @@ msgstr "Nasycenie" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Przywitaj się z <0>{displayName}. Tutaj zaczyna się wasza rozmowa. msgid "Scale" msgstr "Skala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Oszustwa, złośliwe oprogramowanie lub dezinformacja" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej." @@ -30855,11 +30470,6 @@ msgstr "Wybierz" msgid "Select {accessibleName}" msgstr "Wybierz {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Wybierz kategorię" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Wybierz społeczność, w której masz uprawnienie „{permissionName}”, lub czat grupowy, do którego należysz." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Wybierz kraj" @@ -30911,11 +30521,6 @@ msgstr "Wybierz URI przekierowania" msgid "Select a scenario to apply..." msgstr "Wybierz scenariusz do zastosowania…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Wybierz kategorię naruszenia." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Wybierz konto, na które chcesz się zalogować na nowym urządzeniu." msgid "Select voice processing mode" msgstr "Wybierz tryb przetwarzania głosu" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Wybierz, co chcesz zgłosić." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Wybierz kraj zamieszkania." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Wybierz…" @@ -31037,13 +30642,6 @@ msgstr "Zaznaczenie: {0} (maks. {1})" msgid "Selections" msgstr "Wybrane" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Samookaleczenie lub samobójstwo" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Wyślij wiadomość akcji (zostanie wyświetlona kursywą)." msgid "Send animation" msgstr "Wyślij animację" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Wyślij kolejne zgłoszenie" @@ -31138,7 +30736,7 @@ msgstr "Przycisk wysyłania" msgid "Send code" msgstr "Wyślij kod" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Wyślij zgłoszenie DSA" @@ -31158,9 +30756,9 @@ msgstr "Wyślij pliki o rozmiarze do {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Wyślij zaproszenie do znajomych" @@ -31220,8 +30818,8 @@ msgstr "Wysyłaj wiadomości w wątkach" msgid "Send messages, images, GIFs and emoji" msgstr "Wysyłaj wiadomości, obrazy, GIF-y i emotikony" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Wyślij zgłoszenie" @@ -31255,7 +30853,7 @@ msgstr "Cofnąć przypiętą wiadomość w czasie?" msgid "Send TTS messages" msgstr "Wysyłanie wiadomości TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Wyślij kod weryfikacyjny" @@ -31273,11 +30871,6 @@ msgstr "Wyślij wiadomość głosową" msgid "Send:" msgstr "Wysyłanie:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Wysyłanie złośliwego oprogramowania lub niebezpiecznych linków" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Udostępnij motyw" msgid "Share voice activity with all friends?" msgstr "Udostępnić aktywność głosową wszystkim znajomym?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Podaj szczegóły, które pomogą naszemu zespołowi ocenić zgłoszenie." @@ -31709,11 +31302,6 @@ msgstr "Podaj szczegóły, które pomogą naszemu zespołowi ocenić zgłoszenie msgid "Share with a friend" msgstr "Udostępnij znajomemu" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Udostępnij moderatorom społeczności." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Udostępnione okno" msgid "Shared window audio" msgstr "Dźwięk udostępnianego okna" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Udostępnia dane osobowe, śledzi użytkowników lub koordynuje naruszenia prywatności." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Udostępnianie danych osobowych" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Suwaki" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Słowacja" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Słowenia" @@ -32889,11 +32467,6 @@ msgstr "Symulacja trybu wolnego" msgid "Slowmode time remaining" msgstr "Pozostały czas oczekiwania w trybie wolnym" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Obraźliwe, odczłowieczające wypowiedzi lub ataki na grupy chronione." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Coś poszło nie tak podczas przygotowywania tej naklejki. Spróbuj z innym plikiem lub spróbuj ponownie za chwilę." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Coś poszło nie tak podczas publikowania. Spróbuj ponownie za chwilę." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Przestronny układ z wyraźnym wizualnym rozdzieleniem wiadomości." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Hiszpania" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Konto spamujące" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Klasyfikacja spamu" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam lub oszustwo" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Społeczność rozsyłająca spam lub oszustwa" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Konto rozsyłające spam, oszustwa lub wyłudzające dane" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, oszustwa lub phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Zminimalizuj przy starcie" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Zacznij od nowa" @@ -33752,22 +33302,26 @@ msgstr "Pozostań zalogowany" msgid "Step {current} of {total}" msgstr "Krok {current} z {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Krok 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Krok 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Krok 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Krok 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Krok 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Przestać być kanałem ogłoszeń?" msgid "Stop hiding muted channels by default?" msgstr "Przestać domyślnie ukrywać wyciszone kanały?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Zablokuj wiadomości i zaproszenia do znajomych." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Zatrzymaj test mikrofonu" @@ -33959,11 +33508,6 @@ msgstr "Przestań modyfikować metody insertBefore i removeChild w Node.prototyp msgid "Stop ringing" msgstr "Zatrzymaj dzwonienie" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Przestań widzieć treści i członków tej społeczności." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Zamień popularne emotikony tekstowe, takie jak :) i <3, na emoji podczas wysyłania wiadomości" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Szwecja" @@ -34804,11 +34348,6 @@ msgstr "Dotknij, aby dodać notatkę" msgid "tar.gz archive" msgstr "Archiwum tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Atakuje osoby ze względu na cechy objęte ochroną." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Warunki korzystania z usługi" msgid "Terms URL" msgstr "Adres URL warunków korzystania z usługi" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terroryzm lub brutalny ekstremizm" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tajski" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Dziękujemy za pomoc w dbaniu o bezpieczeństwo w {productName}. Rozpatrzymy Twoje zgłoszenie tak szybko, jak to możliwe." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Dziękujemy za sygnał" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Dziękujemy za informację. To samo w sobie nie narusza naszych zasad, więc nie wysłaliśmy zgłoszenia." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Dziękujemy za informację. To samo w sobie nie narusza naszych zasad, więc nie wysłaliśmy zgłoszenia. Jeśli jest skierowane do kogoś lub zawiera obelgi, zgłoś to ponownie i wybierz „Treści obraźliwe lub szkodliwe”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Nie udało się. Spróbuj ponownie lub anuluj." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "To nie wygląda na prawidłowy kolor. Spróbuj formatu szesnastkowego, rgb(), hsl() lub nazwy koloru CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "To nie wygląda na prawidłowy adres URL." @@ -35104,6 +34653,11 @@ msgstr "Aplikacja {PRODUCT_NAME} na Twoim drugim urządzeniu wyświetla ją w se msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Aplikacja {PRODUCT_NAME} nie została zalogowana. Możesz zamknąć tę kartę." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Zespół ds. bezpieczeństwa {productName} przeanalizuje Twoje zgłoszenie. Nie ujawnimy, że pochodziło od Ciebie." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Podany adres redirect_uri nie jest zarejestrowany dla tej aplikacji." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Podany adres redirect_uri musi używać protokołu HTTP lub HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Formularz zgłoszenia został zmieniony. Zacznij ponownie." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Tagów użytkownika na tej instancji nie można już zmienić." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Kod weryfikacyjny jest nieprawidłowy lub wygasł." @@ -36115,13 +35674,8 @@ msgstr "Ten użytkownik nie jest już połączony z czatem głosowym." msgid "This message can only be forwarded to age-restricted channels" msgstr "Tę wiadomość można przesłać dalej tylko do kanałów z ograniczeniami wiekowymi" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Ta wiadomość została już usunięta." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Ta wiadomość została już opublikowana" @@ -36279,11 +35833,6 @@ msgstr "Ten wątek jest zamknięty. Wysyłanie wiadomości ponownie go otworzy." msgid "This thread is locked. Only moderators can send messages." msgstr "Ten wątek jest zablokowany. Tylko moderatorzy mogą wysyłać wiadomości." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "ten użytkownik" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Ten użytkownik ograniczył dostęp do swojego profilu. Niektóre szczegóły są ukryte przed osobami, które nie są jego znajomymi." @@ -36292,11 +35841,6 @@ msgstr "Ten użytkownik ograniczył dostęp do swojego profilu. Niektóre szczeg msgid "This user has no roles in this community." msgstr "Ten użytkownik nie ma żadnych ról w tej społeczności." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Ten użytkownik jest już zbanowany w społeczności." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Ten użytkownik jest już niedostępny." @@ -36465,16 +36009,6 @@ msgstr "Wątek zaktualizowany" msgid "Threads" msgstr "Wątki" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Groźby, śledzenie w różnych miejscach lub niechciany kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Groźby, nękanie lub krzywdzenie" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Nałożono czasowe ograniczenie na {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Czasowe ograniczenie" @@ -36787,6 +36321,11 @@ msgstr "Tonacja" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mapuj obrazy HDR do standardowego zakresu, zmniejszając szczytową jasność." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Wysłano zbyt wiele kodów. Odczekaj {duration} i spróbuj ponownie." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Przekaż własność społeczności" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Przekazać własność grupy użytkownikowi {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Aby wysłać zaproszenie do znajomych, najpierw odblokuj tę osobę." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Odblokuj użytkownika" @@ -37607,16 +37146,6 @@ msgstr "Włącz dźwięk na wszystkich urządzeniach" msgid "Undeafen yourself" msgstr "Włącz dźwięk u siebie" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Zbyt młody użytkownik lub zagrożenie bezpieczeństwa dziecka" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Użytkownik poniżej wymaganego wieku" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Dopóki nie włączę ponownie" msgid "Unverified email" msgstr "Niezweryfikowany e-mail" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Niepożądane zachowanie lub treści dla dorosłych w niewłaściwym miejscu." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Niechciane zachowania, komentarze lub prośby o charakterze erotycznym." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Dodaj tagi, aby pomóc innym znaleźć Twoją społeczność w Odkrywaniu. Maksymalna liczba tagów: {DISCOVERY_MAX_TAGS}." @@ -38840,11 +38359,6 @@ msgstr "Użyj jasnego motywu" msgid "Use native title bar" msgstr "Użyj natywnego paska tytułu" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Użyj tylko wtedy, gdy wyraźnie łamie zasady {productName} i nie pasuje do żadnej z powyższych kategorii." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Używany tylko w tej społeczności." msgid "User" msgstr "Użytkownik" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Użytkownik wydaje się mieć mniej niż wymagany wiek lub bierze udział w uwodzeniu albo wykorzystywaniu dzieci." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Debugowanie użytkownika" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Identyfikator użytkownika (opcjonalnie)" @@ -39061,12 +38570,12 @@ msgstr "Nie znaleziono użytkownika" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profil użytkownika" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profil użytkownika: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Ustawienia użytkownika" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag użytkownika (opcjonalnie)" @@ -39339,7 +38848,7 @@ msgstr "Zweryfikowana społeczność" msgid "Verify" msgstr "Zweryfikuj" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Zweryfikuj kod" @@ -39368,7 +38877,7 @@ msgstr "Potwierdź, że to Ty" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Zweryfikuj swój adres e-mail" @@ -39718,7 +39227,7 @@ msgstr "Wyświetl kody" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Wyświetl profil w społeczności" @@ -39751,7 +39260,7 @@ msgstr "Wyświetl prezenty" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Wyświetl profil globalny" @@ -39847,26 +39356,6 @@ msgstr "Widz dołącza do transmisji" msgid "Viewer leaves stream" msgstr "Widz opuszcza transmisję" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategoria naruszenia" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Naruszenie dotyczy profilu użytkownika, a nie konkretnej wiadomości." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Przemoc lub groźby użycia przemocy" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Treści drastyczne lub przedstawiające przemoc" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Zmieniliśmy rozmiar i skompresowaliśmy to emoji do 128x128 pikseli, al msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Zmieniliśmy rozmiar i skompresowaliśmy tę naklejkę do 320x320 pikseli, ale nadal ma ona {fileSize}. Limit wynosi {maxSize}. Spróbuj użyć prostszego obrazu, mniejszej liczby kolorów lub mniejszego pliku źródłowego." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Wysłaliśmy kod na adres {email}." @@ -40472,7 +39961,7 @@ msgstr "Przetworzymy to tak szybko, jak to możliwe. Otrzymasz e-mail, gdy archi msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Przywrócimy Twój poprzedni adres e-mail, wylogujemy stare sesje, wyłączymy uwierzytelnianie wieloskładnikowe i zabezpieczymy Twoje konto nowym hasłem." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Wyślemy krótki kod, aby potwierdzić, że możesz otrzymywać aktualizacje dotyczące tego zgłoszenia." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Wirginia Zachodnia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Jakiego rodzaju zasada została złamana?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Co słychać?" msgid "What's new" msgstr "Co nowego" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Jaki jest powód Twojego zgłoszenia?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Jeśli nie ustawiono niestandardowej daty granicznej, członkowie bez uprawnienia <0>{readMessageHistoryPermissionLabel} nie mogą wyświetlać żadnych wcześniejszych wiadomości. Będą widzieć wiadomości tylko w czasie rzeczywistym, gdy nadejdą, i znikną one po ponownym uruchomieniu klienta." @@ -40832,11 +40321,6 @@ msgstr "Które społeczności" msgid "Which conversations" msgstr "Które rozmowy" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Która zasada została złamana?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Gdy funkcja „Naciśnij i mów” jest włączona, skrót steruje mikrofonem, więc przycisk wyciszenia jest nieaktywny." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Nie możesz załączać plików na tym kanale." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Nie możesz zaprosić samego siebie do znajomych" @@ -41341,7 +40825,7 @@ msgstr "Nie możesz wysłać wiadomości do tego użytkownika" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Musisz zaakceptować warunki korzystania z usługi, aby utworzyć konto" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Musisz zweryfikować swój adres e-mail, zanim wyślesz zgłoszenie." @@ -41891,6 +41375,11 @@ msgstr "Korzystasz ze starszej stawki. Obecna cena tego planu to {currentSubscri msgid "You're sending messages too quickly" msgstr "Wysyłasz wiadomości zbyt szybko" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Zbyt szybko wysyłasz zgłoszenia. Spróbuj ponownie później." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Wyświetlasz starsze wiadomości" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Dodano więcej osób, niż pozwala na to limit czatu grupowego. Usuń kilka i spróbuj ponownie." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Ta wiadomość została już przez Ciebie zgłoszona." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ten profil został już przez Ciebie dzisiaj zgłoszony." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Twoje konta i ustawienia nie zostały zmienione ani usunięte." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Nie udało się wykonać tej czynności, ponieważ nasze systemy bezpieczeństwa oznaczyły ją jako podejrzaną. Jeśli uważasz, że to pomyłka, skontaktuj się z pomocą techniczną." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Twoje odpowiedzi" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Twoje zgłoszenie oczekuje na rozpatrzenie. Nadal możesz zaktualizować szczegóły wpisu lub wycofać zgłoszenie." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Twoja przeglądarka wymaga interakcji użytkownika, zanim będzie można odtworzyć dźwięk. Kliknij przycisk poniżej, aby włączyć czat głosowy." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Twoje zmiany trafią do wszystkich społeczności obserwujących ten kanał. Może to potrwać minutę. Każda opublikowana wiadomość pozwala na 3 szybkie edycje, a następnie 1 co 20 minut." @@ -42311,6 +41815,11 @@ msgstr "Twój nowy pseudonim lub pozostaw puste, aby zresetować." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Twój stary zestaw odzyskiwania danych już nie działa. Przechowaj ten nowy w bezpiecznym miejscu." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Twoje opcje" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "Twój region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Płatność za odnowienie nie powiodła się, ale <0/> pozostają aktywne do <1>{graceDate}. Zaktualizuj metodę płatności przed tą datą, aby zachować subskrypcję." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Twoje zgłoszenie nie zostało wysłane. Spróbuj ponownie." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Twoja subskrypcja zostanie zmieniona na rozliczenie roczne przy następn msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Kod CSS Twojego motywu jest za duży, by go udostępnić. Skróć go i spróbuj ponownie." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Twoja nazwa użytkownika (opcjonalnie)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index eeec2b4fa..fb0733b79 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -2081,7 +2081,7 @@ msgstr "Vagas restantes: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, =0 {membros} one {membro} other {membros}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, =0 {Seu link de convite expira em # segundos.} one {Seu link de convite expira em # segundo.} other {Seu link de convite expira em # segundos.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Seleção: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Dados da conta" msgid "Account details unavailable" msgstr "Detalhes da conta indisponíveis" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "A conta existe para enviar spam, aplicar golpes ou abusar da plataforma." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Adicionado: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Adicionado: {createdDate} • último uso: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Comentários adicionais (opcionais)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Já resgatado" msgid "Already set to cancel" msgstr "Cancelamento já agendado" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Também denunciar esta mensagem à equipe de segurança do {productName}" @@ -4576,11 +4566,6 @@ msgstr "Anual" msgid "Another checkbox" msgstr "Outra caixa de seleção" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Outra violação clara das regras" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Outra caixa de seleção redonda" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Envio de áudio" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Áustria" @@ -5620,6 +5605,7 @@ msgstr "Ausente no momento" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Ausente no momento" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Voltar" @@ -5788,9 +5775,7 @@ msgstr "Códigos de recuperação gerados novamente" msgid "Badge" msgstr "Selo" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Banir" @@ -5819,7 +5804,7 @@ msgstr "Duração do banimento" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banir membros da comunidade, com a opção de excluir as mensagens recen msgid "Ban reason" msgstr "Motivo do banimento" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Banir este usuário" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Largura de banda" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Banido" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} foi banido da comunidade" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Antes da data" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Bélgica" @@ -6031,7 +6006,7 @@ msgstr "Taxa de bits" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Bloquear" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Bloquear" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Bloquear {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Bloquear em todas as comunidades" msgid "Block spoiler" msgstr "Spoiler em bloco" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bloquear este usuário" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Bloquear usuário" msgid "Blocked" msgstr "Bloqueados" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Bloqueado" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Tradutores integrados" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgária" @@ -6519,16 +6500,6 @@ msgstr "Búlgaro" msgid "Bulk delete" msgstr "Excluir várias mensagens" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Assédio moral, contato indesejado repetido, perseguição ou abuso direcionado." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Bullying, ameaças, ódio, violência, ataques ou conteúdo que incentive a automutilação." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Califórnia" msgid "Call" msgstr "Chamada" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Configurações de chamadas e conversas em grupo" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Alterar banner" msgid "Change chat embed background" msgstr "Alterar o plano de fundo do conteúdo incorporado no chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Alterar e-mail" @@ -7150,8 +7116,8 @@ msgstr "Alterar apelido do amigo" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Alterar apelido do grupo" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Alterar idioma" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Alterar meu apelido no grupo" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Alterar meu apelido" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Alterar proprietário" @@ -7283,16 +7249,6 @@ msgstr "Alterar a região de voz que um canal de voz usa." msgid "Change which voice region this channel uses." msgstr "Alterar a região de voz que este canal usa." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Mude quem pode ligar ou adicionar você." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Alterar quem pode entrar em contato com você." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Procure o link de autorização na caixa de entrada de {emailAddress}." msgid "Check your inbox for a verification email." msgstr "Procure o e-mail de verificação na sua caixa de entrada." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Confira sua denúncia" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Caixas de seleção" @@ -7901,21 +7862,6 @@ msgstr "A finalização da compra está bloqueada para esta conta. Entre em cont msgid "Checkout unavailable" msgstr "Finalização de compra indisponível" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Preocupações com a segurança de crianças" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Segurança infantil ou exploração de menores" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Segurança infantil ou conteúdo adulto" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Opções" msgid "Choices: {choiceList}" msgstr "Opções: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Escolher" @@ -8122,6 +8068,11 @@ msgstr "Escolha a categoria que melhor descreve sua comunidade. Você pode mudar msgid "Choose the premium model" msgstr "Escolha o modelo premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Escolha o motivo novamente" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Resgatar presente" msgid "Claim your account" msgstr "Reivindique sua conta" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Reivindique sua conta e verifique seu e-mail para enviar denúncias." @@ -8352,12 +8303,12 @@ msgstr "Reivindique sua conta para resgatar este presente." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Reivindique sua conta para enviar pedidos de amizade." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Reivindique sua conta para enviar denúncias." @@ -8378,11 +8329,6 @@ msgstr "Reivindique sua conta para iniciar ou participar de chamadas individuais msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Resgate seu presente para ativar sua assinatura {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Fingir ser outra pessoa, marca ou organização." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Limpar busca" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Fechar janela de diálogo" msgid "Close popout" msgstr "Fechar janela separada" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Fechar esta conversa" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Fechar para a bandeja" msgid "Close window" msgstr "Fechar janela" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Feche sua conversa atual com {dmDisplayName}. Isso não bloqueia o usuário, e você pode reabrir a conversa mais tarde." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Fechar sua conversa com {displayName}? Você pode reabri-la a qualquer momento." @@ -8837,7 +8773,7 @@ msgstr "Tema carvão" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Código" @@ -8868,7 +8804,7 @@ msgstr "Código do app {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Código reenviado" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Comunidades que você pode entrar" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Comunidade" @@ -9131,7 +9065,7 @@ msgstr "Desativar áudio na comunidade" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Depuração da comunidade" @@ -9150,16 +9084,6 @@ msgstr "Comunidade excluída" msgid "Community DM" msgstr "Mensagem direta da comunidade" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "A comunidade existe para spam, golpes ou uso indevido da plataforma." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "A comunidade facilita ataques em massa ou abuso direcionado." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Ícone da comunidade" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID da comunidade" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "O ID da comunidade é obrigatório." @@ -9526,6 +9450,11 @@ msgstr "Confirmar nova senha" msgid "Confirm password" msgstr "Confirmar senha" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirme a declaração para enviar a denúncia." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continuar no seu navegador" msgid "Continue to checkout" msgstr "Continuar para o checkout" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continuar para denunciar a comunidade" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continuar para denunciar o usuário" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Converter este canal para um canal de texto removerá todos os canais qu msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Converte o conteúdo recebido em fala, independentemente de ter vindo do /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordena invasões, ataques em massa ou assédio contra pessoas ou comunidades." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiada para a área de transferência" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiada para a área de transferência" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copiar ID da mensagem" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copiar link da mensagem" @@ -10643,6 +10553,11 @@ msgstr "Não foi possível carregar as postagens. Tente novamente mais tarde." msgid "Couldn't load settings" msgstr "Não foi possível carregar as configurações" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Não foi possível carregar o formulário de denúncia." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Não foi possível carregar este aplicativo" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Não foi possível processar a imagem" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Não foi possível publicar esta mensagem" @@ -10825,11 +10740,6 @@ msgstr "Não foi possível enviar o convite" msgid "Couldn't send invite. Try again." msgstr "Não foi possível enviar o convite. Tente novamente." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Não foi possível enviar. Tente novamente." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Contagem regressiva" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "País de residência" @@ -11301,13 +11211,8 @@ msgstr "Criado:" msgid "Credentials" msgstr "Credenciais" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Ameaças críveis, violência explícita ou glorificação da violência." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croácia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Corta o áudio abaixo de um limite de volume com uso mínimo da CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Chipre" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tcheco" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "República Tcheca" @@ -11965,7 +11870,7 @@ msgstr "Depurar canal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Depurar comunidade" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Excluir tema?" msgid "Delete this invite? Can't be undone." msgstr "Excluir este convite? Não poderá ser desfeito." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Excluir esta mensagem" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Excluir esta mensagem? Não é possível desfazer." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Excluir esta mensagem? Não pode ser desfeito. Esta mensagem também será removida de todas as comunidades que seguem este canal." @@ -12461,11 +12359,6 @@ msgstr "Excluir suas mensagens nesta comunidade?" msgid "Delete your messages in this conversation?" msgstr "Excluir suas mensagens nesta conversa?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Excluído" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Negou {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Dinamarca" @@ -12554,11 +12447,6 @@ msgstr "Descreva a figurinha" msgid "Describe this media for screen readers" msgstr "Descreva esta mídia para leitores de tela" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Descreva o que torna o conteúdo ilegal" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner desanexado" msgid "Detail" msgstr "Detalhe" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detalhes" @@ -13315,11 +13203,6 @@ msgstr "Nome de exibição (opcional)" msgid "Display scaling" msgstr "Escala de exibição" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribui malware, ferramentas para roubar credenciais ou outros arquivos nocivos." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "MD" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Configurações de mensagens diretas e pedidos de amizade" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentação" msgid "Doesn't allow being added to group DMs" msgstr "Não permite ser adicionado a conversas em grupo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Não bloqueia. Você pode reabrir depois." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Doe em vez disso" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Baixar mapas de origem para que rastros de pilha e ferramentas de desenv msgid "Download video" msgstr "Baixar vídeo" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, exposição de informações privadas ou perseguição." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, perseguição, se passar por alguém ou perfil inadequado." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Editar cor para {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Editar perfil na comunidade" @@ -14043,7 +13908,7 @@ msgstr "Editar permissões de cargos e membros neste canal." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Editar perfil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Editar horário local do perfil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Editar mensagem publicada?" @@ -14191,13 +14056,13 @@ msgstr "Você pode solicitar um reembolso até {windowEndsOn}. Isso também canc #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Endereço de e-mail" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "O endereço de e-mail é obrigatório." @@ -14721,16 +14586,6 @@ msgstr "Preferência do codificador para novos compartilhamentos de tela." msgid "Encoder, SVC, and bitrate presets" msgstr "Codificador, SVC e predefinições de taxa de bits" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Incentiva a automutilação" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Incentiva suicídio, automutilação ou distúrbios alimentares." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "A criptografia de ponta a ponta não está disponível porque há um par msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "A criptografia de ponta a ponta não está disponível porque há um participante incompatível neste canal de voz." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Coloca menores em perigo ou hospeda conteúdo de exploração infantil." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Insira um código no formato ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Insira uma URL ou um código de modelo válido do {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Insira um endereço de e-mail válido." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Insira um link de mensagem válido." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Insira o código de {digitCount} dígitos do seu aplicativo autenticador." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Insira o código antes de continuar." @@ -15008,7 +14858,7 @@ msgstr "Pressione Enter para <0><1>salvar" msgid "Enter username" msgstr "Digite o nome de usuário" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Insira o código de verificação" @@ -15017,6 +14867,11 @@ msgstr "Insira o código de verificação" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Digite seu e-mail e enviaremos um link para redefinir sua senha." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Digite seu nome completo conforme documento para enviar a denúncia." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Pressione Esc para <0><1>cancelar" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estônia" @@ -15412,6 +15267,16 @@ msgstr "Expira em {earliest}" msgid "Expires:" msgstr "Expira:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explique o problema" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explique o problema para enviar a denúncia." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Links externos podem ser perigosos. Tenha cuidado." msgid "Extra large" msgstr "Extra grande" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Comunidade extremista" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Falha ao remover a URL personalizada. Tente novamente." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Falha ao reenviar o código. Tente novamente." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Falha ao redefinir o status premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Falha ao enviar o código. Tente novamente." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Não foi possível enviar a mensagem. Segure para ver as opções." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Não foi possível enviar a denúncia. Tente novamente." @@ -15840,11 +15700,6 @@ msgstr "Não foi possível enviar os emojis a partir de {startLabel}: {errorMsg} msgid "Failed to upload emojis. Try again." msgstr "Não foi possível enviar os emojis. Tente novamente." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Alegações falsas com probabilidade de causar danos no mundo real." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Encontre a figurinha perfeita" msgid "Fingerprint" msgstr "Impressão digital" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Concluir configuração da conta" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Conclua a configuração da conta primeiro" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Conclua seu cadastro para enviar pedidos de amizade." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlândia" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandês" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nome e sobrenome" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Taxas de quadros acima de 30 FPS exigem {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "França" @@ -16834,10 +16689,10 @@ msgstr "Completo" msgid "Full dynamic range" msgstr "Alcance dinâmico total" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nome completo (conforme documento)" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nome completo conforme documento (opcional para denúncias de abuso sexual infantil)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Alemão" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Alemanha" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Voltar" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Volte e insira um e-mail válido." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Que bom te ver por aqui, {username}! Boas-vindas." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grécia" @@ -17572,11 +17427,6 @@ msgstr "Grego" msgid "Grid view" msgstr "Visualização em grade" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Conteúdo de aliciamento ou exploração infantil." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Nome de usuário" msgid "Hang out with voice, video and screen share" msgstr "Converse por voz, vídeo e compartilhamento de tela" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Assédio" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Assédio envolvendo conteúdo adulto" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Assédio ou bullying" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Assédio ou perseguição" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Assédio ou abuso direcionado" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Assédio ou ameaças" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Chave de hardware" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Aceleração de hardware na maioria dos sistemas Windows e macOS. Confiável para aparelhos mais antigos." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Informação falsa prejudicial" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Já comprou" msgid "Has ever purchased override" msgstr "Já comprou (substituir)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Discurso de ódio" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Ocultar sua própria tela compartilhada?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Oculta os botões de download, abrir no navegador e copiar em imagens e vídeos neste canal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Oculta as mensagens dessa pessoa e impede que ela envie mensagens para você" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Húngaro" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungria" @@ -18399,6 +18212,11 @@ msgstr "Eu sou uma dica de ferramenta" msgid "I changed my mind" msgstr "Mudei de ideia" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Confirmo de boa-fé que as informações e alegações neste aviso são precisas e completas." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Configurações de inatividade" msgid "Idle timeout" msgstr "Tempo limite de inatividade" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Se houver um menor envolvido, use \"{childSafetyReasonName}\" em vez disso." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Se uma conta usar esse endereço, enviamos instruções de redefinição msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Se o macOS pedir para encerrar e reabrir o {productName}, escolha Mais tarde." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Se alguém estiver em perigo imediato, entre em contato com os serviços de emergência locais, se puder fazer isso com segurança." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Se alguém estiver em perigo imediato, entre em contato com os serviços de emergência locais primeiro." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Se alguém pediu para você colar algo aqui, é um golpe que pode dar a essa pessoa acesso à sua conta do {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Se isso envolver CSAM ou exploração de menores, envie a denúncia agora e não compartilhe o material novamente." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Se for uma ameaça iminente e crível, entre em contato com os serviços de emergência locais também." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Se for uma ameaça terrorista iminente, entre em contato com os serviços de emergência locais também." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Se esta denúncia é sobre uma mensagem específica nesta comunidade, denuncie essa mensagem. Denúncias de mensagens dão à nossa equipe de segurança o contexto mais claro, e adicionar detalhes nos comentários pode nos ajudar a analisar mais rapidamente. Só continue denunciando a comunidade como um todo se denunciar uma mensagem não abranger o problema maior." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Se esta denúncia é sobre uma mensagem específica, denuncie a mensagem em vez disso. Denúncias de mensagens dão à nossa equipe de segurança o contexto mais claro, e adicionar detalhes nos comentários pode nos ajudar a analisar mais rápido. Só continue denunciando o usuário como um todo se a mensagem não capturar o problema maior." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Se esta denúncia é sobre mensagens específicas, denuncie a mensagem mais relevante. Denúncias de mensagens dão à nossa equipe de segurança o contexto mais claro, e adicionar detalhes nos comentários pode nos ajudar a analisar mais rápido. Só continue com a denúncia do usuário como um todo se denunciar uma mensagem não abranger o problema maior." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Se você acredita que é ilegal, diga qual lei e por quê." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorar o tempo de espera do modo lento deste canal." msgid "Ignore virtual" msgstr "Ignorar virtual" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Atividade ilegal" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Atividade ilegal ou outra coisa" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Vendas ilegais, facilitação de crimes ou uma violação clara das regras que não se encaixa nas opções acima." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Vendas ilegais, facilitação de crimes ou atividades ilícitas." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Imagens" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "As imagens coladas da sua área de transferência são enviadas como anexos, e você não tem permissão para anexar arquivos neste canal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Fingir ser outra pessoa" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Falsa identidade ou mídia enganosa" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inativo" msgid "Inactive timeout" msgstr "Tempo limite de inatividade" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Perfil impróprio" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Incluir meus códigos de backup de dois fatores no PDF e na impressão" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Inclua o ID da comunidade." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Plano de fundo do convite" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Código de convite (opcional)" @@ -19471,7 +19220,7 @@ msgstr "Máscara de convite" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Convidar membros" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Endereço IP autorizado" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Itálico" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Itália" @@ -20120,7 +19869,7 @@ msgstr "Teclas" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Depois" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letônia" @@ -20291,11 +20040,6 @@ msgstr "Saiba mais" msgid "Learn more about Visionary" msgstr "Saiba mais sobre o Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Sair" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Sair do tópico privado" msgid "Leave silently" msgstr "Sair sem notificar" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Sair da comunidade" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Lista os membros com este cargo em uma seção própria da lista de membros." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituânia" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Carregando..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Carregando…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Baixa" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburgo" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Manutenção agendada para {localizedTime}. Duração prevista: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Tornar {userName} o proprietário do grupo? Você perderá os privilégios de proprietário." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Tornar proprietário do grupo" @@ -21091,38 +20830,21 @@ msgstr "Tornar proprietário do grupo" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Certifique-se de que este código corresponda ao do app {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Confira se está tudo certo antes de enviar." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personalize sua instância" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Links maliciosos" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribuição de malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware ou links perigosos" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Malware, roubo de credenciais ou arquivos prejudiciais." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Mascarar detalhes privados antes de compartilhar sua tela ou transmissã msgid "Mask Visionary as subscription" msgstr "Exibir Visionary como assinatura" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam em massa, fraude, sorteios falsos ou abuso de conta." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Bloqueio de mídia de conteúdo adulto" msgid "Mature content not allowed" msgstr "Conteúdo adulto não permitido" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Conteúdo adulto ou assédio" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Conteúdo adulto ou restrição de acesso inadequada" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Substituir conteúdo adulto" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Violação da política de conteúdo adulto" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Conteúdo adulto sem a devida restrição de acesso." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Mensagem" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "link da mensagem" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Link da mensagem" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Prévias de mensagens na lista de conversas por mensagem direta" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Mensagem publicada" @@ -22211,6 +21908,11 @@ msgstr "Hora da mensagem" msgid "Message unpinned" msgstr "Mensagem desafixada" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Mensagem que você está denunciando" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Menores em risco, conteúdo adulto em local inadequado ou conduta indesejada." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mais" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Mais ações" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Aninhado" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Países Baixos" @@ -24099,7 +23796,7 @@ msgstr "Nenhum resultado" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nenhum resultado encontrado" @@ -24858,6 +24555,16 @@ msgstr "Somente pessoas que você convidar e moderadores podem ver esta thread." msgid "Only places I can't access anymore" msgstr "Apenas locais que não consigo mais acessar" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Denuncie apenas o que você acredita honestamente que viola as regras e não envie a mesma denúncia duas vezes." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Denuncie apenas o que você acredita honestamente que viola as regras. O uso indevido de denúncias vai contra as nossas <0>diretrizes da comunidade." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacidade" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Abrir em {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Abrir menu suspenso" @@ -25379,11 +25084,6 @@ msgstr "Abra Ajustes do Sistema → Privacidade e Segurança → Gravação de T msgid "Open template JSON" msgstr "Abrir JSON do modelo" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Abrir a caixa de diálogo de banimento para esta comunidade." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Abrir suas configurações" msgid "Opened the thread again" msgstr "Abriu o tópico novamente" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Abre em uma nova aba" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Banido originalmente em {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Outro" @@ -25654,11 +25357,6 @@ msgstr "Outra reação…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Nossa equipe de segurança está analisando a denúncia. Enviaremos uma mensagem direta e um e-mail quando houver uma decisão." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Não foi possível transferir a propriedade para <0>{username} neste momento." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Propriedade transferida" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Cole a resposta JSON aqui" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Cole o link da mensagem." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraude, links maliciosos ou alegações falsas com potencial de causar danos no mundo real." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Escolha um provedor de busca na web" msgid "Pick an emoji" msgstr "Escolher um emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Escolha uma opção para continuar." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Escolha o número de 4 dígitos após seu nome de usuário" msgid "Pick the appearance this administrator account should start with." msgstr "Escolha a aparência que esta conta de administrador deve ter inicialmente." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Escolha a regra para revisar." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Aguarde um momento e tente renomear novamente." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polônia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Porta" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "toque para adicionar uma reação" msgid "press to remove reaction" msgstr "toque para remover a reação" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Fingir ser outra pessoa, incluindo conteúdo enganoso gerado por IA." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Impedir que <0>{targetUserTag} envie mensagens, reaja e se conecte a canais de voz pela duração especificada." @@ -27078,11 +26756,6 @@ msgstr "Prioridade de fala" msgid "Privacy" msgstr "Privacidade" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Privacidade ou falsa identidade" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Configuração de privacidade" msgid "Privacy URL" msgstr "URL de privacidade" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Violação de privacidade" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Violação de privacidade ou doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Violação de privacidade ou perseguição" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Tipo de perfil" msgid "Profile updated" msgstr "Perfil atualizado" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Violação de perfil, nome de usuário ou avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promove ódio contra grupos protegidos." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promove, recruta ou coordena atividades extremistas violentas." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promoção ou instruções que incentivem a automutilação ou distúrbios alimentares." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Perfil que você está denunciando" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronomes: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Proteja sua conta Visionary ativando a autenticação de dois fatores. Obrigado por apoiar o {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Forneça pelo menos um ID de usuário ou uma tag de usuário." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Informe o ID ou o nome de usuário da pessoa que você está denunciando." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Informe seu nome completo para a declaração." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Os botões de rádio permitem selecionar uma opção de um grupo." msgid "Radio group" msgstr "Grupo de botões de rádio" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordenação de ataques em massa" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Pronto para comprar um presente?" msgid "Ready to upgrade?" msgstr "Pronto para fazer um upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Motivo" @@ -28291,8 +27924,8 @@ msgstr "Lembrar tamanho e posição da janela" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Remover {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Remover {userName} do grupo?" @@ -28419,8 +28052,8 @@ msgstr "Remover dos favoritos" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Remover do grupo" @@ -28458,11 +28091,6 @@ msgstr "Remover dos GIFs favoritos salvos por URL" msgid "Remove icon" msgstr "Remover ícone" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Remover do canal para todos." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Removido dos favoritos" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Removido do grupo" @@ -28919,28 +28547,18 @@ msgstr "Denunciar uma comunidade" msgid "Report a message" msgstr "Denunciar uma mensagem" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Denuncie uma violação de regra ou encontre ferramentas para gerenciar contatos e preferências." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Denunciar um perfil de usuário" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Denunciar comunidade" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detalhes da denúncia" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Denunciar conteúdo ilegal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Reportar problema" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Denunciar mensagem" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Denunciar perfil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Denúncia enviada" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Tipo de denúncia" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Denunciar usuário" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tag do usuário denunciado (opcional)" @@ -29100,6 +28716,10 @@ msgstr "Exige tudo do nível médio, além de ser membro da comunidade há pelo msgid "Resend" msgstr "Reenviar" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Reenviar ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Reenviar ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Reenviar ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Reenviar ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Reenviar ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Reenviar ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Reenviar ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Reenviar código" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Cargos atualizados com sucesso" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romênia" @@ -29947,7 +29567,7 @@ msgstr "Saturação" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Diga oi para <0>{displayName}. Sua conversa por mensagem direta come msgid "Scale" msgstr "Escala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Golpes, malware ou desinformação" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Escaneie o código QR com seu aplicativo autenticador." @@ -30855,11 +30470,6 @@ msgstr "Selecionar" msgid "Select {accessibleName}" msgstr "Selecionar {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Selecione uma categoria" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Selecione uma comunidade onde você tenha a permissão {permissionName} ou uma conversa em grupo da qual você faça parte." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Selecione um país" @@ -30911,11 +30521,6 @@ msgstr "Selecione um URI de redirecionamento" msgid "Select a scenario to apply..." msgstr "Selecione um cenário para aplicar..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Selecione uma categoria de violação." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Selecione a conta com a qual você deseja entrar no seu novo dispositivo msgid "Select voice processing mode" msgstr "Selecionar modo de processamento de voz" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Selecione o que você quer denunciar." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Selecione seu país de residência." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Selecionar…" @@ -31037,13 +30642,6 @@ msgstr "Seleção: {0} (máx. {1})" msgid "Selections" msgstr "Seleções" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Automutilação ou suicídio" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Enviar uma mensagem de ação (em itálico)." msgid "Send animation" msgstr "Enviar animação" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Enviar outra denúncia" @@ -31138,7 +30736,7 @@ msgstr "Botão de enviar" msgid "Send code" msgstr "Enviar código" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Enviar denúncia DSA" @@ -31158,9 +30756,9 @@ msgstr "Envie arquivos de até {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Enviar pedido de amizade" @@ -31220,8 +30818,8 @@ msgstr "Enviar mensagens em tópicos" msgid "Send messages, images, GIFs and emoji" msgstr "Envie mensagens, imagens, GIFs e emojis" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Enviar denúncia" @@ -31255,7 +30853,7 @@ msgstr "Enviar este item fixado de volta no tempo?" msgid "Send TTS messages" msgstr "Enviar mensagens TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Enviar código de verificação" @@ -31273,11 +30871,6 @@ msgstr "Enviar mensagem de voz" msgid "Send:" msgstr "Enviar:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Enviando malware ou links perigosos" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Compartilhar tema" msgid "Share voice activity with all friends?" msgstr "Compartilhar atividade de voz com todos os amigos?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Compartilhe o que nossa equipe precisa para avaliar isso." @@ -31709,11 +31302,6 @@ msgstr "Compartilhe o que nossa equipe precisa para avaliar isso." msgid "Share with a friend" msgstr "Compartilhar com um amigo" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Compartilhar com moderadores da comunidade." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Janela compartilhada" msgid "Shared window audio" msgstr "Áudio da janela compartilhada" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Compartilha informações pessoais, persegue usuários ou coordena violações de privacidade." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Compartilhando informações pessoais" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Controles deslizantes" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Eslováquia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Eslovênia" @@ -32889,11 +32467,6 @@ msgstr "Simulação de modo lento" msgid "Slowmode time remaining" msgstr "Tempo restante do modo lento" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Insultos, linguagem desumanizadora ou ataques a grupos protegidos." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Algo deu errado ao preparar esta figurinha. Tente outro arquivo ou tente novamente em alguns instantes." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Algo deu errado ao publicar. Tente novamente em um momento." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Layout espaçoso com clara separação visual entre as mensagens." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Espanha" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Conta de spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Classificação de spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam ou golpe" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Comunidade de spam ou golpe" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Conta de spam, golpe ou phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, golpes ou phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Iniciar minimizado" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Começar de novo" @@ -33752,22 +33302,26 @@ msgstr "Continuar conectado" msgid "Step {current} of {total}" msgstr "Etapa {current} de {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Etapa 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Etapa 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Etapa 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Etapa 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Etapa 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Parar de ser um canal de anúncios?" msgid "Stop hiding muted channels by default?" msgstr "Parar de ocultar canais silenciados por padrão?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Parar mensagens e pedidos de amizade." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Parar teste do microfone" @@ -33959,11 +33508,6 @@ msgstr "Parar de aplicar correções aos métodos insertBefore e removeChild de msgid "Stop ringing" msgstr "Parar de tocar" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Parar de ver o conteúdo e os membros." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Substituir expressões comuns, como :) e <3, por emojis ao enviar mensagens" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Suécia" @@ -34804,11 +34348,6 @@ msgstr "Toque para adicionar uma nota" msgid "tar.gz archive" msgstr "Arquivo tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Ataca pessoas por características protegidas." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Termos de serviço" msgid "Terms URL" msgstr "URL dos termos" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorismo ou extremismo violento" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tailandês" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Obrigado por ajudar a manter o {productName} seguro. Analisaremos sua denúncia o mais rápido possível." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Obrigado por sinalizar isso" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Obrigado por nos informar. Isso não viola nossas regras por si só, então não enviamos uma denúncia." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Obrigado por nos informar. Isso não viola nossas regras por si só, então não enviamos uma denúncia. Se for direcionado a alguém ou usar termos pejorativos, denuncie novamente e escolha “Conteúdo abusivo ou prejudicial”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Não funcionou. Tente novamente ou cancele." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Essa cor não parece válida. Tente usar hexadecimal, rgb(), hsl() ou um nome de cor CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Parece que este não é um URL válido." @@ -35104,6 +34653,11 @@ msgstr "O app {PRODUCT_NAME} no seu outro dispositivo mostra isso em \"Fazendo l msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "O app {PRODUCT_NAME} não foi conectado. Você pode fechar esta aba." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "A equipe de segurança do {productName} vai analisar sua denúncia. Não revelaremos que ela veio de você." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "O redirect_uri fornecido não está registrado para este aplicativo." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "O redirect_uri fornecido precisa usar HTTP ou HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "O formulário de denúncia mudou. Comece de novo." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "As tags de nome de usuário nesta instância já estão definidas. Elas não podem mais ser alteradas." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "O código de verificação é inválido ou expirou." @@ -36115,13 +35674,8 @@ msgstr "Este membro não está mais conectado ao chat de voz." msgid "This message can only be forwarded to age-restricted channels" msgstr "Esta mensagem só pode ser encaminhada para canais com restrição de idade" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Esta mensagem já foi excluída." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Esta mensagem já foi publicada" @@ -36279,11 +35833,6 @@ msgstr "Esta thread está fechada. Enviar uma mensagem a reabrirá." msgid "This thread is locked. Only moderators can send messages." msgstr "Esta thread está bloqueada. Apenas moderadores podem enviar mensagens." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "este usuário" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Este usuário limitou o perfil dele. Alguns detalhes estão ocultos para quem não é amigo." @@ -36292,11 +35841,6 @@ msgstr "Este usuário limitou o perfil dele. Alguns detalhes estão ocultos para msgid "This user has no roles in this community." msgstr "Este usuário não tem cargos nesta comunidade." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Este usuário já foi banido da comunidade." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Este usuário não está mais disponível." @@ -36465,16 +36009,6 @@ msgstr "Thread atualizado" msgid "Threads" msgstr "Tópicos" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Ameaças, perseguição em diferentes espaços ou contato indesejado." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Ameaças, assédio ou danos" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Suspensão temporária aplicada a {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Suspensão temporária" @@ -36787,6 +36321,11 @@ msgstr "Mapeamento de tons" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mapeie imagens HDR para o intervalo padrão, reduzindo o pico de brilho." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Muitos códigos enviados. Aguarde {duration} e tente novamente." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transferir a propriedade da comunidade" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transferir a propriedade do grupo para {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Desbloqueie a pessoa primeiro para enviar um pedido de amizade." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Desbloquear usuário" @@ -37607,16 +37146,6 @@ msgstr "Reativar áudio em todos os dispositivos" msgid "Undeafen yourself" msgstr "Reativar seu áudio" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Preocupação com menores ou segurança infantil" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Usuário menor de idade" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Até eu ativar novamente" msgid "Unverified email" msgstr "E-mail não verificado" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Conduta indesejada ou conteúdo adulto no lugar errado." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Conduta, comentários ou pedidos de teor adulto indesejados." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Use até {DISCOVERY_MAX_TAGS} tags para ajudar as pessoas a encontrar sua comunidade. Elas aparecem nas pesquisas em Descobrir." @@ -38840,11 +38359,6 @@ msgstr "Usar tema claro" msgid "Use native title bar" msgstr "Usar barra de título nativa" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Use somente se violar claramente as regras do {productName} e não se encaixar nas opções acima." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Usado apenas nesta comunidade." msgid "User" msgstr "Usuário" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "O usuário parece ser menor de idade ou está envolvido em aliciamento ou exploração infantil." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Depurar usuário" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID do usuário (opcional)" @@ -39061,12 +38570,12 @@ msgstr "Usuário não encontrado" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Perfil do usuário" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Perfil do usuário: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Configurações de usuário" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag do usuário (opcional)" @@ -39339,7 +38848,7 @@ msgstr "Comunidade verificada" msgid "Verify" msgstr "Verificar" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verificar código" @@ -39368,7 +38877,7 @@ msgstr "Verifique sua identidade" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifique seu e-mail" @@ -39718,7 +39227,7 @@ msgstr "Ver códigos" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Ver perfil na comunidade" @@ -39751,7 +39260,7 @@ msgstr "Ver presentes" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Ver perfil global" @@ -39847,26 +39356,6 @@ msgstr "Espectador entra na transmissão" msgid "Viewer leaves stream" msgstr "Espectador sai da transmissão" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Categoria da violação" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "A violação está no perfil do usuário, não em uma mensagem específica." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violência ou ameaças de violência" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Conteúdo violento ou explícito" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Redimensionamos e compactamos este emoji para 128x128 pixels, mas ele ai msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Redimensionamos e compactamos esta figurinha para 320x320 pixels, mas ela ainda tem {fileSize}. O limite é {maxSize}. Tente uma imagem mais simples, com menos cores ou um arquivo de origem menor." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Enviamos um código para {email}." @@ -40472,7 +39961,7 @@ msgstr "Processaremos isso o mais rápido possível. Você receberá um e-mail q msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Restauraremos seu e-mail anterior, encerraremos sessões antigas, desativaremos a MFA e protegeremos sua conta com uma nova senha." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Enviaremos um código curto para confirmar que você pode receber atualizações sobre esta denúncia." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virgínia Ocidental" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Que tipo de regra foi quebrada?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "O que está acontecendo?" msgid "What's new" msgstr "Novidades" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Qual é o motivo da sua denúncia?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Quando uma data de corte personalizada não é definida, membros sem a permissão <0>{readMessageHistoryPermissionLabel} não podem ver mensagens antigas. Eles só verão as mensagens em tempo real, conforme chegarem, e elas desaparecerão quando reiniciarem os aplicativos." @@ -40832,11 +40321,6 @@ msgstr "Quais comunidades" msgid "Which conversations" msgstr "Quais conversas" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Qual regra foi quebrada?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Enquanto apertar para falar estiver ativado, seu atalho controlará o microfone, por isso o botão de silenciar ficará desativado." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Não é possível anexar arquivos neste canal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Você não pode adicionar a si mesmo(a) como amigo(a)" @@ -41341,7 +40825,7 @@ msgstr "Você não pode enviar mensagens para este usuário" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Você deve concordar com os termos de serviço para criar uma conta" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Você precisa verificar seu e-mail antes de enviar uma denúncia." @@ -41891,6 +41375,11 @@ msgstr "Você está em um plano com preço antigo. O preço atual para este plan msgid "You're sending messages too quickly" msgstr "Você está enviando mensagens muito rápido" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Você está enviando denúncias rápido demais. Tente novamente mais tarde." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Você está vendo mensagens antigas" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Você adicionou mais pessoas do que uma conversa em grupo permite. Remova algumas e tente novamente." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Você já denunciou esta mensagem." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Você já denunciou este perfil hoje." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Suas contas e configurações não foram alteradas nem excluídas." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Não foi possível concluir sua ação porque ela foi sinalizada pelos nossos sistemas de segurança. Se você acredita que isso é um engano, entre em contato com o suporte." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Suas respostas" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Sua inscrição está aguardando análise. Você ainda pode atualizar os detalhes da página da comunidade ou retirar a inscrição." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Seu navegador requer interação para reproduzir áudio. Clique no botão abaixo para ativar o chat de voz." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Suas alterações chegam a todas as comunidades que seguem este canal e podem levar um minuto. Cada mensagem publicada permite 3 edições rápidas, depois 1 a cada 20 minutos." @@ -42311,6 +41815,11 @@ msgstr "Seu novo apelido, ou deixe em branco para redefinir." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Seu kit de recuperação antigo não funciona mais. Guarde este novo em um lugar seguro." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Suas opções" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "sua região" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "O pagamento da renovação falhou, mas as <0/> continuam ativas até <1>{graceDate}. Atualize sua forma de pagamento antes dessa data para manter sua assinatura." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Sua denúncia não foi enviada. Tente novamente." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Sua assinatura mudará para cobrança anual na próxima renovação." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "O CSS do seu tema é muito grande para compartilhar. Diminua-o e tente novamente." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Seu nome de usuário (opcional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index 7a37c2450..7755acca2 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -2081,7 +2081,7 @@ msgstr "Rămase: {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {membru} few {membri} other {de membri}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Linkul tău de invitație expiră în # secundă.} few {Linkul tău de invitație expiră în # secunde.} other {Linkul tău de invitație expiră în # de secunde.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Selectate: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Date cont" msgid "Account details unavailable" msgstr "Detalii cont indisponibile" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Contul există pentru spam, înșelătorii sau abuzuri pe platformă." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Adăugat: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Adăugat: {createdDate} • ultima utilizare: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Comentarii suplimentare (opțional)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Deja valorificat" msgid "Already set to cancel" msgstr "Anulare deja programată" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Raportează acest mesaj și echipei de siguranță {productName}" @@ -4576,11 +4566,6 @@ msgstr "Anual" msgid "Another checkbox" msgstr "Încă o casetă de selectare" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Altă încălcare clară a regulilor" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Încă o casetă de selectare rotundă" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Încărcare audio" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Austria" @@ -5620,6 +5605,7 @@ msgstr "Plecat acum" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Plecat acum" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Înapoi" @@ -5788,9 +5775,7 @@ msgstr "Codurile de rezervă au fost regenerate" msgid "Badge" msgstr "Insignă" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Banează" @@ -5819,7 +5804,7 @@ msgstr "Durată interdicție" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Banează membri din comunitate, cu opțiunea de a le șterge mesajele re msgid "Ban reason" msgstr "Motivul interdicției" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Banează acest utilizator" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Lățime de bandă" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Banat" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "L-ai banat pe {targetUserTag} din comunitate" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Înainte de data de" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgia" @@ -6031,7 +6006,7 @@ msgstr "Bitrate" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blochează" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blocare" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blochează {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blochează pentru toate comunitățile" msgid "Block spoiler" msgstr "Bloc spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blochează acest utilizator" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blochează utilizatorul" msgid "Blocked" msgstr "Blocați" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blocat" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Traducători încorporați" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Bulgară" msgid "Bulk delete" msgstr "Ștergere în masă" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Hărțuire, contact nedorit repetat, urmărire sau abuz țintit." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Hărțuire, amenințări, ură, violență, raiduri sau conținut care încurajează autovătămarea." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Apel" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Setări apeluri și chat de grup" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Schimbă bannerul" msgid "Change chat embed background" msgstr "Schimbă fundalul încorporat în chat" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Schimbă adresa de e-mail" @@ -7150,8 +7116,8 @@ msgstr "Schimbă pseudonimul prietenului" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Schimbă pseudonimul în grup" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Schimbă limba" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Schimbă-mi pseudonimul în grup" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Schimbă-ți propriul pseudonim" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Schimbă proprietarul" @@ -7283,16 +7249,6 @@ msgstr "Schimbă regiunea vocală pe care o folosește un canal vocal." msgid "Change which voice region this channel uses." msgstr "Schimbă regiunea vocală pe care o folosește acest canal." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Schimbă cine te poate apela sau adăuga." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Schimbă cine te poate contacta." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Verifică-ți căsuța de e-mail la {emailAddress} pentru linkul de auto msgid "Check your inbox for a verification email." msgstr "Verifică-ți căsuța de e-mail pentru un mesaj de verificare." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Verifică raportul tău" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Casete de selectare" @@ -7901,21 +7862,6 @@ msgstr "Finalizarea comenzii este blocată pentru acest cont. Contactează {supp msgid "Checkout unavailable" msgstr "Finalizarea comenzii nu este disponibilă" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Probleme legate de siguranța copiilor" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Siguranța copiilor sau exploatarea minorilor" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Siguranța copiilor sau conținut matur" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Opțiuni" msgid "Choices: {choiceList}" msgstr "Opțiuni: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Alege" @@ -8122,6 +8068,11 @@ msgstr "Alege categoria care descrie cel mai bine comunitatea ta. O poți schimb msgid "Choose the premium model" msgstr "Alege modelul premium" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Alege din nou motivul" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Revendică cadoul" msgid "Claim your account" msgstr "Revendică-ți contul" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Revendică-ți contul și verifică-ți e-mailul pentru a trimite rapoarte." @@ -8352,12 +8303,12 @@ msgstr "Revendică-ți contul pentru a valorifica acest cadou." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Revendică-ți contul pentru a trimite cereri de prietenie." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Revendică-ți contul pentru a trimite raportări." @@ -8378,11 +8329,6 @@ msgstr "Revendică-ți contul pentru a iniția sau a te alătura apelurilor 1:1. msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Revendică-ți cadoul pentru a-ți activa abonamentul {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Se dă drept o altă persoană, marcă sau organizație." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Șterge căutarea" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Închide" msgid "Close popout" msgstr "Închide fereastra pop-out" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Închide acest DM" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Închide în bara de sistem" msgid "Close window" msgstr "Închide fereastra" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Închide DM-ul curent cu {dmDisplayName}. Acest lucru nu blochează utilizatorul și poți redeschide DM-ul mai târziu." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Închizi DM-ul cu {displayName}? Îl poți redeschide oricând." @@ -8837,7 +8773,7 @@ msgstr "Temă cărbune" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Cod" @@ -8868,7 +8804,7 @@ msgstr "Codul din aplicația {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Cod retrimis" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Comunități la care te poți alătura" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Comunitate" @@ -9131,7 +9065,7 @@ msgstr "Dezactivează sunetul în comunitate" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Depanare comunitate" @@ -9150,16 +9084,6 @@ msgstr "Comunitate ștearsă" msgid "Community DM" msgstr "DM comunitate" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Comunitatea există pentru a trimite spam, a înșela sau a abuza de platformă." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Comunitatea facilitează atacurile în grup sau abuzurile direcționate." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Pictogramă comunitate" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID comunitate" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "ID-ul comunității este obligatoriu." @@ -9526,6 +9450,11 @@ msgstr "Confirmă parola nouă" msgid "Confirm password" msgstr "Confirmă parola" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Confirmă declarația pentru a trimite raportul." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Continuă în browserul tău" msgid "Continue to checkout" msgstr "Continuă la finalizarea comenzii" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Continuă cu raportarea comunității" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Continuă cu raportarea utilizatorului" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Convertirea acestui canal într-un canal text va elimina fiecare canal c msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Convertește conținutul primit în vorbire, indiferent dacă provine de la /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Coordonează raiduri, atacuri în grup sau hărțuire împotriva unor persoane sau comunități." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL copiat în clipboard" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL copiat în clipboard" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Copiază ID-ul mesajului" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Copiază linkul mesajului" @@ -10643,6 +10553,11 @@ msgstr "Nu am putut încărca mesajele. Încearcă din nou mai târziu." msgid "Couldn't load settings" msgstr "Nu s-au putut încărca setările" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Nu am putut încărca formularul de raportare." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Nu s-a putut încărca această aplicație" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Nu s-a putut procesa imaginea" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Nu am putut publica acest mesaj" @@ -10825,11 +10740,6 @@ msgstr "Nu s-a putut trimite invitația" msgid "Couldn't send invite. Try again." msgstr "Nu s-a putut trimite invitația. Încearcă din nou." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Nu s-a putut trimite. Încearcă din nou." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Temporizator cu numărătoare inversă" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Țara de reședință" @@ -11301,13 +11211,8 @@ msgstr "Creată:" msgid "Credentials" msgstr "Credențiale" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Amenințări credibile, violență explicită sau glorificarea violenței." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croația" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Taie sunetul sub un prag de volum, cu un consum minim de procesor." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cipru" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Cehă" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Cehia" @@ -11965,7 +11870,7 @@ msgstr "Depanare canal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Depanare comunitate" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Ștergi tema?" msgid "Delete this invite? Can't be undone." msgstr "Ștergi această invitație? Acțiunea nu poate fi anulată." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Șterge acest mesaj" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Ștergi acest mesaj? Acțiunea nu poate fi anulată." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Ștergi acest mesaj? Nu poate fi anulat. Acest mesaj va fi eliminat și din fiecare comunitate care urmărește acest canal." @@ -12461,11 +12359,6 @@ msgstr "Ștergi mesajele tale din această comunitate?" msgid "Delete your messages in this conversation?" msgstr "Ștergi mesajele tale din această conversație?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Șters" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Refuzat {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danemarca" @@ -12554,11 +12447,6 @@ msgstr "Descrie stickerul" msgid "Describe this media for screen readers" msgstr "Descrie acest conținut media pentru cititoarele de ecran" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Descrie ce anume face ilegal conținutul" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Banner detașat" msgid "Detail" msgstr "Detaliu" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detalii" @@ -13315,11 +13203,6 @@ msgstr "Nume afișat (opțional)" msgid "Display scaling" msgstr "Scalare afișaj" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Distribuie programe malware, instrumente de furt al datelor de conectare sau alte fișiere dăunătoare." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Setări DM și cereri de prietenie" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Documentație" msgid "Doesn't allow being added to group DMs" msgstr "Nu permite adăugarea la DM-uri de grup" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Nu blochează. Poți redeschide mai târziu." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donează în schimb" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Descarcă hărți sursă pentru ca urmele de apeluri și instrumentele p msgid "Download video" msgstr "Descarcă video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, expunerea de informații private sau urmărirea." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, urmărire, uzurpare de identitate sau un profil neadecvat." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Editează culoarea pentru {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Editează profilul comunității" @@ -14043,7 +13908,7 @@ msgstr "Editează suprascrierile pentru roluri și membri în acest canal." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Editează profilul" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Editează ora locală a profilului" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Editezi mesajul publicat?" @@ -14191,13 +14056,13 @@ msgstr "Eligibil pentru o rambursare până la {windowEndsOn}. Aceasta îți va #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-mail" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Adresă de e-mail" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Adresa de e-mail este obligatorie." @@ -14721,16 +14586,6 @@ msgstr "Preferința codificatorului pentru noile partajări de ecran." msgid "Encoder, SVC, and bitrate presets" msgstr "Codificator, SVC și presetări de bitrate" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Încurajează autovătămarea" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Încurajează sinuciderea, autovătămarea sau tulburările de alimentație." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Criptarea end-to-end nu este disponibilă, deoarece în acest apel se af msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Criptarea end-to-end nu este disponibilă, deoarece pe acest canal vocal se află un participant incompatibil." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Pune în pericol minori sau găzduiește conținut de exploatare a copiilor." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Introdu un cod în formatul ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Introdu un URL sau un cod de șablon {theOtherPlatform} valid." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Introdu o adresă de e-mail validă." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Introdu un link de mesaj valid." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Introdu codul de {digitCount} cifre din aplicația de autentificare." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Introdu codul înainte de a continua." @@ -15008,7 +14858,7 @@ msgstr "Enter pentru a <0><1>salva" msgid "Enter username" msgstr "Introdu numele de utilizator" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Introdu codul de verificare" @@ -15017,6 +14867,11 @@ msgstr "Introdu codul de verificare" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Introdu adresa ta de e-mail și îți vom trimite un link pentru a-ți reseta parola." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Introdu numele legal complet pentru a trimite raportul." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Esc pentru a <0><1>anula" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Expiră la {earliest}" msgid "Expires:" msgstr "Expiră:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Explică problema" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Explică problema pentru a trimite raportul." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Linkurile externe pot fi periculoase. Fii atent." msgid "Extra large" msgstr "Foarte mare" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Comunitate extremistă" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Nu s-a putut elimina adresa URL personalizată. Încearcă din nou." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Nu s-a putut retrimite codul. Încearcă din nou." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Nu s-a putut reseta starea premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Nu s-a putut trimite codul. Încearcă din nou." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Nu s-a putut trimite mesajul. Ține apăsat pentru opțiuni." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Trimiterea raportului a eșuat. Încearcă din nou." @@ -15840,11 +15700,6 @@ msgstr "Nu s-au putut încărca emoji-urile începând cu {startLabel}: {errorMs msgid "Failed to upload emojis. Try again." msgstr "Nu s-au putut încărca emoji-urile. Încearcă din nou." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Afirmații false care pot provoca daune în lumea reală." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Găsește stickerul perfect" msgid "Fingerprint" msgstr "Amprentă digitală" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Finalizează configurarea contului" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Finalizează mai întâi configurarea contului" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Finalizează înregistrarea pentru a trimite cereri de prietenie." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlanda" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finlandeză" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Nume și prenume" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Ratele de cadre de peste 30 FPS necesită {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Franța" @@ -16834,10 +16689,10 @@ msgstr "Completă" msgid "Full dynamic range" msgstr "Gamă dinamică completă" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Nume legal complet" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Nume legal complet (opțional pentru rapoartele despre abuz sexual asupra copiilor)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Germană" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Germania" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Înapoi" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Întoarce-te și introdu o adresă de e-mail validă." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Ne bucurăm să te vedem, {username}! Bine ai venit." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grecia" @@ -17572,11 +17427,6 @@ msgstr "Greacă" msgid "Grid view" msgstr "Vizualizare grilă" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming sau conținut de exploatare a copiilor." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Nume de utilizator" msgid "Hang out with voice, video and screen share" msgstr "Petrece timp împreună prin voce, video și partajare de ecran" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Hărțuire" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Hărțuire care implică conținut matur" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Hărțuire sau intimidare" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Hărțuire sau urmărire" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Hărțuire sau abuz direcționat" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Hărțuire sau amenințări" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Cheie hardware" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Accelerat hardware pe majoritatea sistemelor Windows și macOS. Fiabil pentru dispozitive mai vechi." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Dezinformare dăunătoare" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "A cumpărat vreodată" msgid "Has ever purchased override" msgstr "A cumpărat vreodată (suprascriere)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Discurs instigator la ură" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Ascunzi propria partajare a ecranului?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Ascunde butoanele de descărcare, deschidere în browser și copiere pentru imaginile și videoclipurile din acest canal." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Ascunde mesajele acestei persoane și o împiedică să-ți trimită mesaje" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Maghiară" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungaria" @@ -18399,6 +18212,11 @@ msgstr "Sunt un sfat de utilizare" msgid "I changed my mind" msgstr "M-am răzgândit" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Confirm cu bună-credință că informațiile și afirmațiile din acest raport sunt exacte și complete." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Setări de inactivitate" msgid "Idle timeout" msgstr "Timp de inactivitate" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Dacă este implicat un minor, folosește în schimb „{childSafetyReasonName}”." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Dacă un cont folosește acea adresă, i-am trimis instrucțiuni de rese msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Dacă macOS cere să închizi și să redeschizi {productName}, alege Mai târziu." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Dacă cineva este în pericol imediat, contactează serviciile de urgență locale, dacă o poți face în siguranță." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Dacă cineva este în pericol imediat, contactează mai întâi serviciile de urgență locale." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Dacă cineva ți-a spus să lipești ceva aici, este o înșelătorie care îi poate da acces la contul tău {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Dacă implică CSAM sau exploatarea unui minor, trimite raportul acum și nu redistribui materialul." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Dacă aceasta este o amenințare credibilă și iminentă, contactează și serviciile locale de urgență." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Dacă aceasta este o amenințare teroristă iminentă, contactează și serviciile locale de urgență." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Dacă acest raport se referă la un anumit mesaj din această comunitate, raportează în schimb mesajul respectiv. Rapoartele de mesaje oferă echipei noastre de siguranță cel mai clar context, iar adăugarea detaliilor în comentarii ne poate ajuta să îl examinăm mai rapid. Continuă cu raportarea comunității în ansamblu doar dacă raportarea unui mesaj nu ar surprinde problema mai amplă." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Dacă acest raport se referă la un anumit mesaj, raportează în schimb mesajul respectiv. Rapoartele de mesaje oferă echipei noastre de siguranță cel mai clar context, iar adăugarea detaliilor în comentarii ne poate ajuta să îl examinăm mai rapid. Continuă cu raportarea utilizatorului în ansamblu doar dacă mesajul respectiv nu surprinde problema mai amplă." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Dacă acest raport se referă la anumite mesaje, raportează în schimb cel mai relevant mesaj. Rapoartele de mesaje oferă echipei noastre de siguranță cel mai clar context, iar adăugarea detaliilor în comentarii ne poate ajuta să îl examinăm mai rapid. Continuă cu raportarea utilizatorului în ansamblu doar dacă raportarea unui mesaj nu ar surprinde problema mai amplă." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Dacă crezi că este ilegal, menționează ce lege și de ce." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignoră pauza impusă de modul lent al acestui canal." msgid "Ignore virtual" msgstr "Ignoră dispozitivele virtuale" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Activitate ilegală" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Activitate ilegală sau altceva" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Vânzări ilegale, facilitarea infracțiunilor sau o încălcare clară a regulilor care nu se încadrează în categoriile de mai sus." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Vânzări ilegale, facilitarea infracțiunilor sau activități ilicite." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Imagini" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Imaginile copiate din clipboard sunt trimise ca atașamente, iar tu nu ai permisiunea să atașezi fișiere în acest canal." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Uzurpare de identitate" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Uzurpare de identitate sau conținut media înșelător" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inactiv" msgid "Inactive timeout" msgstr "Timp de inactivitate" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Profil neadecvat" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Includează codurile mele de rezervă pentru autentificare în doi pași în PDF și în imprimare" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Include ID-ul comunității." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Fundalul invitației" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Cod de invitație (opțional)" @@ -19471,7 +19220,7 @@ msgstr "Mascare invitație" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Invită membri" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Adresă IP autorizată" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Cursiv" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italia" @@ -20120,7 +19869,7 @@ msgstr "Taste" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Mai târziu" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letonia" @@ -20291,11 +20040,6 @@ msgstr "Află mai multe" msgid "Learn more about Visionary" msgstr "Află mai multe despre Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Părăsește" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Părăsește firul privat" msgid "Leave silently" msgstr "Părăsește în liniște" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Părăsește comunitatea" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Listează membrii cu acest rol în propria secțiune din lista de membri." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Lituania" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Se încarcă..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Se încarcă…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Scăzut" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Mentenanță programată pentru {localizedTime}. Durata estimată: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Faci din {userName} proprietarul grupului? Îți vei pierde privilegiile de proprietar." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Numește proprietar al grupului" @@ -21091,38 +20830,21 @@ msgstr "Numește proprietar al grupului" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Asigură-te că acest cod corespunde celui din aplicația {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Asigură-te că totul arată corect înainte de a trimite." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Personalizează instanța" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Linkuri rău intenționate" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribuire de malware" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Malware sau linkuri periculoase" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Programe malware, furt de date de conectare sau fișiere dăunătoare." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maschează detaliile private înainte de a partaja ecranul sau streamul. msgid "Mask Visionary as subscription" msgstr "Maschează Visionary ca abonament" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam în masă, fraudă, concursuri false sau abuz de cont." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Blocare media cu conținut matur" msgid "Mature content not allowed" msgstr "Conținutul matur nu este permis" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Conținut matur sau hărțuire" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Conținut matur sau restricționare inadecvată" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Suprascriere conținut matur" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Încălcarea politicii privind conținutul matur" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Conținut matur fără restricții adecvate." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Mesaj" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "link mesaj" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Link mesaj" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Previzualizări ale mesajelor în lista de DM-uri" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Mesaj publicat" @@ -22211,6 +21908,11 @@ msgstr "Ora mesajului" msgid "Message unpinned" msgstr "Fixare mesaj anulată" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Mesajul pe care îl raportezi" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minori în pericol, conținut matur în locuri nepotrivite sau comportament nedorit." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mai multe" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Mai multe acțiuni" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Imbricat" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Țările de Jos" @@ -24099,7 +23796,7 @@ msgstr "Niciun rezultat" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Nu s-au găsit rezultate" @@ -24858,6 +24555,16 @@ msgstr "Doar persoanele pe care le inviți și moderatorii pot vedea acest fir." msgid "Only places I can't access anymore" msgstr "Doar locurile la care nu mai am acces" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Raportează doar ce crezi sincer că încalcă regulile și, te rog, nu trimite același raport de două ori." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Raportează doar ce crezi sincer că încalcă regulile. Utilizarea greșită a rapoartelor contravine <0>regulilor comunității." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacitate" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Deschide pe {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Deschide fereastra pop-up" @@ -25379,11 +25084,6 @@ msgstr "Deschide Setări sistem → Confidențialitate și securitate → Înreg msgid "Open template JSON" msgstr "Deschide șablonul JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Deschide fereastra de banare pentru această comunitate." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Deschide setările" msgid "Opened the thread again" msgstr "Am redeschis firul" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Se deschide într-o filă nouă" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Interzis inițial pe {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Altele" @@ -25654,11 +25357,6 @@ msgstr "Altă reacție…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Echipa noastră de siguranță examinează raportul. Îți vom trimite un DM și un e-mail după ce ajungem la un verdict." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Dreptul de proprietate nu a putut fi transferat către <0>{username} în acest moment." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Proprietate transferată" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Lipește răspunsul JSON aici" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Lipește linkul mesajului." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Phishing, fraudă, linkuri rău intenționate sau afirmații false care pot provoca daune în lumea reală." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Alege un furnizor de căutare web" msgid "Pick an emoji" msgstr "Alege un emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Alege o opțiune pentru a continua." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Alege numărul de 4 cifre de după numele tău de utilizator" msgid "Pick the appearance this administrator account should start with." msgstr "Alege aspectul cu care ar trebui să înceapă acest cont de administrator." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Alege regula de revizuit." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Te rugăm să aștepți un moment și să încerci să redenumești din nou." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polonia" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugalia" @@ -26872,11 +26555,6 @@ msgstr "apasă pentru a adăuga o reacție" msgid "press to remove reaction" msgstr "apasă pentru a elimina reacția" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Se dă drept altcineva, inclusiv conținut înșelător generat de AI." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Blochează posibilitatea ca <0>{targetUserTag} să trimită mesaje, să reacționeze și să se conecteze la canalele vocale pentru durata specificată." @@ -27078,11 +26756,6 @@ msgstr "Vorbitor prioritar" msgid "Privacy" msgstr "Confidențialitate" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Confidențialitate sau uzurpare de identitate" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Configurare confidențialitate" msgid "Privacy URL" msgstr "URL confidențialitate" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Încălcare a confidențialității" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Încălcare a confidențialității sau doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Încălcare a confidențialității sau urmărire" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Tip profil" msgid "Profile updated" msgstr "Profil actualizat" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Încălcarea profilului, a numelui de utilizator sau a avatarului" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Promovează ura împotriva grupurilor protejate." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Promovează, recrutează sau coordonează activități extremiste violente." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Promovarea sau instrucțiunile care încurajează autovătămarea sau tulburările de alimentație." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profilul pe care îl raportezi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronume: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Protejează-ți contul Visionary activând autentificarea în doi pași. Mulțumim pentru susținerea {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Introdu cel puțin un ID de utilizator sau un tag de utilizator." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Introdu un ID de utilizator sau un nume de utilizator pentru persoana pe care o raportezi." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Introdu numele legal complet pentru declarație." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Butoanele radio permit selectarea unei singure opțiuni dintr-un grup." msgid "Radio group" msgstr "Grup de butoane radio" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Coordonare raid" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Ești gata să cumperi un cadou?" msgid "Ready to upgrade?" msgstr "Ești gata să faci upgrade?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Motiv" @@ -28291,8 +27924,8 @@ msgstr "Reține dimensiunea și poziția ferestrei" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Elimină {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Elimini {userName} din grup?" @@ -28419,8 +28052,8 @@ msgstr "Elimină din favorite" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Elimină din grup" @@ -28458,11 +28091,6 @@ msgstr "Elimină din favoritele GIF salvate doar prin URL" msgid "Remove icon" msgstr "Elimină pictograma" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Elimină-l din canal pentru toată lumea." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Eliminat din favorite" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Eliminat din grup" @@ -28919,28 +28547,18 @@ msgstr "Raportează o comunitate" msgid "Report a message" msgstr "Raportează un mesaj" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Raportează o încălcare a regulilor sau găsește instrumente pentru a-ți gestiona contactele și preferințele." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Raportează un profil de utilizator" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Raportează comunitatea" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Detalii raport" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Raportează conținut ilegal" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Raportează o problemă" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Raportează mesajul" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Raportează profilul" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Raport trimis" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Tip raport" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Raportează utilizatorul" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Tagul utilizatorului raportat (opțional)" @@ -29100,6 +28716,10 @@ msgstr "Necesită totul la nivel mediu, plus să fii membru al comunității de msgid "Resend" msgstr "Retrimite" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Retrimite ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Retrimite ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Retrimite ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Retrimite ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Retrimite ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Retrimite ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Retrimite ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Retrimite codul" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roluri actualizate cu succes" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "România" @@ -29947,7 +29567,7 @@ msgstr "Saturație" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "DM-ul tău cu <0>{displayName} începe aici. Salută!" msgid "Scale" msgstr "Scală" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Înșelătorii, malware sau dezinformare" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Scanează codul QR cu aplicația ta de autentificare." @@ -30855,11 +30470,6 @@ msgstr "Selectează" msgid "Select {accessibleName}" msgstr "Selectează {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Selectează o categorie" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Selectează o comunitate unde ai permisiunea {permissionName} sau un DM de grup din care faci parte." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Selectează o țară" @@ -30911,11 +30521,6 @@ msgstr "Selectează un URI de redirecționare" msgid "Select a scenario to apply..." msgstr "Selectează un scenariu de aplicat..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Selectează o categorie de încălcare." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Selectează contul cu care vrei să te conectezi pe noul tău dispozitiv msgid "Select voice processing mode" msgstr "Selectează modul de procesare a vocii" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Selectează ce vrei să raportezi." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Selectează-ți țara de reședință." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Selectează…" @@ -31037,13 +30642,6 @@ msgstr "Selecție: {0} (max. {1})" msgid "Selections" msgstr "Selecții" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Autovătămare sau sinucidere" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Trimite un mesaj de acțiune (se afișează în italic)." msgid "Send animation" msgstr "Trimitere animație" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Trimite un alt raport" @@ -31138,7 +30736,7 @@ msgstr "Buton de trimitere" msgid "Send code" msgstr "Trimite codul" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Trimite raport DSA" @@ -31158,9 +30756,9 @@ msgstr "Trimite fișiere de până la {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Trimite cerere de prietenie" @@ -31220,8 +30818,8 @@ msgstr "Trimite mesaje în fire de discuție" msgid "Send messages, images, GIFs and emoji" msgstr "Trimite mesaje, imagini, GIF-uri și emoji" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Trimite raportul" @@ -31255,7 +30853,7 @@ msgstr "Trimiți acest mesaj fixat înapoi în timp?" msgid "Send TTS messages" msgstr "Trimite mesaje TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Trimite codul de verificare" @@ -31273,11 +30871,6 @@ msgstr "Trimite mesaj vocal" msgid "Send:" msgstr "Trimitere:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Trimiterea de malware sau linkuri periculoase" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Partajează tema" msgid "Share voice activity with all friends?" msgstr "Partajezi activitatea vocală cu toți prietenii?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Spune-ne ce trebuie să știe echipa noastră pentru a evalua situația." @@ -31709,11 +31302,6 @@ msgstr "Spune-ne ce trebuie să știe echipa noastră pentru a evalua situația. msgid "Share with a friend" msgstr "Trimite unui prieten" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Trimite moderatorilor comunității." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Fereastră partajată" msgid "Shared window audio" msgstr "Audio fereastră partajată" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Partajează informații personale, urmărește utilizatori sau coordonează abuzuri de confidențialitate." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Partajarea informațiilor personale" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Glisoare" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovacia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Simulare mod lent" msgid "Slowmode time remaining" msgstr "Timp rămas pentru modul lent" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Jigniri, limbaj dezumanizant sau atacuri la adresa grupurilor protejate." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "A apărut o eroare la pregătirea acestui sticker. Încearcă alt fișier sau încearcă din nou mai târziu." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "A apărut o eroare la publicare. Încearcă din nou peste o clipă." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Aspect spațios, cu o separare vizuală clară între mesaje." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spania" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Cont de spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Clasificare spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam sau înșelătorie" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Comunitate de spam sau înșelătorie" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Cont de spam, înșelătorie sau phishing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, înșelătorii sau phishing" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Pornește minimizat" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Ia-o de la capăt" @@ -33752,22 +33302,26 @@ msgstr "Rămâi conectat" msgid "Step {current} of {total}" msgstr "Pasul {current} din {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Pasul 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Pasul 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Pasul 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Pasul 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Pasul 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Opriți transformarea în canal de anunțuri?" msgid "Stop hiding muted channels by default?" msgstr "Nu mai ascunzi canalele puse pe silențios în mod implicit?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Nu vei mai primi mesaje și cereri de prietenie." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Oprește testul microfonului" @@ -33959,11 +33508,6 @@ msgstr "Oprește patch-urile pentru Node.prototype insertBefore și removeChild. msgid "Stop ringing" msgstr "Oprește soneria" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Nu vei mai vedea conținutul și membrii comunității." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Înlocuiește expresiile textuale obișnuite, cum ar fi :) și <3, cu emoji atunci când trimiți mesaje" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Suedia" @@ -34804,11 +34348,6 @@ msgstr "Atinge pentru a adăuga o notă" msgid "tar.gz archive" msgstr "Arhivă tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Vizează persoane pe baza caracteristicilor protejate." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Termeni și condiții" msgid "Terms URL" msgstr "URL termeni" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terorism sau extremism violent" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thailandeză" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Îți mulțumim că ne ajuți să păstrăm {productName} în siguranță. Îți vom examina raportul cât mai curând posibil." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Mulțumim că ai semnalat acest lucru" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Mulțumim că ne-ai spus. Acest lucru nu încalcă în sine regulile noastre, așa că nu am trimis un raport." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Mulțumim că ne-ai spus. Acest lucru nu încalcă regulile noastre de la sine, așa că nu am trimis un raport. Dacă vizează pe cineva sau folosește insulte, raportează din nou și alege „Conținut abuziv sau dăunător”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Nu a funcționat. Încearcă din nou sau anulează." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Nu pare o culoare validă. Încearcă hex, rgb(), hsl() sau un nume de culoare CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Nu pare un URL valid." @@ -35104,6 +34653,11 @@ msgstr "Aplicația {PRODUCT_NAME} de pe celălalt dispozitiv o afișează la „ msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Aplicația {PRODUCT_NAME} nu a fost autentificată. Poți închide această filă." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Echipa de siguranță {productName} va analiza raportul tău. Nu vom dezvălui că a venit de la tine." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Adresa redirect_uri furnizată nu este înregistrată pentru această ap msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Adresa redirect_uri furnizată trebuie să utilizeze HTTP sau HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Formularul de raportare s-a modificat. Te rugăm să începi din nou." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Etichetele de nume de utilizator de pe această instanță sunt deja setate. Nu se mai pot modifica." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Codul de verificare este incorect sau a expirat." @@ -36115,13 +35674,8 @@ msgstr "Acest membru nu mai este conectat la canalul vocal." msgid "This message can only be forwarded to age-restricted channels" msgstr "Acest mesaj poate fi trimis doar către canale cu restricție de vârstă" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Acest mesaj a fost deja șters." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Acest mesaj a fost deja publicat" @@ -36279,11 +35833,6 @@ msgstr "Acest fir este închis. Trimiterea unui mesaj îl va redeschide." msgid "This thread is locked. Only moderators can send messages." msgstr "Acest fir de discuție este blocat. Doar moderatorii pot trimite mesaje." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "acest utilizator" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Acest utilizator și-a limitat profilul. Unele detalii sunt ascunse celor care nu îi sunt prieteni." @@ -36292,11 +35841,6 @@ msgstr "Acest utilizator și-a limitat profilul. Unele detalii sunt ascunse celo msgid "This user has no roles in this community." msgstr "Acest utilizator nu are roluri în această comunitate." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Acest utilizator este deja banat din comunitate." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Acest utilizator nu mai este disponibil." @@ -36465,16 +36009,6 @@ msgstr "Fir actualizat" msgid "Threads" msgstr "Fire" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Amenințări, urmărire dintr-un spațiu în altul sau contact nedorit." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Amenințări, hărțuire sau vătămare" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Timeout aplicat pentru {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Exclude temporar" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Mapează imaginile HDR la un interval standard, reducând luminozitatea maximă." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Au fost trimise prea multe coduri. Așteaptă {duration} și încearcă din nou." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Transferă proprietatea comunității" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Transferi proprietatea grupului către {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Deblochează mai întâi utilizatorul pentru a-i trimite o cerere de pri #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Deblochează utilizatorul" @@ -37607,16 +37146,6 @@ msgstr "Activează sunetul pe toate dispozitivele" msgid "Undeafen yourself" msgstr "Activează-ți sunetul" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Îngrijorări legate de minori sau siguranța copiilor" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Utilizator minor" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Până le reactivez eu" msgid "Unverified email" msgstr "E-mail neverificat" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Comportament nedorit sau conținut matur într-un loc nepotrivit." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Comportament, comentarii sau solicitări mature nedorite." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Până la {DISCOVERY_MAX_TAGS} etichete îi ajută pe oameni să-ți găsească comunitatea. Acestea apar în căutarea Discovery." @@ -38840,11 +38359,6 @@ msgstr "Folosește tema luminoasă" msgid "Use native title bar" msgstr "Folosește bara de titlu nativă" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Folosește doar dacă încalcă în mod clar regulile {productName} și nu se încadrează în categoriile de mai sus." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Folosit doar în această comunitate." msgid "User" msgstr "Utilizator" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Utilizatorul pare minor sau este implicat în ademenirea sau exploatarea copiilor." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Depanare utilizator" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID utilizator (opțional)" @@ -39061,12 +38570,12 @@ msgstr "Utilizatorul nu a fost găsit" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Profil utilizator" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Profil utilizator: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Setări utilizator" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Tag utilizator (opțional)" @@ -39339,7 +38848,7 @@ msgstr "Comunitate verificată" msgid "Verify" msgstr "Verifică" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verifică codul" @@ -39368,7 +38877,7 @@ msgstr "Confirmă că ești tu" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifică-ți adresa de e-mail" @@ -39718,7 +39227,7 @@ msgstr "Vezi codurile" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Vezi profilul comunității" @@ -39751,7 +39260,7 @@ msgstr "Vezi cadourile" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Vezi profilul global" @@ -39847,26 +39356,6 @@ msgstr "Spectatorul se alătură transmisiunii" msgid "Viewer leaves stream" msgstr "Spectatorul părăsește transmisiunea" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Categorie de încălcare" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Încălcarea este în profilul utilizatorului, nu într-un mesaj anume." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Violență sau amenințări violente" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Conținut violent sau explicit" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Am redimensionat și am comprimat acest emoji la 128x128 pixeli, dar are msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Am redimensionat și am comprimat acest sticker la 320x320 pixeli, dar are în continuare {fileSize}. Limita este {maxSize}. Încearcă o imagine mai simplă, mai puține culori sau un fișier sursă mai mic." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Am trimis un cod la {email}." @@ -40472,7 +39961,7 @@ msgstr "Vom procesa asta cât mai curând posibil. Vei primi un e-mail când arh msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Vom restaura adresa ta de email anterioară, vom deconecta sesiunile vechi, vom dezactiva MFA și îți vom securiza contul cu o parolă nouă." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Îți vom trimite un cod scurt pentru a confirma că poți primi actualizări despre acest raport." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Virginia de Vest" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Ce fel de regulă a fost încălcată?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Ce se întâmplă?" msgid "What's new" msgstr "Noutăți" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Care este motivul raportului tău?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Când nu este setată o dată limită personalizată, membrii fără permisiunea <0>{readMessageHistoryPermissionLabel} nu pot vedea niciun mesaj din istoric. Vor vedea mesajele doar în timp real, pe măsură ce sosesc, și acestea vor dispărea când își repornesc aplicația." @@ -40832,11 +40321,6 @@ msgstr "Ce comunități" msgid "Which conversations" msgstr "Ce conversații" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Ce regulă a fost încălcată?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Cât timp push-to-talk este activat, microfonul este controlat de scurtătură, așa că butonul de dezactivare a microfonului nu este disponibil." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Nu poți atașa fișiere pe acest canal." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Nu te poți adăuga pe tine ca prieten" @@ -41341,7 +40825,7 @@ msgstr "Nu poți trimite mesaje acestui utilizator" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Trebuie să accepți termenii și condițiile pentru a crea un cont" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Trebuie să-ți verifici adresa de e-mail înainte de a trimite un raport." @@ -41891,6 +41375,11 @@ msgstr "Beneficiezi de un tarif vechi. Prețul actual pentru acest plan este {cu msgid "You're sending messages too quickly" msgstr "Trimiți mesaje prea repede" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Trimiți rapoarte prea repede. Încearcă din nou mai târziu." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Vizualizezi mesaje mai vechi" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Ai adăugat mai multe persoane decât permite un DM de grup. Elimină câteva și încearcă din nou." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Ai raportat deja acest mesaj." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ai raportat deja acest profil astăzi." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Conturile și setările tale nu au fost modificate sau șterse." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Acțiunea ta nu a putut fi finalizată deoarece a fost semnalată de sistemele noastre de siguranță. Dacă crezi că este o greșeală, te rugăm să contactezi asistența." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Răspunsurile tale" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Cererea ta este în curs de examinare. Poți actualiza în continuare detaliile listării sau poți retrage cererea." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Browserul tău necesită interacțiune cu utilizatorul înainte de a reda audio. Apasă butonul de mai jos pentru a activa chatul vocal." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Modificările tale ajung în fiecare comunitate care urmărește acest canal și pot dura un minut. Fiecare mesaj publicat permite 3 editări rapide, apoi câte 1 la fiecare 20 de minute." @@ -42311,6 +41815,11 @@ msgstr "Noul tău pseudonim sau lasă gol pentru a-l reseta." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Vechiul tău kit de recuperare nu mai funcționează. Păstrează-l pe acesta nou undeva în siguranță." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Opțiunile tale" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "regiunea ta" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Plata pentru reînnoire a eșuat, dar <0/> rămân active până la <1>{graceDate}. Actualizează-ți metoda de plată înainte de această dată pentru a-ți păstra abonamentul." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Raportul tău nu a fost trimis. Încearcă din nou." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Abonamentul tău va trece la facturarea anuală la următoarea reînnoir msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS-ul temei tale este prea mare pentru a fi partajat. Redu-l și încearcă din nou." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Numele tău de utilizator (opțional)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index 60f2649c2..388f8705f 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -2081,7 +2081,7 @@ msgstr "Осталось {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {участник} few {участника} many {участников} other {участника}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Срок действия ссылки-приглашения истекает через # секунду.} few {Срок действия ссылки-приглашения истекает через # секунды.} many {Срок действия ссылки-приглашения истекает через # секунд.} other {Срок действия ссылки-приглашения истекает через # секунды.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Выбрано: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Данные аккаунта" msgid "Account details unavailable" msgstr "Сведения об аккаунте недоступны" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Аккаунт создан для рассылки спама, мошенничества или нарушения правил платформы." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Добавлено: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Добавлено: {createdDate} • последнее использование: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Дополнительные комментарии (необязательно)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Уже активирован" msgid "Already set to cancel" msgstr "Отмена уже запланирована" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Также пожаловаться на это сообщение команде безопасности {productName}" @@ -4576,11 +4566,6 @@ msgstr "Ежегодно" msgid "Another checkbox" msgstr "Ещё один флажок" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Ещё одно явное нарушение правил" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Ещё один круглый флажок" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Загрузка аудио" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Австрия" @@ -5620,6 +5605,7 @@ msgstr "Сейчас нет на месте" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Сейчас нет на месте" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Назад" @@ -5788,9 +5775,7 @@ msgstr "Резервные коды обновлены" msgid "Badge" msgstr "Значок" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Забанить" @@ -5819,7 +5804,7 @@ msgstr "Длительность бана" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Банить участников сообщества с возможн msgid "Ban reason" msgstr "Причина бана" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Забанить этого пользователя" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Пропускная способность" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Забанен" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Вы забанили {targetUserTag} в сообществе" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "До даты" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Бельгия" @@ -6031,7 +6006,7 @@ msgstr "Битрейт" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Заблокировать" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Скрывать" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Заблокировать {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Заблокировать во всех сообществах" msgid "Block spoiler" msgstr "Блочный спойлер" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Заблокировать этого пользователя" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Заблокировать пользователя" msgid "Blocked" msgstr "Заблокированные" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Заблокировано" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Встроенные переводчики" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Болгария" @@ -6519,16 +6500,6 @@ msgstr "Болгарский" msgid "Bulk delete" msgstr "Массовое удаление" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Травля, повторяющиеся нежелательные контакты, преследование или целенаправленные оскорбления." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Травля, угрозы, ненависть, насилие, рейды или контент, пропагандирующий членовредительство." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Калифорния" msgid "Call" msgstr "Звонок" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Настройки звонков и групповых чатов" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Изменить баннер" msgid "Change chat embed background" msgstr "Изменить фон чата" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Изменить почту" @@ -7150,8 +7116,8 @@ msgstr "Изменить никнейм друга" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Изменить никнейм в группе" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Сменить язык" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Изменить свой никнейм в группе" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Изменить свой никнейм" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Сменить владельца" @@ -7283,16 +7249,6 @@ msgstr "Изменить голосовой регион, который исп msgid "Change which voice region this channel uses." msgstr "Изменить голосовой регион, который использует этот канал." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Измените, кто может вам звонить или добавлять вас." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Измените, кто может с вами связаться." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Проверьте почту {emailAddress}: там будет ссыл msgid "Check your inbox for a verification email." msgstr "Проверьте почту: мы отправили вам письмо для подтверждения." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Проверьте жалобу" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Флажки" @@ -7901,21 +7862,6 @@ msgstr "Оформление заказа для этого аккаунта з msgid "Checkout unavailable" msgstr "Оформление заказа недоступно" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Угроза безопасности детей" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Безопасность детей или эксплуатация несовершеннолетних" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Безопасность детей или контент для взрослых" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Варианты" msgid "Choices: {choiceList}" msgstr "Варианты: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Выбрать" @@ -8122,6 +8068,11 @@ msgstr "Выберите категорию, которая лучше всег msgid "Choose the premium model" msgstr "Выберите премиум-модель" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Выберите причину заново" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Забрать подарок" msgid "Claim your account" msgstr "Подтвердите аккаунт" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Чтобы отправлять жалобы, подтвердите аккаунт и адрес электронной почты." @@ -8352,12 +8303,12 @@ msgstr "Подтвердите аккаунт, чтобы получить эт #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Подтвердите аккаунт, чтобы отправлять запросы на добавление в друзья." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Подтвердите свою учетную запись, чтобы отправлять жалобы." @@ -8378,11 +8329,6 @@ msgstr "Подтвердите аккаунт, чтобы начать или п msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Активируйте свой подарок, чтобы получить подписку на {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Выдавать себя за другого человека, бренд или организацию." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Очистить поле поиска" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Закрыть окно" msgid "Close popout" msgstr "Закрыть мини-окно" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Закрыть этот личный чат" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Закрывать в трей" msgid "Close window" msgstr "Закрыть окно" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Закройте текущий личный чат с {dmDisplayName}. Это не заблокирует пользователя, и вы сможете снова открыть чат позже." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Закрыть личный чат с {displayName}? Вы сможете открыть его в любое время." @@ -8837,7 +8773,7 @@ msgstr "Тема «Уголь»" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Код" @@ -8868,7 +8804,7 @@ msgstr "Код из приложения {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Код отправлен повторно" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Сообщества, к которым вы можете присоединиться" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Сообщество" @@ -9131,7 +9065,7 @@ msgstr "Отключить звук в сообществе" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Отладка сообщества" @@ -9150,16 +9084,6 @@ msgstr "Сообщество удалено" msgid "Community DM" msgstr "Личные сообщения из сообществ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Сообщество существует для рассылки спама, мошенничества или злоупотребления платформой." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Сообщество способствует травле или целенаправленным оскорблениям." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Значок сообщества" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID сообщества" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Требуется ID сообщества." @@ -9526,6 +9450,11 @@ msgstr "Подтвердите новый пароль" msgid "Confirm password" msgstr "Подтвердите пароль" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Подтвердите заявление, чтобы отправить жалобу." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Продолжить в браузере" msgid "Continue to checkout" msgstr "Перейти к оформлению заказа" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Перейти к жалобе на сообщество" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Перейти к жалобе на пользователя" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "При преобразовании этого канала в текс msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Преобразует входящий контент в речь, независимо от того, отправлен ли он через /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Координирует рейды, травлю или преследование людей или сообществ." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Ссылка скопирована в буфер обмена" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Ссылка скопирована в буфер обмена" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Скопировать ID сообщения" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Скопировать ссылку на сообщение" @@ -10643,6 +10553,11 @@ msgstr "Не удалось загрузить сообщения. Попроб msgid "Couldn't load settings" msgstr "Не удалось загрузить настройки" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Не удалось загрузить форму жалобы." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Не удалось загрузить это приложение" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Не удалось обработать изображение" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Не удалось опубликовать это сообщение" @@ -10825,11 +10740,6 @@ msgstr "Не удалось отправить приглашение" msgid "Couldn't send invite. Try again." msgstr "Не удалось отправить приглашение. Повторите попытку." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Не удалось отправить. Попробуйте ещё раз." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Таймер обратного отсчёта" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Страна проживания" @@ -11301,13 +11211,8 @@ msgstr "Создано:" msgid "Credentials" msgstr "Учетные данные" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Реальные угрозы, сцены жестокого насилия или его прославление." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Хорватия" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Отсекает звук ниже порога громкости при минимальной нагрузке на ЦП." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Кипр" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Чешский" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Чехия" @@ -11965,7 +11870,7 @@ msgstr "Отладка канала" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Отладка сообщества" @@ -12151,7 +12056,6 @@ msgstr "Делавэр" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Делавэр" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Удалить тему?" msgid "Delete this invite? Can't be undone." msgstr "Удалить это приглашение? Это действие нельзя отменить." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Удалить это сообщение" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Удалить это сообщение? Это действие нельзя отменить." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Удалить это сообщение? Отменить нельзя. Сообщение также будет удалено из всех сообществ, которые следят за этим каналом." @@ -12461,11 +12359,6 @@ msgstr "Удалить ваши сообщения в этом сообщест msgid "Delete your messages in this conversation?" msgstr "Удалить свои сообщения в этом чате?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Удалено" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Запрещены {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Дания" @@ -12554,11 +12447,6 @@ msgstr "Опишите стикер" msgid "Describe this media for screen readers" msgstr "Опишите медиафайл для программ чтения с экрана" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Опишите, почему этот контент незаконен" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Откреплённый баннер" msgid "Detail" msgstr "Детализация" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Подробности" @@ -13315,11 +13203,6 @@ msgstr "Отображаемое имя (необязательно)" msgid "Display scaling" msgstr "Масштаб отображения" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Распространяет вредоносное ПО, инструменты для кражи учетных данных или другие вредоносные файлы." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "ЛС" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Настройки личных сообщений и запросов в друзья" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Документация" msgid "Doesn't allow being added to group DMs" msgstr "Нельзя добавить в групповые чаты" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Не блокирует. Можно будет открыть позже." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Пожертвовать вместо этого" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Скачивайте исходные карты, чтобы трасс msgid "Download video" msgstr "Скачать видео" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Доксинг, раскрытие личной информации или преследование." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Доксинг, преследование, выдача себя за другое лицо или неприемлемый профиль." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Изменить цвет для {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Изменить профиль сообщества" @@ -14043,7 +13908,7 @@ msgstr "Изменять переопределения разрешений д #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Изменить профиль" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Изменить местное время в профиле" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Изменить опубликованное сообщение?" @@ -14191,13 +14056,13 @@ msgstr "Возврат средств возможен до {windowEndsOn}. Эт #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Эл. почта" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Эл. почта" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Требуется адрес электронной почты." @@ -14721,16 +14586,6 @@ msgstr "Предпочтительный кодировщик для новых msgid "Encoder, SVC, and bitrate presets" msgstr "Кодировщик, SVC и предустановки битрейта" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Призывы к самоповреждению" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Пропаганда суицида, самоповреждений или расстройств пищевого поведения." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Сквозное шифрование недоступно, так ка msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Сквозное шифрование недоступно, так как в этом голосовом канале есть неподдерживаемый участник." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Подвергает опасности несовершеннолетних или содержит материалы с эксплуатацией детей." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Введите код в формате ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Введите допустимый URL-адрес или код шаблона {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Введите действительный адрес электронной почты." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Введите действительную ссылку на сообщение." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Введите {digitCount}-значный код из приложения-аутентификатора." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Введите код, чтобы продолжить." @@ -15008,7 +14858,7 @@ msgstr "Enter, чтобы <0><1>сохранить" msgid "Enter username" msgstr "Введите имя пользователя" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Введите код подтверждения" @@ -15017,6 +14867,11 @@ msgstr "Введите код подтверждения" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Введите полное юридическое имя, чтобы отправить жалобу." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape, чтобы <0><1>отменить" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Эстония" @@ -15412,6 +15267,16 @@ msgstr "Истекает {earliest}" msgid "Expires:" msgstr "Истекает:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Опишите проблему" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Опишите проблему, чтобы отправить жалобу." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Внешние ссылки могут быть опасны. Будьт msgid "Extra large" msgstr "Очень большой" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Экстремистское сообщество" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Не удалось удалить пользовательский URL. Повторите попытку." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Не удалось отправить код повторно. Повторите попытку." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Не удалось сбросить премиум-статус." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Не удалось отправить код. Повторите попытку." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Не удалось отправить сообщение. Нажмите и удерживайте, чтобы увидеть опции." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Не удалось отправить жалобу. Повторите попытку." @@ -15840,11 +15700,6 @@ msgstr "Не удалось загрузить эмодзи, начиная с { msgid "Failed to upload emojis. Try again." msgstr "Не удалось загрузить эмодзи. Повторите попытку." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Ложные заявления, которые могут причинить реальный вред." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Найдите идеальный стикер" msgid "Fingerprint" msgstr "Отпечаток пальца" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Завершите настройку аккаунта" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Сначала завершите настройку аккаунта" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Завершите регистрацию, чтобы отправлять запросы на добавление в друзья." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Финляндия" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Финский" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Имя и фамилия" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Для частоты кадров выше 30 FPS требуется {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Франция" @@ -16834,10 +16689,10 @@ msgstr "Полный" msgid "Full dynamic range" msgstr "Полный динамический диапазон" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Полное имя" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Полное имя по документам (необязательно для жалоб на сексуальное насилие над детьми)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Немецкий" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Германия" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Назад" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Вернитесь и введите действительный адрес электронной почты." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Рады видеть вас, {username}! Добро пожаловать." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Греция" @@ -17572,11 +17427,6 @@ msgstr "Греческий" msgid "Grid view" msgstr "Сетка" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Материалы, содержащие груминг или эксплуатацию детей." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Имя пользователя" msgid "Hang out with voice, video and screen share" msgstr "Общайтесь голосом, видео и с демонстрацией экрана" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Домогательства" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Домогательства, связанные с контентом для взрослых" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Домогательства или травля" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Домогательства или преследование" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Домогательства или целенаправленные оскорбления" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Домогательства или угрозы" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Аппаратный ключ" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Аппаратное ускорение поддерживается в большинстве систем Windows и macOS. Надёжно работает на старых устройствах." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Вредная дезинформация" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Когда-либо покупал" msgid "Has ever purchased override" msgstr "Когда-либо покупал (переопределение)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Разжигание ненависти" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Скрыть демонстрацию своего экрана?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Скрывает кнопки «Скачать», «Открыть в браузере» и «Копировать» для изображений и видео в этом канале." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Скрывает сообщения пользователя и запрещает писать вам в личные сообщения" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Венгерский" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Венгрия" @@ -18399,6 +18212,11 @@ msgstr "Я — подсказка" msgid "I changed my mind" msgstr "Я передумал(а)" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Настоящим добросовестно подтверждаю, что сведения и утверждения в этом уведомлении точны и полны." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Настройки неактивности" msgid "Idle timeout" msgstr "Тайм-аут бездействия" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Если речь идёт о несовершеннолетнем, используйте «{childSafetyReasonName}»." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Если аккаунт использует этот адрес, мы msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Если macOS попросит перезапустить {productName}, выберите «Позже»." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Если кто-то находится в непосредственной опасности, свяжитесь с местными экстренными службами, если это безопасно." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Если кто-то находится в непосредственной опасности, сначала свяжитесь с местными экстренными службами." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Если кто-то попросил вас что-то сюда вставить, это мошенничество, и так злоумышленник может получить доступ к вашему аккаунту {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Если это касается материалов с сексуальным насилием над детьми или эксплуатации несовершеннолетних, отправьте жалобу сейчас и не делитесь этими материалами повторно." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Если это реальная и непосредственная угроза, также свяжитесь с местными экстренными службами." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Если это непосредственная террористическая угроза, также свяжитесь с местными экстренными службами." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Если жалоба касается конкретного сообщения в этом сообществе, пожалуйтесь на это сообщение. Жалобы на сообщения дают нашей команде безопасности наиболее полную информацию, а добавление деталей в комментариях поможет нам рассмотреть ее быстрее. Продолжайте жаловаться на сообщество в целом только в том случае, если жалоба на сообщение не отражает более широкую проблему." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Если жалоба касается конкретного сообщения, пожалуйтесь на него. Жалобы на сообщения дают нашей команде безопасности наиболее полную информацию, а добавление деталей в комментарии поможет нам быстрее рассмотреть жалобу. Продолжайте жаловаться на пользователя в целом, только если сообщение не отражает всей сути проблемы." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Если жалоба касается конкретных сообщений, пожалуйтесь на самое релевантное сообщение. Жалобы на сообщения дают нашей команде безопасности наиболее полную информацию, а добавление деталей в комментарии поможет нам рассмотреть ее быстрее. Продолжайте жаловаться на пользователя в целом, только если жалоба на сообщение не сможет охватить всю проблему." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Если вы считаете, что это незаконно, укажите, какой закон и почему." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Игнорировать медленный режим в этом ка msgid "Ignore virtual" msgstr "Игнорировать виртуальные устройства" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Незаконная деятельность" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Незаконная деятельность или другое" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Незаконная продажа, содействие преступлению или явное нарушение правил, не подходящее под другие категории." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Незаконные продажи, содействие преступности или противоправная деятельность." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Изображения" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Изображения, вставленные из буфера обмена, отправляются как вложения, но у вас нет разрешения прикреплять файлы в этом канале." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Выдача себя за другое лицо" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Выдача себя за другое лицо или обманные медиаматериалы" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Неактивность" msgid "Inactive timeout" msgstr "Тайм-аут неактивности" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Неприемлемый профиль" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Включить мои резервные коды двухфакторной аутентификации в PDF и распечатку" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Укажите ID сообщества." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Фон приглашения" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Код приглашения (необязательно)" @@ -19471,7 +19220,7 @@ msgstr "Маскировка приглашений" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Пригласить участников" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-адрес авторизован" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ирландия" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Курсив" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Италия" @@ -20120,7 +19869,7 @@ msgstr "Клавиши" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Позже" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Латвия" @@ -20291,11 +20040,6 @@ msgstr "Подробнее" msgid "Learn more about Visionary" msgstr "Узнайте больше о Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Выйти" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Покинуть приватный тред" msgid "Leave silently" msgstr "Выйти без уведомления" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Покинуть сообщество" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Показывает участников с этой ролью в отдельном разделе списка участников." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Литва" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Загрузка..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Загрузка…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Низкий" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Люксембург" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Технические работы запланированы на {localizedTime}. Ожидаемая продолжительность: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Сделать {userName} владельцем группы? Вы потеряете права владельца." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Сделать владельцем группы" @@ -21091,38 +20830,21 @@ msgstr "Сделать владельцем группы" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Убедитесь, что этот код совпадает с кодом в приложении {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Убедитесь, что всё выглядит правильно перед отправкой." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Сделайте ваш экземпляр уникальным" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Вредоносные ссылки" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Мальта" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Распространение вредоносного ПО" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Вредоносное ПО или опасные ссылки" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Вредоносное ПО, кража учетных данных или опасные файлы." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Скрывать личные данные при демонстраци msgid "Mask Visionary as subscription" msgstr "Маскировать Visionary под подписку" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Массовый спам, мошенничество, фейковые розыгрыши или злоупотребление аккаунтом." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Блокировка медиа с контентом для взрос msgid "Mature content not allowed" msgstr "Контент для взрослых не разрешен" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Контент для взрослых или домогательства" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Контент для взрослых или ненадлежащее ограничение доступа" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Переопределение возрастного ограничения" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Нарушение политики в отношении контента для взрослых" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Контент для взрослых без соответствующего возрастного ограничения." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Сообщение" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "ссылка на сообщение" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Ссылка на сообщение" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Предпросмотр сообщений в списке личных чатов" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Сообщение опубликовано" @@ -22211,6 +21908,11 @@ msgstr "Время сообщения" msgid "Message unpinned" msgstr "Сообщение откреплено" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Сообщение, на которое вы жалуетесь" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Миннесота" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Опасность для несовершеннолетних, контент для взрослых не в том месте или нежелательное поведение." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Ещё" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Другие действия" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Вложенные" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Нидерланды" @@ -24099,7 +23796,7 @@ msgstr "Нет результатов" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Ничего не найдено" @@ -24858,6 +24555,16 @@ msgstr "Это обсуждение видят только приглашенн msgid "Only places I can't access anymore" msgstr "Только места, к которым у меня больше нет доступа" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Жалуйтесь только на то, что, по вашему искреннему убеждению, нарушает правила, и, пожалуйста, не отправляйте одну и ту же жалобу дважды." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Жалуйтесь только на то, что, по вашему искреннему убеждению, нарушает правила. Злоупотребление жалобами противоречит нашим <0>правилам сообщества." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Непрозрачность" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Открыть на {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Открыть всплывающее окно" @@ -25379,11 +25084,6 @@ msgstr "Откройте «Системные настройки» → «Кон msgid "Open template JSON" msgstr "Открыть JSON шаблона" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Открыть окно бана для этого сообщества." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Открыть настройки" msgid "Opened the thread again" msgstr "Снова открыли тему" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Открывается в новой вкладке" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Изначально забанен {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Другое" @@ -25654,11 +25357,6 @@ msgstr "Другая реакция…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Наша команда безопасности рассматривает ее. Мы отправим вам личное сообщение и письмо на почту, как только примем решение." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Сейчас не удалось передать права владельца пользователю <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Права владельца переданы" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Вставьте сюда JSON-ответ" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Вставьте ссылку на сообщение." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Фишинг, мошенничество, вредоносные ссылки или ложные заявления, которые могут причинить реальный вред." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Выберите поисковую систему" msgid "Pick an emoji" msgstr "Выберите эмодзи" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Выберите вариант, чтобы продолжить." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Выберите 4-значный номер после вашего и msgid "Pick the appearance this administrator account should start with." msgstr "Выберите начальный внешний вид для аккаунта администратора." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Выберите правило для проверки." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Пожалуйста, подождите немного и попробуйте переименовать ещё раз." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Польша" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Порт" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Португалия" @@ -26872,11 +26555,6 @@ msgstr "нажмите, чтобы добавить реакцию" msgid "press to remove reaction" msgstr "нажмите, чтобы удалить реакцию" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Выдача себя за другое лицо, в том числе вводящий в заблуждение контент, созданный ИИ." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Запретить <0>{targetUserTag} отправлять сообщения, ставить реакции и подключаться к голосовым каналам на указанное время." @@ -27078,11 +26756,6 @@ msgstr "Приоритетный голос" msgid "Privacy" msgstr "Конфиденциальность" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Нарушение конфиденциальности или выдача себя за другое лицо" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Настройка конфиденциальности" msgid "Privacy URL" msgstr "URL политики конфиденциальности" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Нарушение конфиденциальности" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Нарушение конфиденциальности или доксинг" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Нарушение конфиденциальности или преследование" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Тип профиля" msgid "Profile updated" msgstr "Профиль обновлен" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Нарушение, связанное с профилем, именем пользователя или аватаром" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Разжигает ненависть к защищённым группам." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Пропагандирует, вербует или координирует насильственную экстремистскую деятельность." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Пропаганда или инструкции, поощряющие причинение вреда себе или расстройства пищевого поведения." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Профиль, на который вы жалуетесь" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Местоимения: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Защитите свой аккаунт Visionary, включив двухфакторную аутентификацию. Спасибо за поддержку {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Укажите хотя бы ID пользователя или тег пользователя." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Укажите ID пользователя или имя пользователя, на которого вы жалуетесь." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Укажите ваше полное имя для декларации." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Радиокнопки позволяют выбрать один вар msgid "Radio group" msgstr "Переключатели" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Координация рейдов" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Готовы купить подарок?" msgid "Ready to upgrade?" msgstr "Готовы оформить подписку?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Причина" @@ -28291,8 +27924,8 @@ msgstr "Запоминать размер и положение окна" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Удалить {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Удалить {userName} из группы?" @@ -28419,8 +28052,8 @@ msgstr "Удалить из избранного" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Удалить из группы" @@ -28458,11 +28091,6 @@ msgstr "Удалить из избранных GIF (только по URL)" msgid "Remove icon" msgstr "Удалить значок" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Удалить его из канала для всех." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Удалено из избранного" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Участник удалён из группы" @@ -28919,28 +28547,18 @@ msgstr "Пожаловаться на сообщество" msgid "Report a message" msgstr "Пожаловаться на сообщение" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Пожаловаться на нарушение правил или найти инструменты для управления контактами и настройками." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Пожаловаться на профиль пользователя" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Пожаловаться на сообщество" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Детали жалобы" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Пожаловаться на незаконный контент" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Сообщить о проблеме" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Пожаловаться на сообщение" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Пожаловаться на профиль" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Жалоба отправлена" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Тип жалобы" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Пожаловаться на пользователя" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Тег пользователя, на которого жалуетесь (необязательно)" @@ -29100,6 +28716,10 @@ msgstr "Всё то же, что и на среднем уровне, плюс msgid "Resend" msgstr "Отправить повторно" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Отправить повторно ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Отправить повторно ({newSecondsRemaining} с)" @@ -29108,7 +28728,7 @@ msgstr "Отправить повторно ({newSecondsRemaining} с)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Отправить повторно ({originalSecondsRemaining} с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Отправить повторно ({resendCooldownSeconds} с)" @@ -29122,7 +28742,7 @@ msgstr "Отправить повторно ({resendSecondsRemaining} с)" msgid "Resend ({secondsRemaining}s)" msgstr "Отправить повторно ({secondsRemaining} с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Отправить код повторно" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Роли успешно обновлены" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Румыния" @@ -29947,7 +29567,7 @@ msgstr "Насыщенность" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Поздоровайтесь с <0>{displayName}. Ваш личны msgid "Scale" msgstr "Масштаб" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Мошенничество, вредоносное ПО или дезинформация" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Отсканируйте QR-код с помощью приложения-аутентификатора." @@ -30855,11 +30470,6 @@ msgstr "Выбрать" msgid "Select {accessibleName}" msgstr "Выберите {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Выберите категорию" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Выберите сообщество, где у вас есть разрешение «{permissionName}», или групповой чат, в котором вы состоите." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Выберите страну" @@ -30911,11 +30521,6 @@ msgstr "Выберите URI перенаправления" msgid "Select a scenario to apply..." msgstr "Выберите сценарий для применения..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Выберите категорию нарушения." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Выберите аккаунт, с которым хотите войт msgid "Select voice processing mode" msgstr "Выберите режим обработки голоса" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Выберите, на что хотите пожаловаться." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Выберите страну проживания." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Выбрать…" @@ -31037,13 +30642,6 @@ msgstr "Выделено: {0} (макс. {1})" msgid "Selections" msgstr "Элементы выбора" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Причинение вреда себе или суицид" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Отправить сообщение-действие (выделяет msgid "Send animation" msgstr "Отправка анимации" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Отправить ещё одну жалобу" @@ -31138,7 +30736,7 @@ msgstr "Кнопка отправки" msgid "Send code" msgstr "Отправить код" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Отправить жалобу по DSA" @@ -31158,9 +30756,9 @@ msgstr "Отправляйте файлы размером до {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Отправить запрос на добавление в друзья" @@ -31220,8 +30818,8 @@ msgstr "Отправлять сообщения в ветках" msgid "Send messages, images, GIFs and emoji" msgstr "Отправляйте сообщения, изображения, GIF-анимации и эмодзи" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Отправить жалобу" @@ -31255,7 +30853,7 @@ msgstr "Отправить это закрепление в прошлое?" msgid "Send TTS messages" msgstr "Отправлять сообщения TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Отправить код подтверждения" @@ -31273,11 +30871,6 @@ msgstr "Отправить голосовое сообщение" msgid "Send:" msgstr "Отправка:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Отправка вредоносных программ или опасных ссылок" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Поделиться темой" msgid "Share voice activity with all friends?" msgstr "Делиться голосовой активностью со всеми друзьями?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Расскажите, что нашей команде нужно знать для оценки." @@ -31709,11 +31302,6 @@ msgstr "Расскажите, что нашей команде нужно зна msgid "Share with a friend" msgstr "Поделиться с другом" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Поделиться с модераторами сообщества." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Демонстрируемое окно" msgid "Shared window audio" msgstr "Звук демонстрируемого окна" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Делится личной информацией, преследует пользователей или координирует нарушения конфиденциальности." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Распространение личной информации" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Ползунки" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Словакия" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Словения" @@ -32889,11 +32467,6 @@ msgstr "Имитация медленного режима" msgid "Slowmode time remaining" msgstr "Медленный режим: осталось времени" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Оскорбления, дегуманизирующие высказывания или нападки на защищённые группы." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Что-то пошло не так при подготовке стикера. Попробуйте другой файл или повторите попытку через минуту." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Что-то пошло не так при публикации. Попробуйте еще раз через мгновение." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Просторный макет с чётким визуальным разделением между сообщениями." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Испания" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Спам-аккаунт" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Классификация спама" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Спам или мошенничество" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Сообщество для спама или мошенничества" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Аккаунт для спама, мошенничества или фишинга" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Спам, мошенничество или фишинг" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Начинать свернутым" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Начать сначала" @@ -33752,22 +33302,26 @@ msgstr "Остаться в аккаунте" msgid "Step {current} of {total}" msgstr "Шаг {current} из {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Шаг 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Шаг 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Шаг 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Шаг 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Шаг 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Прекратить быть каналом объявлений?" msgid "Stop hiding muted channels by default?" msgstr "Перестать скрывать заглушенные каналы по умолчанию?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Остановить сообщения и запросы на добавление в друзья." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Остановить проверку микрофона" @@ -33959,11 +33508,6 @@ msgstr "Прекратить патчить Node.prototype insertBefore и remov msgid "Stop ringing" msgstr "Остановить звонок" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Перестать видеть его контент и участников." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Заменять распространенные текстовые смайлики, такие как :) и <3, на эмодзи при отправке сообщений" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Швеция" @@ -34804,11 +34348,6 @@ msgstr "Нажмите, чтобы добавить заметку" msgid "tar.gz archive" msgstr "Архив tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Направлено против людей по защищённым признакам." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Условия использования" msgid "Terms URL" msgstr "URL-адрес условий" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Терроризм или насильственный экстремизм" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Тайский" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Спасибо, что помогаете нам обеспечивать безопасность в {productName}. Мы рассмотрим вашу жалобу как можно скорее." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Спасибо, что сообщили об этом" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Спасибо, что сообщили нам. Само по себе это не нарушает наших правил, поэтому мы не отправили жалобу." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Спасибо, что сообщили нам. Само по себе это не нарушает наших правил, поэтому мы не отправили жалобу. Если это направлено на кого-то или содержит оскорбления, пожалуйтесь снова и выберите «Оскорбительный или вредоносный контент»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Не получилось. Повторите попытку или от msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Это не похоже на действительный цвет. Попробуйте шестнадцатеричный код, rgb(), hsl() или название цвета CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Похоже, это недействительная ссылка." @@ -35104,6 +34653,11 @@ msgstr "Приложение {PRODUCT_NAME} на другом вашем уст msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Приложение {PRODUCT_NAME} не было авторизовано. Вы можете закрыть эту вкладку." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Команда безопасности {productName} рассмотрит вашу жалобу. Мы не раскроем, что она поступила от вас." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Указанный redirect_uri не зарегистрирован дл msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Указанный redirect_uri должен использовать HTTP или HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Форма жалобы изменилась. Пожалуйста, начните заново." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Теги имен пользователей в этом экземпляре уже настроены. Их больше нельзя изменить." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Неверный код подтверждения или срок его действия истёк." @@ -36115,13 +35674,8 @@ msgstr "Этот участник больше не подключен к гол msgid "This message can only be forwarded to age-restricted channels" msgstr "Это сообщение можно переслать только в каналы с возрастным ограничением" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Это сообщение уже удалено." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Это сообщение уже было опубликовано" @@ -36279,11 +35833,6 @@ msgstr "Этот тред закрыт. Отправка сообщения сн msgid "This thread is locked. Only moderators can send messages." msgstr "Этот тред заблокирован. Только модераторы могут отправлять сообщения." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "этот пользователь" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Этот пользователь ограничил свой профиль. Некоторые данные скрыты от тех, кто не является его другом." @@ -36292,11 +35841,6 @@ msgstr "Этот пользователь ограничил свой профи msgid "This user has no roles in this community." msgstr "У этого пользователя нет ролей в этом сообществе." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Этот пользователь уже забанен в сообществе." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Этот пользователь больше недоступен." @@ -36465,16 +36009,6 @@ msgstr "Обновление темы" msgid "Threads" msgstr "Темы" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Угрозы, преследование на разных площадках или нежелательное общение." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Угрозы, травля или причинение вреда" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Тайм-аут для {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Тайм-аут" @@ -36787,6 +36321,11 @@ msgstr "Тональное отображение" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Тональная компрессия HDR-изображений до стандартного диапазона, уменьшающая пиковую яркость." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Отправлено слишком много кодов. Подождите {duration} и повторите попытку." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Передать права владельца сообщества" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Передать права владельца группы пользователю {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Сначала разблокируйте пользователя, чт #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Разблокировать пользователя" @@ -37607,16 +37146,6 @@ msgstr "Включить звук на всех устройствах" msgid "Undeafen yourself" msgstr "Включить звук для себя" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Несовершеннолетний или угроза безопасности ребёнка" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Несовершеннолетний пользователь" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Пока не включу обратно" msgid "Unverified email" msgstr "Эл. почта не подтверждена" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Нежелательное поведение или контент для взрослых не в том месте." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Нежелательное поведение, комментарии или запросы сексуального характера." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "До {DISCOVERY_MAX_TAGS} тегов помогут людям найти ваше сообщество. Они отображаются в поиске по каталогу." @@ -38840,11 +38359,6 @@ msgstr "Использовать светлую тему" msgid "Use native title bar" msgstr "Использовать стандартную строку заголовка" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Используйте, только если это явно нарушает правила {productName} и не подходит под другие категории." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Используется только в этом сообществе." msgid "User" msgstr "Пользователь" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Пользователь выглядит несовершеннолетним либо причастен к грумингу или эксплуатации детей." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Отладка пользователя" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID пользователя (необязательно)" @@ -39061,12 +38570,12 @@ msgstr "Пользователь не найден" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Профиль пользователя" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Профиль пользователя: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Настройки пользователя" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Тег пользователя (необязательно)" @@ -39339,7 +38848,7 @@ msgstr "Подтвержденное сообщество" msgid "Verify" msgstr "Подтвердить" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Подтвердить код" @@ -39368,7 +38877,7 @@ msgstr "Подтвердите, что это вы" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Подтвердите почту" @@ -39718,7 +39227,7 @@ msgstr "Посмотреть коды" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Посмотреть профиль сообщества" @@ -39751,7 +39260,7 @@ msgstr "Посмотреть подарки" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Посмотреть глобальный профиль" @@ -39847,26 +39356,6 @@ msgstr "Зритель присоединяется к трансляции" msgid "Viewer leaves stream" msgstr "Зритель покидает трансляцию" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Категория нарушения" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Нарушение в профиле пользователя, а не в конкретном сообщении." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Насилие или угрозы насилия" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Насилие или шокирующий контент" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Мы изменили размер и сжали этот эмодзи msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Мы изменили размер и сжали этот стикер до 320x320 пикселей, но его размер по-прежнему составляет {fileSize}. Лимит — {maxSize}. Попробуйте использовать более простое изображение, меньше цветов или файл меньшего размера." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Мы отправили код на {email}." @@ -40472,7 +39961,7 @@ msgstr "Мы обработаем запрос как можно скорее. msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Мы восстановим вашу предыдущую почту, выйдем из старых сеансов, отключим двухфакторную аутентификацию и защитим ваш аккаунт новым паролем." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Мы отправим короткий код, чтобы подтвердить, что вы можете получать уведомления об этой жалобе." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Западная Виргиния" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Какое правило было нарушено?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Что нового?" msgid "What's new" msgstr "Что нового" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Какова причина вашей жалобы?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Если пользовательская пороговая дата не задана, участники без разрешения <0>{readMessageHistoryPermissionLabel} не смогут просматривать старые сообщения. Они будут видеть сообщения только в реальном времени по мере их поступления, и эти сообщения исчезнут при перезапуске клиента." @@ -40832,11 +40321,6 @@ msgstr "Какие сообщества" msgid "Which conversations" msgstr "Какие чаты" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Какое правило было нарушено?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Когда включён режим «Нажми и говори», микрофоном управляет сочетание клавиш, поэтому кнопка отключения микрофона неактивна." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Вы не можете прикреплять файлы в этом канале." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Нельзя добавить себя в друзья" @@ -41341,7 +40825,7 @@ msgstr "Вы не можете отправить сообщение этому #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Чтобы создать аккаунт, вы должны согласиться с условиями использования" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Чтобы отправить жалобу, подтвердите адрес электронной почты." @@ -41891,6 +41375,11 @@ msgstr "Вы используете тариф по старой цене. Те msgid "You're sending messages too quickly" msgstr "Вы отправляете сообщения слишком быстро" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Вы отправляете жалобы слишком часто. Попробуйте позже." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Вы просматриваете старые сообщения" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Вы добавили больше людей, чем допускает групповой чат. Уберите несколько человек и попробуйте снова." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Вы уже пожаловались на это сообщение." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Вы уже пожаловались на этот профиль сегодня." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Ваши аккаунты и настройки не были измен msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Ваше действие не удалось выполнить, так как оно было отмечено нашими системами безопасности. Если вы считаете, что это ошибка, обратитесь в поддержку." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Ваши ответы" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Ваша заявка находится на рассмотрении. Вы можете обновить данные объявления или отозвать заявку." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Браузеру нужно действие с вашей стороны, прежде чем он сможет воспроизводить звук. Нажмите кнопку ниже, чтобы включить голосовой чат." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Ваши изменения увидят все сообщества, подписанные на этот канал. Это может занять минуту. Каждое опубликованное сообщение можно быстро отредактировать 3 раза, а затем по одному разу каждые 20 минут." @@ -42311,6 +41815,11 @@ msgstr "Новый никнейм. Оставьте поле пустым, чт msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Ваш старый комплект для восстановления больше не работает. Храните этот новый в надежном месте." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Ваши варианты" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "ваш регион" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Платёж за продление не прошёл, но <0/> остаются активными до <1>{graceDate}. Обновите способ оплаты до этой даты, чтобы сохранить подписку." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Ваша жалоба не была отправлена. Повторите попытку." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Ваша подписка перейдёт на годовую опла msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS вашей темы слишком большой для отправки. Уменьшите его и попробуйте снова." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Ваше имя пользователя (необязательно)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index 8db1a883c..4c1efcc10 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} kvar" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {medlem} other {medlemmar}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Din inbjudningslänk upphör att gälla om # sekund.} other {Din inbjudningslänk upphör att gälla om # sekunder.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Valda: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Kontodata" msgid "Account details unavailable" msgstr "Kontouppgifter ej tillgängliga" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Kontot finns för att skräpposta, lura eller missbruka plattformen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Tillagd: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Tillagd: {createdDate} • senast använd: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Ytterligare kommentarer (valfritt)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Redan inlöst" msgid "Already set to cancel" msgstr "Redan inställd för uppsägning" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Anmäl även det här meddelandet till säkerhetsteamet på {productName}" @@ -4576,11 +4566,6 @@ msgstr "Årlig" msgid "Another checkbox" msgstr "Ännu en kryssruta" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Ännu en tydlig regelöverträdelse" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Ytterligare en rund kryssruta" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Ljuduppladdning" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Österrike" @@ -5620,6 +5605,7 @@ msgstr "Borta just nu" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Borta just nu" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Tillbaka" @@ -5788,9 +5775,7 @@ msgstr "Reservkoder har återskapats" msgid "Badge" msgstr "Märke" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Bannlys" @@ -5819,7 +5804,7 @@ msgstr "Bannlysningens längd" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Bannlys medlemmar från communityn, med möjlighet att ta bort deras sen msgid "Ban reason" msgstr "Anledning till bannlysning" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Bannlys den här användaren" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bandbredd" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Bannlyst" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Bannlyste {targetUserTag} från communityn" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Före datum" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belgien" @@ -6031,7 +6006,7 @@ msgstr "Bithastighet" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Blockera" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Blockera" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Blockera {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Blockera för alla communities" msgid "Block spoiler" msgstr "Blockera spoiler" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Blockera den här användaren" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Blockera användare" msgid "Blocked" msgstr "Blockerade" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Blockerad" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Inbyggda översättare" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgarien" @@ -6519,16 +6500,6 @@ msgstr "Bulgariska" msgid "Bulk delete" msgstr "Massradera" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Mobbning, upprepad oönskad kontakt, förföljelse eller riktade trakasserier." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Mobbning, hot, hat, våld, raider eller innehåll som uppmuntrar till självskadebeteende." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kalifornien" msgid "Call" msgstr "Samtal" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Samtals- och gruppchattinställningar" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Ändra banner" msgid "Change chat embed background" msgstr "Ändra bakgrund för chattinbäddning" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Ändra e-postadress" @@ -7150,8 +7116,8 @@ msgstr "Ändra väns smeknamn" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Ändra gruppsmeknamn" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Ändra språk" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Ändra mitt gruppsmeknamn" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Ändra eget smeknamn" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Ändra ägare" @@ -7283,16 +7249,6 @@ msgstr "Ändra vilken röstregion en röstkanal använder." msgid "Change which voice region this channel uses." msgstr "Ändra vilken röstregion den här kanalen använder." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Ändra vem som kan ringa eller lägga till dig." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Ändra vem som kan nå dig." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Kolla din inkorg på {emailAddress} efter auktoriseringslänken." msgid "Check your inbox for a verification email." msgstr "Kontrollera din inkorg efter ett verifieringsmejl." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Granska din anmälan" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Kryssrutor" @@ -7901,21 +7862,6 @@ msgstr "Kassan är blockerad för det här kontot. Kontakta {supportEmail} om du msgid "Checkout unavailable" msgstr "Kassan är inte tillgänglig" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Oro för barns säkerhet" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Barns säkerhet eller utnyttjande av minderåriga" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Barns säkerhet eller vuxet innehåll" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Val" msgid "Choices: {choiceList}" msgstr "Val: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Välj" @@ -8122,6 +8068,11 @@ msgstr "Välj den kategori som bäst beskriver din community. Du kan ändra dett msgid "Choose the premium model" msgstr "Välj premiummodell" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Välj anledning igen" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Lös in present" msgid "Claim your account" msgstr "Säkra ditt konto" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Säkra ditt konto och verifiera din e-postadress för att skicka anmälningar." @@ -8352,12 +8303,12 @@ msgstr "Säkra ditt konto för att lösa in den här presenten." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Säkra ditt konto för att skicka vänförfrågningar." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Gör anspråk på ditt konto för att skicka rapporter." @@ -8378,11 +8329,6 @@ msgstr "Säkra ditt konto för att starta eller gå med i enskilda samtal." msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Lös in din present för att aktivera ditt {premiumProductName}-abonnemang!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Utger sig för att vara en annan person, ett varumärke eller en organisation." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Rensa sökfält" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Stäng dialogrutan" msgid "Close popout" msgstr "Stäng det fristående fönstret" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Stäng den här DM-konversationen" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Stäng till meddelandefältet" msgid "Close window" msgstr "Stäng fönstret" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Stäng din nuvarande DM-konversation med {dmDisplayName}. Användaren blockeras inte och du kan öppna konversationen igen senare." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Stäng din DM-konversation med {displayName}? Du kan öppna den igen när som helst." @@ -8837,7 +8773,7 @@ msgstr "Koltema" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kod" @@ -8868,7 +8804,7 @@ msgstr "Kod från appen {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kod skickad igen" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Communities du kan gå med i" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Community" @@ -9131,7 +9065,7 @@ msgstr "Stäng av medlemmens ljud i communityn" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Felsök community" @@ -9150,16 +9084,6 @@ msgstr "Communityn har tagits bort" msgid "Community DM" msgstr "DM för community" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Communityn finns för att spamma, lura eller missbruka plattformen." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Communityn underlättar påhopp eller riktade trakasserier." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Communityikon" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Community-ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Community-ID krävs." @@ -9526,6 +9450,11 @@ msgstr "Bekräfta nytt lösenord" msgid "Confirm password" msgstr "Bekräfta lösenord" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Bekräfta försäkran för att skicka anmälan." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Fortsätt i webbläsaren" msgid "Continue to checkout" msgstr "Fortsätt till kassan" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Fortsätt för att anmäla communityn" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Fortsätt för att anmäla användaren" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Att konvertera den här kanalen till en textkanal tar bort alla kanaler msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Konverterar inkommande innehåll till tal, oavsett om det kom från /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Samordnar räder, samlade påhopp eller trakasserier mot personer eller communities." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL kopierad till urklipp" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL kopierad till urklipp" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Kopiera meddelande-ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Kopiera meddelandelänk" @@ -10643,6 +10553,11 @@ msgstr "Kunde inte ladda inlägg. Försök igen senare." msgid "Couldn't load settings" msgstr "Kunde inte ladda inställningar" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Kunde inte ladda formuläret för anmälan." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Det gick inte att läsa in den här applikationen" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Kunde inte bearbeta bilden" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Kunde inte publicera detta meddelande" @@ -10825,11 +10740,6 @@ msgstr "Kunde inte skicka inbjudan" msgid "Couldn't send invite. Try again." msgstr "Kunde inte skicka inbjudan. Försök igen." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Kunde inte skicka. Försök igen." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Nedräkningstimer" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Bosättningsland" @@ -11301,13 +11211,8 @@ msgstr "Skapad:" msgid "Credentials" msgstr "Inloggningsuppgifter" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Trovärdiga hot, grovt våld eller förhärligande av våld." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Kroatien" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Tar bort ljud under en viss ljudnivå med minimal CPU-användning." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Cypern" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tjeckiska" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Tjeckien" @@ -11965,7 +11870,7 @@ msgstr "Felsök kanal" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Felsök community" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Ta bort tema?" msgid "Delete this invite? Can't be undone." msgstr "Ta bort den här inbjudan? Det går inte att ångra." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Ta bort det här meddelandet" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Ta bort det här meddelandet? Det går inte att ångra." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Ta bort det här meddelandet? Kan inte ångras. Meddelandet tas också bort från alla communities som följer den här kanalen." @@ -12461,11 +12359,6 @@ msgstr "Ta bort dina meddelanden i den här communityn?" msgid "Delete your messages in this conversation?" msgstr "Ta bort dina meddelanden i den här konversationen?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Borttagen" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Nekade {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danmark" @@ -12554,11 +12447,6 @@ msgstr "Beskriv klistermärket" msgid "Describe this media for screen readers" msgstr "Beskriv det här medieobjektet för skärmläsare" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Beskriv vad som gör innehållet olagligt" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Fristående banner" msgid "Detail" msgstr "Detalj" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Detaljer" @@ -13315,11 +13203,6 @@ msgstr "Visningsnamn (valfritt)" msgid "Display scaling" msgstr "Skärmskalning" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Sprider skadlig programvara, verktyg som stjäl inloggningsuppgifter eller andra skadliga filer." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Inställningar för DM och vänförfrågningar" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Dokumentation" msgid "Doesn't allow being added to group DMs" msgstr "Tillåter inte att läggas till i grupp-DM" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Blockerar inte. Du kan öppna igen senare." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Donera istället" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Ladda ner källkartor så att stackspårningar och utvecklarverktyg peka msgid "Download video" msgstr "Ladda ner video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxning, utlämnad privat information eller förföljelse." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxning, förföljelse, att utge sig för att vara någon annan eller en olämplig profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Redigera färg för {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Redigera communityprofil" @@ -14043,7 +13908,7 @@ msgstr "Redigera åsidosättningar för roller och medlemmar i den här kanalen. #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Redigera profil" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Redigera lokal tid för profil" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Redigera publicerat meddelande?" @@ -14191,13 +14056,13 @@ msgstr "Du kan få återbetalning fram till {windowEndsOn}. Då avslutas även d #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-post" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-postadress" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-postadress krävs." @@ -14721,16 +14586,6 @@ msgstr "Önskad kodare för nya skärmdelningar." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodare, SVC och bithastighetsförinställningar" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Uppmuntrar till självskadebeteende" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Uppmuntrar till självmord, självskadebeteende eller ätstörningar." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Totalsträckskryptering är inte tillgänglig eftersom en deltagare i sa msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Totalsträckskryptering är inte tillgänglig eftersom en deltagare i röstkanalen saknar stöd för den." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Utsätter minderåriga för fara eller tillhandahåller innehåll som utnyttjar barn." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Retur" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Ange en kod i formatet ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Ange en giltig malladress eller kod för {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Ange en giltig e-postadress." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Ange en giltig meddelandelänk." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Ange den {digitCount}-siffriga koden från din autentiseringsapp." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Ange koden innan du fortsätter." @@ -15008,7 +14858,7 @@ msgstr "Retur för att <0><1>spara" msgid "Enter username" msgstr "Ange användarnamn" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Ange verifieringskod" @@ -15017,6 +14867,11 @@ msgstr "Ange verifieringskod" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Ange din e-postadress så skickar vi en länk för att återställa ditt lösenord." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Ange ditt fullständiga juridiska namn för att skicka anmälan." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Escape för att <0><1>avbryta" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estland" @@ -15412,6 +15267,16 @@ msgstr "Går ut den {earliest}" msgid "Expires:" msgstr "Upphör:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Förklara problemet" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Förklara problemet för att skicka anmälan." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Externa länkar kan vara farliga. Var försiktig." msgid "Extra large" msgstr "Extra stor" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Extremistisk community" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Kunde inte ta bort den anpassade URL:en. Försök igen." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Det gick inte att skicka koden igen. Försök igen." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Kunde inte återställa premiumstatus." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Det gick inte att skicka koden. Försök igen." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Kunde inte skicka meddelande. Håll ned för alternativ." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Kunde inte skicka anmälan. Försök igen." @@ -15840,11 +15700,6 @@ msgstr "Kunde inte ladda upp emojier från {startLabel}: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Det gick inte att ladda upp emojier. Försök igen." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Falska påståenden som sannolikt orsakar verklig skada." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Hitta det perfekta klistermärket" msgid "Fingerprint" msgstr "Fingeravtryck" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Slutför konfigureringen av kontot" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Slutför konfigureringen av kontot först" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Slutför registreringen för att skicka vänförfrågningar." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finland" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Finska" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "För- och efternamn" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Bildfrekvenser över 30 FPS kräver {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Frankrike" @@ -16834,10 +16689,10 @@ msgstr "Fullständig" msgid "Full dynamic range" msgstr "Fullt dynamiskt omfång" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Fullständigt juridiskt namn" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Fullständigt juridiskt namn (valfritt för anmälningar om sexuella övergrepp mot barn)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Tyska" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Tyskland" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Gå tillbaka" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Gå tillbaka och ange en giltig e-postadress." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Kul att se dig, {username}! Välkommen hit." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Grekland" @@ -17572,11 +17427,6 @@ msgstr "Grekiska" msgid "Grid view" msgstr "Rutnätsvy" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Grooming eller innehåll som utnyttjar barn." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Användarnamn" msgid "Hang out with voice, video and screen share" msgstr "Um diverse med röst, video och skärmdelning" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Trakasserier" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Trakasserier som involverar vuxet innehåll" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Trakasserier eller mobbning" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Trakasserier eller förföljelse" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Trakasserier eller riktade övergrepp" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Trakasserier eller hot" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Säkerhetsnyckel" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Maskinvaruaccelererat på de flesta Windows- och macOS-system. Pålitligt för äldre enheter." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Skadlig felaktig information" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Har köpt tidigare" msgid "Has ever purchased override" msgstr "Åsidosätt status för tidigare köp" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Hatiska uttalanden" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Dölja din egen skärmdelning?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Döljer knapparna för nedladdning, öppna i webbläsare och kopiera för bilder och videor i den här kanalen." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Döljer deras meddelanden och stoppar dem från att skicka meddelanden till dig" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Ungerska" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Ungern" @@ -18399,6 +18212,11 @@ msgstr "Jag är ett verktygstips" msgid "I changed my mind" msgstr "Jag ångrade mig" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Jag försäkrar i god tro att uppgifterna och påståendena i denna anmälan är korrekta och fullständiga." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Inställningar för inaktivitet" msgid "Idle timeout" msgstr "Tidsgräns för inaktivitet" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Om en minderårig är inblandad, använd \"{childSafetyReasonName}\" istället." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Om ett konto använder den adressen har vi skickat instruktioner för l msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Om macOS ber dig att avsluta och starta om {productName}, välj Senare." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Om någon kan vara i omedelbar fara, kontakta lokala räddningstjänster om du kan göra det på ett säkert sätt." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Om någon är i omedelbar fara, kontakta först de lokala nödtjänsterna." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Om någon ber dig att klistra in något här är det en bluff som kan ge dem tillgång till ditt {productName}-konto." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Om detta gäller CSAM eller utnyttjande av en minderårig, skicka anmälan nu och dela inte materialet vidare." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Om detta är ett trovärdigt omedelbart hot, kontakta även lokal räddningstjänst." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Om det här är ett överhängande terrorhot, kontakta även lokala räddningstjänster." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Om anmälan gäller ett specifikt meddelande i den här communityn, anmäl det meddelandet i stället. Meddelandeanmälningar ger vårt säkerhetsteam tydligast sammanhang. Detaljer i kommentarerna kan hjälpa oss att granska anmälan snabbare. Fortsätt bara med att anmäla hela communityn om en meddelandeanmälan inte skulle täcka det större problemet." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Om anmälan gäller ett specifikt meddelande, anmäl det meddelandet i stället. Meddelandeanmälningar ger vårt säkerhetsteam tydligast sammanhang. Detaljer i kommentarerna kan hjälpa oss att granska anmälan snabbare. Fortsätt bara med att anmäla användaren som helhet om meddelandet inte täcker det större problemet." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Om anmälan gäller specifika meddelanden, anmäl det mest relevanta meddelandet i stället. Meddelandeanmälningar ger vårt säkerhetsteam tydligast sammanhang. Detaljer i kommentarerna kan hjälpa oss att granska anmälan snabbare. Fortsätt bara med att anmäla användaren som helhet om en meddelandeanmälan inte skulle täcka det större problemet." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Om du anser att det är olagligt, ange vilken lag och varför." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ignorera väntetiden för långsamt läge i den här kanalen." msgid "Ignore virtual" msgstr "Ignorera virtuella" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Olaglig aktivitet" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Olaglig aktivitet eller något annat" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Olaga försäljning, medhjälp till brott eller en tydlig regelöverträdelse som inte passar in ovan." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Olaga försäljning, medhjälp till brott eller olaglig verksamhet." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Bilder som klistras in från urklipp skickas som bilagor, och du har inte behörighet att bifoga filer i den här kanalen." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Utger sig för att vara någon annan" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Utger sig för att vara någon annan eller använder vilseledande medier" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Inaktiv" msgid "Inactive timeout" msgstr "Tidsgräns för inaktivitet" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Olämplig profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Inkludera mina tvåfaktorsbackupkoder i PDF-filen och utskriften" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Ange community-ID:t." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Inbjudningsbakgrund" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Inbjudningskod (valfritt)" @@ -19471,7 +19220,7 @@ msgstr "Maskering av inbjudningar" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Bjud in medlemmar" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-adress godkänd" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Irland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Kursiv" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Italien" @@ -20120,7 +19869,7 @@ msgstr "Tangenter" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Senare" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Lettland" @@ -20291,11 +20040,6 @@ msgstr "Läs mer" msgid "Learn more about Visionary" msgstr "Läs mer om Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Lämna" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Lämna privat tråd" msgid "Leave silently" msgstr "Lämna tyst" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Lämna communityn" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Visar medlemmar med den här rollen i ett eget avsnitt i medlemslistan." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litauen" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Läser in..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Laddar…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Låg" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Underhåll är schemalagt till {localizedTime}. Förväntad varaktighet: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Gör {userName} till gruppägare? Du förlorar ägarprivilegierna." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Gör till gruppägare" @@ -21091,38 +20830,21 @@ msgstr "Gör till gruppägare" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Se till att den här koden matchar den i appen {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Kontrollera att allt ser rätt ut innan du skickar." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Gör instansen till din" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Skadliga länkar" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Distribution av skadlig programvara" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Skadlig programvara eller farliga länkar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Skadlig programvara, stöld av inloggningsuppgifter eller skadliga filer." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Maskera privata uppgifter innan du delar din skärm eller sänder." msgid "Mask Visionary as subscription" msgstr "Visa Visionary som ett abonnemang" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Massutskick av spam, bedrägerier, falska utlottningar eller missbruk av konton." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Åtkomstkontroll för medier med vuxet innehåll" msgid "Mature content not allowed" msgstr "Vuxet innehåll är inte tillåtet" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Vuxet innehåll eller trakasserier" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Vuxet innehåll eller osäker åtkomstkontroll" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Åsidosätt inställningen för vuxet innehåll" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Brott mot policy för vuxet innehåll" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Vuxet innehåll utan tillräcklig åtkomstkontroll." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Meddelande" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "meddelandelänk" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Länk till meddelande" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Meddelandeförhandsvisningar i DM-listan" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Meddelande publicerat" @@ -22211,6 +21908,11 @@ msgstr "Meddelandetid" msgid "Message unpinned" msgstr "Meddelandet lossat" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Meddelandet du anmäler" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Minderåriga i riskzonen, vuxet innehåll på fel plats eller oönskat beteende." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Mer" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Fler åtgärder" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Kapslad" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Nederländerna" @@ -24099,7 +23796,7 @@ msgstr "Inga resultat" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Inga resultat hittades" @@ -24858,6 +24555,16 @@ msgstr "Endast personer du bjuder in och moderatorer kan se den här tråden." msgid "Only places I can't access anymore" msgstr "Endast platser jag inte längre har åtkomst till" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Anmäl bara det du ärligt tror bryter mot reglerna, och skicka inte samma anmälan två gånger." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Anmäl bara det du ärligt tror bryter mot reglerna. Att missbruka anmälningar går emot våra <0>communityriktlinjer." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opacitet" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Öppna på {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Öppna popup-fönster" @@ -25379,11 +25084,6 @@ msgstr "Öppna Systeminställningar → Integritet och säkerhet → Skärminspe msgid "Open template JSON" msgstr "Öppna mall-JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Öppna bannlysningsdialogen för den här communityn." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Öppna dina inställningar" msgid "Opened the thread again" msgstr "Öppnade tråden igen" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Öppnas i en ny flik" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Ursprungligen bannlyst den {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Annat" @@ -25654,11 +25357,6 @@ msgstr "Annan reaktion…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Vårt säkerhetsteam granskar det. Vi skickar ett DM och ett e-postmeddelande när vi har fattat ett beslut." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Ägarskapet kunde inte överföras till <0>{username} just nu." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Ägarskap överfört" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Klistra in JSON-svaret här" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Klistra in meddelandelänken." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Nätfiske, bedrägeri, skadliga länkar eller falska påståenden som sannolikt orsakar verklig skada." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Välj sökmotor" msgid "Pick an emoji" msgstr "Välj en emoji" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Välj ett alternativ för att fortsätta." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Välj fyrsiffriga numret efter ditt användarnamn" msgid "Pick the appearance this administrator account should start with." msgstr "Välj utseendet som detta administratörskonto ska börja med." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Välj regeln att granska." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Vänta en stund och försök byta namn igen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polen" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portugal" @@ -26872,11 +26555,6 @@ msgstr "tryck för att lägga till reaktion" msgid "press to remove reaction" msgstr "tryck för att ta bort reaktion" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Utger sig för att vara någon annan, inklusive vilseledande AI-genererat innehåll." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Förhindra att <0>{targetUserTag} skickar meddelanden, reagerar och ansluter till röstkanaler under den angivna tiden." @@ -27078,11 +26756,6 @@ msgstr "Prioriterad talare" msgid "Privacy" msgstr "Integritet" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Integritet eller att utge sig för att vara någon annan" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Integritetsinställningar" msgid "Privacy URL" msgstr "URL till integritetspolicyn" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Integritetskränkning" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Integritetskränkning eller doxning" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Integritetskränkning eller förföljelse" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profiltyp" msgid "Profile updated" msgstr "Profilen uppdaterad" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Regelbrott i profil, användarnamn eller avatar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Främjar hat mot skyddade grupper." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Främjar, rekryterar för eller samordnar våldsbejakande extremistisk verksamhet." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Uppmaningar eller instruktioner som uppmuntrar till självskadebeteende eller ätstörningar." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Profilen du anmäler" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Pronomen: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Skydda ditt Visionary-konto genom att aktivera tvåfaktorsautentisering. Tack för att du stöder {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Ange minst ett användar-ID eller en användartagg." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Ange antingen ett användar-ID eller ett användarnamn för personen du anmäler." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Ange ditt fullständiga juridiska namn för deklarationen." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Med alternativknappar kan du välja ett alternativ från en grupp." msgid "Radio group" msgstr "Grupp med alternativknappar" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Samordning av räder" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Redo att köpa en present?" msgid "Ready to upgrade?" msgstr "Redo att uppgradera?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Anledning" @@ -28291,8 +27924,8 @@ msgstr "Kom ihåg fönsterstorlek och position" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Ta bort {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Ta bort {userName} från gruppen?" @@ -28419,8 +28052,8 @@ msgstr "Ta bort från favoriter" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Ta bort från grupp" @@ -28458,11 +28091,6 @@ msgstr "Ta bort från URL-baserade GIF-favoriter" msgid "Remove icon" msgstr "Ta bort ikon" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Ta bort det från kanalen för alla." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Borttagen från favoriter" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Borttagen från grupp" @@ -28919,28 +28547,18 @@ msgstr "Anmäl en community" msgid "Report a message" msgstr "Anmäl ett meddelande" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Anmäl en regelöverträdelse eller hitta verktyg för att hantera kontakt och inställningar." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Anmäl en användarprofil" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Anmäl community" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Information om anmälan" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Anmäl olagligt innehåll" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Rapportera problem" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Anmäl meddelande" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Anmäl profil" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Anmälan skickad" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Typ av anmälan" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Anmäl användare" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Användartagg för anmäld person (valfritt)" @@ -29100,6 +28716,10 @@ msgstr "Kräver allt på nivån ”Medel” samt att du har varit medlem i commu msgid "Resend" msgstr "Skicka igen" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Skicka igen ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Skicka igen ({newSecondsRemaining} s)" @@ -29108,7 +28728,7 @@ msgstr "Skicka igen ({newSecondsRemaining} s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Skicka igen ({originalSecondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Skicka igen ({resendCooldownSeconds} s)" @@ -29122,7 +28742,7 @@ msgstr "Skicka igen ({resendSecondsRemaining} s)" msgid "Resend ({secondsRemaining}s)" msgstr "Skicka igen ({secondsRemaining} s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Skicka kod igen" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roller uppdaterade" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Rumänien" @@ -29947,7 +29567,7 @@ msgstr "Mättnad" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Säg hej till <0>{displayName}. Er DM-konversation börjar här." msgid "Scale" msgstr "Skala" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Bedrägerier, skadlig programvara eller felaktig information" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Skanna QR-koden med din autentiseringsapp." @@ -30855,11 +30470,6 @@ msgstr "Välj" msgid "Select {accessibleName}" msgstr "Välj {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Välj en kategori" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Välj en community där du har behörigheten {permissionName}, eller en grupp-DM som du tillhör." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Välj land" @@ -30911,11 +30521,6 @@ msgstr "Välj en omdirigerings-URI" msgid "Select a scenario to apply..." msgstr "Välj ett scenario att tillämpa..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Välj en kategori för överträdelsen." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Välj det konto du vill logga in med på din nya enhet." msgid "Select voice processing mode" msgstr "Välj röstbehandlingsläge" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Välj vad du vill anmäla." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Välj ditt bosättningsland." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Välj…" @@ -31037,13 +30642,6 @@ msgstr "Val: {0} (max {1})" msgid "Selections" msgstr "Val" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Självskadebeteende eller självmord" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Skicka ett åtgärdsmeddelande (visas i kursiv stil)." msgid "Send animation" msgstr "Skicka animering" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Skicka en till anmälan" @@ -31138,7 +30736,7 @@ msgstr "Skicka-knapp" msgid "Send code" msgstr "Skicka kod" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Skicka DSA-anmälan" @@ -31158,9 +30756,9 @@ msgstr "Skicka filer upp till {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Skicka vänförfrågan" @@ -31220,8 +30818,8 @@ msgstr "Skicka meddelanden i trådar" msgid "Send messages, images, GIFs and emoji" msgstr "Skicka meddelanden, bilder, GIF-ar och emojis" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Skicka anmälan" @@ -31255,7 +30853,7 @@ msgstr "Ska den här fästade posten skickas tillbaka i tiden?" msgid "Send TTS messages" msgstr "Skicka TTS-meddelanden" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Skicka verifieringskod" @@ -31273,11 +30871,6 @@ msgstr "Skicka röstmeddelande" msgid "Send:" msgstr "Skicka:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Skickar skadlig programvara eller farliga länkar" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Dela tema" msgid "Share voice activity with all friends?" msgstr "Dela röstaktivitet med alla vänner?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Berätta vad vårt team behöver för att bedöma detta." @@ -31709,11 +31302,6 @@ msgstr "Berätta vad vårt team behöver för att bedöma detta." msgid "Share with a friend" msgstr "Dela med en vän" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Dela med community-moderatorer." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Delat fönster" msgid "Shared window audio" msgstr "Ljud från delat fönster" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Delar personlig information, förföljer användare eller samordnar integritetsbrott." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Delar personlig information" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Reglage" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakien" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenien" @@ -32889,11 +32467,6 @@ msgstr "Simulering av långsamt läge" msgid "Slowmode time remaining" msgstr "Återstående tid för långsamt läge" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Nedsättande språk, avhumaniserande språk eller attacker mot skyddade grupper." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Något gick fel när klistermärket skulle förberedas. Prova en annan fil eller försök igen om en stund." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Något gick fel när meddelandet publicerades. Försök igen om en stund." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Rymlig layout med tydlig visuell åtskillnad mellan meddelanden." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Spanien" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spamkonto" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spamklassificering" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Skräppost eller bedrägeri" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Community för spam eller bedrägerier" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Konto för spam, bedrägerier eller nätfiske" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Skräppost, bedrägerier eller nätfiske" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Starta minimerad" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Börja om" @@ -33752,22 +33302,26 @@ msgstr "Fortsätt vara inloggad" msgid "Step {current} of {total}" msgstr "Steg {current} av {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Steg 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Steg 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Steg 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Steg 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Steg 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Sluta vara en meddelandekanal?" msgid "Stop hiding muted channels by default?" msgstr "Sluta dölja tystade kanaler som standard?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Stoppa meddelanden och vänförfrågningar." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Stoppa mikrofontest" @@ -33959,11 +33508,6 @@ msgstr "Sluta patcha Node.prototype insertBefore och removeChild. Appen kraschar msgid "Stop ringing" msgstr "Sluta ringa" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Sluta se dess innehåll och medlemmar." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Ersätt vanliga textansikten som :) och <3 med emoji när du skickar meddelanden" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Sverige" @@ -34804,11 +34348,6 @@ msgstr "Tryck för att lägga till en anteckning" msgid "tar.gz archive" msgstr "tar.gz-arkiv" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Angriper personer på grund av skyddade egenskaper." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Användarvillkor" msgid "Terms URL" msgstr "URL för villkor" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terrorism eller våldsbejakande extremism" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Thailändska" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Tack för att du hjälper till att hålla {productName} säkert. Vi granskar din anmälan så snart som möjligt." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Tack för att du flaggade detta" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Tack för att du berättade. Det här bryter inte mot våra regler i sig, så vi skickade ingen anmälan." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Tack för att du berättade. Det här bryter inte mot våra regler i sig, så vi skickade ingen anmälan. Om det riktar sig mot någon eller använder nedsättande ord, anmäl det igen och välj ”Kränkande eller skadligt innehåll”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Det fungerade inte. Försök igen eller avbryt." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Det där ser inte ut som en giltig färg. Prova hex, rgb(), hsl() eller ett CSS-färgnamn." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Det där ser inte ut som en giltig URL." @@ -35104,6 +34653,11 @@ msgstr "Appen {PRODUCT_NAME} på din andra enhet visas under \"Loggar in på en msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Appen {PRODUCT_NAME} loggades inte in. Du kan stänga den här fliken." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Säkerhetsteamet på {productName} granskar din anmälan. Vi avslöjar inte att den kommer från dig." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Den angivna redirect_uri är inte registrerad för den här appen." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den angivna redirect_uri måste använda HTTP eller HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Formuläret för anmälan har ändrats. Börja om." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Användarnamnetiketter på den här instansen är redan inställda. De kan inte ändras längre." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Verifieringskoden är ogiltig eller har gått ut." @@ -36115,13 +35674,8 @@ msgstr "Den här medlemmen är inte längre ansluten till röstkanalen." msgid "This message can only be forwarded to age-restricted channels" msgstr "Det här meddelandet kan bara skickas till kanaler med åldersgräns" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Det här meddelandet har redan raderats." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Det här meddelandet har redan publicerats" @@ -36279,11 +35833,6 @@ msgstr "Den här tråden är stängd. Om du skickar ett meddelande öppnas den i msgid "This thread is locked. Only moderators can send messages." msgstr "Den här tråden är låst. Endast moderatorer kan skicka meddelanden." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "den här användaren" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Den här användaren har begränsat sin profil. Vissa detaljer är dolda för personer som inte är deras vänner." @@ -36292,11 +35841,6 @@ msgstr "Den här användaren har begränsat sin profil. Vissa detaljer är dolda msgid "This user has no roles in this community." msgstr "Den här användaren har inga roller i den här communityn." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Användaren är redan bannlyst från communityn." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Den här användaren är inte längre tillgänglig." @@ -36465,16 +36009,6 @@ msgstr "Tråd uppdaterad" msgid "Threads" msgstr "Trådar" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Hot, förföljelse över olika utrymmen eller oönskad kontakt." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Hot, trakasserier eller skada" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Gav {targetUserTag} en timeout" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Timeout" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Tonmappa HDR-bilder till standardomfång, vilket minskar den högsta ljusstyrkan." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "För många koder har skickats. Vänta {duration} och försök igen." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Överför ägarskap för communityn" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Överför gruppägarskapet till {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Avblockera dem först för att skicka en vänförfrågan." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Avblockera användare" @@ -37607,16 +37146,6 @@ msgstr "Slå på ljudet för alla enheter" msgid "Undeafen yourself" msgstr "Slå på ljudet för dig själv" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Minderårig eller oro för barnsäkerhet" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Minderårig användare" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Tills jag slår på det igen" msgid "Unverified email" msgstr "Overifierad e-post" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Oönskat beteende eller vuxet innehåll på fel plats." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Oönskade sexuella handlingar, kommentarer eller förfrågningar." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Upp till {DISCOVERY_MAX_TAGS} taggar hjälper andra att hitta din community. De visas i sökningen i Upptäck." @@ -38840,11 +38359,6 @@ msgstr "Använd ljust tema" msgid "Use native title bar" msgstr "Använd systemets namnlist" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Använd endast om det tydligt bryter mot {productName}s regler och inte passar in ovan." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Används endast i den här communityn." msgid "User" msgstr "Användare" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Användaren verkar vara minderårig eller är inblandad i grooming eller barnexploatering." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Användarfelsökning" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Användar-ID (valfritt)" @@ -39061,12 +38570,12 @@ msgstr "Användaren hittades inte" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Användarprofil" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Användarprofil: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Användarinställningar" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Användartagg (valfritt)" @@ -39339,7 +38848,7 @@ msgstr "Verifierad community" msgid "Verify" msgstr "Verifiera" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Verifiera kod" @@ -39368,7 +38877,7 @@ msgstr "Verifiera att det är du" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Verifiera din e-postadress" @@ -39718,7 +39227,7 @@ msgstr "Visa koder" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Visa communityprofil" @@ -39751,7 +39260,7 @@ msgstr "Visa presenter" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Visa global profil" @@ -39847,26 +39356,6 @@ msgstr "Tittare ansluter till sändningen" msgid "Viewer leaves stream" msgstr "Tittaren lämnar sändningen" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Kategori för överträdelse" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Överträdelsen finns i användarens profil, inte i ett specifikt meddelande." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Våld eller våldsamma hot" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Våldsamt eller stötande innehåll" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Vi skalade och komprimerade emojin till 128x128 pixlar, men den är fort msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Vi skalade och komprimerade klistermärket till 320x320 pixlar, men det är fortfarande {fileSize}. Gränsen är {maxSize}. Prova en enklare bild, färre färger eller en mindre källfil." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Vi skickade en kod till {email}." @@ -40472,7 +39961,7 @@ msgstr "Vi behandlar detta så snart som möjligt. Du får ett mejl när ditt ar msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Vi återställer din tidigare e-postadress, loggar ut gamla sessioner, inaktiverar MFA och säkrar ditt konto med ett nytt lösenord." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Vi skickar en kort kod för att bekräfta att du kan ta emot uppdateringar om den här anmälan." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "West Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Vilken typ av regel bröts?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Vad händer?" msgid "What's new" msgstr "Nyheter" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Vad är anledningen till din anmälan?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "När inget anpassat gränsdatum har angetts kan medlemmar utan behörigheten <0>{readMessageHistoryPermissionLabel} inte se äldre meddelanden. De ser bara meddelanden i realtid när de kommer och meddelandena försvinner när klienten startas om." @@ -40832,11 +40321,6 @@ msgstr "Vilka communities" msgid "Which conversations" msgstr "Vilka konversationer" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Vilken regel bröts?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "När tryck för att prata är på styr kortkommandot mikrofonen, så knappen för att stänga av mikrofonen är inaktiverad." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Du kan inte bifoga filer i den här kanalen." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Du kan inte bli vän med dig själv" @@ -41341,7 +40825,7 @@ msgstr "Du kan inte skicka meddelanden till den här användaren" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Du måste godkänna användarvillkoren för att skapa ett konto" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Du måste verifiera din e-postadress innan du kan skicka en anmälan." @@ -41891,6 +41375,11 @@ msgstr "Du har ett äldre pris. Det nuvarande priset för den här planen är {c msgid "You're sending messages too quickly" msgstr "Du skickar meddelanden för snabbt" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Du skickar anmälningar för snabbt. Försök igen senare." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Du visar äldre meddelanden" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Du har lagt till fler personer än vad en grupp-DM tillåter. Ta bort några och försök igen." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Du har redan anmält det här meddelandet." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Du har redan anmält den här profilen idag." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Dina konton och inställningar har inte ändrats eller raderats." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Din åtgärd kunde inte slutföras eftersom den flaggades av våra säkerhetssystem. Om du tror att detta är ett misstag, vänligen kontakta support." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Dina svar" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Din ansökan väntar på granskning. Du kan fortfarande uppdatera listningens uppgifter eller dra tillbaka ansökan." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Din webbläsare kräver användarinteraktion innan ljud kan spelas upp. Klicka på knappen nedan för att aktivera röstchatt." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Dina ändringar når alla communities som följer den här kanalen, vilket kan ta en minut. Varje publicerat meddelande tillåter 3 snabba redigeringar, sedan 1 var 20:e minut." @@ -42311,6 +41815,11 @@ msgstr "Ditt nya smeknamn, eller lämna tomt för att återställa det." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Din gamla återställningsnyckel fungerar inte längre. Förvara den nya på en säker plats." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Dina alternativ" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "din region" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Din förnyelsebetalning misslyckades, men <0/> är aktiva till <1>{graceDate}. Uppdatera din betalningsmetod före dess för att behålla ditt abonnemang." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Din anmälan gick inte igenom. Försök igen." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Ditt abonnemang byter till årsfakturering vid nästa förnyelse." msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Temats CSS är för stort för att delas. Minska storleken och försök igen." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Ditt användarnamn (valfritt)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index a0f947598..e0187b75e 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -2081,7 +2081,7 @@ msgstr "เหลืออีก {remainingSlotCount} สิทธิ์" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "สมาชิก {renderedMemberCount} {memberCount, plural, one {คน} other {คน}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {ลิงก์เชิญของคุณจะหมดอายุในอีก # วินาที} other {ลิงก์เชิญของคุณจะหมดอายุในอีก # วินาที}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "เลือกแล้ว {selectedCount} รายการ" @@ -2957,11 +2957,6 @@ msgstr "ข้อมูลบัญชี" msgid "Account details unavailable" msgstr "รายละเอียดบัญชีไม่พร้อมใช้งาน" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "บัญชีนี้ถูกสร้างขึ้นเพื่อสแปม หลอกลวง หรือใช้แพลตฟอร์มในทางที่ผิด" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "เพิ่มเมื่อ: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "เพิ่มเมื่อ: {createdDate} • ใช้งานล่าสุด: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "ความคิดเห็นเพิ่มเติม (ไม่บังคับ)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "แลกไปแล้ว" msgid "Already set to cancel" msgstr "ตั้งค่าให้ยกเลิกไว้แล้ว" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "รายงานข้อความนี้ไปยังทีมความปลอดภัยของ {productName} ด้วย" @@ -4576,11 +4566,6 @@ msgstr "รายปี" msgid "Another checkbox" msgstr "ช่องทำเครื่องหมายอื่น" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "การละเมิดกฎที่ชัดเจนอีกข้อ" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "ช่องทำเครื่องหมายแบบวงกลมอีกอัน" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "อัปโหลดเสียง" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "ออสเตรีย" @@ -5620,6 +5605,7 @@ msgstr "ไม่อยู่ตอนนี้" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "ไม่อยู่ตอนนี้" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "ย้อนกลับ" @@ -5788,9 +5775,7 @@ msgstr "สร้างรหัสสำรองใหม่แล้ว" msgid "Badge" msgstr "ป้าย" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "แบน" @@ -5819,7 +5804,7 @@ msgstr "ระยะเวลาแบน" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "แบนสมาชิกออกจากคอมมูนิตี msgid "Ban reason" msgstr "เหตุผลในการแบน" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "แบนผู้ใช้นี้" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "แบนด์วิดท์" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "ถูกแบน" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "แบน {targetUserTag} ออกจากคอมมูนิตี้แล้ว" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "ก่อนวันที่" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "เบลเยียม" @@ -6031,7 +6006,7 @@ msgstr "บิตเรต" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "บล็อก" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "บล็อก" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "บล็อก {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "บล็อกสำหรับทุกคอมมูนิตี้ msgid "Block spoiler" msgstr "บล็อกสปอยล์" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "บล็อกผู้ใช้นี้" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "บล็อกผู้ใช้" msgid "Blocked" msgstr "ถูกบล็อก" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "ถูกบล็อก" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "เครื่องมือแปลภาษาในตัว" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "บัลแกเรีย" @@ -6519,16 +6500,6 @@ msgstr "บัลแกเรีย" msgid "Bulk delete" msgstr "ลบหลายรายการ" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "การกลั่นแกล้ง การติดต่อที่ไม่พึงประสงค์ซ้ำๆ การสะกดรอยตาม หรือการคุกคามแบบเจาะจงเป้าหมาย" - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "การกลั่นแกล้ง การข่มขู่ ความเกลียดชัง ความรุนแรง การโจมตี หรือเนื้อหาที่ส่งเสริมการทำร้ายตนเอง" - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "แคลิฟอร์เนีย" msgid "Call" msgstr "โทร" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "การตั้งค่าการโทรและแชทกลุ่ม" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "เปลี่ยนภาพปก" msgid "Change chat embed background" msgstr "เปลี่ยนพื้นหลังการฝังแชท" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "เปลี่ยนอีเมล" @@ -7150,8 +7116,8 @@ msgstr "เปลี่ยนชื่อเล่นเพื่อน" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "เปลี่ยนชื่อเล่นกลุ่ม" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "เปลี่ยนภาษา" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "เปลี่ยนชื่อเล่นของฉันในกลุ่ม" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "เปลี่ยนชื่อเล่นของตัวเอง" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "เปลี่ยนเจ้าของ" @@ -7283,16 +7249,6 @@ msgstr "เปลี่ยนภูมิภาคเสียงที่ช่ msgid "Change which voice region this channel uses." msgstr "เปลี่ยนภูมิภาคเสียงที่ช่องนี้ใช้" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "เปลี่ยนว่าใครโทรหาหรือเพิ่มคุณได้" - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "เปลี่ยนว่าใครติดต่อคุณได้" - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "ตรวจสอบกล่องจดหมายเข้าขอ msgid "Check your inbox for a verification email." msgstr "ตรวจสอบกล่องจดหมายเพื่อดูอีเมลยืนยัน" +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "ตรวจสอบรายงานของคุณ" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "ช่องทำเครื่องหมาย" @@ -7901,21 +7862,6 @@ msgstr "บัญชีนี้ถูกบล็อกไม่ให้ชำ msgid "Checkout unavailable" msgstr "ไม่สามารถชำระเงินได้" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "ความกังวลด้านความปลอดภัยของเด็ก" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "ความปลอดภัยของเด็กหรือการแสวงหาประโยชน์จากผู้เยาว์" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "ความปลอดภัยของเด็กหรือเนื้อหาสำหรับผู้ใหญ่" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "ตัวเลือก" msgid "Choices: {choiceList}" msgstr "ตัวเลือกที่ใช้ได้: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "เลือก" @@ -8122,6 +8068,11 @@ msgstr "เลือกหมวดหมู่ที่ตรงกับคอ msgid "Choose the premium model" msgstr "เลือกโมเดลพรีเมียม" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "เลือกเหตุผลอีกครั้ง" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "รับของขวัญ" msgid "Claim your account" msgstr "ยืนยันบัญชีของคุณ" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "ยืนยันบัญชีและอีเมลของคุณเพื่อส่งรายงาน" @@ -8352,12 +8303,12 @@ msgstr "ยืนยันบัญชีเพื่อรับของขว #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "ยืนยันบัญชีเพื่อส่งคำขอเป็นเพื่อน" -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "ยืนยันบัญชีของคุณเพื่อส่งรายงาน" @@ -8378,11 +8329,6 @@ msgstr "ยืนยันบัญชีเพื่อเริ่มหรื msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "รับของขวัญของคุณเพื่อเปิดใช้งานการสมัครสมาชิก {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "แอบอ้างเป็นบุคคลอื่น แบรนด์ หรือองค์กร" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "ล้างช่องค้นหา" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "ปิดหน้าต่าง" msgid "Close popout" msgstr "ปิดหน้าต่างย่อย" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "ปิดข้อความส่วนตัวนี้" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "ย่อไปที่ถาดระบบ" msgid "Close window" msgstr "ปิดหน้าต่าง" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "ปิดข้อความส่วนตัวปัจจุบันของคุณกับ {dmDisplayName} การดำเนินการนี้ไม่ได้บล็อกผู้ใช้ และคุณสามารถเปิดข้อความส่วนตัวอีกครั้งได้ในภายหลัง" - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "ปิดข้อความส่วนตัวของคุณกับ {displayName} ใช่หรือไม่ คุณสามารถเปิดใหม่ได้ทุกเมื่อ" @@ -8837,7 +8773,7 @@ msgstr "ธีมถ่านหิน" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "รหัส" @@ -8868,7 +8804,7 @@ msgstr "รหัสจากแอป {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "ส่งรหัสอีกครั้งแล้ว" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "ชุมชนที่คุณเข้าร่วมได้" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "คอมมูนิตี้" @@ -9131,7 +9065,7 @@ msgstr "ปิดเสียงทั้งหมดในคอมมูนิ #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "แก้ไขข้อผิดพลาดของคอมมูนิตี้" @@ -9150,16 +9084,6 @@ msgstr "ลบคอมมูนิตี้แล้ว" msgid "Community DM" msgstr "DM คอมมูนิตี้" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "คอมมูนิตี้นี้มีไว้เพื่อสแปม หลอกลวง หรือใช้แพลตฟอร์มในทางที่ผิด" - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "คอมมูนิตี้นี้เอื้อให้เกิดการรุมโจมตีหรือการคุกคามแบบเจาะจงเป้าหมาย" - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "ไอคอนคอมมูนิตี้" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID คอมมูนิตี้" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "ต้องระบุ ID คอมมูนิตี้" @@ -9526,6 +9450,11 @@ msgstr "ยืนยันรหัสผ่านใหม่" msgid "Confirm password" msgstr "ยืนยันรหัสผ่าน" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "ยืนยันคำรับรองเพื่อส่งรายงาน" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "ดำเนินการต่อในเบราว์เซอร msgid "Continue to checkout" msgstr "ดำเนินการต่อเพื่อชำระเงิน" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "ดำเนินการรายงานคอมมูนิตี้ต่อ" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "ดำเนินการรายงานผู้ใช้ต่อ" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "การแปลงช่องนี้เป็นช่องข้ msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "แปลงเนื้อหาที่เข้ามาเป็นเสียงพูด ไม่ว่าจะมาจาก /tts หรือไม่ก็ตาม" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "ประสานงานการโจมตี การรุมถล่ม หรือการคุกคามต่อบุคคลหรือคอมมูนิตี้" - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "คัดลอก URL ไปยังคลิปบอร์ดแล #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "คัดลอก URL ไปยังคลิปบอร์ดแล #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "คัดลอก ID ข้อความ" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "คัดลอกลิงก์ข้อความ" @@ -10643,6 +10553,11 @@ msgstr "ไม่สามารถโหลดโพสต์ได้ ลอ msgid "Couldn't load settings" msgstr "ไม่สามารถโหลดการตั้งค่าได้" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "ไม่สามารถโหลดแบบฟอร์มรายงานได้" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "ไม่สามารถโหลดแอปพลิเคชันนี้ได้" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "ประมวลผลรูปภาพไม่ได้" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "ไม่สามารถเผยแพร่ข้อความนี้ได้" @@ -10825,11 +10740,6 @@ msgstr "ส่งคำเชิญไม่ได้" msgid "Couldn't send invite. Try again." msgstr "ส่งคำเชิญไม่ได้ ลองอีกครั้ง" -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "ส่งไม่ได้ ลองอีกครั้ง" - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "ตัวจับเวลาถอยหลัง" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "ประเทศที่พำนัก" @@ -11301,13 +11211,8 @@ msgstr "สร้างเมื่อ:" msgid "Credentials" msgstr "ข้อมูลรับรอง" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "การข่มขู่ที่น่าเชื่อถือ ความรุนแรงที่โจ่งแจ้ง หรือการเชิดชูความรุนแรง" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "โครเอเชีย" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "ตัดเสียงที่เบากว่าเกณฑ์ที่กำหนด ใช้ CPU น้อยที่สุด" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "ไซปรัส" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "เช็ก" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "สาธารณรัฐเช็ก" @@ -11965,7 +11870,7 @@ msgstr "ดีบักช่อง" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "ดีบักคอมมูนิตี้" @@ -12151,7 +12056,6 @@ msgstr "เดลาแวร์" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "เดลาแวร์" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "ลบธีมหรือไม่" msgid "Delete this invite? Can't be undone." msgstr "ลบคำเชิญนี้ใช่หรือไม่ การดำเนินการนี้จะยกเลิกไม่ได้" -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "ลบข้อความนี้" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "ลบข้อความนี้ใช่หรือไม่ การดำเนินการนี้จะยกเลิกไม่ได้" #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "ลบข้อความนี้หรือไม่? ไม่สามารถยกเลิกได้ ข้อความนี้จะถูกลบออกจากทุกคอมมูนิตี้ที่ติดตามแชทนี้ด้วย" @@ -12461,11 +12359,6 @@ msgstr "ลบข้อความของคุณในคอมมูนิ msgid "Delete your messages in this conversation?" msgstr "ลบข้อความของคุณในการสนทนานี้ใช่หรือไม่" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "ลบแล้ว" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "ปฏิเสธ {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "เดนมาร์ก" @@ -12554,11 +12447,6 @@ msgstr "อธิบายสติกเกอร์" msgid "Describe this media for screen readers" msgstr "อธิบายสื่อนี้สำหรับโปรแกรมอ่านหน้าจอ" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "อธิบายว่าทำไมเนื้อหานี้ถึงผิดกฎหมาย" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "แบนเนอร์แยกส่วน" msgid "Detail" msgstr "รายละเอียด" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "รายละเอียด" @@ -13315,11 +13203,6 @@ msgstr "ชื่อที่แสดง (ไม่บังคับ)" msgid "Display scaling" msgstr "การปรับขนาดการแสดงผล" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "เผยแพร่มัลแวร์ เครื่องมือขโมยข้อมูลประจำตัว หรือไฟล์อันตรายอื่น ๆ" - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "การตั้งค่าข้อความส่วนตัวและคำขอเป็นเพื่อน" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "เอกสารประกอบ" msgid "Doesn't allow being added to group DMs" msgstr "ไม่อนุญาตให้เพิ่มเข้าแชทกลุ่ม" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "ไม่บล็อก คุณสามารถเปิดใหม่ได้ในภายหลัง" - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "บริจาคแทน" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "ดาวน์โหลด source maps เพื่อให้ stack t msgid "Download video" msgstr "ดาวน์โหลดวิดีโอ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "การแฉข้อมูลส่วนตัว การเปิดเผยข้อมูลส่วนตัวของผู้อื่น หรือการสะกดรอยตาม" - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "การแฉข้อมูลส่วนตัว การสะกดรอยตาม การแอบอ้างเป็นบุคคลอื่น หรือโปรไฟล์ที่ไม่เหมาะสม" - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "แก้ไขสีสำหรับ {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "แก้ไขโปรไฟล์คอมมูนิตี้" @@ -14043,7 +13908,7 @@ msgstr "แก้ไขการแทนที่สิทธิ์สำหร #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "แก้ไขโปรไฟล์" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "แก้ไขเวลาท้องถิ่นในโปรไฟล์" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "แก้ไขข้อความที่เผยแพร่แล้วหรือไม่?" @@ -14191,13 +14056,13 @@ msgstr "มีสิทธิ์ได้รับเงินคืนจนถ #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "อีเมล" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "ที่อยู่อีเมล" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "ต้องระบุที่อยู่อีเมล" @@ -14721,16 +14586,6 @@ msgstr "การตั้งค่าตัวเข้ารหัสสำห msgid "Encoder, SVC, and bitrate presets" msgstr "การตั้งค่าล่วงหน้าสำหรับตัวเข้ารหัส, SVC และบิตเรต" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "ส่งเสริมการทำร้ายตัวเอง" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "ส่งเสริมการฆ่าตัวตาย การทำร้ายตัวเอง หรือโรคการกินผิดปกติ" - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "การเข้ารหัสจากต้นทางถึงป msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "การเข้ารหัสจากต้นทางถึงปลายทางไม่พร้อมใช้งาน เนื่องจากมีผู้เข้าร่วมที่ไม่รองรับอยู่ในช่องเสียงนี้" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "เป็นอันตรายต่อผู้เยาว์หรือมีเนื้อหาเกี่ยวกับการแสวงหาประโยชน์จากเด็ก" - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "ป้อนรหัสในรูปแบบ ABCD-1234" @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "ป้อน URL หรือรหัสเทมเพลต {theOtherPlatform} ที่ถูกต้อง" #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "ป้อนที่อยู่อีเมลที่ถูกต้อง" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "ป้อนลิงก์ข้อความที่ถูกต้อง" @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "ป้อนรหัส {digitCount} หลักจากแอปยืนยันตัวตนของคุณ" #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "ป้อนรหัสก่อนดำเนินการต่อ" @@ -15008,7 +14858,7 @@ msgstr "กด Enter เพื่อ<0><1>บันทึก" msgid "Enter username" msgstr "ป้อนชื่อผู้ใช้" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "ป้อนรหัสยืนยัน" @@ -15017,6 +14867,11 @@ msgstr "ป้อนรหัสยืนยัน" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "ป้อนอีเมลของคุณ แล้วเราจะส่งลิงก์สำหรับรีเซ็ตรหัสผ่านให้" +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "กรุณากรอกชื่อจริงตามกฎหมายของคุณเพื่อส่งรายงาน" + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "กด Esc เพื่อ<0><1>ยกเลิก" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "เอสโตเนีย" @@ -15412,6 +15267,16 @@ msgstr "หมดอายุวันที่ {earliest}" msgid "Expires:" msgstr "หมดอายุ:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "อธิบายปัญหา" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "อธิบายปัญหาเพื่อส่งรายงาน" + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "ลิงก์ภายนอกอาจเป็นอันตรา msgid "Extra large" msgstr "ใหญ่พิเศษ" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "คอมมูนิตี้หัวรุนแรง" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "ลบ URL ที่กำหนดเองไม่สำเร็จ ลองอีกครั้ง" #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "ส่งรหัสอีกครั้งไม่สำเร็จ ลองอีกครั้ง" @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "รีเซ็ตสถานะพรีเมียมไม่สำเร็จ" #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "ส่งรหัสไม่สำเร็จ ลองอีกครั้ง" @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "ส่งข้อความไม่สำเร็จ แตะค้างไว้เพื่อดูตัวเลือก" #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "ส่งรายงานไม่สำเร็จ ลองอีกครั้ง" @@ -15840,11 +15700,6 @@ msgstr "อัปโหลดอิโมจิตั้งแต่ {startLabel msgid "Failed to upload emojis. Try again." msgstr "อัปโหลดอิโมจิไม่สำเร็จ โปรดลองอีกครั้ง" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "การกล่าวอ้างที่เป็นเท็จซึ่งอาจก่อให้เกิดอันตรายในโลกแห่งความเป็นจริง" - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "ค้นหาสติกเกอร์ที่ถูกใจ" msgid "Fingerprint" msgstr "ลายนิ้วมือ" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "ตั้งค่าบัญชีให้เสร็จสิ้น" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "ตั้งค่าบัญชีให้เสร็จก่อน" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "ลงทะเบียนให้เสร็จสิ้นเพื่อส่งคำขอเป็นเพื่อน" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "ฟินแลนด์" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "ฟินแลนด์" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "ชื่อ-นามสกุล" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "อัตราเฟรมที่สูงกว่า 30 FPS ต้องใช้ {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "ฝรั่งเศส" @@ -16834,10 +16689,10 @@ msgstr "เต็ม" msgid "Full dynamic range" msgstr "ช่วงไดนามิกเต็มรูปแบบ" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "ชื่อ-นามสกุลจริง" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "ชื่อ-นามสกุลจริง (ไม่บังคับสำหรับรายงานการล่วงละเมิดทางเพศเด็ก)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "เยอรมัน" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "เยอรมนี" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "ย้อนกลับ" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "กลับไปป้อนอีเมลที่ถูกต้อง" @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "ดีใจที่ได้เจอคุณ {username}! ยินดีต้อนรับ" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "กรีซ" @@ -17572,11 +17427,6 @@ msgstr "กรีก" msgid "Grid view" msgstr "มุมมองตาราง" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "เนื้อหาการล่อลวงเด็กหรือการแสวงหาประโยชน์จากเด็ก" - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "ชื่อผู้ใช้" msgid "Hang out with voice, video and screen share" msgstr "พูดคุยด้วยเสียง วิดีโอ และแชร์หน้าจอ" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "การคุกคาม" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "การคุกคามที่เกี่ยวข้องกับเนื้อหาสำหรับผู้ใหญ่" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "การคุกคามหรือกลั่นแกล้ง" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "การคุกคามหรือการสะกดรอยตาม" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "การคุกคามหรือการกลั่นแกล้งแบบเจาะจงเป้าหมาย" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "การคุกคามหรือข่มขู่" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "คีย์ฮาร์ดแวร์" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "เร่งความเร็วด้วยฮาร์ดแวร์บนระบบ Windows และ macOS ส่วนใหญ่ เชื่อถือได้สำหรับอุปกรณ์รุ่นเก่า" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "ข้อมูลบิดเบือนที่เป็นอันตราย" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "เคยซื้อ" msgid "Has ever purchased override" msgstr "เคยซื้อ (ตั้งค่าเอง)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "คำพูดที่สร้างความเกลียดชัง" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "ซ่อนการแชร์หน้าจอของคุณห msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "ซ่อนปุ่มดาวน์โหลด เปิดในเบราว์เซอร์ และคัดลอก สำหรับรูปภาพและวิดีโอในช่องนี้" +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "ซ่อนข้อความของพวกเขาและหยุดไม่ให้ส่งข้อความถึงคุณ" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "ฮังการี" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "ฮังการี" @@ -18399,6 +18212,11 @@ msgstr "ฉันคือคำแนะนำ" msgid "I changed my mind" msgstr "เปลี่ยนใจแล้ว" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "ข้าพเจ้ายืนยันโดยสุจริตว่าข้อมูลและข้อกล่าวหาในรายงานนี้ถูกต้องและครบถ้วน" + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "การตั้งค่าเมื่อไม่ได้ใช้ msgid "Idle timeout" msgstr "หมดเวลาเมื่อไม่ได้ใช้งาน" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "หากมีผู้เยาว์เกี่ยวข้อง ให้ใช้ \"{childSafetyReasonName}\" แทน" - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "หากบัญชีนั้นใช้อีเมลดังก msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "หาก macOS ขอให้ปิดและเปิด {productName} ใหม่ ให้เลือก \"ภายหลัง\"" -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "หากมีผู้ที่อาจตกอยู่ในอันตรายเฉพาะหน้า ให้ติดต่อหน่วยบริการฉุกเฉินในพื้นที่ หากคุณทำได้อย่างปลอดภัย" +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "หากมีใครกำลังตกอยู่ในอันตรายเฉพาะหน้า โปรดติดต่อหน่วยบริการฉุกเฉินในพื้นที่ก่อน" #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "หากมีใครบอกให้คุณวางอะไรลงในช่องนี้ แสดงว่าเป็นกลโกงที่อาจทำให้พวกเขาสามารถเข้าถึงบัญชี {productName} ของคุณได้" -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "หากเกี่ยวข้องกับ CSAM หรือการแสวงหาประโยชน์จากผู้เยาว์ ให้ส่งรายงานตอนนี้และอย่าแชร์เนื้อหานั้นซ้ำ" - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "หากเป็นภัยคุกคามที่มีมูลและใกล้จะเกิดขึ้น โปรดติดต่อหน่วยบริการฉุกเฉินในพื้นที่ด้วย" - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "หากเป็นภัยคุกคามจากการก่อการร้ายที่ใกล้จะเกิดขึ้น โปรดติดต่อหน่วยบริการฉุกเฉินในพื้นที่ด้วย" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "หากรายงานนี้เกี่ยวกับข้อความใดข้อความหนึ่งในคอมมูนิตี้นี้ ให้รายงานข้อความนั้นแทน การรายงานข้อความจะช่วยให้ทีมความปลอดภัยของเราเข้าใจบริบทได้ชัดเจนที่สุด และการเพิ่มรายละเอียดในความคิดเห็นจะช่วยให้เราตรวจสอบได้เร็วขึ้น ดำเนินการรายงานทั้งคอมมูนิตี้ก็ต่อเมื่อการรายงานข้อความไม่สามารถครอบคลุมปัญหาในวงกว้างได้" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "หากรายงานนี้เกี่ยวกับข้อความใดข้อความหนึ่ง ให้รายงานข้อความนั้นแทน การรายงานข้อความจะช่วยให้ทีมความปลอดภัยของเราเข้าใจบริบทได้ชัดเจนที่สุด และการเพิ่มรายละเอียดในความคิดเห็นจะช่วยให้เราตรวจสอบได้เร็วขึ้น ดำเนินการรายงานผู้ใช้โดยรวมก็ต่อเมื่อข้อความนั้นไม่สามารถอธิบายปัญหาในวงกว้างได้" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "หากรายงานนี้เกี่ยวกับข้อความที่เฉพาะเจาะจง ให้รายงานข้อความที่เกี่ยวข้องมากที่สุดแทน การรายงานข้อความจะช่วยให้ทีมความปลอดภัยของเราเข้าใจบริบทได้ชัดเจนที่สุด และการเพิ่มรายละเอียดในความคิดเห็นจะช่วยให้เราตรวจสอบได้เร็วขึ้น ดำเนินการรายงานผู้ใช้ทั้งหมดก็ต่อเมื่อการรายงานข้อความไม่สามารถครอบคลุมปัญหาในวงกว้างได้" +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "หากคุณเชื่อว่าผิดกฎหมาย โปรดระบุว่ากฎหมายใดและเพราะเหตุใด" #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "ข้ามช่วงรอของโหมดจำกัดเว msgid "Ignore virtual" msgstr "ไม่สนใจอุปกรณ์เสมือน" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "กิจกรรมที่ผิดกฎหมาย" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "กิจกรรมที่ผิดกฎหมายหรืออื่นๆ" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "การขายที่ผิดกฎหมาย การอำนวยความสะดวกในการก่ออาชญากรรม หรือการละเมิดกฎที่ชัดเจนซึ่งไม่เข้าข่ายข้างต้น" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "การขายที่ผิดกฎหมาย การอำนวยความสะดวกในการก่ออาชญากรรม หรือกิจกรรมที่ผิดกฎหมาย" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "รูปภาพ" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "รูปภาพที่วางจากคลิปบอร์ดจะถูกส่งเป็นไฟล์แนบ และคุณไม่มีสิทธิ์แนบไฟล์ในช่องนี้" -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "แอบอ้างเป็นบุคคลอื่น" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "การแอบอ้างเป็นบุคคลอื่นหรือสื่อที่หลอกลวง" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "ไม่ใช้งาน" msgid "Inactive timeout" msgstr "หมดเวลาเมื่อไม่ใช้งาน" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "โปรไฟล์ไม่เหมาะสม" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "รวมรหัสสำรองการยืนยันสองขั้นตอนของฉันไว้ในไฟล์ PDF และเอกสารที่พิมพ์" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "ระบุ ID คอมมูนิตี้" @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "ภาพพื้นหลังคำเชิญ" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "รหัสเชิญ (ไม่บังคับ)" @@ -19471,7 +19220,7 @@ msgstr "ซ่อนคำเชิญ" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "เชิญสมาชิก" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "อนุญาตที่อยู่ IP แล้ว" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "ไอร์แลนด์" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "ตัวเอียง" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "อิตาลี" @@ -20120,7 +19869,7 @@ msgstr "คีย์" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "ภายหลัง" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "ลัตเวีย" @@ -20291,11 +20040,6 @@ msgstr "ดูเพิ่มเติม" msgid "Learn more about Visionary" msgstr "เรียนรู้เพิ่มเติมเกี่ยวกับ Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "ออก" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "ออกจากเธรดส่วนตัว" msgid "Leave silently" msgstr "ออกจากกลุ่มแบบเงียบๆ" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "ออกจากคอมมูนิตี้" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "แสดงสมาชิกที่มีบทบาทนี้ในส่วนของตนเองในรายการสมาชิก" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "ลิทัวเนีย" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "กำลังโหลด..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "กำลังโหลด…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "ต่ำ" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "ลักเซมเบิร์ก" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "มีกำหนดการบำรุงรักษาในเวลา {localizedTime} คาดว่าจะใช้เวลา: {duration}" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "ต้องการให้ {userName} เป็นเจ้าของกลุ่มใช่หรือไม่ คุณจะสูญเสียสิทธิ์เจ้าของกลุ่ม" #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "ตั้งเป็นเจ้าของกลุ่ม" @@ -21091,38 +20830,21 @@ msgstr "ตั้งเป็นเจ้าของกลุ่ม" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "ตรวจสอบให้แน่ใจว่าโค้ดนี้ตรงกับโค้ดในแอป {PRODUCT_NAME}" +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "ตรวจสอบให้แน่ใจว่าถูกต้องก่อนส่ง" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "ปรับแต่งอินสแตนซ์ของคุณ" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "ลิงก์อันตราย" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "มอลตา" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "เผยแพร่มัลแวร์" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "มัลแวร์หรือลิงก์อันตราย" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "มัลแวร์, การขโมยข้อมูลประจำตัว หรือไฟล์อันตราย" - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "ซ่อนรายละเอียดส่วนตัวก่อ msgid "Mask Visionary as subscription" msgstr "แสดง Visionary เป็นการสมัครสมาชิกทั่วไป" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "สแปมจำนวนมาก การฉ้อโกง การแจกของรางวัลปลอม หรือการใช้บัญชีในทางที่ผิด" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "การคัดกรองสื่อเนื้อหาสำห msgid "Mature content not allowed" msgstr "ไม่อนุญาตเนื้อหาสำหรับผู้ใหญ่" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "เนื้อหาสำหรับผู้ใหญ่หรือการคุกคาม" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "เนื้อหาสำหรับผู้ใหญ่หรือการคัดกรองที่ไม่ปลอดภัย" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "การตั้งค่าเนื้อหาสำหรับผู้ใหญ่เฉพาะช่อง" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "ละเมิดนโยบายเนื้อหาสำหรับผู้ใหญ่" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "เนื้อหาสำหรับผู้ใหญ่ที่ไม่มีการคัดกรองที่เหมาะสม" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "ข้อความ" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "ลิงก์ข้อความ" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "ลิงก์ข้อความ" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "ตัวอย่างข้อความในรายการข้อความส่วนตัว" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "ข้อความเผยแพร่แล้ว" @@ -22211,6 +21908,11 @@ msgstr "เวลาของข้อความ" msgid "Message unpinned" msgstr "เลิกปักหมุดข้อความแล้ว" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "ข้อความที่คุณกำลังรายงาน" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "มินนิโซตา" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "ผู้เยาว์ตกอยู่ในความเสี่ยง เนื้อหาสำหรับผู้ใหญ่อยู่ผิดที่ หรือพฤติกรรมที่ไม่พึงประสงค์" - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "เพิ่มเติม" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "การดำเนินการเพิ่มเติม" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "ซ้อนกัน" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "เนเธอร์แลนด์" @@ -24099,7 +23796,7 @@ msgstr "ไม่พบผลลัพธ์" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "ไม่พบผลลัพธ์" @@ -24858,6 +24555,16 @@ msgstr "เฉพาะผู้ที่คุณเชิญและผู้ msgid "Only places I can't access anymore" msgstr "เฉพาะที่ที่ฉันเข้าถึงไม่ได้แล้ว" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "รายงานเฉพาะสิ่งที่คุณเชื่อด้วยความสุจริตใจว่าละเมิดกฎ และโปรดอย่าส่งรายงานเดียวกันซ้ำ" + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "รายงานเฉพาะสิ่งที่คุณเชื่อด้วยความสุจริตใจว่าละเมิดกฎ การใช้รายงานในทางที่ผิดขัดต่อ<0>หลักเกณฑ์คอมมูนิตี้ของเรา" + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "ความทึบแสง" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "เปิดบน {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "เปิดป๊อปอัป" @@ -25379,11 +25084,6 @@ msgstr "เปิดการตั้งค่าระบบ → ความ msgid "Open template JSON" msgstr "เปิดเทมเพลต JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "เปิดกล่องโต้ตอบการแบนสำหรับคอมมูนิตี้นี้" - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "เปิดการตั้งค่า" msgid "Opened the thread again" msgstr "เปิดเธรดอีกครั้ง" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "เปิดในแท็บใหม่" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "ถูกแบนครั้งแรกเมื่อ {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "อื่น ๆ" @@ -25654,11 +25357,6 @@ msgstr "รีแอ็กชันอื่น…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "ทีมความปลอดภัยของเรากำลังตรวจสอบอยู่ เราจะส่งข้อความส่วนตัวและอีเมลถึงคุณเมื่อเราได้ข้อสรุปแล้ว" - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "ไม่สามารถโอนสิทธิ์การเป็นเจ้าของให้ <0>{username} ได้ในขณะนี้" #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "โอนสิทธิ์การเป็นเจ้าของแล้ว" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "วางการตอบกลับ JSON ที่นี่" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "วางลิงก์ข้อความ" @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "ฟิชชิง การฉ้อโกง ลิงก์ที่เป็นอันตราย หรือการกล่าวอ้างเท็จที่อาจก่อให้เกิดอันตรายในโลกจริง" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "เลือกผู้ให้บริการค้นหาเว msgid "Pick an emoji" msgstr "เลือกอิโมจิ" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "เลือกตัวเลือกเพื่อดำเนินการต่อ" - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "เลือกตัวเลข 4 หลักต่อท้ายช msgid "Pick the appearance this administrator account should start with." msgstr "เลือกรูปลักษณ์เริ่มต้นสำหรับบัญชีผู้ดูแลระบบนี้" -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "เลือกกฎที่ต้องการให้ตรวจสอบ" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "โปรดรอสักครู่แล้วลองเปลี่ยนชื่ออีกครั้ง" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "โปแลนด์" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "พอร์ต" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "โปรตุเกส" @@ -26872,11 +26555,6 @@ msgstr "กดเพื่อเพิ่มรีแอ็กชัน" msgid "press to remove reaction" msgstr "กดเพื่อลบรีแอ็กชัน" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "แอบอ้างเป็นบุคคลอื่น รวมถึงเนื้อหาที่สร้างโดย AI ซึ่งอาจทำให้เข้าใจผิด" - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "ระงับการส่งข้อความ การแสดงรีแอ็กชัน และการเชื่อมต่อช่องเสียงของ <0>{targetUserTag} ตามระยะเวลาที่กำหนด" @@ -27078,11 +26756,6 @@ msgstr "ผู้พูดสำคัญ" msgid "Privacy" msgstr "ความเป็นส่วนตัว" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "ความเป็นส่วนตัวหรือการแอบอ้างเป็นบุคคลอื่น" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "การตั้งค่าความเป็นส่วนตั msgid "Privacy URL" msgstr "URL ความเป็นส่วนตัว" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "การละเมิดความเป็นส่วนตัว" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "การละเมิดความเป็นส่วนตัวหรือการเปิดเผยข้อมูลส่วนตัว" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "การละเมิดความเป็นส่วนตัวหรือการสะกดรอยตาม" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "ประเภทโปรไฟล์" msgid "Profile updated" msgstr "อัปเดตโปรไฟล์แล้ว" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "โปรไฟล์ ชื่อผู้ใช้ หรือรูปโปรไฟล์ไม่เหมาะสม" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "ส่งเสริมความเกลียดชังต่อกลุ่มที่ได้รับการคุ้มครอง" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "ส่งเสริม ชักชวน หรือประสานงานกิจกรรมความรุนแรงสุดโต่ง" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "การส่งเสริมหรือคำแนะนำที่สนับสนุนการทำร้ายตัวเองหรือโรคการกินผิดปกติ" +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "โปรไฟล์ที่คุณกำลังรายงาน" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "สรรพนาม: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "ปกป้องบัญชี Visionary ของคุณด้วยการเปิดใช้งานการยืนยันตัวตนแบบสองชั้น ขอบคุณที่สนับสนุน {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "ระบุ ID ผู้ใช้ หรือแท็กผู้ใช้อย่างน้อยหนึ่งอย่าง" #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "ระบุ ID ผู้ใช้ หรือชื่อผู้ใช้ของบุคคลที่คุณต้องการรายงาน" -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "ระบุชื่อ-นามสกุลตามกฎหมายของคุณสำหรับคำรับรองนี้" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "ปุ่มตัวเลือกให้เลือกได้เ msgid "Radio group" msgstr "กลุ่มปุ่มตัวเลือก" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "ประสานงานการโจมตี" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "พร้อมซื้อของขวัญหรือยัง?" msgid "Ready to upgrade?" msgstr "พร้อมจะอัปเกรดหรือยัง?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "เหตุผล" @@ -28291,8 +27924,8 @@ msgstr "จำขนาดและตำแหน่งหน้าต่าง #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "ลบ {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "นำ {userName} ออกจากกลุ่มใช่หรือไม่" @@ -28419,8 +28052,8 @@ msgstr "นำออกจากรายการโปรด" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "นำออกจากกลุ่ม" @@ -28458,11 +28091,6 @@ msgstr "นำออกจาก GIF รายการโปรด (เฉพ msgid "Remove icon" msgstr "ลบไอคอน" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "ลบออกจากช่องสำหรับทุกคน" - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "นำออกจากรายการโปรดแล้ว" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "ถูกนำออกจากกลุ่มแล้ว" @@ -28919,28 +28547,18 @@ msgstr "รายงานคอมมูนิตี้" msgid "Report a message" msgstr "รายงานข้อความ" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "รายงานการละเมิดกฎ หรือค้นหาเครื่องมือเพื่อจัดการผู้ติดต่อและการตั้งค่า" - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "รายงานโปรไฟล์ผู้ใช้" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "รายงานคอมมูนิตี้" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "รายละเอียดการรายงาน" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "รายงานเนื้อหาผิดกฎหมาย" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "รายงานปัญหา" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "รายงานข้อความ" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "รายงานโปรไฟล์" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "ส่งรายงานแล้ว" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "ประเภทการรายงาน" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "รายงานผู้ใช้" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "แท็กผู้ใช้ที่ถูกรายงาน (ไม่บังคับ)" @@ -29100,6 +28716,10 @@ msgstr "ต้องมีทุกอย่างเหมือนระดั msgid "Resend" msgstr "ส่งอีกครั้ง" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "ส่งอีกครั้ง ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "ส่งอีกครั้ง ({newSecondsRemaining} วินาที)" @@ -29108,7 +28728,7 @@ msgstr "ส่งอีกครั้ง ({newSecondsRemaining} วินาท msgid "Resend ({originalSecondsRemaining}s)" msgstr "ส่งอีกครั้ง ({originalSecondsRemaining} วินาที)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "ส่งอีกครั้ง ({resendCooldownSeconds} วินาที)" @@ -29122,7 +28742,7 @@ msgstr "ส่งอีกครั้ง ({resendSecondsRemaining} วินา msgid "Resend ({secondsRemaining}s)" msgstr "ส่งอีกครั้ง ({secondsRemaining} วินาที)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "ส่งรหัสอีกครั้ง" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "อัปเดตบทบาทสำเร็จแล้ว" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "โรมาเนีย" @@ -29947,7 +29567,7 @@ msgstr "ความอิ่มตัวของสี" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "ทักทาย <0>{displayName} ได้เลย ข้อค msgid "Scale" msgstr "ขนาด" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "การหลอกลวง มัลแวร์ หรือข้อมูลที่บิดเบือน" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "สแกนรหัส QR ด้วยแอปยืนยันตัวตนของคุณ" @@ -30855,11 +30470,6 @@ msgstr "เลือก" msgid "Select {accessibleName}" msgstr "เลือก {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "เลือกหมวดหมู่" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "เลือกคอมมูนิตี้ที่คุณมีสิทธิ์ {permissionName} หรือแชทกลุ่มที่คุณเป็นสมาชิกอยู่" #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "เลือกประเทศ" @@ -30911,11 +30521,6 @@ msgstr "เลือก URI การเปลี่ยนเส้นทาง" msgid "Select a scenario to apply..." msgstr "เลือกสถานการณ์ที่จะใช้..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "เลือกหมวดหมู่การละเมิด" - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "เลือกบัญชีที่คุณต้องการล msgid "Select voice processing mode" msgstr "เลือกโหมดประมวลผลเสียง" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "เลือกสิ่งที่คุณต้องการรายงาน" #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "เลือกประเทศที่คุณอาศัยอยู่" #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "เลือก…" @@ -31037,13 +30642,6 @@ msgstr "ที่เลือก: {0} (สูงสุด {1})" msgid "Selections" msgstr "การเลือก" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "ทำร้ายตัวเองหรือฆ่าตัวตาย" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "ส่งข้อความแบบบรรยายการกร msgid "Send animation" msgstr "ส่งแอนิเมชัน" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "ส่งรายงานอีกฉบับ" @@ -31138,7 +30736,7 @@ msgstr "ปุ่มส่งข้อความ" msgid "Send code" msgstr "ส่งรหัส" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "ส่งรายงาน DSA" @@ -31158,9 +30756,9 @@ msgstr "ส่งไฟล์ได้สูงสุด {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "ส่งคำขอเป็นเพื่อน" @@ -31220,8 +30818,8 @@ msgstr "ส่งข้อความในกระทู้" msgid "Send messages, images, GIFs and emoji" msgstr "ส่งข้อความ รูปภาพ GIF และอิโมจิ" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "ส่งรายงาน" @@ -31255,7 +30853,7 @@ msgstr "ส่งรายการปักหมุดนี้ย้อนเ msgid "Send TTS messages" msgstr "ส่งข้อความ TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "ส่งรหัสยืนยัน" @@ -31273,11 +30871,6 @@ msgstr "ส่งข้อความเสียง" msgid "Send:" msgstr "ส่ง:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "ส่งมัลแวร์หรือลิงก์อันตราย" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "แชร์ธีม" msgid "Share voice activity with all friends?" msgstr "แชร์กิจกรรมเสียงกับเพื่อนทั้งหมดหรือไม่" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "แชร์ข้อมูลที่ทีมของเราต้องใช้ในการประเมิน" @@ -31709,11 +31302,6 @@ msgstr "แชร์ข้อมูลที่ทีมของเราต้ msgid "Share with a friend" msgstr "แชร์ให้เพื่อน" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "แชร์ให้ผู้ดูแลคอมมูนิตี้" - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "หน้าต่างที่แชร์" msgid "Shared window audio" msgstr "เสียงของหน้าต่างที่แชร์" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "แชร์ข้อมูลส่วนตัว สะกดรอยตามผู้ใช้ หรือประสานงานการละเมิดความเป็นส่วนตัว" - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "แชร์ข้อมูลส่วนตัว" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "แถบเลื่อน" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "สโลวาเกีย" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "สโลวีเนีย" @@ -32889,11 +32467,6 @@ msgstr "จำลองโหมดจำกัดเวลา" msgid "Slowmode time remaining" msgstr "เวลาที่เหลือในโหมดจำกัดเวลา" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "ถ้อยคำเหยียดหยาม ภาษาที่ลดทอนความเป็นมนุษย์ หรือการโจมตีกลุ่มที่ได้รับการคุ้มครอง" - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "เกิดข้อผิดพลาดขณะเตรียมสติกเกอร์นี้ ลองใช้ไฟล์อื่นหรือลองอีกครั้งในภายหลัง" #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "เกิดข้อผิดพลาดขณะเผยแพร่ ลองอีกครั้งในอีกสักครู่" @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "เลย์เอาต์กว้างขวาง แยกข้อความชัดเจน" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "สเปน" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "บัญชีสแปม" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "การจัดประเภทสแปม" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "สแปมหรือหลอกลวง" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "คอมมูนิตี้สแปมหรือหลอกลวง" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "บัญชีสแปม หลอกลวง หรือฟิชชิ่ง" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "สแปม หลอกลวง หรือฟิชชิ่ง" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "เริ่มแบบย่อ" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "เริ่มใหม่" @@ -33752,22 +33302,26 @@ msgstr "อยู่ในระบบต่อ" msgid "Step {current} of {total}" msgstr "ขั้นตอนที่ {current} จาก {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "ขั้นตอนที่ 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "ขั้นตอนที่ 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "ขั้นตอนที่ 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "ขั้นตอนที่ 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "ขั้นตอนที่ 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "หยุดเป็นช่องประกาศหรือไม msgid "Stop hiding muted channels by default?" msgstr "หยุดซ่อนช่องที่ปิดเสียงไว้เป็นค่าเริ่มต้นหรือไม่" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "หยุดรับข้อความและคำขอเป็นเพื่อน" - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "หยุดทดสอบไมโครโฟน" @@ -33959,11 +33508,6 @@ msgstr "หยุดแก้ไข Node.prototype insertBefore และ remove msgid "Stop ringing" msgstr "หยุดเรียกสาย" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "หยุดเห็นเนื้อหาและสมาชิกของคอมมูนิตี้นี้" - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "เปลี่ยนอีโมติคอนข้อความทั่วไป เช่น :) และ <3 เป็นอิโมจิเมื่อส่งข้อความ" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "สวีเดน" @@ -34804,11 +34348,6 @@ msgstr "แตะเพื่อเพิ่มโน้ต" msgid "tar.gz archive" msgstr "ไฟล์บีบอัด tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "กำหนดเป้าหมายผู้คนตามลักษณะที่ได้รับการคุ้มครอง" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "ข้อกำหนดในการให้บริการ" msgid "Terms URL" msgstr "URL ข้อกำหนด" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "การก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "ไทย" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "ขอบคุณที่ช่วยให้ {productName} ปลอดภัย เราจะตรวจสอบรายงานของคุณโดยเร็วที่สุด" +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "ขอบคุณที่แจ้งให้เราทราบ" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "ขอบคุณที่แจ้งให้เราทราบ เรื่องนี้เพียงอย่างเดียวยังไม่ถือว่าละเมิดกฎของเรา เราจึงไม่ได้ส่งรายงาน" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "ขอบคุณที่แจ้งให้เราทราบ เรื่องนี้เพียงอย่างเดียวยังไม่ถือว่าละเมิดกฎของเรา เราจึงไม่ได้ส่งรายงาน หากมุ่งเป้าไปที่ใครบางคนหรือใช้ถ้อยคำเหยียดหยาม โปรดรายงานอีกครั้งและเลือก “เนื้อหาที่ล่วงละเมิดหรือเป็นอันตราย”" + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "ไม่สำเร็จ ลองอีกครั้ง หรื msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "ดูเหมือนจะไม่ใช่สีที่ถูกต้อง ลองใช้โค้ดสีแบบ hex, rgb(), hsl() หรือชื่อสีของ CSS" -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "ดูเหมือนจะไม่ใช่ URL ที่ถูกต้อง" @@ -35104,6 +34653,11 @@ msgstr "แอป {PRODUCT_NAME} บนอุปกรณ์อื่นขอ msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "แอป {PRODUCT_NAME} ไม่ได้ลงชื่อเข้าใช้ คุณสามารถปิดแท็บนี้ได้" +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "ทีมความปลอดภัยของ {productName} จะตรวจสอบรายงานของคุณ เราจะไม่เปิดเผยว่ารายงานนี้มาจากคุณ" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "redirect_uri ที่ระบุไม่ได้ลงทะเบ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri ที่ระบุต้องใช้ HTTP หรือ HTTPS" +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "แบบฟอร์มรายงานมีการเปลี่ยนแปลง โปรดเริ่มใหม่" + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "แท็กชื่อผู้ใช้ในอินสแตนซ์นี้ถูกตั้งค่าไว้แล้ว จะไม่สามารถเปลี่ยนแปลงได้อีก" #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "รหัสยืนยันไม่ถูกต้องหรือหมดอายุแล้ว" @@ -36115,13 +35674,8 @@ msgstr "สมาชิกรายนี้ไม่ได้อยู่ใน msgid "This message can only be forwarded to age-restricted channels" msgstr "ข้อความนี้สามารถส่งต่อไปยังช่องที่มีการจำกัดอายุเท่านั้น" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "ข้อความนี้ถูกลบไปแล้ว" - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "ข้อความนี้เผยแพร่ไปแล้ว" @@ -36279,11 +35833,6 @@ msgstr "เธรดนี้ถูกปิดแล้ว การส่ง msgid "This thread is locked. Only moderators can send messages." msgstr "กระทู้นี้ถูกล็อกแล้ว เฉพาะผู้ดูแลเท่านั้นที่สามารถส่งข้อความได้" -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "ผู้ใช้รายนี้" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "ผู้ใช้รายนี้จำกัดการแสดงโปรไฟล์ รายละเอียดบางอย่างจะถูกซ่อนจากผู้ที่ไม่ได้เป็นเพื่อนกับเขา" @@ -36292,11 +35841,6 @@ msgstr "ผู้ใช้รายนี้จำกัดการแสดง msgid "This user has no roles in this community." msgstr "ผู้ใช้รายนี้ไม่มีบทบาทในคอมมูนิตี้นี้" -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "ผู้ใช้รายนี้ถูกแบนออกจากคอมมูนิตี้แล้ว" - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "ผู้ใช้รายนี้ไม่พร้อมใช้งานแล้ว" @@ -36465,16 +36009,6 @@ msgstr "อัปเดตเธรด" msgid "Threads" msgstr "กระทู้" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "การข่มขู่ การติดตามข้ามพื้นที่ หรือการติดต่อที่ไม่พึงประสงค์" - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "การข่มขู่ การคุกคาม หรือการทำร้าย" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "พักการใช้งาน {targetUserTag} ชั่วคร #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "พักการใช้งานชั่วคราว" @@ -36787,6 +36321,11 @@ msgstr "โทนภาพ" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "ปรับโทนภาพ HDR เป็นช่วงมาตรฐาน ลดความสว่างสูงสุด" +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "ส่งรหัสหลายครั้งเกินไป รอ {duration} แล้วลองอีกครั้ง" + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "โอนความเป็นเจ้าของคอมมูนิตี้" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "โอนความเป็นเจ้าของกลุ่มให้ {userName} ใช่หรือไม่" @@ -37561,7 +37100,7 @@ msgstr "หากต้องการส่งคำขอเป็นเพื #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "เลิกบล็อกผู้ใช้" @@ -37607,16 +37146,6 @@ msgstr "เปิดเสียงทั้งหมดของทุกอุ msgid "Undeafen yourself" msgstr "เปิดเสียงทั้งหมดของตัวเอง" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "ความกังวลเกี่ยวกับผู้เยาว์หรือความปลอดภัยของเด็ก" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "ผู้ใช้ที่อายุไม่ถึงเกณฑ์" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "จนกว่าฉันจะเปิดอีกครั้ง" msgid "Unverified email" msgstr "อีเมลที่ยังไม่ได้ยืนยัน" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "พฤติกรรมที่ไม่พึงประสงค์หรือเนื้อหาสำหรับผู้ใหญ่ในที่ที่ไม่เหมาะสม" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "พฤติกรรม ความคิดเห็น หรือคำขอเกี่ยวกับเนื้อหาสำหรับผู้ใหญ่ที่ไม่พึงประสงค์" - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "เพิ่มแท็กได้สูงสุด {DISCOVERY_MAX_TAGS} แท็กเพื่อให้คนอื่นค้นหาคอมมูนิตี้ของคุณเจอ แท็กจะแสดงในการค้นหาของ Discovery" @@ -38840,11 +38359,6 @@ msgstr "ใช้ธีมสว่าง" msgid "Use native title bar" msgstr "ใช้แถบชื่อเรื่องของระบบ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "ใช้ในกรณีที่ละเมิดกฎของ {productName} อย่างชัดเจนและไม่เข้าข่ายตามที่กล่าวมาข้างต้นเท่านั้น" - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "ใช้ได้เฉพาะในคอมมูนิตี้น msgid "User" msgstr "ผู้ใช้" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "ผู้ใช้อาจมีอายุน้อยกว่าเกณฑ์ หรือมีส่วนเกี่ยวข้องกับการล่อลวงหรือการแสวงหาประโยชน์จากเด็ก" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "แก้ไขข้อบกพร่องของผู้ใช้" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID ผู้ใช้ (ไม่บังคับ)" @@ -39061,12 +38570,12 @@ msgstr "ไม่พบผู้ใช้" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "โปรไฟล์ผู้ใช้" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "โปรไฟล์ผู้ใช้: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "การตั้งค่าผู้ใช้" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "แท็กผู้ใช้ (ไม่บังคับ)" @@ -39339,7 +38848,7 @@ msgstr "คอมมูนิตี้ที่ยืนยันแล้ว" msgid "Verify" msgstr "ยืนยัน" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "ยืนยันรหัส" @@ -39368,7 +38877,7 @@ msgstr "ยืนยันว่าเป็นคุณ" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "ยืนยันอีเมลของคุณ" @@ -39718,7 +39227,7 @@ msgstr "ดูรหัส" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "ดูโปรไฟล์คอมมูนิตี้" @@ -39751,7 +39260,7 @@ msgstr "ดูของขวัญ" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "ดูโปรไฟล์ส่วนกลาง" @@ -39847,26 +39356,6 @@ msgstr "ผู้ชมเข้าร่วมสตรีม" msgid "Viewer leaves stream" msgstr "ผู้ชมออกจากสตรีม" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "หมวดหมู่การละเมิด" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "การละเมิดอยู่ในโปรไฟล์ของผู้ใช้ ไม่ใช่ข้อความใดข้อความหนึ่ง" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "ความรุนแรงหรือการขู่ทำร้าย" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "เนื้อหารุนแรงหรือภาพที่น่าตกใจ" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "เราได้ปรับขนาดและบีบอัดอ msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "เราได้ปรับขนาดและบีบอัดสติกเกอร์นี้เป็น 320x320 พิกเซลแล้ว แต่ขนาดไฟล์ยังคงเป็น {fileSize} โดยมีขีดจำกัดอยู่ที่ {maxSize} ลองใช้รูปภาพที่เรียบง่ายกว่า มีสีน้อยลง หรือไฟล์ต้นฉบับที่มีขนาดเล็กกว่า" -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "เราได้ส่งรหัสไปยัง {email} แล้ว" @@ -40472,7 +39961,7 @@ msgstr "เราจะดำเนินการโดยเร็วที่ msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "เราจะกู้คืนอีเมลเดิมของคุณ ออกจากระบบเซสชันเก่า ปิดใช้งาน MFA และรักษาความปลอดภัยบัญชีของคุณด้วยรหัสผ่านใหม่" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "เราจะส่งรหัสสั้นๆ เพื่อยืนยันว่าคุณสามารถรับอัปเดตเกี่ยวกับรายงานนี้ได้" @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "เวสต์เวอร์จิเนีย" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "ละเมิดกฎประเภทไหน?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "เป็นไงบ้าง?" msgid "What's new" msgstr "มีอะไรใหม่" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "เหตุผลที่รายงานคืออะไร" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "หากไม่ได้ตั้งวันที่กำหนดเอง สมาชิกที่ไม่มีสิทธิ์ <0>{readMessageHistoryPermissionLabel} จะดูข้อความย้อนหลังไม่ได้ โดยจะเห็นเฉพาะข้อความที่เข้ามาแบบเรียลไทม์ และข้อความจะหายไปเมื่อรีสตาร์ทแอป" @@ -40832,11 +40321,6 @@ msgstr "คอมมูนิตี้ใดบ้าง" msgid "Which conversations" msgstr "การสนทนาใดบ้าง" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "ละเมิดกฎข้อไหน?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "ขณะที่เปิดใช้งานการกดเพื่อพูด ปุ่มลัดจะควบคุมไมโครโฟนของคุณ ดังนั้นปุ่มปิดไมโครโฟนจะถูกปิดใช้งาน" @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "คุณไม่สามารถแนบไฟล์ในช่องนี้ได้" #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "คุณไม่สามารถเป็นเพื่อนกับตัวเองได้" @@ -41341,7 +40825,7 @@ msgstr "คุณไม่สามารถส่งข้อความถึ #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "คุณต้องยอมรับข้อกำหนดในการให้บริการเพื่อสร้างบัญชี" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "คุณต้องยืนยันอีเมลก่อนส่งรายงาน" @@ -41891,6 +41375,11 @@ msgstr "คุณใช้ราคาเดิมอยู่ ราคาป msgid "You're sending messages too quickly" msgstr "คุณส่งข้อความเร็วเกินไป" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "คุณส่งรายงานเร็วเกินไป ลองอีกครั้งภายหลัง" + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "คุณกำลังดูข้อความเก่า" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "คุณเพิ่มคนเกินจำนวนที่แชทกลุ่มอนุญาต โปรดนำออกบางคนแล้วลองอีกครั้ง" +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "คุณได้รายงานข้อความนี้ไปแล้ว" + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "คุณได้รายงานโปรไฟล์นี้ไปแล้ววันนี้" + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "บัญชีและการตั้งค่าของคุณ msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "ดำเนินการไม่สำเร็จเนื่องจากถูกระบบความปลอดภัยของเราตรวจจับไว้ หากคิดว่าเกิดข้อผิดพลาด โปรดติดต่อฝ่ายสนับสนุน" +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "คำตอบของคุณ" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "ใบสมัครของคุณอยู่ระหว่างการตรวจสอบ คุณยังสามารถอัปเดตรายละเอียดประกาศหรือถอนใบสมัครได้" @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "เบราว์เซอร์ของคุณต้องมีการโต้ตอบจากผู้ใช้ก่อนจึงจะเล่นเสียงได้ คลิกปุ่มด้านล่างเพื่อเปิดใช้งานการแชทด้วยเสียง" #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "การเปลี่ยนแปลงของคุณจะส่งไปยังทุกชุมชนที่ติดตามช่องนี้ ซึ่งอาจใช้เวลาสักครู่ ข้อความที่เผยแพร่แต่ละข้อความอนุญาตให้แก้ไขด่วนได้ 3 ครั้ง จากนั้นแก้ไขได้ 1 ครั้งทุกๆ 20 นาที" @@ -42311,6 +41815,11 @@ msgstr "ชื่อเล่นใหม่ของคุณ หรือเ msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "ชุดกู้คืนเก่าของคุณใช้ไม่ได้แล้ว โปรดเก็บชุดใหม่นี้ไว้ในที่ปลอดภัย" +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "ตัวเลือกของคุณ" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "ภูมิภาคของคุณ" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "การชำระเงินต่ออายุของคุณไม่สำเร็จ แต่ <0/> ยังคงใช้งานได้จนถึง <1>{graceDate} โปรดอัปเดตวิธีการชำระเงินก่อนวันดังกล่าวเพื่อรักษาการสมัครของคุณไว้" +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "ส่งรายงานของคุณไม่สำเร็จ ลองอีกครั้ง" + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "การสมัครของคุณจะเปลี่ยนเ msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS ของธีมมีขนาดใหญ่เกินกว่าจะแชร์ได้ โปรดลดขนาดลงแล้วลองอีกครั้ง" -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "ชื่อผู้ใช้ของคุณ (ไม่บังคับ)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index a5d6b304e..6547634c0 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -2081,7 +2081,7 @@ msgstr "{remainingSlotCount} kaldı" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {üye} other {üye}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Davet bağlantınız # saniye içinde sona erecek.} other {Davet bağlantınız # saniye içinde sona erecek.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "{selectedCount} seçildi" @@ -2957,11 +2957,6 @@ msgstr "Hesap verileri" msgid "Account details unavailable" msgstr "Hesap ayrıntıları kullanılamıyor" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Hesap, spam yapmak, dolandırıcılık yapmak veya platformu kötüye kullanmak için var." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Eklendi: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Eklendi: {createdDate} • son kullanım: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Ek yorumlar (isteğe bağlı)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Zaten kullanıldı" msgid "Already set to cancel" msgstr "Zaten iptal edilecek şekilde ayarlanmış" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Bu mesajı {productName} Güvenlik Ekibine de bildir" @@ -4576,11 +4566,6 @@ msgstr "Yıllık" msgid "Another checkbox" msgstr "Başka bir onay kutusu" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Başka bir açık kural ihlali" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Başka bir yuvarlak onay kutusu" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Ses yükleme" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Avusturya" @@ -5620,6 +5605,7 @@ msgstr "Şu an uzakta" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Şu an uzakta" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Geri" @@ -5788,9 +5775,7 @@ msgstr "Yedek kodlar yenilendi" msgid "Badge" msgstr "Rozet" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Yasakla" @@ -5819,7 +5804,7 @@ msgstr "Yasaklama süresi" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Son mesajlarını silme seçeneğiyle üyeleri topluluktan yasaklayın." msgid "Ban reason" msgstr "Yasaklama nedeni" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Bu kullanıcıyı yasakla" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Bant genişliği" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Yasaklandı" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} topluluktan yasaklandı" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Şu tarihten önce" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Belçika" @@ -6031,7 +6006,7 @@ msgstr "Bit hızı" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Engelle" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Engelle" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "{name} adlı kullanıcıyı engelle" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Tüm topluluklar için engelle" msgid "Block spoiler" msgstr "Spoiler bloğu" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Bu kullanıcıyı engelle" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Kullanıcıyı engelle" msgid "Blocked" msgstr "Engellendi" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Engellendi" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Yerleşik çevirmenler" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaristan" @@ -6519,16 +6500,6 @@ msgstr "Bulgarca" msgid "Bulk delete" msgstr "Toplu sil" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Zorbalık, tekrarlanan istenmeyen iletişim, takip veya hedefli taciz." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Zorbalık, tehditler, nefret, şiddet, baskınlar veya kendine zarar vermeyi teşvik eden içerik." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Kaliforniya" msgid "Call" msgstr "Arama" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Arama ve grup sohbeti ayarları" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Banner'ı değiştir" msgid "Change chat embed background" msgstr "Sohbet yerleştirme arka planını değiştir" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "E-postayı değiştir" @@ -7150,8 +7116,8 @@ msgstr "Arkadaş takma adını değiştir" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Grup takma adını değiştir" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Dili değiştir" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Grup takma adımı değiştir" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Kendi takma adını değiştir" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Sahibi değiştir" @@ -7283,16 +7249,6 @@ msgstr "Bir sesli kanalın hangi ses bölgesini kullanacağını değiştirin." msgid "Change which voice region this channel uses." msgstr "Bu kanalın kullandığı ses bölgesini değiştirin." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Sizi kimlerin arayabileceğini veya ekleyebileceğini değiştirin." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Size kimlerin ulaşabileceğini değiştirin." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Yetkilendirme bağlantısı için {emailAddress} adresindeki gelen kutun msgid "Check your inbox for a verification email." msgstr "Doğrulama e-postası için gelen kutunuzu kontrol edin." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Raporunuzu kontrol edin" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Onay kutuları" @@ -7901,21 +7862,6 @@ msgstr "Bu hesap için ödeme engellendi. Yardıma ihtiyacınız olursa {support msgid "Checkout unavailable" msgstr "Ödeme yapılamıyor" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Çocuk güvenliği endişeleri" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Çocuk güvenliği veya reşit olmayanların istismarı" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Çocuk güvenliği veya yetişkinlere yönelik içerik" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Seçenekler" msgid "Choices: {choiceList}" msgstr "Seçenekler: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Seç" @@ -8122,6 +8068,11 @@ msgstr "Topluluğunuzu en iyi tanımlayan kategoriyi seçin. Bunu istediğiniz z msgid "Choose the premium model" msgstr "Premium modeli seçin" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Nedeni tekrar seçin" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Hediyeyi al" msgid "Claim your account" msgstr "Hesabınızı sahiplenin" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Hesabınızı sahiplenin ve rapor göndermek için e-postanızı doğrulayın." @@ -8352,12 +8303,12 @@ msgstr "Bu hediyeyi kullanmak için hesabınızı sahiplenin." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Arkadaşlık isteği göndermek için hesabınızı sahiplenin." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Hesabını doğrula ve rapor gönder." @@ -8378,11 +8329,6 @@ msgstr "Bire bir aramalar başlatmak veya bunlara katılmak için hesabınızı msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "{premiumProductName} aboneliğinizi etkinleştirmek için hediyenizi alın!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Başka biri, marka veya kuruluş gibi davranmak." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Arama girişini temizle" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Kapat" msgid "Close popout" msgstr "Küçük pencereyi kapat" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Bu DM'i kapat" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Kapatınca tepsiye küçült" msgid "Close window" msgstr "Pencereyi kapat" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "{dmDisplayName} ile olan mevcut DM'inizi kapatın. Bu, kullanıcıyı engellemez ve DM'i daha sonra tekrar açabilirsiniz." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "{displayName} ile olan DM'inizi kapatmak ister misiniz? İstediğiniz zaman yeniden açabilirsiniz." @@ -8837,7 +8773,7 @@ msgstr "Kömür teması" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Kod" @@ -8868,7 +8804,7 @@ msgstr "{productName} uygulamasından gelen kod" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Kod yeniden gönderildi" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Katılabileceğiniz topluluklar" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Topluluk" @@ -9131,7 +9065,7 @@ msgstr "Topluluk sağırlaştırması" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Topluluk hata ayıklaması" @@ -9150,16 +9084,6 @@ msgstr "Topluluk silindi" msgid "Community DM" msgstr "Topluluk DM'i" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Topluluk, platformda spam yapmak, dolandırıcılık yapmak veya platformu kötüye kullanmak için var." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Topluluk, toplu saldırıları veya hedefli kötüye kullanımı kolaylaştırır." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Topluluk simgesi" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Topluluk kimliği" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Topluluk kimliği gerekli." @@ -9526,6 +9450,11 @@ msgstr "Yeni parolayı onayla" msgid "Confirm password" msgstr "Parolayı onayla" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Raporu göndermek için beyanı onaylayın." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Tarayıcıda devam et" msgid "Continue to checkout" msgstr "Ödemeye devam et" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Topluluğu bildirmeye devam et" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Kullanıcıyı bildirmeye devam et" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Bu kanalı bir metin kanalına dönüştürmek, onu takip eden tüm kana msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "/tts komutuyla gelip gelmediğine bakılmaksızın gelen içeriği konuşmaya dönüştürür." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Kişilere veya topluluklara karşı baskın, toplu saldırı veya taciz koordine eder." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL panoya kopyalandı" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL panoya kopyalandı" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Mesaj kimliğini kopyala" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Mesaj bağlantısını kopyala" @@ -10643,6 +10553,11 @@ msgstr "Gönderiler yüklenemedi. Lütfen daha sonra tekrar deneyin." msgid "Couldn't load settings" msgstr "Ayarlar yüklenemedi" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Rapor formu yüklenemedi." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Bu uygulama yüklenemedi" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Görsel işlenemedi" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Bu mesaj yayınlanamadı" @@ -10825,11 +10740,6 @@ msgstr "Davet gönderilemedi" msgid "Couldn't send invite. Try again." msgstr "Davet gönderilemedi. Tekrar deneyin." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Gönderilemedi. Tekrar deneyin." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Geri sayım sayacı" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "İkamet edilen ülke" @@ -11301,13 +11211,8 @@ msgstr "Oluşturuldu:" msgid "Credentials" msgstr "Kimlik bilgileri" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Güvenilir tehditler, açık şiddet veya şiddetin yüceltilmesi." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Hırvatistan" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Belirli bir ses seviyesinin altındaki sesi çok az CPU kullanarak keser." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Kıbrıs" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Çekçe" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Çek Cumhuriyeti" @@ -11965,7 +11870,7 @@ msgstr "Kanalda hata ayıkla" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Toplulukta hata ayıkla" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Tema silinsin mi?" msgid "Delete this invite? Can't be undone." msgstr "Bu daveti silmek istiyor musunuz? Geri alınamaz." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Bu mesajı sil" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Bu mesajı silmek istiyor musunuz? Geri alınamaz." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Bu mesajı sil? Geri alınamaz. Bu mesaj ayrıca bu kanalı takip eden her topluluktan kaldırılacaktır." @@ -12461,11 +12359,6 @@ msgstr "Bu topluluktaki mesajlarınızı silmek istiyor musunuz?" msgid "Delete your messages in this conversation?" msgstr "Bu sohbetteki mesajlarınızı silmek istiyor musunuz?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Silindi" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "{permissions} reddedildi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Danimarka" @@ -12554,11 +12447,6 @@ msgstr "Çıkartmayı açıklayın" msgid "Describe this media for screen readers" msgstr "Ekran okuyucular için bu medyayı tanımlayın" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "İçeriğin neden yasa dışı olduğunu açıklayın" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Ayrılmış başlık" msgid "Detail" msgstr "Ayrıntı" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Ayrıntılar" @@ -13315,11 +13203,6 @@ msgstr "Görünen ad (isteğe bağlı)" msgid "Display scaling" msgstr "Ekran ölçekleme" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Kötü amaçlı yazılım, kimlik bilgisi çalan araçlar veya başka zararlı dosyalar dağıtır." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "DM ve arkadaşlık isteği ayarları" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Belgeler" msgid "Doesn't allow being added to group DMs" msgstr "Grup DM'lerine eklenmeye izin vermiyor" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Engellemez. Daha sonra tekrar açabilirsiniz." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Bunun yerine bağış yap" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Geliştirici araçlarının gerçek kaynaklara işaret etmesi için kayn msgid "Download video" msgstr "Videoyu indir" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, ifşa edilmiş özel bilgiler veya takip." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, takip, başkası gibi davranma veya uygunsuz profil." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "{tokenLabel} rengini düzenle" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Topluluk profilini düzenle" @@ -14043,7 +13908,7 @@ msgstr "Bu kanaldaki roller ve üyeler için geçersiz kılmaları düzenleyin." #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Profili düzenle" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Profil yerel saatini düzenle" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Yayınlanan mesajı düzenle?" @@ -14191,13 +14056,13 @@ msgstr "{windowEndsOn} tarihine kadar para iadesi için uygun. Bu işlem aboneli #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "E-posta" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "E-posta adresi" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "E-posta adresi gerekli." @@ -14721,16 +14586,6 @@ msgstr "Yeni ekran paylaşımları için kodlayıcı tercihi." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodlayıcı, SVC ve bit hızı ön ayarları" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Kendine zarar vermeyi teşvik ediyor" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "İntiharı, kendine zarar vermeyi veya yeme bozukluklarını teşvik ediyor." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Bu aramada desteklenmeyen bir katılımcı olduğu için uçtan uca şif msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Bu sesli kanalda desteklenmeyen bir katılımcı olduğu için uçtan uca şifreleme kullanılamıyor." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Küçüklere zarar veriyor veya çocuk istismarı içeriği barındırıyor." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Kodu ABCD-1234 biçiminde girin." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Geçerli bir {theOtherPlatform} şablon URL'si veya kodu girin." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Geçerli bir e-posta adresi girin." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Geçerli bir mesaj bağlantısı girin." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Kimlik doğrulayıcı uygulamanızdaki {digitCount} haneli kodu girin." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Devam etmeden önce kodu girin." @@ -15008,7 +14858,7 @@ msgstr "<0><1>Kaydetmek için Enter" msgid "Enter username" msgstr "Kullanıcı adı girin" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Doğrulama kodunu girin" @@ -15017,6 +14867,11 @@ msgstr "Doğrulama kodunu girin" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "E-posta adresinizi girin, parolanızı sıfırlamanız için size bir bağlantı göndereceğiz." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Raporu göndermek için tam yasal adınızı girin." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "<0><1>İptal etmek için Esc" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonya" @@ -15412,6 +15267,16 @@ msgstr "{earliest} tarihinde sona eriyor" msgid "Expires:" msgstr "Sona eriyor:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Sorunu açıklayın" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Raporu göndermek için sorunu açıklayın." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Harici bağlantılar tehlikeli olabilir. Dikkatli olun." msgid "Extra large" msgstr "Ekstra büyük" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Aşırılık yanlısı topluluk" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Özel URL kaldırılamadı. Tekrar deneyin." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Kod yeniden gönderilemedi. Tekrar deneyin." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Premium durumu sıfırlanamadı." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Kod gönderilemedi. Tekrar deneyin." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Mesaj gönderilemedi. Seçenekler için basılı tutun." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Rapor gönderilemedi. Tekrar deneyin." @@ -15840,11 +15700,6 @@ msgstr "{startLabel} ile başlayan emojiler yüklenemedi: {errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "Emojiler yüklenemedi. Tekrar deneyin." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Gerçek dünyada zarara yol açabilecek yanlış iddialar." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Mükemmel çıkartmayı bul" msgid "Fingerprint" msgstr "Parmak izi" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Hesap kurulumunu tamamla" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Önce hesap kurulumunu tamamla" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Arkadaşlık isteği göndermek için kaydınızı tamamlayın." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Finlandiya" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Fince" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Ad ve soyad" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "30 FPS üzerindeki kare hızları için {premiumProductName} gerekir" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Fransa" @@ -16834,10 +16689,10 @@ msgstr "Tam" msgid "Full dynamic range" msgstr "Tam dinamik aralık" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Tam yasal ad" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Tam yasal ad (çocuk cinsel istismarı raporları için isteğe bağlı)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Almanca" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Almanya" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Geri dön" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Geri dönün ve geçerli bir e-posta adresi girin." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Seni görmek ne güzel, {username}! Hoş geldin." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Yunanistan" @@ -17572,11 +17427,6 @@ msgstr "Yunanca" msgid "Grid view" msgstr "Izgara görünümü" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Çocukları istismara hazırlama (grooming) veya çocuk istismarı içeriği." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Kullanıcı adı" msgid "Hang out with voice, video and screen share" msgstr "Sesli, görüntülü ve ekran paylaşımıyla takılın" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Taciz" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Yetişkinlere yönelik içerik içeren taciz" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Taciz veya zorbalık" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Taciz veya ısrarlı takip" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Taciz veya hedefli kötüye kullanım" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Taciz veya tehdit" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Donanım anahtarı" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Çoğu Windows ve macOS sisteminde donanım hızlandırmalıdır. Eski cihazlar için güvenilirdir." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Zararlı yanlış bilgi" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Daha önce satın aldı" msgid "Has ever purchased override" msgstr "Daha önce satın alma geçersiz kılma" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Nefret söylemi" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Kendi ekran paylaşımınız gizlensin mi?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Bu kanaldaki resim ve videolarda indirme, tarayıcıda açma ve kopyalama düğmelerini gizler." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Mesajlarını gizler ve size mesaj göndermesini engeller" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Macarca" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Macaristan" @@ -18399,6 +18212,11 @@ msgstr "Ben bir araç ipucuyum" msgid "I changed my mind" msgstr "Fikrimi değiştirdim" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Bu raporda yer alan bilgilerin ve iddiaların doğru ve eksiksiz olduğunu iyi niyetle onaylıyorum." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Boşta kalma ayarları" msgid "Idle timeout" msgstr "Boşta kalma zaman aşımı" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Reşit olmayan biri söz konusuysa bunun yerine \"{childSafetyReasonName}\" seçeneğini kullanın." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Eğer bir hesap bu adresi kullanıyorsa, şifre sıfırlama talimatları msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "macOS sizden {productName}'ı kapatıp yeniden açmanızı isterse, Sonra'yı seçin." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Biri acil tehlikede olabilecekse, güvenli bir şekilde yapabiliyorsanız yerel acil servislerle iletişime geçin." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Biri acil tehlikedeyse önce yerel acil durum servisleriyle iletişime geçin." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Eğer birisi size buraya bir şey yapıştırmanızı söylerse, bu sizin {productName} hesabınıza erişimlerini sağlayabilecek bir dolandırıcılık girişimidir." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Çocuk istismarı materyali (CSAM) veya reşit olmayan birinin istismarı söz konusuysa, bildirimi şimdi gönderin ve materyali yeniden paylaşmayın." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Bu, gerçek ve yakın bir tehditse yerel acil servislerle de iletişime geçin." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Bu, yakın bir terör tehdidiyse yerel acil servislerle de iletişime geçin." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Bu rapor bu topluluktaki belirli bir mesajla ilgiliyse, bunun yerine o mesajı bildirin. Mesaj raporları, güvenlik ekibimize en net bağlamı sağlar ve yorumlara ayrıntı eklemek, incelememizi hızlandırmamıza yardımcı olabilir. Yalnızca bir mesajı bildirmenin daha geniş sorunu kapsamayacağı durumlarda topluluğun tamamını bildirmeye devam edin." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Bu rapor belirli bir mesajla ilgiliyse, bunun yerine o mesajı bildirin. Mesaj raporları, güvenlik ekibimize en net bağlamı sağlar ve yorumlara ayrıntı eklemek, incelememizi hızlandırabilir. Yalnızca o mesaj daha geniş sorunu kapsamıyorsa kullanıcının tamamını bildirmeye devam edin." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Bu rapor belirli mesajlarla ilgiliyse, bunun yerine en alakalı mesajı bildirin. Mesaj raporları, güvenlik ekibimize en net bağlamı sağlar ve yorumlara ayrıntı eklemek, incelememizi hızlandırmamıza yardımcı olabilir. Yalnızca bir mesajı bildirmek daha geniş sorunu kapsamayacaksa, kullanıcının tamamını bildirmeye devam edin." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Yasa dışı olduğunu düşünüyorsanız hangi yasaya aykırı olduğunu ve nedenini belirtin." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Bu kanalın yavaş mod sınırlamasını yok sayın." msgid "Ignore virtual" msgstr "Sanalı yok say" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Yasa dışı etkinlik" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Yasa dışı etkinlik veya başka bir şey" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Yasa dışı satışlar, suç teşkil eden eylemlere aracılık veya yukarıdakilere uymayan açık bir kural ihlali." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Yasa dışı satışlar, suç işlemeye yardım etme veya yasa dışı faaliyetler." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Görseller" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Panodan yapıştırdığınız görseller ek olarak gönderilir ve bu kanalda dosya ekleme izniniz yok." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Kimliğe bürünme" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Kimliğe bürünme veya aldatıcı medya" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Hareketsiz" msgid "Inactive timeout" msgstr "Hareketsizlik zaman aşımı" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Uygunsuz profil" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "İki faktörlü yedek kodlarımı PDF ve çıktıda dahil et" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Topluluk kimliğini girin." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Davet arka planı" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Davet kodu (isteğe bağlı)" @@ -19471,7 +19220,7 @@ msgstr "Davet maskeleme" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Üye davet et" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP adresi yetkilendirildi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "İrlanda" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "İtalik" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "İtalya" @@ -20120,7 +19869,7 @@ msgstr "Tuşlar" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Daha sonra" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Letonya" @@ -20291,11 +20040,6 @@ msgstr "Daha fazla bilgi edinin" msgid "Learn more about Visionary" msgstr "Visionary hakkında daha fazla bilgi edinin" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Ayrıl" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Özel iş parçacığından ayrıl" msgid "Leave silently" msgstr "Sessizce ayrıl" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Topluluktan ayrıl" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Bu role sahip üyeleri üye listesinde kendi bölümlerinde listeler." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litvanya" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Yükleniyor..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Yükleniyor…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Düşük" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Lüksemburg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Bakım {localizedTime} için planlanmıştır. Tahmini süre: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "{userName} grubun sahibi olsun mu? Sahiplik ayrıcalıklarınızı kaybedersiniz." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Grup sahibi yap" @@ -21091,38 +20830,21 @@ msgstr "Grup sahibi yap" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "{PRODUCT_NAME} uygulamasındaki bu kodu kontrol edin." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Göndermeden önce doğru göründüğünden emin olun." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Kurulumu kişiselleştirin" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Kötü amaçlı bağlantılar" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Kötü amaçlı yazılım dağıtımı" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Kötü amaçlı yazılım veya tehlikeli bağlantılar" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Kötü amaçlı yazılım, kimlik bilgisi hırsızlığı veya zararlı dosyalar." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Ekranınızı veya yayınınızı paylaşmadan önce özel ayrıntılar msgid "Mask Visionary as subscription" msgstr "Visionary'yi abonelik olarak maskele" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Toplu spam, dolandırıcılık, sahte çekilişler veya hesap suistimali." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Yetişkin içeriği medya geçidi" msgid "Mature content not allowed" msgstr "Yetişkinlere yönelik içeriğe izin verilmiyor" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Yetişkinlere yönelik içerik veya taciz" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Yetişkinlere yönelik içerik veya güvenli olmayan kısıtlama" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Yetişkin içeriği geçersiz kılma" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Yetişkinlere yönelik içerik politikası ihlali" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Uygun kısıtlama olmadan yetişkinlere yönelik içerik." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Mesaj" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "mesaj bağlantısı" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Mesaj bağlantısı" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "DM listesindeki mesaj önizlemeleri" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Mesaj yayınlandı" @@ -22211,6 +21908,11 @@ msgstr "Mesaj zamanı" msgid "Message unpinned" msgstr "Mesajın sabitlemesi kaldırıldı" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Bildirdiğiniz mesaj" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Risk altındaki küçükler, yanlış yerdeki yetişkin içeriği veya istenmeyen davranışlar." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Daha fazla" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Diğer işlemler" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "İç içe" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Hollanda" @@ -24099,7 +23796,7 @@ msgstr "Sonuç bulunamadı" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Sonuç bulunamadı" @@ -24858,6 +24555,16 @@ msgstr "Yalnızca davet ettiğiniz kişiler ve moderatörler bu iş parçacığ msgid "Only places I can't access anymore" msgstr "Artık erişemediğim yerler" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Yalnızca kuralları ihlal ettiğine dürüstçe inandığınız şeyleri bildirin ve lütfen aynı raporu iki kez göndermeyin." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Yalnızca kuralları ihlal ettiğine dürüstçe inandığınız şeyleri bildirin. Raporları kötüye kullanmak <0>Topluluk Kurallarımıza aykırıdır." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Opaklık" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "{instanceName} üzerinde aç" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Açılır listeyi aç" @@ -25379,11 +25084,6 @@ msgstr "Sistem Ayarları → Gizlilik ve Güvenlik → Ekran Kaydı'nı açın, msgid "Open template JSON" msgstr "Şablon JSON'ını aç" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Bu topluluk için yasaklama iletişim kutusunu açın." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Ayarları aç" msgid "Opened the thread again" msgstr "Konuyu tekrar açtı" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Yeni sekmede açılır" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Orijinal yasaklanma tarihi: {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Diğer" @@ -25654,11 +25357,6 @@ msgstr "Diğer tepki…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Güvenlik ekibimiz inceliyor. Bir karara vardığımızda size bir DM ve e-posta göndereceğiz." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Sahiplik şu anda <0>{username} kişisine devredilemedi." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Sahiplik devredildi" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "JSON yanıtını buraya yapıştırın" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Mesaj bağlantısını yapıştırın." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Kimlik avı, dolandırıcılık, kötü amaçlı bağlantılar veya gerçek dünyada zarara yol açabilecek yanlış iddialar." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Web arama sağlayıcısı seçin" msgid "Pick an emoji" msgstr "Bir emoji seçin" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Devam etmek için bir seçenek belirleyin." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Kullanıcı adınızın sonundaki 4 haneli sayıyı seçin" msgid "Pick the appearance this administrator account should start with." msgstr "Bu yönetici hesabının hangi görünümle başlayacağını seçin." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "İncelenecek kuralı seçin." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Lütfen bir süre bekleyip yeniden adlandırmayı tekrar deneyin." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Polonya" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Port" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Portekiz" @@ -26872,11 +26555,6 @@ msgstr "tepki eklemek için basın" msgid "press to remove reaction" msgstr "tepkiyi kaldırmak için basın" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Yanıltıcı yapay zeka içeriği de dahil olmak üzere başka biri gibi davranmak." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Belirtilen süre boyunca <0>{targetUserTag}'nin mesaj göndermesini, tepki vermesini ve sesli kanallara bağlanmasını engelleyin." @@ -27078,11 +26756,6 @@ msgstr "Öncelikli konuşmacı" msgid "Privacy" msgstr "Gizlilik" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Gizlilik veya kimliğe bürünme" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Gizlilik ayarları bildirimi" msgid "Privacy URL" msgstr "Gizlilik URL'si" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Gizlilik ihlali" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Gizlilik ihlali veya doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Gizlilik ihlali veya ısrarlı takip" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Profil türü" msgid "Profile updated" msgstr "Profil güncellendi" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Profil, kullanıcı adı veya avatar ihlali" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Korumalı gruplara karşı nefreti teşvik eder." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Şiddet içeren aşırılık yanlısı faaliyetleri teşvik eder, bu faaliyetler için eleman toplar veya koordine eder." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Kendine zarar vermeyi veya yeme bozukluklarını teşvik eden tanıtım veya talimatlar." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Bildirdiğiniz profil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Zamirler: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "İki faktörlü kimlik doğrulamayı etkinleştirerek Visionary hesabınızı koruyun. {productName} uygulamasını desteklediğiniz için teşekkürler!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "En az bir kullanıcı kimliği veya kullanıcı etiketi girin." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Bildirdiğiniz kişinin kullanıcı kimliğini veya kullanıcı adını girin." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Beyan için tam yasal adınızı girin." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Radyo düğmeleri, bir gruptan tek bir seçenek belirlemenizi sağlar." msgid "Radio group" msgstr "Radyo grubu" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Saldırı koordinasyonu" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Hediye almaya hazır mısınız?" msgid "Ready to upgrade?" msgstr "Yükseltmeye hazır mısınız?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Neden" @@ -28291,8 +27924,8 @@ msgstr "Pencere boyutunu ve konumunu hatırla" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "{engineName} arama motorunu kaldır" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "{userName} gruptan çıkarılsın mı?" @@ -28419,8 +28052,8 @@ msgstr "Favorilerden kaldır" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Gruptan çıkar" @@ -28458,11 +28091,6 @@ msgstr "Yalnızca URL'den kaydedilen GIF favorilerinden kaldır" msgid "Remove icon" msgstr "Simgeyi kaldır" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Mesajı herkes için kanaldan kaldırın." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Favorilerden kaldırıldı" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Gruptan çıkarıldı" @@ -28919,28 +28547,18 @@ msgstr "Bir topluluğu bildir" msgid "Report a message" msgstr "Bir mesajı bildir" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Kural ihlali bildirin veya kişi ve tercihleri yönetme araçlarını bulun." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Bir kullanıcı profilini bildir" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Topluluğu bildir" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Rapor ayrıntıları" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Yasa dışı içeriği bildir" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Sorun bildir" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Mesajı bildir" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Profili bildir" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Rapor gönderildi" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Rapor türü" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Kullanıcıyı bildir" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Bildirilen kullanıcının etiketi (isteğe bağlı)" @@ -29100,6 +28716,10 @@ msgstr "Orta seviyedeki her şeye ek olarak, topluluğun en az 10 dakikadır üy msgid "Resend" msgstr "Tekrar gönder" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Tekrar gönder ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Tekrar gönder ({newSecondsRemaining}sn)" @@ -29108,7 +28728,7 @@ msgstr "Tekrar gönder ({newSecondsRemaining}sn)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Tekrar gönder ({originalSecondsRemaining}sn)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Tekrar gönder ({resendCooldownSeconds}sn)" @@ -29122,7 +28742,7 @@ msgstr "Tekrar gönder ({resendSecondsRemaining}sn)" msgid "Resend ({secondsRemaining}s)" msgstr "Tekrar gönder ({secondsRemaining}sn)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Kodu tekrar gönder" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Roller başarıyla güncellendi" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romanya" @@ -29947,7 +29567,7 @@ msgstr "Doygunluk" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "<0>{displayName} kişisine merhaba deyin. DM'iniz burada başlıyor. msgid "Scale" msgstr "Ölçek" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Dolandırıcılık, kötü amaçlı yazılım veya yanlış bilgi" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Kimlik doğrulama uygulamanızla QR kodunu tarayın." @@ -30855,11 +30470,6 @@ msgstr "Seç" msgid "Select {accessibleName}" msgstr "{accessibleName} seçin" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Bir kategori seçin" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "{permissionName} iznine sahip olduğunuz bir topluluğu veya üyesi olduğunuz bir grup DM'ini seçin." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Bir ülke seçin" @@ -30911,11 +30521,6 @@ msgstr "Yönlendirme URI'si seçin" msgid "Select a scenario to apply..." msgstr "Uygulanacak bir senaryo seçin..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "İhlal kategorisi seçin." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Yeni cihazınızda oturum açmak istediğiniz hesabı seçin." msgid "Select voice processing mode" msgstr "Ses işleme modunu seçin" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Neyi bildirmek istediğinizi seçin." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "İkamet ettiğiniz ülkeyi seçin." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Seç…" @@ -31037,13 +30642,6 @@ msgstr "Seçim: {0} (maks. {1})" msgid "Selections" msgstr "Seçimler" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Kendine zarar verme veya intihar" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Bir eylem mesajı gönder (italik olarak gösterilir)." msgid "Send animation" msgstr "Animasyon gönder" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Başka bir rapor gönder" @@ -31138,7 +30736,7 @@ msgstr "Gönder düğmesi" msgid "Send code" msgstr "Kod gönder" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "DSA raporu gönder" @@ -31158,9 +30756,9 @@ msgstr "{size} boyutuna kadar dosya gönderin" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Arkadaşlık isteği gönder" @@ -31220,8 +30818,8 @@ msgstr "Konularda mesaj gönder" msgid "Send messages, images, GIFs and emoji" msgstr "Mesaj, resim, GIF ve emoji gönder" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Rapor gönder" @@ -31255,7 +30853,7 @@ msgstr "Bu sabitlemeyi zamanda geriye gönderelim mi?" msgid "Send TTS messages" msgstr "TTS mesajları gönder" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Doğrulama kodu gönder" @@ -31273,11 +30871,6 @@ msgstr "Sesli mesaj gönder" msgid "Send:" msgstr "Gönderme:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Kötü amaçlı yazılım veya tehlikeli bağlantılar gönderme" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Temayı paylaş" msgid "Share voice activity with all friends?" msgstr "Ses etkinliğiniz tüm arkadaşlarınızla paylaşılsın mı?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Ekibimizin bunu değerlendirmesi için gerekenleri paylaşın." @@ -31709,11 +31302,6 @@ msgstr "Ekibimizin bunu değerlendirmesi için gerekenleri paylaşın." msgid "Share with a friend" msgstr "Bir arkadaşınızla paylaşın" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Topluluk moderatörleriyle paylaşın." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Paylaşılan pencere" msgid "Shared window audio" msgstr "Paylaşılan pencere sesi" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Kişisel bilgi paylaşıyor, kullanıcıları ısrarla takip ediyor veya gizlilik ihlallerini koordine ediyor." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Kişisel bilgi paylaşımı" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Kaydırıcılar" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakya" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenya" @@ -32889,11 +32467,6 @@ msgstr "Yavaş mod simülasyonu" msgid "Slowmode time remaining" msgstr "Yavaş mod için kalan süre" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Aşağılayıcı ifadeler, insanlık dışı dil veya korunan gruplara yönelik saldırılar." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Bu çıkartma hazırlanırken bir sorun oluştu. Başka bir dosya deneyin veya bir süre sonra tekrar deneyin." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Yayınlanırken bir şeyler ters gitti. Birazdan tekrar dene." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Mesajlar arasında net görsel ayrım sağlayan geniş düzen." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "İspanya" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Spam hesabı" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Spam sınıflandırması" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam veya dolandırıcılık" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Spam veya dolandırıcılık topluluğu" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Spam, dolandırıcılık veya kimlik avı hesabı" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, dolandırıcılık veya kimlik avı" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Küçültülmüş olarak başlat" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Baştan başla" @@ -33752,22 +33302,26 @@ msgstr "Oturumu açık tut" msgid "Step {current} of {total}" msgstr "Adım {current} / {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "1. Adım" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "2. Adım" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "3. Adım" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "4. Adım" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "5. Adım" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Duyuru kanalı olmayı durdur?" msgid "Stop hiding muted channels by default?" msgstr "Sessize alınmış kanallar varsayılan olarak gizlenmesin mi?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Mesajları ve arkadaşlık isteklerini durdurur." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Mikrofon testini durdur" @@ -33959,11 +33508,6 @@ msgstr "Node.prototype insertBefore ve removeChild yamalarını kaldır. Bir say msgid "Stop ringing" msgstr "Çalmayı durdur" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "İçeriğini ve üyelerini görmeyi durdurur." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Mesaj gönderirken :) ve <3 gibi yaygın metin ifadelerini emojilerle değiştirin" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "İsveç" @@ -34804,11 +34348,6 @@ msgstr "Not eklemek için dokun" msgid "tar.gz archive" msgstr "tar.gz arşivi" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Kişileri korunan özelliklerine göre hedefler." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Hizmet Şartları" msgid "Terms URL" msgstr "Şartlar URL'si" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Terörizm veya şiddet içeren aşırıcılık" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tayca" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName} uygulamasını güvenli tutmaya yardımcı olduğunuz için teşekkür ederiz. Raporunuzu en kısa sürede inceleyeceğiz." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Bunu bildirdiğiniz için teşekkürler" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Bize bildirdiğiniz için teşekkür ederiz. Bu tek başına kurallarımızı ihlal etmiyor, bu yüzden rapor göndermedik." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Bize bildirdiğiniz için teşekkür ederiz. Bu tek başına kurallarımızı ihlal etmiyor, bu yüzden rapor göndermedik. Birini hedef alıyorsa veya aşağılayıcı ifadeler içeriyorsa, tekrar bildirin ve “Saldırgan veya zararlı içerik” seçeneğini seçin." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "İşlem başarısız oldu. Tekrar deneyin veya iptal edin." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Geçerli bir renk gibi görünmüyor. Hex, rgb(), hsl() veya bir CSS renk adı deneyin." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Geçerli bir URL gibi görünmüyor." @@ -35104,6 +34653,11 @@ msgstr "Diğer cihazınızdaki {PRODUCT_NAME} uygulaması, başka bir cihazda ot msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} uygulamasına giriş yapılmamıştı. Bu sekmeyi kapatabilirsiniz." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName} güvenlik ekibi raporunuzu inceleyecek. Raporun sizden geldiğini belli etmeyeceğiz." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Sağlanan redirect_uri bu uygulama için kayıtlı değil." msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Sağlanan redirect_uri HTTP veya HTTPS kullanmalıdır." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Rapor formu değişti. Lütfen yeniden başlayın." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Bu kurulumdaki kullanıcı adı etiketleri zaten ayarlanmış. Artık değiştirilemezler." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Doğrulama kodu geçersiz veya süresi dolmuş." @@ -36115,13 +35674,8 @@ msgstr "Bu üye artık sesli sohbete bağlı değil." msgid "This message can only be forwarded to age-restricted channels" msgstr "Bu mesaj yalnızca yaş kısıtlaması olan kanallara iletilebilir" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Bu mesaj zaten silinmiş." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Bu ileti zaten yayınlandı" @@ -36279,11 +35833,6 @@ msgstr "Bu başlık kapatıldı. Mesaj göndermek onu tekrar açacaktır." msgid "This thread is locked. Only moderators can send messages." msgstr "Bu başlık kilitlendi. Yalnızca moderatörler mesaj gönderebilir." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "bu kullanıcı" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Bu kullanıcı profilini sınırladı. Bazı ayrıntılar arkadaşı olmayan kişilerden gizlenir." @@ -36292,11 +35841,6 @@ msgstr "Bu kullanıcı profilini sınırladı. Bazı ayrıntılar arkadaşı olm msgid "This user has no roles in this community." msgstr "Bu kullanıcının bu toplulukta hiçbir rolü yok." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Bu kullanıcı topluluktan zaten yasaklanmış." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Bu kullanıcı artık mevcut değil." @@ -36465,16 +36009,6 @@ msgstr "Konu güncellendi" msgid "Threads" msgstr "Konular" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Tehditler, alanlar arası takip veya istenmeyen iletişim." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Tehdit, taciz veya zarar verme" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "{targetUserTag} kullanıcısına zaman aşımı uygulandı" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Zaman aşımı uygula" @@ -36787,6 +36321,11 @@ msgstr "Ton" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "HDR görüntüleri standart aralığa ton eşleyerek en yüksek parlaklığı azaltın." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Çok fazla kod gönderildi. {duration} bekleyip tekrar deneyin." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Topluluk sahipliğini devret" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Grup sahipliği {userName} adlı kişiye devredilsin mi?" @@ -37561,7 +37100,7 @@ msgstr "Arkadaşlık isteği göndermek için önce engeli kaldırın." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Kullanıcının engelini kaldır" @@ -37607,16 +37146,6 @@ msgstr "Tüm cihazlarda sağırlaştırmayı kaldır" msgid "Undeafen yourself" msgstr "Kendi sağırlaştırmanı kaldır" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Reşit olmama veya çocuk güvenliği endişesi" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Reşit olmayan kullanıcı" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Ben tekrar açana kadar" msgid "Unverified email" msgstr "Doğrulanmamış e-posta" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Yanlış yerde istenmeyen davranış veya yetişkinlere yönelik içerik." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "İstenmeyen yetişkin içerikli davranış, yorum veya istekler." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "En fazla {DISCOVERY_MAX_TAGS} etiket, insanların topluluğunuzu bulmasına yardımcı olur. Keşfet aramasında görünürler." @@ -38840,11 +38359,6 @@ msgstr "Açık tema kullan" msgid "Use native title bar" msgstr "Yerel başlık çubuğunu kullan" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Yalnızca {productName} kurallarını açıkça ihlal ediyorsa ve yukarıdakilere uymuyorsa kullanın." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Yalnızca bu toplulukta kullanılır." msgid "User" msgstr "Kullanıcı" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Kullanıcı reşit görünmüyor ya da çocukları istismara hazırlama (grooming) veya çocuk istismarıyla bağlantılı." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Kullanıcı hata ayıklaması" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "Kullanıcı kimliği (isteğe bağlı)" @@ -39061,12 +38570,12 @@ msgstr "Kullanıcı bulunamadı" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Kullanıcı profili" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Kullanıcı profili: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Kullanıcı ayarları" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Kullanıcı etiketi (isteğe bağlı)" @@ -39339,7 +38848,7 @@ msgstr "Onaylı topluluk" msgid "Verify" msgstr "Doğrula" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Kodu doğrula" @@ -39368,7 +38877,7 @@ msgstr "Kimliğinizi doğrulayın" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "E-postanızı doğrulayın" @@ -39718,7 +39227,7 @@ msgstr "Kodları görüntüle" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Topluluk profilini görüntüle" @@ -39751,7 +39260,7 @@ msgstr "Hediyeleri görüntüle" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Genel profili görüntüle" @@ -39847,26 +39356,6 @@ msgstr "İzleyici yayına katıldı" msgid "Viewer leaves stream" msgstr "İzleyici yayından ayrıldı" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "İhlal kategorisi" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "İhlal, belirli bir mesajda değil, kullanıcının profilinde." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Şiddet veya şiddet tehditleri" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Şiddet içeren veya rahatsız edici içerik" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Bu emojiyi 128x128 piksele yeniden boyutlandırıp sıkıştırdık, anc msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Bu çıkartmayı 320x320 piksele yeniden boyutlandırıp sıkıştırdık ancak boyutu hâlâ {fileSize}. Limit {maxSize}. Daha basit bir görsel, daha az renk veya daha küçük bir kaynak dosya deneyin." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "{email} adresine bir kod gönderdik." @@ -40472,7 +39961,7 @@ msgstr "Bunu en kısa sürede işleme alacağız. Arşiviniz hazır olduğunda b msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Eski e-postanızı geri yükleyeceğiz, eski oturumları kapatacağız, MFA'yı devre dışı bırakacağız ve hesabınızı yeni bir şifreyle güvence altına alacağız." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Bu raporla ilgili güncellemeleri alabileceğinizi doğrulamak için size kısa bir kod göndereceğiz." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Batı Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Ne tür bir kural ihlal edildi?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Neler oluyor?" msgid "What's new" msgstr "Yenilikler" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Raporunuzun nedeni nedir?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Özel bir eşik tarihi ayarlanmadığında, <0>{readMessageHistoryPermissionLabel} iznine sahip olmayan üyeler geçmiş mesajları görüntüleyemez. Yalnızca gerçek zamanlı olarak gelen mesajları görürler ve istemcilerini yeniden başlattıklarında bu mesajlar kaybolur." @@ -40832,11 +40321,6 @@ msgstr "Hangi topluluklar" msgid "Which conversations" msgstr "Hangi sohbetler" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Hangi kural ihlal edildi?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Bas konuş açıkken kısayolunuz mikrofonunuzu kontrol eder, bu yüzden sesi kapatma düğmesi devre dışı olur." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Bu kanalda dosya ekleyemezsiniz." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Kendinizle arkadaş olamazsınız" @@ -41341,7 +40825,7 @@ msgstr "Bu kullanıcıya mesaj gönderemezsiniz" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Hesap oluşturmak için hizmet şartlarını kabul etmelisiniz" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Rapor göndermeden önce e-postanızı doğrulamanız gerekir." @@ -41891,6 +41375,11 @@ msgstr "Eski bir fiyattan yararlanıyorsunuz. Bu planın güncel fiyatı {curren msgid "You're sending messages too quickly" msgstr "Çok hızlı mesaj gönderiyorsunuz" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Çok hızlı rapor gönderiyorsunuz. Daha sonra tekrar deneyin." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Eski mesajları görüntülüyorsunuz" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Grup DM'lerinin izin verdiğinden daha fazla kişi eklediniz. Birkaç kişiyi çıkarıp tekrar deneyin." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Bu mesajı zaten bildirdiniz." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Bu profili bugün zaten bildirdiniz." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Hesaplarınız ve ayarlarınız değiştirilmedi veya silinmedi." msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "İşleminiz güvenlik sistemlerimiz tarafından işaretlendiği için tamamlanamadı. Bunun bir hata olduğunu düşünüyorsanız lütfen destek ekibiyle iletişime geçin." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Yanıtlarınız" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Başvurunuz incelenmeyi bekliyor. İlan ayrıntılarınızı yine de güncelleyebilir veya başvuruyu geri çekebilirsiniz." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Tarayıcınız, ses çalınabilmesi için önce kullanıcı etkileşimi gerektiriyor. Sesli sohbeti etkinleştirmek için aşağıdaki düğmeye tıklayın." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Yaptığınız değişiklikler bu kanalı takip eden tüm topluluklara ulaşacaktır, bu biraz zaman alabilir. Yayınlanan her mesaj için 3 hızlı düzenleme hakkınız vardır, sonrasında her 20 dakikada bir düzenleme yapabilirsiniz." @@ -42311,6 +41815,11 @@ msgstr "Yeni takma adınız veya sıfırlamak için boş bırakın." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Eski kurtarma kitiniz artık çalışmıyor. Bu yeni kiti güvenli bir yere saklayın." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Seçenekleriniz" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "bölgeniz" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Yenileme ödemeniz başarısız oldu ancak <0/> <1>{graceDate} tarihine kadar aktif kalacak. Aboneliğinizi korumak için bu tarihten önce ödeme yönteminizi güncelleyin." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Raporunuz gönderilemedi. Tekrar deneyin." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Aboneliğiniz bir sonraki yenilemede yıllık faturalandırmaya geçecek msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "Tema CSS'iniz paylaşılamayacak kadar büyük. Kısaltıp tekrar deneyin." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Kullanıcı adınız (isteğe bağlı)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index c7f529dcc..334dd6849 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -2081,7 +2081,7 @@ msgstr "Залишилося {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {учасник} few {учасники} many {учасників} other {учасників}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {Ваше посилання-запрошення дійсне ще # секунду.} few {Ваше посилання-запрошення дійсне ще # секунди.} many {Ваше посилання-запрошення дійсне ще # секунд.} other {Ваше посилання-запрошення дійсне ще # секунди.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Вибрано: {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Дані облікового запису" msgid "Account details unavailable" msgstr "Відомості про обліковий запис недоступні" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Обліковий запис створено для розсилання спаму, шахрайства або зловживання платформою." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Додано: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Додано: {createdDate} • востаннє використано: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Додаткові коментарі (необов'язково)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Уже активовано" msgid "Already set to cancel" msgstr "Скасування вже заплановано" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Також поскаржитися на це повідомлення команді безпеки {productName}" @@ -4576,11 +4566,6 @@ msgstr "Річна" msgid "Another checkbox" msgstr "Інший прапорець" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Ще одне явне порушення правил" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Ще один круглий прапорець" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Завантаження аудіо" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Австрія" @@ -5620,6 +5605,7 @@ msgstr "Зараз відсутній(-я)" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Зараз відсутній(-я)" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Назад" @@ -5788,9 +5775,7 @@ msgstr "Резервні коди оновлено" msgid "Badge" msgstr "Значок" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Заблокувати" @@ -5819,7 +5804,7 @@ msgstr "Тривалість блокування" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Блокувати учасників спільноти з можлив msgid "Ban reason" msgstr "Причина блокування" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Заблокувати цього користувача" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Пропускна здатність" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Заблоковано" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "{targetUserTag} заблоковано в спільноті" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "До дати" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Бельгія" @@ -6031,7 +6006,7 @@ msgstr "Бітрейт" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Заблокувати" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Блокувати" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Заблокувати {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Блокувати в усіх спільнотах" msgid "Block spoiler" msgstr "Блоковий спойлер" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Заблокувати цього користувача" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Заблокувати користувача" msgid "Blocked" msgstr "Заблоковані" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Заблоковано" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Вбудовані перекладачі" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Болгарія" @@ -6519,16 +6500,6 @@ msgstr "Болгарська" msgid "Bulk delete" msgstr "Масове видалення" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Булінг, небажані повторювані контакти, переслідування або цілеспрямовані образи." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Булінг, погрози, ненависть, насильство, рейди або контент, що спонукає до самоушкодження." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "Каліфорнія" msgid "Call" msgstr "Дзвінок" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Налаштування дзвінків і групових чатів" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Змінити банер" msgid "Change chat embed background" msgstr "Змінити фон для вбудованого чату" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Змінити електронну адресу" @@ -7150,8 +7116,8 @@ msgstr "Змінити псевдонім друга" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Змінити псевдонім у групі" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Змінити мову" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Змінити мій псевдонім у групі" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Змінити власний псевдонім" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Змінити власника" @@ -7283,16 +7249,6 @@ msgstr "Змінити голосовий регіон для голосовог msgid "Change which voice region this channel uses." msgstr "Змінити голосовий регіон для цього каналу." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Змінити, хто може вам дзвонити або додавати вас." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Змінити, хто може з вами зв'язуватися." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Перевірте свою поштову скриньку за адр msgid "Check your inbox for a verification email." msgstr "Перевірте свою поштову скриньку на наявність листа з підтвердженням." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Перевірте свою скаргу" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Прапорці" @@ -7901,21 +7862,6 @@ msgstr "Оформлення замовлення заблоковано для msgid "Checkout unavailable" msgstr "Оформлення замовлення недоступне" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Проблеми з безпекою дітей" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "Безпека дітей або експлуатація неповнолітніх" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "Безпека дітей або контент для дорослих" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Варіанти" msgid "Choices: {choiceList}" msgstr "Варіанти: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Вибір" @@ -8122,6 +8068,11 @@ msgstr "Виберіть категорію, яка найкраще опису msgid "Choose the premium model" msgstr "Виберіть преміум-модель" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Вибрати причину знову" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Отримати подарунок" msgid "Claim your account" msgstr "Зареєструйте свій обліковий запис" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Щоб надсилати скарги, зареєструйте свій обліковий запис і підтвердьте електронну пошту." @@ -8352,12 +8303,12 @@ msgstr "Щоб активувати цей подарунок, зареєстр #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Зареєструйте свій обліковий запис, щоб надсилати запити на додавання в друзі." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Підтвердьте свій обліковий запис, щоб надсилати звіти." @@ -8378,11 +8329,6 @@ msgstr "Зареєструйте свій обліковий запис, щоб msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Отримайте подарунок, щоб активувати підписку {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Видавання себе за іншу особу, бренд чи організацію." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Очистити поле пошуку" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Закрити вікно" msgid "Close popout" msgstr "Закрити спливаюче вікно" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Закрити цей приватний чат" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Закривати в трей" msgid "Close window" msgstr "Закрити вікно" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Закрийте поточний приватний чат із {dmDisplayName}. Це не заблокує користувача, і ви зможете знову відкрити чат пізніше." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Закрити приватний чат із {displayName}? Ви можете відкрити його будь-коли." @@ -8837,7 +8773,7 @@ msgstr "Тема «Вугілля»" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Код" @@ -8868,7 +8804,7 @@ msgstr "Код із програми {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Код надіслано повторно" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Спільноти, до яких ви можете приєднатися" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Спільнота" @@ -9131,7 +9065,7 @@ msgstr "Вимкнути звук у спільноті" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Налагодження спільноти" @@ -9150,16 +9084,6 @@ msgstr "Спільноту видалено" msgid "Community DM" msgstr "Особисті повідомлення спільноти" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Спільнота існує для спаму, шахрайства або зловживання платформою." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Спільнота сприяє цькуванню або цілеспрямованим образам." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Іконка спільноти" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "Ідентифікатор спільноти" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Потрібен ідентифікатор спільноти." @@ -9526,6 +9450,11 @@ msgstr "Підтвердьте новий пароль" msgid "Confirm password" msgstr "Підтвердьте пароль" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Підтвердьте заяву, щоб надіслати скаргу." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Продовжити в браузері" msgid "Continue to checkout" msgstr "Продовжити до оформлення замовлення" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Продовжити скаргу на спільноту" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Продовжити скаргу на користувача" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Перетворення цього каналу на текстовий msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Перетворює вхідний вміст на мовлення, незалежно від того, чи надійшов він з /tts." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Координує рейди, масові нападки або переслідування людей чи спільнот." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "URL скопійовано в буфер обміну" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "URL скопійовано в буфер обміну" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Копіювати ID повідомлення" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Копіювати посилання на повідомлення" @@ -10643,6 +10553,11 @@ msgstr "Не вдалося завантажити дописи. Спробуй msgid "Couldn't load settings" msgstr "Не вдалося завантажити налаштування" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Не вдалося завантажити форму скарги." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Не вдалося завантажити цей застосунок" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Не вдалося обробити зображення" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Не вдалося опублікувати це повідомлення" @@ -10825,11 +10740,6 @@ msgstr "Не вдалося надіслати запрошення" msgid "Couldn't send invite. Try again." msgstr "Не вдалося надіслати запрошення. Спробуйте ще раз." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Не вдалося надіслати. Спробуйте ще раз." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Таймер зворотного відліку" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Країна проживання" @@ -11301,13 +11211,8 @@ msgstr "Створено:" msgid "Credentials" msgstr "Облікові дані" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Реальні погрози, відверті сцени насильства або його прославляння." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Хорватія" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Зрізає звук нижче порогу гучності з мінімальним навантаженням на процесор." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Кіпр" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Чеська" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Чехія" @@ -11965,7 +11870,7 @@ msgstr "Налагодження каналу" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Налагодження спільноти" @@ -12151,7 +12056,6 @@ msgstr "Делавер" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Делавер" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Видалити тему?" msgid "Delete this invite? Can't be undone." msgstr "Видалити це запрошення? Цю дію не можна скасувати." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Видалити це повідомлення" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Видалити це повідомлення? Цю дію не можна скасувати." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Видалити це повідомлення? Це неможливо скасувати. Повідомлення також буде видалено з усіх спільнот, які підписані на цей канал." @@ -12461,11 +12359,6 @@ msgstr "Видалити ваші повідомлення в цій спіль msgid "Delete your messages in this conversation?" msgstr "Видалити ваші повідомлення в цій розмові?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Видалено" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Заборонено {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Данія" @@ -12554,11 +12447,6 @@ msgstr "Опишіть стікер" msgid "Describe this media for screen readers" msgstr "Опишіть цей медіафайл для програм читання з екрана" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Опишіть, чому цей вміст є незаконним" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Окремий банер" msgid "Detail" msgstr "Деталізація" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Деталі" @@ -13315,11 +13203,6 @@ msgstr "Ім'я для відображення (необов'язково)" msgid "Display scaling" msgstr "Масштабування екрана" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Поширює шкідливі програми, інструменти для викрадення облікових даних або інші шкідливі файли." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "ПЧ" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Налаштування особистих повідомлень і запитів на додавання в друзі" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Документація" msgid "Doesn't allow being added to group DMs" msgstr "Не можна додати до групових чатів" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Не блокує. Можна відкрити знову пізніше." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Зробити внесок замість цього" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Завантажувати вихідні карти, щоб трасу msgid "Download video" msgstr "Завантажити відео" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Доксинг, розкриття приватної інформації або переслідування." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Доксинг, переслідування, видавання себе за іншу особу або неприйнятний профіль." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Редагувати колір для {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Редагувати профіль спільноти" @@ -14043,7 +13908,7 @@ msgstr "Редагувати перевизначення дозволів дл #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Редагувати профіль" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Змінити місцевий час профілю" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Редагувати опубліковане повідомлення?" @@ -14191,13 +14056,13 @@ msgstr "Маєте право на відшкодування до {windowEndsOn #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Електронна пошта" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Електронна адреса" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Потрібна електронна адреса." @@ -14721,16 +14586,6 @@ msgstr "Вибір кодувальника для нових демонстра msgid "Encoder, SVC, and bitrate presets" msgstr "Кодувальник, SVC та попередні налаштування бітрейту" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Закликає до самоушкодження" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Пропагує самогубство, самоушкодження або розлади харчової поведінки." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Наскрізне шифрування недоступне, оскіл msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Наскрізне шифрування недоступне, оскільки в цьому голосовому каналі є учасник, який його не підтримує." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Загрожує неповнолітнім або містить матеріали з експлуатацією дітей." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Введіть код у форматі ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Введіть дійсну URL-адресу або код шаблону {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Введіть дійсну адресу електронної пошти." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Введіть дійсне посилання на повідомлення." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Введіть {digitCount}-значний код із застосунку автентифікації." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Введіть код, перш ніж продовжити." @@ -15008,7 +14858,7 @@ msgstr "натисніть Enter, щоб <0><1>зберегти" msgid "Enter username" msgstr "Введіть ім'я користувача" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Введіть код підтвердження" @@ -15017,6 +14867,11 @@ msgstr "Введіть код підтвердження" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Введіть свою електронну адресу, і ми надішлемо вам посилання для скидання пароля." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Введіть повне ім'я за документами, щоб надіслати скаргу." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "натисніть Esc, щоб <0><1>скасувати" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Естонія" @@ -15412,6 +15267,16 @@ msgstr "Термін дії закінчується {earliest}" msgid "Expires:" msgstr "Закінчується:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Поясніть проблему" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Поясніть проблему, щоб надіслати скаргу." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Зовнішні посилання можуть бути небезпе msgid "Extra large" msgstr "Дуже великий" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Екстремістська спільнота" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Не вдалося видалити персоналізовану URL-адресу. Спробуйте ще раз." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Не вдалося повторно надіслати код. Спробуйте ще раз." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Не вдалося скинути преміум-статус." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Не вдалося надіслати код. Спробуйте ще раз." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Не вдалося надіслати повідомлення. Натисніть і утримуйте, щоб переглянути опції." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Не вдалося надіслати скаргу. Спробуйте ще раз." @@ -15840,11 +15700,6 @@ msgstr "Не вдалося завантажити емоджі, починаю msgid "Failed to upload emojis. Try again." msgstr "Не вдалося завантажити емоджі. Спробуйте ще раз." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Неправдиві заяви, що можуть завдати реальної шкоди." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Знайдіть ідеальний стікер" msgid "Fingerprint" msgstr "Відбиток пальця" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Завершити налаштування облікового запису" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Спершу завершіть налаштування облікового запису" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Завершіть реєстрацію, щоб надсилати запити на додавання в друзі." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Фінляндія" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Фінська" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Ім'я та прізвище" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Для частоти кадрів понад 30 FPS потрібен {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Франція" @@ -16834,10 +16689,10 @@ msgstr "Повний" msgid "Full dynamic range" msgstr "Повний динамічний діапазон" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Повне ім'я за документами" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Повне ім'я за документами (необов'язково для скарг на сексуальне насильство над дітьми)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Німецька" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Німеччина" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Назад" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Поверніться та введіть дійсну електронну адресу." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Раді вас бачити, {username}! Ласкаво просимо." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Греція" @@ -17572,11 +17427,6 @@ msgstr "Грецька" msgid "Grid view" msgstr "Вигляд сіткою" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Матеріали, що стосуються грумінгу або експлуатації дітей." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Ім'я користувача" msgid "Hang out with voice, video and screen share" msgstr "Спілкуйтеся голосом, відео та діліться екраном" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Переслідування" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Домагання, що містить контент для дорослих" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Переслідування або булінг" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Переслідування або сталкінг" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Переслідування або цілеспрямовані образи" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Переслідування або погрози" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Апаратний ключ" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Апаратне прискорення на більшості систем Windows і macOS. Надійно для старих пристроїв." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Шкідлива дезінформація" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Коли-небудь купував" msgid "Has ever purchased override" msgstr "Коли-небудь купував (перевизначити)" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Мова ворожнечі" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Сховати демонстрацію свого екрана?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Приховує кнопки завантаження, відкриття у браузері та копіювання для зображень і відео в цьому каналі." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Приховує їхні повідомлення та забороняє надсилати вам особисті повідомлення" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Угорська" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Угорщина" @@ -18399,6 +18212,11 @@ msgstr "Я — підказка" msgid "I changed my mind" msgstr "Я передумав(-ла)" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Я добросовісно підтверджую, що відомості та твердження, наведені в цій скарзі, є точними та повними." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Налаштування неактивності" msgid "Idle timeout" msgstr "Час очікування неактивності" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Якщо йдеться про неповнолітнього, натомість використайте «{childSafetyReasonName}»." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Якщо обліковий запис використовує цю а msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Якщо macOS попросить перезапустити {productName}, виберіть «Пізніше»." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Якщо хтось у безпосередній небезпеці, зверніться до місцевих екстрених служб, якщо це можна зробити безпечно." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Якщо хтось перебуває в безпосередній небезпеці, спершу зверніться до місцевих екстрених служб." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Якщо хтось попросив вас вставити щось сюди, це шахрайство, яке може надати їм доступ до вашого облікового запису {productName}." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Якщо це стосується матеріалів із сексуальним насильством над дітьми або експлуатації неповнолітніх, надішліть скаргу зараз і не поширюйте матеріал повторно." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Якщо це реальна неминуча загроза, також зверніться до місцевих екстрених служб." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Якщо це неминуча терористична загроза, також зверніться до місцевих екстрених служб." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Якщо скарга стосується певного повідомлення в цій спільноті, надішліть скаргу на це повідомлення. Скарги на повідомлення надають нашій команді безпеки найчіткіший контекст, а додавання деталей у коментарях може пришвидшити розгляд. Продовжуйте скаржитися на спільноту в цілому, лише якщо скарга на повідомлення не охоплює ширшу проблему." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Якщо скарга стосується конкретного повідомлення, поскаржтеся на нього. Скарги на повідомлення надають нашій команді безпеки найчіткіший контекст, а додавання деталей у коментарях може пришвидшити розгляд. Продовжуйте скаржитися на користувача в цілому, лише якщо повідомлення не відображає ширшої проблеми." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Якщо скарга стосується конкретних повідомлень, надішліть скаргу на найрелевантніше повідомлення. Скарга на повідомлення надає нашій команді безпеки найчіткіший контекст, а додавання деталей у коментарях може пришвидшити розгляд. Продовжуйте скаржитися на користувача в цілому, лише якщо скарга на повідомлення не охоплює ширшої проблеми." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Якщо ви вважаєте, що це незаконно, вкажіть, який закон порушено і чому." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Ігнорувати обмеження повільного режим msgid "Ignore virtual" msgstr "Ігнорувати віртуальні" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Незаконна діяльність" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Незаконна діяльність або інше" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Незаконний продаж, сприяння злочинності або явне порушення правил, що не підпадає під інші категорії." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Незаконний продаж, сприяння злочинності або протиправна діяльність." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Зображення" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Зображення, вставлені з буфера обміну, надсилаються як вкладення, а у вас немає дозволу на прикріплення файлів у цьому каналі." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Видавання себе за іншу особу" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Видавання себе за іншу особу або оманливі медіа" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Неактивний" msgid "Inactive timeout" msgstr "Час очікування бездіяльності" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Неприйнятний профіль" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Додати мої резервні коди двофакторної автентифікації до PDF та роздруківки" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Вкажіть ідентифікатор спільноти." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Фон запрошення" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Код запрошення (необов'язково)" @@ -19471,7 +19220,7 @@ msgstr "Маскування запрошень" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Запросити учасників" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP-адресу авторизовано" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ірландія" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Курсив" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Італія" @@ -20120,7 +19869,7 @@ msgstr "Клавіші" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Пізніше" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Латвія" @@ -20291,11 +20040,6 @@ msgstr "Докладніше" msgid "Learn more about Visionary" msgstr "Дізнайтеся більше про Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Вийти" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Вийти з приватного обговорення" msgid "Leave silently" msgstr "Вийти без сповіщення" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Вийти зі спільноти" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Показує учасників із цією роллю в окремому розділі списку учасників." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Литва" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Завантаження..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Завантаження…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Низький" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Люксембург" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Заплановано технічне обслуговування на {localizedTime}. Очікувана тривалість: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Зробити {userName} власником групи? Ви втратите права власника." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Зробити власником групи" @@ -21091,38 +20830,21 @@ msgstr "Зробити власником групи" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Переконайтеся, що цей код збігається з кодом у програмі {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Переконайтеся, що все виглядає правильно, перш ніж надіслати." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Зробіть екземпляр своїм" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Шкідливі посилання" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Мальта" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Розповсюдження шкідливого ПЗ" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Шкідливе ПЗ або небезпечні посилання" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Шкідливе програмне забезпечення, крадіжка облікових даних або небезпечні файли." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Приховати особисті дані перед демонстр msgid "Mask Visionary as subscription" msgstr "Маскувати Visionary як підписку" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Масовий спам, шахрайство, фейкові розіграші або неправомірне використання облікового запису." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Блокування медіа з контентом для дорос msgid "Mature content not allowed" msgstr "Контент для дорослих заборонено" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Контент для дорослих або домагання" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Контент для дорослих або неналежне обмеження доступу" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Перевизначення контенту для дорослих" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Порушення політики щодо контенту для дорослих" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Контент для дорослих без належного обмеження доступу." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Повідомлення" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "посилання на повідомлення" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Посилання на повідомлення" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Попередній перегляд повідомлень у списку приватних чатів" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Повідомлення опубліковано" @@ -22211,6 +21908,11 @@ msgstr "Час повідомлення" msgid "Message unpinned" msgstr "Повідомлення відкріплено" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Повідомлення, на яке ви скаржитеся" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Міннесота" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Неповнолітні в небезпеці, контент для дорослих не в тому місці або небажана поведінка." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Більше" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Більше дій" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Вкладений" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Нідерланди" @@ -24099,7 +23796,7 @@ msgstr "Немає результатів" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Нічого не знайдено" @@ -24858,6 +24555,16 @@ msgstr "Цей тред можуть бачити лише запрошені в msgid "Only places I can't access anymore" msgstr "Лише місця, до яких я більше не маю доступу" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Скаржтеся лише на те, що, на вашу щиру думку, порушує правила, і, будь ласка, не надсилайте одну й ту саму скаргу двічі." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Скаржтеся лише на те, що, на вашу щиру думку, порушує правила. Зловживання скаргами суперечить нашим <0>правилам спільноти." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Непрозорість" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Відкрити на {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Відкрити спадний список" @@ -25379,11 +25084,6 @@ msgstr "Відкрийте «Системні параметри» → «Кон msgid "Open template JSON" msgstr "Відкрити JSON шаблону" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Відкрити діалог блокування для цієї спільноти." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Відкрийте налаштування" msgid "Opened the thread again" msgstr "Знову відкрили гілку" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Відкривається в новій вкладці" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Початково заблоковано {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Інше" @@ -25654,11 +25357,6 @@ msgstr "Інша реакція…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Наша команда безпеки перевіряє це. Ми надішлемо вам особисте повідомлення та електронний лист, щойно винесемо рішення." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Наразі не вдалося передати право власності користувачу <0>{username}." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Право власності передано" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Вставте сюди відповідь JSON" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Вставте посилання на повідомлення." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Фішинг, шахрайство, шкідливі посилання або неправдиві твердження, що можуть завдати реальної шкоди." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Виберіть постачальника вебпошуку" msgid "Pick an emoji" msgstr "Виберіть емодзі" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Виберіть варіант, щоб продовжити." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Виберіть 4-значний номер після вашого і msgid "Pick the appearance this administrator account should start with." msgstr "Виберіть зовнішній вигляд, з яким цей обліковий запис адміністратора має розпочати роботу." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Виберіть правило для перегляду." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Зачекайте трохи й спробуйте перейменувати ще раз." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Польща" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Порт" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Португалія" @@ -26872,11 +26555,6 @@ msgstr "натисніть, щоб додати реакцію" msgid "press to remove reaction" msgstr "натисніть, щоб видалити реакцію" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Видавання себе за іншу особу, включно з оманливим контентом, згенерованим ШІ." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Заборонити <0>{targetUserTag} надсилати повідомлення, реагувати та підключатися до голосових каналів на вказаний час." @@ -27078,11 +26756,6 @@ msgstr "Пріоритетний мовець" msgid "Privacy" msgstr "Приватність" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Конфіденційність або видавання себе за іншу особу" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Налаштування конфіденційності" msgid "Privacy URL" msgstr "URL політики конфіденційності" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Порушення конфіденційності" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Порушення конфіденційності або доксинг" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Порушення конфіденційності або переслідування" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Тип профілю" msgid "Profile updated" msgstr "Профіль оновлено" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Порушення профілю, імені користувача або аватара" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Пропагує ненависть до захищених груп." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Пропагує, вербує або координує насильницьку екстремістську діяльність." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Просування або інструкції, що заохочують до самоушкодження чи розладів харчової поведінки." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Профіль, на який ви скаржитеся" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Займенники: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Захистіть свій обліковий запис Visionary, увімкнувши двофакторну автентифікацію. Дякуємо за підтримку {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Вкажіть принаймні ID користувача або тег користувача." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Введіть ID користувача або ім'я користувача особи, на яку ви скаржитеся." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Вкажіть своє повне ім'я за документами для декларації." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Перемикачі дозволяють вибрати один вар msgid "Radio group" msgstr "Група перемикачів" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Координація рейду" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Готові купити подарунок?" msgid "Ready to upgrade?" msgstr "Готові оновити?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Причина" @@ -28291,8 +27924,8 @@ msgstr "Запам'ятати розмір і розташування вікн #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Видалити {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Видалити {userName} з групи?" @@ -28419,8 +28052,8 @@ msgstr "Видалити з вибраного" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Видалити з групи" @@ -28458,11 +28091,6 @@ msgstr "Видалити з вибраних GIF за URL-адресою" msgid "Remove icon" msgstr "Видалити іконку" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Видалити його з каналу для всіх." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Видалено з вибраного" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Видалено з групи" @@ -28919,28 +28547,18 @@ msgstr "Поскаржитися на спільноту" msgid "Report a message" msgstr "Поскаржитися на повідомлення" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Поскаржитися на порушення правил або знайти інструменти для керування спілкуванням і налаштуваннями." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Поскаржитися на профіль користувача" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Поскаржитися на спільноту" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Деталі скарги" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Скарга на незаконний вміст" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Повідомити про проблему" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Поскаржитися на повідомлення" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Поскаржитися на профіль" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Скаргу надіслано" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Тип скарги" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Поскаржитися на користувача" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Тег користувача, на якого надіслано скаргу (необов'язково)" @@ -29100,6 +28716,10 @@ msgstr "Потрібні всі вимоги рівня «Середній», а msgid "Resend" msgstr "Надіслати повторно" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Надіслати повторно ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Надіслати повторно ({newSecondsRemaining} с)" @@ -29108,7 +28728,7 @@ msgstr "Надіслати повторно ({newSecondsRemaining} с)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Надіслати повторно ({originalSecondsRemaining} с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Надіслати повторно ({resendCooldownSeconds} с)" @@ -29122,7 +28742,7 @@ msgstr "Надіслати повторно ({resendSecondsRemaining} с)" msgid "Resend ({secondsRemaining}s)" msgstr "Надіслати повторно ({secondsRemaining} с)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Надіслати код повторно" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Ролі успішно оновлено" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Румунія" @@ -29947,7 +29567,7 @@ msgstr "Насиченість" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Привітайтеся з <0>{displayName}. Ваш приватн msgid "Scale" msgstr "Масштаб" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Шахрайство, шкідливе ПЗ або дезінформація" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Відскануйте QR-код за допомогою застосунку для автентифікації." @@ -30855,11 +30470,6 @@ msgstr "Вибрати" msgid "Select {accessibleName}" msgstr "Виберіть {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Виберіть категорію" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Виберіть спільноту, де у вас є дозвіл «{permissionName}», або груповий чат, до якого ви належите." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Виберіть країну" @@ -30911,11 +30521,6 @@ msgstr "Виберіть URI переспрямування" msgid "Select a scenario to apply..." msgstr "Виберіть сценарій для застосування..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Виберіть категорію порушення." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Виберіть обліковий запис, за допомогою msgid "Select voice processing mode" msgstr "Виберіть режим обробки голосу" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Виберіть, на що ви хочете поскаржитися." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Виберіть країну проживання." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Вибрати…" @@ -31037,13 +30642,6 @@ msgstr "Виділення: {0} (макс. {1})" msgid "Selections" msgstr "Елементи вибору" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Заподіяння собі шкоди або самогубство" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Надіслати повідомлення дії (відображає msgid "Send animation" msgstr "Надіслати анімацію" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Надіслати ще одну скаргу" @@ -31138,7 +30736,7 @@ msgstr "Кнопка надсилання" msgid "Send code" msgstr "Надіслати код" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Надіслати скаргу за DSA" @@ -31158,9 +30756,9 @@ msgstr "Надсилайте файли розміром до {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Надіслати запит на додавання в друзі" @@ -31220,8 +30818,8 @@ msgstr "Надсилати повідомлення в гілках" msgid "Send messages, images, GIFs and emoji" msgstr "Надсилайте повідомлення, зображення, GIF-файли та емодзі" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Надіслати скаргу" @@ -31255,7 +30853,7 @@ msgstr "Надіслати це закріплене повідомлення н msgid "Send TTS messages" msgstr "Надсилати TTS-повідомлення" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Надіслати код підтвердження" @@ -31273,11 +30871,6 @@ msgstr "Надіслати голосове повідомлення" msgid "Send:" msgstr "Надсилання:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Надсилання шкідливих програм або небезпечних посилань" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Поділитися темою" msgid "Share voice activity with all friends?" msgstr "Ділитися голосовою активністю з усіма друзями?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Поділіться тим, що потрібно нашій команді для оцінки." @@ -31709,11 +31302,6 @@ msgstr "Поділіться тим, що потрібно нашій коман msgid "Share with a friend" msgstr "Поділитися з другом" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Поділитися з модераторами спільноти." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Вікно демонстрації" msgid "Shared window audio" msgstr "Аудіо вікна демонстрації" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Поширює особисту інформацію, переслідує користувачів або координує порушення конфіденційності." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Поширення особистої інформації" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Повзунки" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Словаччина" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Словенія" @@ -32889,11 +32467,6 @@ msgstr "Симуляція повільного режиму" msgid "Slowmode time remaining" msgstr "Залишилося часу в повільному режимі" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Образливі прізвиська, дегуманізуючі висловлювання або нападки на захищені групи." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Щось пішло не так під час підготовки цього стікера. Спробуйте інший файл або повторіть спробу пізніше." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Виникла помилка під час публікації. Спробуйте ще раз за мить." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Просторий макет із чітким візуальним розділенням між повідомленнями." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Іспанія" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Спамерський обліковий запис" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Класифікація спаму" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Спам або шахрайство" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Спільнота для спаму або шахрайства" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Спам, шахрайство або фішинговий обліковий запис" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Спам, шахрайство або фішинг" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Розпочати згорнутим" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Почати спочатку" @@ -33752,22 +33302,26 @@ msgstr "Залишитися в системі" msgid "Step {current} of {total}" msgstr "Крок {current} з {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Крок 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Крок 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Крок 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Крок 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Крок 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Припинити бути каналом оголошень?" msgid "Stop hiding muted channels by default?" msgstr "Припинити приховувати канали з вимкненими сповіщеннями за замовчуванням?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Більше не отримувати повідомлення та запити на додавання в друзі." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Зупинити перевірку мікрофона" @@ -33959,11 +33508,6 @@ msgstr "Припинити патчити Node.prototype insertBefore та remov msgid "Stop ringing" msgstr "Зупинити дзвінок" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Більше не бачити його вміст і учасників." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Замінюйте звичайні текстові смайли, такі як :) і <3, на емоджі під час надсилання повідомлень" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Швеція" @@ -34804,11 +34348,6 @@ msgstr "Натисніть, щоб додати примітку" msgid "tar.gz archive" msgstr "Архів tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Спрямовано проти людей за захищеними ознаками." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Умови використання" msgid "Terms URL" msgstr "URL-адреса умов" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Тероризм або насильницький екстремізм" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Тайська" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Дякуємо, що допомагаєте зробити {productName} безпечним. Ми розглянемо вашу скаргу якомога швидше." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Дякуємо, що повідомили про це" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Дякуємо, що повідомили нам. Це саме по собі не порушує наших правил, тому ми не надіслали скаргу." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Дякуємо, що повідомили нам. Це саме по собі не порушує наших правил, тому ми не надіслали скаргу. Якщо це спрямовано на когось або містить образливі вислови, поскаржтеся ще раз і виберіть «Образливий або шкідливий вміст»." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Не вдалося. Спробуйте ще раз або скасуй msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Це не схоже на дійсний колір. Спробуйте шістнадцятковий код, rgb(), hsl() або назву кольору CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Це не схоже на дійсну URL-адресу." @@ -35104,6 +34653,11 @@ msgstr "Додаток {PRODUCT_NAME} на вашому іншому прист msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Додаток {PRODUCT_NAME} не було авторизовано. Ви можете закрити цю вкладку." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Команда безпеки {productName} розгляне вашу скаргу. Ми не розкриватимемо, що її надіслали ви." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "Наданий redirect_uri не зареєстровано для ць msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Наданий redirect_uri має використовувати HTTP або HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Форма скарги змінилася. Будь ласка, почніть спочатку." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Теги імен користувачів у цьому екземплярі вже налаштовані. Їх більше не можна змінити." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Код підтвердження недійсний або прострочений." @@ -36115,13 +35674,8 @@ msgstr "Цей учасник більше не підключений до го msgid "This message can only be forwarded to age-restricted channels" msgstr "Це повідомлення можна пересилати лише на канали з обмеженим доступом за віком" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Це повідомлення вже видалено." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Це повідомлення вже опубліковано" @@ -36279,11 +35833,6 @@ msgstr "Ця гілка закрита. Надсилання повідомле msgid "This thread is locked. Only moderators can send messages." msgstr "Цей тред заблоковано. Лише модератори можуть надсилати повідомлення." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "цей користувач" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Цей користувач обмежив свій профіль. Деякі деталі приховані від тих, хто не є його друзями." @@ -36292,11 +35841,6 @@ msgstr "Цей користувач обмежив свій профіль. Де msgid "This user has no roles in this community." msgstr "Цей користувач не має ролей у цій спільноті." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Цього користувача вже заблоковано в спільноті." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Цей користувач більше недоступний." @@ -36465,16 +36009,6 @@ msgstr "Потік оновлено" msgid "Threads" msgstr "Обговорення" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Погрози, стеження в різних місцях або небажані контакти." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Погрози, переслідування або заподіяння шкоди" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Застосовано тайм-аут до {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Тайм-аут" @@ -36787,6 +36321,11 @@ msgstr "Тон" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Перетворювати HDR-зображення у стандартний діапазон, зменшуючи пікову яскравість." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Надіслано забагато кодів. Зачекайте {duration} і спробуйте ще раз." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Передати право власності на спільноту" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Передати право власності на групу користувачу {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Щоб надіслати запит на додавання в друз #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Розблокувати користувача" @@ -37607,16 +37146,6 @@ msgstr "Увімкнути звук на всіх пристроях" msgid "Undeafen yourself" msgstr "Увімкнути звук для себе" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Неповнолітні або питання безпеки дітей" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Неповнолітній користувач" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Доки я не ввімкну знову" msgid "Unverified email" msgstr "Непідтверджена електронна пошта" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Небажана поведінка або контент для дорослих не в тому місці." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Небажана поведінка, коментарі чи запити дорослого характеру." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "До {DISCOVERY_MAX_TAGS} тегів допомагають людям знаходити вашу спільноту. Вони відображаються в пошуку Discovery." @@ -38840,11 +38359,6 @@ msgstr "Використовувати світлу тему" msgid "Use native title bar" msgstr "Використовувати стандартний рядок заголовка" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Використовуйте, лише якщо це чітко порушує правила {productName} і не підпадає під жодну з перелічених вище категорій." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Використовується лише в цій спільноті." msgid "User" msgstr "Користувач" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Користувач виглядає неповнолітнім або причетний до грумінгу чи експлуатації дітей." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Налагодження користувача" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID користувача (необов'язково)" @@ -39061,12 +38570,12 @@ msgstr "Користувача не знайдено" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Профіль користувача" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Профіль користувача: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Налаштування користувача" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Тег користувача (необов'язково)" @@ -39339,7 +38848,7 @@ msgstr "Верифікована спільнота" msgid "Verify" msgstr "Підтвердити" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Підтвердити код" @@ -39368,7 +38877,7 @@ msgstr "Підтвердьте, що це ви" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Підтвердьте свою електронну пошту" @@ -39718,7 +39227,7 @@ msgstr "Переглянути коди" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Переглянути профіль спільноти" @@ -39751,7 +39260,7 @@ msgstr "Переглянути подарунки" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Переглянути глобальний профіль" @@ -39847,26 +39356,6 @@ msgstr "Глядач приєднується до трансляції" msgid "Viewer leaves stream" msgstr "Глядач залишає трансляцію" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Категорія порушення" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Порушення в профілі користувача, а не в конкретному повідомленні." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Насильство або погрози насильством" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Насильницький або шокуючий контент" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Ми змінили розмір і стиснули цей емодзі msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Ми змінили розмір і стиснули цей стікер до 320x320 пікселів, але його розмір усе одно становить {fileSize}. Максимальний розмір: {maxSize}. Спробуйте простіше зображення, менше кольорів або менший вихідний файл." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Ми надіслали код на {email}." @@ -40472,7 +39961,7 @@ msgstr "Ми обробимо це якомога швидше. Ви отрим msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Ми відновимо вашу попередню електронну адресу, вийдемо з усіх старих сеансів, вимкнемо багатофакторну автентифікацію та захистимо ваш обліковий запис новим паролем." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Ми надішлемо короткий код, щоб підтвердити, що ви можете отримувати оновлення щодо цієї скарги." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Західна Вірджинія" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Яке правило було порушено?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Що відбувається?" msgid "What's new" msgstr "Що нового" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Яка причина вашої скарги?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Якщо власну порогову дату не встановлено, учасники без дозволу <0>{readMessageHistoryPermissionLabel} не бачать жодних минулих повідомлень. Вони бачитимуть повідомлення лише в реальному часі, коли ті надходять, і ці повідомлення зникнуть після перезапуску клієнта." @@ -40832,11 +40321,6 @@ msgstr "Які спільноти" msgid "Which conversations" msgstr "Які розмови" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Яке правило було порушено?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Коли ввімкнено режим «Натисни і говори», мікрофоном керує ваша комбінація клавіш, тому кнопка вимкнення мікрофона неактивна." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Ви не можете прикріплювати файли в цьому каналі." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Ви не можете додати себе в друзі" @@ -41341,7 +40825,7 @@ msgstr "Ви не можете надіслати повідомлення ць #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Ви повинні погодитися з умовами використання, щоб створити обліковий запис" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Щоб надіслати скаргу, потрібно підтвердити свою електронну пошту." @@ -41891,6 +41375,11 @@ msgstr "Ви користуєтеся застарілим тарифом. По msgid "You're sending messages too quickly" msgstr "Ви надто швидко надсилаєте повідомлення" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Ви надто швидко надсилаєте скарги. Спробуйте пізніше." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Ви переглядаєте старіші повідомлення" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Ви додали більше людей, ніж дозволено в груповому чаті. Видаліть кількох і спробуйте ще раз." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Ви вже скаржилися на це повідомлення." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Ви вже скаржилися на цей профіль сьогодні." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Ваші облікові записи та налаштування н msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Вашу дію не вдалося виконати, оскільки її позначено нашими системами безпеки. Якщо ви вважаєте, що це помилка, зверніться до служби підтримки." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Ваші відповіді" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Ваша заявка очікує на розгляд. Ви все ще можете оновити деталі оголошення або відкликати заявку." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Ваш браузер вимагає взаємодії з користувачем, перш ніж можна буде відтворити аудіо. Натисніть кнопку нижче, щоб увімкнути голосовий чат." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Ваші зміни надійдуть до всіх спільнот, які підписані на цей канал, що може зайняти хвилину. Кожне опубліковане повідомлення дозволяє 3 швидкі редагування, а потім по 1 кожні 20 хвилин." @@ -42311,6 +41815,11 @@ msgstr "Ваш новий псевдонім або залиште порожн msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Ваш старий набір для відновлення більше не працює. Зберігайте цей новий у безпечному місці." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Ваші варіанти" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "ваш регіон" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Платіж за поновлення не пройшов, але <0/> залишаються активними до <1>{graceDate}. Оновіть спосіб оплати до цієї дати, щоб зберегти підписку." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Вашу скаргу не вдалося надіслати. Спробуйте ще раз." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Ваша підписка перейде на річну оплату п msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS вашої теми завеликий, щоб ним ділитися. Зменште його та спробуйте ще раз." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Ваше ім'я користувача (необов'язково)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 7bde4dacf..bde4efdfd 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -2081,7 +2081,7 @@ msgstr "Còn lại {remainingSlotCount}" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {thành viên} other {thành viên}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, other {Liên kết mời của bạn sẽ hết hạn sau # giây.}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "Đã chọn {selectedCount}" @@ -2957,11 +2957,6 @@ msgstr "Dữ liệu tài khoản" msgid "Account details unavailable" msgstr "Thông tin tài khoản không khả dụng" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "Tài khoản này được tạo ra để gửi tin rác, lừa đảo hoặc lạm dụng nền tảng." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "Đã thêm: {createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "Đã thêm: {createdDate} • dùng lần cuối: {lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "Bình luận thêm (không bắt buộc)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "Đã đổi" msgid "Already set to cancel" msgstr "Đã đặt lịch hủy" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "Đồng thời báo cáo tin nhắn này cho Đội ngũ an toàn của {productName}" @@ -4576,11 +4566,6 @@ msgstr "Hằng năm" msgid "Another checkbox" msgstr "Ô đánh dấu khác" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "Một vi phạm quy tắc rõ ràng khác" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "Ô đánh dấu tròn khác" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "Tải âm thanh lên" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "Áo" @@ -5620,6 +5605,7 @@ msgstr "Đang vắng mặt" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "Đang vắng mặt" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "Quay lại" @@ -5788,9 +5775,7 @@ msgstr "Đã tạo lại mã dự phòng" msgid "Badge" msgstr "Huy hiệu" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "Cấm" @@ -5819,7 +5804,7 @@ msgstr "Thời hạn cấm" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "Cấm thành viên khỏi cộng đồng, với tùy chọn xóa tin nh msgid "Ban reason" msgstr "Lý do cấm" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "Cấm người dùng này" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "Băng thông" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "Đã cấm" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "Đã cấm {targetUserTag} khỏi cộng đồng" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "Trước ngày" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "Bỉ" @@ -6031,7 +6006,7 @@ msgstr "Tốc độ bit" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "Chặn" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "Chặn" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "Chặn {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "Chặn ở tất cả cộng đồng" msgid "Block spoiler" msgstr "Spoiler dạng khối" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "Chặn người dùng này" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "Chặn người dùng" msgid "Blocked" msgstr "Đã chặn" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "Đã chặn" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "Trình dịch tích hợp" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "Bulgaria" @@ -6519,16 +6500,6 @@ msgstr "Tiếng Bulgaria" msgid "Bulk delete" msgstr "Xóa hàng loạt" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "Bắt nạt, liên hệ không mong muốn lặp đi lặp lại, rình rập hoặc lạm dụng có chủ đích." - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "Bắt nạt, đe dọa, thù ghét, bạo lực, tấn công hoặc nội dung khuyến khích tự làm hại bản thân." - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "California" msgid "Call" msgstr "Cuộc gọi" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "Cài đặt cuộc gọi & nhóm trò chuyện" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "Đổi ảnh bìa" msgid "Change chat embed background" msgstr "Đổi ảnh nền nhúng trò chuyện" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "Đổi email" @@ -7150,8 +7116,8 @@ msgstr "Đổi biệt danh bạn bè" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "Đổi biệt danh nhóm" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "Đổi ngôn ngữ" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "Đổi biệt danh của tôi trong nhóm" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "Đổi biệt danh của mình" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "Đổi chủ sở hữu" @@ -7283,16 +7249,6 @@ msgstr "Thay đổi vùng thoại mà kênh thoại sử dụng." msgid "Change which voice region this channel uses." msgstr "Thay đổi vùng thoại mà kênh này sử dụng." -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "Thay đổi người có thể gọi hoặc thêm bạn." - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "Thay đổi người có thể liên hệ với bạn." - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "Kiểm tra hộp thư đến tại {emailAddress} để tìm liên kết msgid "Check your inbox for a verification email." msgstr "Kiểm tra hộp thư đến để tìm email xác minh." +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "Kiểm tra báo cáo của bạn" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "Ô đánh dấu" @@ -7901,21 +7862,6 @@ msgstr "Tài khoản này đã bị chặn thanh toán. Liên hệ {supportEmail msgid "Checkout unavailable" msgstr "Thanh toán không khả dụng" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "Lo ngại về an toàn của trẻ em" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "An toàn cho trẻ em hoặc bóc lột trẻ vị thành niên" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "An toàn cho trẻ em hoặc nội dung người lớn" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "Lựa chọn" msgid "Choices: {choiceList}" msgstr "Các lựa chọn: {choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "Chọn" @@ -8122,6 +8068,11 @@ msgstr "Chọn danh mục mô tả đúng nhất về cộng đồng của bạn msgid "Choose the premium model" msgstr "Chọn mô hình cao cấp" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "Chọn lại lý do" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "Nhận quà" msgid "Claim your account" msgstr "Xác nhận tài khoản" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "Xác nhận tài khoản và xác minh email của bạn để gửi báo cáo." @@ -8352,12 +8303,12 @@ msgstr "Xác nhận tài khoản để nhận quà này." #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "Xác nhận tài khoản để gửi lời mời kết bạn." -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "Xác nhận tài khoản của bạn để gửi báo cáo." @@ -8378,11 +8329,6 @@ msgstr "Xác nhận tài khoản để bắt đầu hoặc tham gia cuộc gọi msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "Nhận quà của bạn để kích hoạt gói đăng ký {premiumProductName}!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "Mạo danh người, thương hiệu hoặc tổ chức khác." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "Xóa nội dung tìm kiếm" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "Đóng hộp thoại" msgid "Close popout" msgstr "Đóng cửa sổ nổi" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "Đóng tin nhắn trực tiếp này" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "Đóng vào khay hệ thống" msgid "Close window" msgstr "Đóng cửa sổ" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "Đóng tin nhắn trực tiếp hiện tại với {dmDisplayName}. Thao tác này không chặn người dùng và bạn có thể mở lại tin nhắn sau." - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "Đóng tin nhắn trực tiếp với {displayName}? Bạn có thể mở lại bất cứ lúc nào." @@ -8837,7 +8773,7 @@ msgstr "Giao diện Than" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "Mã" @@ -8868,7 +8804,7 @@ msgstr "Mã từ ứng dụng {productName}" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "Đã gửi lại mã" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "Cộng đồng bạn có thể tham gia" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "Cộng đồng" @@ -9131,7 +9065,7 @@ msgstr "Tắt tiếng nghe trong cộng đồng" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "Gỡ lỗi cộng đồng" @@ -9150,16 +9084,6 @@ msgstr "Đã xoá cộng đồng" msgid "Community DM" msgstr "Tin nhắn cộng đồng" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "Cộng đồng tồn tại để spam, lừa đảo hoặc lạm dụng nền tảng." - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "Cộng đồng tạo điều kiện cho hành vi công kích tập thể hoặc lạm dụng có chủ đích." - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "Biểu tượng cộng đồng" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "ID cộng đồng" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "Cần có ID cộng đồng." @@ -9526,6 +9450,11 @@ msgstr "Xác nhận mật khẩu mới" msgid "Confirm password" msgstr "Xác nhận mật khẩu" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "Xác nhận tuyên bố để gửi báo cáo." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "Tiếp tục trên trình duyệt của bạn" msgid "Continue to checkout" msgstr "Tiếp tục thanh toán" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "Tiếp tục báo cáo cộng đồng" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "Tiếp tục báo cáo người dùng" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "Chuyển đổi kênh này thành kênh văn bản sẽ xóa mọi kênh msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "Chuyển đổi nội dung đến thành giọng nói, bất kể nội dung đó có đến từ /tts hay không." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "Điều phối các cuộc tấn công, quấy rối hoặc gây rối có tổ chức nhắm vào người hoặc cộng đồng." - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "Đã sao chép URL vào bảng nhớ tạm" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "Đã sao chép URL vào bảng nhớ tạm" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "Sao chép ID tin nhắn" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "Sao chép liên kết tin nhắn" @@ -10643,6 +10553,11 @@ msgstr "Không tải được bài viết. Thử lại sau." msgid "Couldn't load settings" msgstr "Không thể tải cài đặt" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "Không thể tải biểu mẫu báo cáo." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "Không thể tải ứng dụng này" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "Không xử lý được hình ảnh" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "Không thể đăng tin nhắn này" @@ -10825,11 +10740,6 @@ msgstr "Không gửi được lời mời" msgid "Couldn't send invite. Try again." msgstr "Không gửi được lời mời. Vui lòng thử lại." -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "Không gửi được. Thử lại." - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "Đồng hồ đếm ngược" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "Quốc gia cư trú" @@ -11301,13 +11211,8 @@ msgstr "Đã tạo:" msgid "Credentials" msgstr "Thông tin đăng nhập" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "Các mối đe dọa có cơ sở, bạo lực ghê rợn hoặc cổ súy bạo lực." - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "Croatia" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "Cắt âm thanh dưới ngưỡng âm lượng, dùng rất ít CPU." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "Síp" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "Tiếng Séc" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "Cộng hòa Séc" @@ -11965,7 +11870,7 @@ msgstr "Gỡ lỗi kênh" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "Gỡ lỗi cộng đồng" @@ -12151,7 +12056,6 @@ msgstr "Delaware" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "Delaware" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "Xóa chủ đề?" msgid "Delete this invite? Can't be undone." msgstr "Xóa lời mời này? Không thể hoàn tác." -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "Xóa tin nhắn này" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "Xóa tin nhắn này? Không thể hoàn tác." #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "Xóa tin nhắn này? Không thể hoàn tác. Tin nhắn này cũng sẽ bị xóa khỏi mọi cộng đồng đang theo dõi kênh này." @@ -12461,11 +12359,6 @@ msgstr "Xóa tin nhắn của bạn trong cộng đồng này?" msgid "Delete your messages in this conversation?" msgstr "Xóa tin nhắn của bạn trong cuộc trò chuyện này?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "Đã xóa" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "Đã từ chối {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "Đan Mạch" @@ -12554,11 +12447,6 @@ msgstr "Mô tả nhãn dán" msgid "Describe this media for screen readers" msgstr "Mô tả media này cho trình đọc màn hình" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "Mô tả điều khiến nội dung này vi phạm pháp luật" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "Ảnh bìa tách riêng" msgid "Detail" msgstr "Chi tiết" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "Chi tiết" @@ -13315,11 +13203,6 @@ msgstr "Tên hiển thị (không bắt buộc)" msgid "Display scaling" msgstr "Tỉ lệ hiển thị" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "Phát tán phần mềm độc hại, công cụ đánh cắp thông tin đăng nhập hoặc các tệp gây hại khác." - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "DM" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "Cài đặt DM & lời mời kết bạn" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "Tài liệu" msgid "Doesn't allow being added to group DMs" msgstr "Không cho phép được thêm vào tin nhắn nhóm" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "Không chặn. Bạn có thể mở lại sau." - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "Ủng hộ thay thế" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "Tải xuống bản đồ nguồn để dấu vết ngăn xếp và các msgid "Download video" msgstr "Tải video" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "Doxxing, lộ thông tin cá nhân hoặc rình rập." - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "Doxxing, rình rập, mạo danh hoặc hồ sơ không phù hợp." - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "Chỉnh sửa màu cho {tokenLabel}" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "Chỉnh sửa hồ sơ cộng đồng" @@ -14043,7 +13908,7 @@ msgstr "Chỉnh sửa quyền ghi đè cho vai trò và thành viên trong kênh #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "Chỉnh sửa hồ sơ" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "Chỉnh sửa giờ địa phương trên hồ sơ" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "Chỉnh sửa tin nhắn đã đăng?" @@ -14191,13 +14056,13 @@ msgstr "Đủ điều kiện hoàn tiền đến {windowEndsOn}. Thao tác này #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "Email" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "Địa chỉ email" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "Cần có địa chỉ email." @@ -14721,16 +14586,6 @@ msgstr "Ưu tiên bộ mã hóa cho các lần chia sẻ màn hình mới." msgid "Encoder, SVC, and bitrate presets" msgstr "Bộ mã hóa, SVC và cài đặt trước tốc độ bit" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "Khuyến khích tự làm hại bản thân" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "Khuyến khích tự tử, tự làm hại bản thân hoặc rối loạn ăn uống." - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "Không có mã hóa đầu cuối vì một người tham gia không đ msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "Không có mã hóa đầu cuối vì có người tham gia không được hỗ trợ trong kênh thoại này." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "Gây nguy hiểm cho trẻ vị thành niên hoặc chứa nội dung bóc lột trẻ em." - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "Nhập mã theo định dạng ABCD-1234." @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "Nhập URL mẫu hoặc mã mẫu hợp lệ của {theOtherPlatform}." #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "Nhập địa chỉ email hợp lệ." #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "Nhập liên kết tin nhắn hợp lệ." @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Nhập mã gồm {digitCount} chữ số từ ứng dụng xác thực của bạn." #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "Nhập mã trước khi tiếp tục." @@ -15008,7 +14858,7 @@ msgstr "Nhấn Enter để <0><1>lưu" msgid "Enter username" msgstr "Nhập tên người dùng" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "Nhập mã xác minh" @@ -15017,6 +14867,11 @@ msgstr "Nhập mã xác minh" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "Nhập địa chỉ email của bạn và chúng tôi sẽ gửi cho bạn một liên kết để đặt lại mật khẩu." +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "Nhập tên đầy đủ theo pháp luật của bạn để gửi báo cáo." + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "Nhấn Escape để <0><1>hủy" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "Estonia" @@ -15412,6 +15267,16 @@ msgstr "Hết hạn vào {earliest}" msgid "Expires:" msgstr "Hết hạn:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "Giải thích vấn đề" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "Giải thích vấn đề để gửi báo cáo." + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "Liên kết bên ngoài có thể nguy hiểm. Hãy cẩn trọng." msgid "Extra large" msgstr "Cực lớn" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "Cộng đồng cực đoan" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "Không thể xóa URL tùy chỉnh. Vui lòng thử lại." #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "Không gửi lại được mã. Vui lòng thử lại." @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "Không thể đặt lại trạng thái premium." #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "Không gửi được mã. Vui lòng thử lại." @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "Gửi tin nhắn không thành công. Nhấn giữ để xem tùy chọn." #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "Không gửi được báo cáo. Vui lòng thử lại." @@ -15840,11 +15700,6 @@ msgstr "Không thể tải lên biểu tượng cảm xúc bắt đầu từ {st msgid "Failed to upload emojis. Try again." msgstr "Không thể tải biểu tượng cảm xúc lên. Vui lòng thử lại." -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "Tuyên bố sai sự thật có khả năng gây hại trong thế giới thực." - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "Tìm nhãn dán ưng ý" msgid "Fingerprint" msgstr "Vân tay" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "Hoàn tất thiết lập tài khoản" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "Hoàn tất thiết lập tài khoản trước" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "Hoàn tất đăng ký để gửi lời mời kết bạn." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "Phần Lan" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "Tiếng Phần Lan" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "Họ và tên" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "Tốc độ khung hình trên 30 FPS yêu cầu {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "Pháp" @@ -16834,10 +16689,10 @@ msgstr "Đầy đủ" msgid "Full dynamic range" msgstr "Dải tương phản động đầy đủ" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "Họ và tên đầy đủ" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "Họ và tên đầy đủ theo giấy tờ pháp lý (tùy chọn đối với báo cáo xâm hại tình dục trẻ em)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "Tiếng Đức" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "Đức" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "Quay lại" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "Quay lại và nhập một email hợp lệ." @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "Rất vui được gặp bạn, {username}! Chào mừng bạn đến với cộng đồng." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "Hy Lạp" @@ -17572,11 +17427,6 @@ msgstr "Tiếng Hy Lạp" msgid "Grid view" msgstr "Chế độ xem lưới" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "Nội dung có hành vi dụ dỗ hoặc bóc lột trẻ em." - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "Tên người dùng" msgid "Hang out with voice, video and screen share" msgstr "Trò chuyện bằng giọng nói, video và chia sẻ màn hình" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "Quấy rối" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "Quấy rối liên quan đến nội dung người lớn" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "Quấy rối hoặc bắt nạt" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "Quấy rối hoặc rình rập" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "Quấy rối hoặc lạm dụng có chủ đích" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "Quấy rối hoặc đe dọa" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "Khóa bảo mật vật lý" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "Tăng tốc phần cứng trên hầu hết các hệ thống Windows và macOS. Đáng tin cậy cho các thiết bị cũ hơn." -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "Thông tin sai lệch có hại" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "Đã từng mua hàng" msgid "Has ever purchased override" msgstr "Ghi đè đã từng mua hàng" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "Ngôn từ gây thù ghét" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "Ẩn chia sẻ màn hình của bạn?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "Ẩn các nút tải xuống, mở trong trình duyệt và sao chép trên ảnh và video trong kênh này." +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "Ẩn tin nhắn của họ và chặn họ gửi tin nhắn cho bạn" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "Tiếng Hungary" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "Hungary" @@ -18399,6 +18212,11 @@ msgstr "Tôi là một chú giải công cụ" msgid "I changed my mind" msgstr "Tôi đã đổi ý" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "Tôi xác nhận với thiện chí rằng thông tin và các cáo buộc trong thông báo này là chính xác và đầy đủ." + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "Cài đặt AFK" msgid "Idle timeout" msgstr "Thời gian chờ không hoạt động" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "Nếu có trẻ vị thành niên liên quan, hãy dùng \"{childSafetyReasonName}\" thay thế." - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "Nếu một tài khoản sử dụng địa chỉ đó, chúng tôi đã msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "Nếu macOS yêu cầu thoát và mở lại {productName}, hãy chọn Sau." -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "Nếu có ai đó đang gặp nguy hiểm tức thì, hãy liên hệ với dịch vụ khẩn cấp địa phương nếu bạn có thể làm điều đó một cách an toàn." +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "Nếu có người đang gặp nguy hiểm cấp bách, trước tiên hãy liên hệ dịch vụ khẩn cấp tại địa phương." #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "Nếu ai đó yêu cầu bạn dán thứ gì đó vào đây, thì đó là một trò lừa đảo có thể giúp họ chiếm quyền kiểm soát tài khoản {productName} của bạn." -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "Nếu báo cáo này liên quan đến CSAM hoặc hành vi bóc lột trẻ vị thành niên, hãy gửi ngay và không chia sẻ lại tài liệu này." - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "Nếu đây là mối đe dọa đáng tin cậy và sắp xảy ra, hãy đồng thời liên hệ với dịch vụ khẩn cấp địa phương." - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "Nếu đây là mối đe dọa khủng bố sắp xảy ra, hãy đồng thời liên hệ với dịch vụ khẩn cấp địa phương." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "Nếu báo cáo này liên quan đến một tin nhắn cụ thể trong cộng đồng này, hãy báo cáo tin nhắn đó thay vì báo cáo cộng đồng. Báo cáo tin nhắn cung cấp cho đội ngũ an toàn của chúng tôi ngữ cảnh rõ ràng nhất và việc thêm chi tiết vào phần bình luận có thể giúp chúng tôi xem xét nhanh hơn. Chỉ tiếp tục báo cáo toàn bộ cộng đồng nếu việc báo cáo một tin nhắn không phản ánh được vấn đề lớn hơn." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "Nếu báo cáo này liên quan đến một tin nhắn cụ thể, hãy báo cáo tin nhắn đó thay vì báo cáo người dùng. Báo cáo tin nhắn cung cấp cho đội ngũ an toàn của chúng tôi ngữ cảnh rõ ràng nhất và việc thêm chi tiết vào phần bình luận có thể giúp chúng tôi xem xét nhanh hơn. Chỉ tiếp tục báo cáo toàn bộ người dùng nếu tin nhắn đó không thể hiện được vấn đề lớn hơn." - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "Nếu báo cáo này liên quan đến các tin nhắn cụ thể, hãy báo cáo tin nhắn phù hợp nhất. Báo cáo tin nhắn cung cấp cho đội ngũ an toàn của chúng tôi ngữ cảnh rõ ràng nhất và việc thêm chi tiết vào phần bình luận có thể giúp chúng tôi xem xét nhanh hơn. Chỉ tiếp tục báo cáo toàn bộ người dùng nếu việc báo cáo tin nhắn không phản ánh được vấn đề lớn hơn." +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "Nếu bạn tin rằng điều đó là bất hợp pháp, hãy cho biết luật nào và tại sao." #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "Bỏ qua thời gian chờ chế độ chậm của kênh này." msgid "Ignore virtual" msgstr "Bỏ qua thiết bị ảo" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "Hoạt động trái phép" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "Hoạt động trái phép hoặc nội dung khác" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "Mua bán trái phép, tiếp tay cho tội phạm hoặc vi phạm quy tắc rõ ràng không thuộc các mục trên." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "Hoạt động mua bán trái phép, tiếp tay cho tội phạm hoặc các hành vi phi pháp khác." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "Hình ảnh" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Ảnh dán từ bảng nhớ tạm sẽ được gửi dưới dạng tệp đính kèm và bạn không có quyền đính kèm tệp trong kênh này." -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "Mạo danh" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "Mạo danh hoặc nội dung gây hiểu lầm" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "Không hoạt động" msgid "Inactive timeout" msgstr "Thời gian chờ không hoạt động" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "Hồ sơ không phù hợp" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "Bao gồm mã dự phòng hai yếu tố của tôi trong tệp PDF và bản in" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "Nhập ID cộng đồng." @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "Ảnh nền lời mời" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "Mã mời (không bắt buộc)" @@ -19471,7 +19220,7 @@ msgstr "Ẩn lời mời" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "Mời thành viên" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "Địa chỉ IP đã được ủy quyền" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "Ireland" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "Nghiêng" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "Ý" @@ -20120,7 +19869,7 @@ msgstr "Phím" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "Để sau" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "Latvia" @@ -20291,11 +20040,6 @@ msgstr "Tìm hiểu thêm" msgid "Learn more about Visionary" msgstr "Tìm hiểu thêm về Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "Rời đi" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "Rời khỏi luồng riêng tư" msgid "Leave silently" msgstr "Rời đi âm thầm" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "Rời khỏi cộng đồng" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "Liệt kê các thành viên có vai trò này ở một mục riêng trong danh sách thành viên." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "Litva" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "Đang tải..." #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "Đang tải…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "Thấp" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "Luxembourg" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "Lịch bảo trì vào lúc {localizedTime}. Thời gian dự kiến: {duration}." #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "Đặt {userName} làm chủ nhóm? Bạn sẽ mất đặc quyền chủ nhóm." #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "Đặt làm chủ nhóm" @@ -21091,38 +20830,21 @@ msgstr "Đặt làm chủ nhóm" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "Hãy đảm bảo mã này khớp với mã trong ứng dụng {PRODUCT_NAME}." +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "Hãy đảm bảo mọi thứ trông ổn trước khi bạn gửi." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "Cá nhân hóa máy chủ của bạn" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "Liên kết độc hại" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "Malta" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "Phân phối phần mềm độc hại" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "Phần mềm độc hại hoặc liên kết nguy hiểm" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "Phần mềm độc hại, đánh cắp thông tin đăng nhập hoặc các tệp độc hại." - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "Che giấu thông tin cá nhân trước khi chia sẻ màn hình hoặc msgid "Mask Visionary as subscription" msgstr "Hiển thị Visionary dưới dạng gói đăng ký" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "Spam hàng loạt, lừa đảo, tặng quà giả mạo hoặc lạm dụng tài khoản." - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "Cổng phương tiện nội dung người lớn" msgid "Mature content not allowed" msgstr "Nội dung người lớn không được phép" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "Nội dung người lớn hoặc quấy rối" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "Nội dung người lớn hoặc kiểm duyệt không an toàn" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "Ghi đè nội dung người lớn" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "Vi phạm chính sách nội dung người lớn" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "Nội dung người lớn không được kiểm soát đúng cách." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "Tin nhắn" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "liên kết tin nhắn" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "Liên kết tin nhắn" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "Bản xem trước tin nhắn trong danh sách tin nhắn trực tiếp" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "Tin nhắn đã được đăng" @@ -22211,6 +21908,11 @@ msgstr "Thời gian tin nhắn" msgid "Message unpinned" msgstr "Đã bỏ ghim tin nhắn" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "Tin nhắn bạn đang báo cáo" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "Minnesota" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "Trẻ vị thành niên gặp rủi ro, nội dung người lớn không phù hợp hoặc hành vi không mong muốn." - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "Thêm" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "Thao tác khác" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "Lồng nhau" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "Hà Lan" @@ -24099,7 +23796,7 @@ msgstr "Không có kết quả" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "Không tìm thấy kết quả nào" @@ -24858,6 +24555,16 @@ msgstr "Chỉ những người bạn mời và quản trị viên mới có th msgid "Only places I can't access anymore" msgstr "Chỉ những nơi tôi không còn quyền truy cập" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "Chỉ báo cáo những gì bạn thực sự tin là vi phạm quy tắc và vui lòng không gửi cùng một báo cáo hai lần." + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "Chỉ báo cáo những nội dung bạn thực sự tin là vi phạm quy tắc. Lạm dụng tính năng báo cáo là đi ngược lại <0>nguyên tắc cộng đồng của chúng tôi." + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "Độ mờ" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "Mở trên {instanceName}" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "Mở danh sách thả xuống" @@ -25379,11 +25084,6 @@ msgstr "Mở Cài đặt hệ thống → Quyền riêng tư & Bảo mật → G msgid "Open template JSON" msgstr "Mở JSON mẫu" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "Mở hộp thoại cấm cho cộng đồng này." - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "Mở cài đặt của bạn" msgid "Opened the thread again" msgstr "Đã mở lại luồng" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "Mở trong tab mới" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "Ban đầu bị cấm vào {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "Khác" @@ -25654,11 +25357,6 @@ msgstr "Cảm xúc khác…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "Đội ngũ an toàn của chúng tôi đang xem xét báo cáo. Chúng tôi sẽ gửi cho bạn tin nhắn trực tiếp và email sau khi có kết quả." - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "Không thể chuyển quyền sở hữu cho <0>{username} vào lúc này." #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "Đã chuyển quyền sở hữu" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "Dán phản hồi JSON vào đây" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "Dán liên kết tin nhắn." @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "Lừa đảo, gian lận, liên kết độc hại hoặc thông tin sai lệch có khả năng gây hại trong thế giới thực." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "Chọn nhà cung cấp tìm kiếm web" msgid "Pick an emoji" msgstr "Chọn một biểu tượng cảm xúc" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "Chọn một tùy chọn để tiếp tục." - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "Chọn 4 chữ số sau tên người dùng của bạn" msgid "Pick the appearance this administrator account should start with." msgstr "Chọn giao diện ban đầu cho tài khoản quản trị viên này." -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "Chọn quy tắc để xem lại." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "Vui lòng đợi một lát rồi thử đổi tên lại." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "Ba Lan" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "Cổng" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "Bồ Đào Nha" @@ -26872,11 +26555,6 @@ msgstr "nhấn để thêm cảm xúc" msgid "press to remove reaction" msgstr "nhấn để gỡ cảm xúc" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "Mạo danh người khác, bao gồm cả nội dung do AI tạo ra nhằm mục đích lừa đảo." - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "Ngăn <0>{targetUserTag} gửi tin nhắn, bày tỏ cảm xúc và kết nối vào kênh thoại trong khoảng thời gian được chỉ định." @@ -27078,11 +26756,6 @@ msgstr "Người nói ưu tiên" msgid "Privacy" msgstr "Quyền riêng tư" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "Quyền riêng tư hoặc mạo danh" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "Thiết lập quyền riêng tư" msgid "Privacy URL" msgstr "URL quyền riêng tư" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "Vi phạm quyền riêng tư" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "Vi phạm quyền riêng tư hoặc doxxing" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "Vi phạm quyền riêng tư hoặc rình rập" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "Loại hồ sơ" msgid "Profile updated" msgstr "Đã cập nhật hồ sơ" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "Vi phạm hồ sơ, tên người dùng hoặc ảnh đại diện" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "Cổ súy thù ghét các nhóm được bảo vệ." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "Quảng bá, tuyển mộ hoặc điều phối hoạt động cực đoan bạo lực." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "Quảng bá hoặc hướng dẫn khuyến khích tự làm hại bản thân hoặc rối loạn ăn uống." +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "Hồ sơ bạn đang báo cáo" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "Đại từ: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "Bảo vệ tài khoản Visionary của bạn bằng cách bật xác thực hai yếu tố. Cảm ơn bạn đã ủng hộ {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "Cung cấp ít nhất một ID người dùng hoặc thẻ người dùng." #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "Cung cấp ID người dùng hoặc tên người dùng của người bạn muốn báo cáo." -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "Cung cấp họ tên đầy đủ của bạn để khai báo." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "Nút chọn cho phép chọn một tùy chọn từ một nhóm." msgid "Radio group" msgstr "Nhóm nút chọn" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "Phối hợp tấn công" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "Sẵn sàng mua quà chưa?" msgid "Ready to upgrade?" msgstr "Sẵn sàng nâng cấp?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "Lý do" @@ -28291,8 +27924,8 @@ msgstr "Ghi nhớ kích thước và vị trí cửa sổ" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "Xóa {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "Xóa {userName} khỏi nhóm?" @@ -28419,8 +28052,8 @@ msgstr "Xóa khỏi mục yêu thích" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "Xóa khỏi nhóm" @@ -28458,11 +28091,6 @@ msgstr "Xóa khỏi GIF yêu thích lưu theo URL" msgid "Remove icon" msgstr "Xóa biểu tượng" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "Xóa tin nhắn này khỏi kênh đối với mọi người." - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "Đã xóa khỏi mục yêu thích" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "Đã xóa khỏi nhóm" @@ -28919,28 +28547,18 @@ msgstr "Báo cáo một cộng đồng" msgid "Report a message" msgstr "Báo cáo tin nhắn" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "Báo cáo vi phạm quy tắc hoặc tìm công cụ để quản lý liên hệ và tùy chọn." - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "Báo cáo hồ sơ người dùng" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "Báo cáo cộng đồng" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "Chi tiết báo cáo" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "Báo cáo nội dung bất hợp pháp" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "Báo cáo sự cố" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "Báo cáo tin nhắn" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "Báo cáo hồ sơ" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "Đã gửi báo cáo" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "Loại báo cáo" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "Báo cáo người dùng" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "Thẻ người dùng bị báo cáo (tùy chọn)" @@ -29100,6 +28716,10 @@ msgstr "Yêu cầu mọi điều kiện của mức trung bình và phải là t msgid "Resend" msgstr "Gửi lại" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "Gửi lại ({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "Gửi lại ({newSecondsRemaining}s)" @@ -29108,7 +28728,7 @@ msgstr "Gửi lại ({newSecondsRemaining}s)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "Gửi lại ({originalSecondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "Gửi lại ({resendCooldownSeconds}s)" @@ -29122,7 +28742,7 @@ msgstr "Gửi lại ({resendSecondsRemaining}s)" msgid "Resend ({secondsRemaining}s)" msgstr "Gửi lại ({secondsRemaining}s)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "Gửi lại mã" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "Đã cập nhật vai trò thành công" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "Romania" @@ -29947,7 +29567,7 @@ msgstr "Độ bão hòa" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "Hãy chào <0>{displayName}. Tin nhắn trực tiếp của bạn b msgid "Scale" msgstr "Tỷ lệ" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "Lừa đảo, phần mềm độc hại hoặc thông tin sai lệch" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "Quét mã QR bằng ứng dụng xác thực của bạn." @@ -30855,11 +30470,6 @@ msgstr "Chọn" msgid "Select {accessibleName}" msgstr "Chọn {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "Chọn danh mục" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "Chọn một cộng đồng mà bạn có quyền {permissionName} hoặc một tin nhắn nhóm mà bạn là thành viên." #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "Chọn quốc gia" @@ -30911,11 +30521,6 @@ msgstr "Chọn URI chuyển hướng" msgid "Select a scenario to apply..." msgstr "Chọn một kịch bản để áp dụng..." -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "Chọn danh mục vi phạm." - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "Chọn tài khoản bạn muốn đăng nhập trên thiết bị mới msgid "Select voice processing mode" msgstr "Chọn chế độ xử lý giọng nói" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "Chọn nội dung bạn muốn báo cáo." #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "Chọn quốc gia bạn đang sinh sống." #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "Chọn…" @@ -31037,13 +30642,6 @@ msgstr "Đã chọn: {0} (tối đa {1})" msgid "Selections" msgstr "Lựa chọn" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "Tự làm hại bản thân hoặc tự tử" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "Gửi tin nhắn hành động (hiển thị nghiêng)." msgid "Send animation" msgstr "Gửi ảnh động" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "Gửi báo cáo khác" @@ -31138,7 +30736,7 @@ msgstr "Nút gửi" msgid "Send code" msgstr "Gửi mã" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "Gửi báo cáo DSA" @@ -31158,9 +30756,9 @@ msgstr "Gửi tệp dung lượng lên tới {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "Gửi lời mời kết bạn" @@ -31220,8 +30818,8 @@ msgstr "Gửi tin nhắn trong luồng" msgid "Send messages, images, GIFs and emoji" msgstr "Gửi tin nhắn, ảnh, GIF và biểu tượng cảm xúc" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "Gửi báo cáo" @@ -31255,7 +30853,7 @@ msgstr "Gửi ghim này về quá khứ?" msgid "Send TTS messages" msgstr "Gửi tin nhắn TTS" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "Gửi mã xác minh" @@ -31273,11 +30871,6 @@ msgstr "Gửi tin nhắn thoại" msgid "Send:" msgstr "Gửi:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "Gửi phần mềm độc hại hoặc liên kết nguy hiểm" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "Chia sẻ chủ đề" msgid "Share voice activity with all friends?" msgstr "Chia sẻ hoạt động trò chuyện thoại với tất cả bạn bè?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "Chia sẻ những gì đội ngũ của chúng tôi cần để đánh giá vấn đề này." @@ -31709,11 +31302,6 @@ msgstr "Chia sẻ những gì đội ngũ của chúng tôi cần để đánh g msgid "Share with a friend" msgstr "Chia sẻ với bạn bè" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "Chia sẻ với người kiểm duyệt cộng đồng." - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "Cửa sổ đã chia sẻ" msgid "Shared window audio" msgstr "Âm thanh cửa sổ được chia sẻ" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "Chia sẻ thông tin cá nhân, theo dõi người dùng hoặc phối hợp lạm dụng quyền riêng tư." - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "Chia sẻ thông tin cá nhân" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "Thanh trượt" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "Slovakia" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "Slovenia" @@ -32889,11 +32467,6 @@ msgstr "Mô phỏng chế độ chậm" msgid "Slowmode time remaining" msgstr "Thời gian còn lại của chế độ chậm" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "Lời lẽ xúc phạm, phi nhân tính hoặc công kích các nhóm được bảo vệ." - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "Đã xảy ra lỗi khi chuẩn bị nhãn dán này. Hãy thử một tệp khác hoặc thử lại sau giây lát." #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "Đã xảy ra lỗi khi đăng. Vui lòng thử lại sau." @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "Bố cục rộng rãi với các tin nhắn được phân tách rõ ràng." #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "Tây Ban Nha" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "Tài khoản spam" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "Phân loại spam" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "Spam hoặc lừa đảo" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "Cộng đồng spam hoặc lừa đảo" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "Tài khoản spam, lừa đảo hoặc đánh cắp thông tin" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "Spam, lừa đảo hoặc đánh cắp thông tin" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "Bắt đầu thu nhỏ" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "Bắt đầu lại" @@ -33752,22 +33302,26 @@ msgstr "Duy trì đăng nhập" msgid "Step {current} of {total}" msgstr "Bước {current} trên {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "Bước 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "Bước 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "Bước 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "Bước 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "Bước 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "Dừng làm kênh thông báo?" msgid "Stop hiding muted channels by default?" msgstr "Ngừng ẩn các kênh đã tắt tiếng theo mặc định?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "Ngăn tin nhắn và lời mời kết bạn." - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "Dừng kiểm tra micrô" @@ -33959,11 +33508,6 @@ msgstr "Ngừng vá Node.prototype insertBefore và removeChild. Ứng dụng s msgid "Stop ringing" msgstr "Dừng đổ chuông" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "Ngừng xem nội dung và thành viên của cộng đồng này." - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "Chuyển đổi các biểu tượng văn bản phổ biến như :) và <3 thành biểu tượng cảm xúc khi gửi tin nhắn" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "Thụy Điển" @@ -34804,11 +34348,6 @@ msgstr "Nhấn để thêm ghi chú" msgid "tar.gz archive" msgstr "Tệp nén tar.gz" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "Nhắm vào người khác dựa trên các đặc điểm được bảo vệ." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "Điều khoản dịch vụ" msgid "Terms URL" msgstr "URL điều khoản" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "Khủng bố hoặc chủ nghĩa cực đoan bạo lực" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "Tiếng Thái" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Cảm ơn bạn đã giúp giữ cho {productName} an toàn. Chúng tôi sẽ xem xét báo cáo của bạn sớm nhất có thể." +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "Cảm ơn bạn đã báo cáo" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "Cảm ơn bạn đã cho chúng tôi biết. Bản thân điều này không vi phạm quy tắc của chúng tôi, vì vậy chúng tôi đã không gửi báo cáo." + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "Cảm ơn bạn đã cho chúng tôi biết. Bản thân điều này không vi phạm quy tắc của chúng tôi, vì vậy chúng tôi đã không gửi báo cáo. Nếu nội dung này nhắm vào ai đó hoặc sử dụng lời lẽ miệt thị, hãy báo cáo lại và chọn “Nội dung lạm dụng hoặc có hại”." + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "Không thành công. Hãy thử lại hoặc hủy." msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "Màu này không hợp lệ. Hãy thử dùng mã hex, rgb(), hsl() hoặc tên màu CSS." -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "Đây không phải là một URL hợp lệ." @@ -35104,6 +34653,11 @@ msgstr "Ứng dụng {PRODUCT_NAME} trên thiết bị kia của bạn hiển th msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "Ứng dụng {PRODUCT_NAME} chưa đăng nhập. Bạn có thể đóng tab này." +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "Đội ngũ an toàn của {productName} sẽ xem xét báo cáo của bạn. Chúng tôi sẽ không tiết lộ báo cáo này đến từ bạn." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "redirect_uri được cung cấp chưa đăng ký với ứng dụng nà msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri được cung cấp phải dùng HTTP hoặc HTTPS." +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "Biểu mẫu báo cáo đã thay đổi. Vui lòng bắt đầu lại." + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "Các thẻ tên người dùng trên máy chủ này đã được đặt. Chúng không thể thay đổi nữa." #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "Mã xác minh không hợp lệ hoặc đã hết hạn." @@ -36115,13 +35674,8 @@ msgstr "Thành viên này không còn kết nối với kênh thoại nữa." msgid "This message can only be forwarded to age-restricted channels" msgstr "Tin nhắn này chỉ có thể được chuyển tiếp đến các kênh có giới hạn độ tuổi" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "Tin nhắn này đã bị xóa." - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "Tin nhắn này đã được đăng rồi" @@ -36279,11 +35833,6 @@ msgstr "Chủ đề này đã đóng. Gửi tin nhắn sẽ mở lại chủ đ msgid "This thread is locked. Only moderators can send messages." msgstr "Chủ đề này đã bị khóa. Chỉ quản trị viên mới có thể gửi tin nhắn." -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "người dùng này" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "Người dùng này đã giới hạn hồ sơ của mình. Một số thông tin bị ẩn với những người không phải là bạn bè." @@ -36292,11 +35841,6 @@ msgstr "Người dùng này đã giới hạn hồ sơ của mình. Một số t msgid "This user has no roles in this community." msgstr "Người dùng này không có vai trò nào trong cộng đồng này." -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "Người dùng này đã bị cấm khỏi cộng đồng." - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "Người dùng này không còn khả dụng." @@ -36465,16 +36009,6 @@ msgstr "Chủ đề đã cập nhật" msgid "Threads" msgstr "Chủ đề" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "Đe dọa, bám theo ở nhiều nơi hoặc liên hệ không mong muốn." - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "Đe dọa, quấy rối hoặc gây hại" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "Đã tạm dừng {targetUserTag}" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "Tạm dừng" @@ -36787,6 +36321,11 @@ msgstr "Tông màu" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "Ánh xạ tông màu ảnh HDR về dải tiêu chuẩn, giảm độ sáng tối đa." +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "Đã gửi quá nhiều mã. Vui lòng đợi {duration} rồi thử lại." + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "Chuyển quyền sở hữu cộng đồng" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "Chuyển quyền sở hữu nhóm cho {userName}?" @@ -37561,7 +37100,7 @@ msgstr "Bỏ chặn họ trước để gửi lời mời kết bạn." #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "Bỏ chặn người dùng" @@ -37607,16 +37146,6 @@ msgstr "Bật tiếng nghe trên tất cả thiết bị" msgid "Undeafen yourself" msgstr "Bật tiếng nghe của bạn" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "Mối lo ngại về trẻ vị thành niên hoặc an toàn của trẻ em" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "Người dùng chưa đủ tuổi" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "Cho đến khi tôi bật lại" msgid "Unverified email" msgstr "Email chưa xác minh" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "Hành vi không mong muốn hoặc nội dung người lớn không đúng chỗ." - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "Hành vi, bình luận hoặc yêu cầu người lớn không mong muốn." - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "Tối đa {DISCOVERY_MAX_TAGS} thẻ giúp mọi người tìm thấy cộng đồng của bạn. Các thẻ này sẽ hiển thị trong tìm kiếm Khám phá." @@ -38840,11 +38359,6 @@ msgstr "Dùng giao diện sáng" msgid "Use native title bar" msgstr "Dùng thanh tiêu đề gốc" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "Chỉ sử dụng tùy chọn này nếu nội dung vi phạm rõ ràng các quy tắc của {productName} và không thuộc các danh mục trên." - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "Chỉ dùng trong cộng đồng này." msgid "User" msgstr "Người dùng" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "Người dùng có vẻ chưa đủ tuổi, hoặc có hành vi dụ dỗ, bóc lột trẻ em." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "Gỡ lỗi người dùng" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "ID người dùng (tùy chọn)" @@ -39061,12 +38570,12 @@ msgstr "Không tìm thấy người dùng" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "Hồ sơ người dùng" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "Hồ sơ người dùng: {tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "Cài đặt người dùng" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "Thẻ người dùng (tùy chọn)" @@ -39339,7 +38848,7 @@ msgstr "Cộng đồng đã xác minh" msgid "Verify" msgstr "Xác minh" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "Xác minh mã" @@ -39368,7 +38877,7 @@ msgstr "Xác minh đó là bạn" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "Xác minh email của bạn" @@ -39718,7 +39227,7 @@ msgstr "Xem mã" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "Xem hồ sơ cộng đồng" @@ -39751,7 +39260,7 @@ msgstr "Xem quà" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "Xem hồ sơ chung" @@ -39847,26 +39356,6 @@ msgstr "Người xem tham gia luồng trực tiếp" msgid "Viewer leaves stream" msgstr "Người xem rời khỏi luồng trực tiếp" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "Danh mục vi phạm" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "Vi phạm nằm trong hồ sơ người dùng, không phải tin nhắn cụ thể." - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "Bạo lực hoặc đe dọa bạo lực" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "Nội dung bạo lực hoặc phản cảm" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "Chúng tôi đã đổi kích thước và nén biểu tượng cảm x msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "Chúng tôi đã đổi kích thước và nén nhãn dán này thành 320x320 pixel, nhưng kích thước vẫn là {fileSize}. Giới hạn là {maxSize}. Hãy thử một hình ảnh đơn giản hơn, ít màu hơn hoặc tệp nguồn nhỏ hơn." -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "Chúng tôi đã gửi mã đến {email}." @@ -40472,7 +39961,7 @@ msgstr "Chúng tôi sẽ xử lý yêu cầu này sớm nhất có thể. Bạn msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "Chúng tôi sẽ khôi phục email trước đây của bạn, đăng xuất các phiên cũ, tắt xác thực đa yếu tố và bảo mật tài khoản của bạn bằng mật khẩu mới." -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "Chúng tôi sẽ gửi một mã ngắn để xác nhận bạn có thể nhận thông tin cập nhật về báo cáo này." @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "Tây Virginia" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "Loại quy tắc nào đã bị vi phạm?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "Bạn đang làm gì?" msgid "What's new" msgstr "Có gì mới" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "Lý do báo cáo của bạn là gì?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "Khi không đặt ngày giới hạn tùy chỉnh, thành viên không có quyền <0>{readMessageHistoryPermissionLabel} sẽ không xem được tin nhắn cũ. Họ sẽ chỉ thấy tin nhắn theo thời gian thực khi chúng đến và chúng sẽ biến mất khi họ khởi động lại ứng dụng." @@ -40832,11 +40321,6 @@ msgstr "Cộng đồng nào" msgid "Which conversations" msgstr "Những cuộc trò chuyện nào" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "Quy tắc nào đã bị vi phạm?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "Khi bật tính năng nhấn để nói, phím tắt sẽ điều khiển micrô của bạn, vì vậy nút tắt tiếng sẽ bị vô hiệu hóa." @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "Bạn không thể đính kèm tệp trong kênh này." #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "Bạn không thể kết bạn với chính mình" @@ -41341,7 +40825,7 @@ msgstr "Bạn không thể nhắn tin cho người dùng này" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "Bạn phải đồng ý với các điều khoản dịch vụ để tạo tài khoản" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "Bạn phải xác minh email trước khi gửi báo cáo." @@ -41891,6 +41375,11 @@ msgstr "Bạn đang dùng mức giá cũ. Giá hiện tại cho gói này là {c msgid "You're sending messages too quickly" msgstr "Bạn đang gửi tin nhắn quá nhanh" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "Bạn đang gửi báo cáo quá nhanh. Vui lòng thử lại sau." + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "Bạn đang xem tin nhắn cũ hơn" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "Bạn đã thêm nhiều người hơn số lượng cho phép trong tin nhắn nhóm. Hãy xóa bớt một vài người và thử lại." +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "Bạn đã báo cáo tin nhắn này rồi." + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "Bạn đã báo cáo hồ sơ này hôm nay." + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "Tài khoản và cài đặt của bạn không bị thay đổi hay xó msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "Hành động của bạn không thể hoàn tất vì đã bị hệ thống an toàn của chúng tôi gắn cờ. Nếu bạn cho rằng đây là lỗi, vui lòng liên hệ bộ phận hỗ trợ." +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "Câu trả lời của bạn" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Đơn đăng ký của bạn đang chờ xét duyệt. Bạn vẫn có thể cập nhật chi tiết hoặc rút lại đơn đăng ký." @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "Trình duyệt của bạn yêu cầu tương tác người dùng trước khi có thể phát âm thanh. Nhấn vào nút bên dưới để bật trò chuyện thoại." #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "Thay đổi của bạn sẽ được áp dụng cho mọi cộng đồng theo dõi kênh này và có thể mất một phút. Mỗi tin nhắn đã đăng cho phép chỉnh sửa nhanh 3 lần, sau đó là 1 lần mỗi 20 phút." @@ -42311,6 +41815,11 @@ msgstr "Biệt danh mới của bạn, hoặc để trống để đặt lại." msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "Bộ công cụ khôi phục cũ của bạn không còn hoạt động nữa. Hãy cất giữ bộ công cụ mới này ở nơi an toàn." +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "Các tùy chọn của bạn" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "khu vực của bạn" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "Thanh toán gia hạn của bạn không thành công nhưng <0/> vẫn hoạt động đến <1>{graceDate}. Hãy cập nhật phương thức thanh toán trước thời điểm đó để giữ gói đăng ký của bạn." +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "Không gửi được báo cáo của bạn. Vui lòng thử lại." + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "Gói đăng ký của bạn sẽ chuyển sang thanh toán hàng năm v msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "CSS chủ đề của bạn quá lớn để chia sẻ. Hãy cắt bớt và thử lại." -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "Tên người dùng của bạn (không bắt buộc)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index 049ec401b..d42507646 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -2081,7 +2081,7 @@ msgstr "还剩 {remainingSlotCount} 个" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, other {位成员}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, other {你的邀请链接将在 # 秒后过期。}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "已选择 {selectedCount} 项" @@ -2957,11 +2957,6 @@ msgstr "账号数据" msgid "Account details unavailable" msgstr "账户详情不可用" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "此账号用于发送垃圾信息、诈骗或滥用平台。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "添加日期:{createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "添加日期:{createdDate} • 最后使用:{lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "补充说明(可选)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "已兑换" msgid "Already set to cancel" msgstr "已安排取消" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "同时将此消息举报给 {productName} 安全团队" @@ -4576,11 +4566,6 @@ msgstr "每年" msgid "Another checkbox" msgstr "另一个复选框" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "其他明显违规行为" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "另一个圆形复选框" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "音频上传" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "奥地利" @@ -5620,6 +5605,7 @@ msgstr "当前离开" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "当前离开" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "返回" @@ -5788,9 +5775,7 @@ msgstr "备用码已重新生成" msgid "Badge" msgstr "徽章" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "封禁" @@ -5819,7 +5804,7 @@ msgstr "封禁时长" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "将成员从社区封禁,并可选择删除其近期消息。" msgid "Ban reason" msgstr "封禁原因" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "封禁此用户" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "带宽" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "已封禁" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "已在社区中封禁 {targetUserTag}" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "早于此日期" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "比利时" @@ -6031,7 +6006,7 @@ msgstr "比特率" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "屏蔽" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "屏蔽" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "屏蔽 {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "在所有社区中屏蔽" msgid "Block spoiler" msgstr "块级剧透" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "屏蔽此用户" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "屏蔽用户" msgid "Blocked" msgstr "已屏蔽" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "已屏蔽" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "内置翻译器" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "保加利亚" @@ -6519,16 +6500,6 @@ msgstr "保加利亚语" msgid "Bulk delete" msgstr "批量删除" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "欺凌、反复骚扰、跟踪骚扰或针对性攻击。" - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "欺凌、威胁、仇恨、暴力、突袭或宣扬自残的内容。" - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "加利福尼亚州" msgid "Call" msgstr "通话" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "通话与群聊设置" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "更换横幅" msgid "Change chat embed background" msgstr "更改聊天嵌入背景" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "更改邮箱" @@ -7150,8 +7116,8 @@ msgstr "修改好友昵称" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "修改群昵称" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "更改语言" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "修改我的群昵称" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "更改自己的昵称" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "转让所有权" @@ -7283,16 +7249,6 @@ msgstr "更改语音频道使用的语音区域。" msgid "Change which voice region this channel uses." msgstr "更改此频道使用的语音区域。" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "更改谁可以呼叫你或添加你为好友。" - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "更改谁可以联系你。" - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "请检查 {emailAddress} 的收件箱,获取授权链接。" msgid "Check your inbox for a verification email." msgstr "请检查收件箱,查收验证邮件。" +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "检查你的举报" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "复选框" @@ -7901,21 +7862,6 @@ msgstr "此账号已被限制结账。如需帮助,请联系 {supportEmail}。 msgid "Checkout unavailable" msgstr "无法结账" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "儿童安全问题" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "儿童安全或未成年人剥削" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "儿童安全或成人内容" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "选项" msgid "Choices: {choiceList}" msgstr "可选值:{choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "选择" @@ -8122,6 +8068,11 @@ msgstr "选择最能描述你社区的类别。你可以随时更改。" msgid "Choose the premium model" msgstr "选择会员模式" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "请重新选择原因" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "领取礼物" msgid "Claim your account" msgstr "认领你的账号" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "请先认领账号并验证邮箱,然后才能提交举报。" @@ -8352,12 +8303,12 @@ msgstr "请先认领账号,然后才能领取此礼物。" #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "请先认领你的账号,然后才能发送好友请求。" -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "认领您的账号即可发送举报。" @@ -8378,11 +8329,6 @@ msgstr "认领你的账号即可发起或加入 1 对 1 通话。" msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "领取礼物,激活你的 {premiumProductName} 订阅!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "冒充他人、品牌或组织。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "清除搜索输入" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "关闭弹窗" msgid "Close popout" msgstr "关闭浮窗" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "关闭此私信" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "关闭时最小化到托盘" msgid "Close window" msgstr "关闭窗口" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "关闭你与 {dmDisplayName} 当前的私信。这不会屏蔽该用户,你之后可以重新打开私信。" - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "要关闭与 {displayName} 的私信吗?你可以随时重新打开。" @@ -8837,7 +8773,7 @@ msgstr "煤炭主题" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "验证码" @@ -8868,7 +8804,7 @@ msgstr "来自 {productName} 应用的代码" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "验证码已重新发送" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "你可以加入的社群" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "社区" @@ -9131,7 +9065,7 @@ msgstr "社区拒听" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "社区调试" @@ -9150,16 +9084,6 @@ msgstr "社区已删除" msgid "Community DM" msgstr "社区私信" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "该社区专门用于发送垃圾信息、诈骗或滥用平台。" - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "该社区助长群起攻击或针对性骚扰。" - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "社区图标" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "社区 ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "需要填写社区 ID。" @@ -9526,6 +9450,11 @@ msgstr "确认新密码" msgid "Confirm password" msgstr "确认密码" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "确认声明以发送举报。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "在浏览器中继续" msgid "Continue to checkout" msgstr "继续结账" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "继续举报社区" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "继续举报此用户" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "将此频道转换为文本频道将移除所有关注它的频道。" msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "将收到的内容转为语音,无论是否来自 /tts。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "协调针对个人或社区的突袭、围攻或骚扰行为。" - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "已将网址复制到剪贴板" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "已将网址复制到剪贴板" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "复制消息 ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "复制消息链接" @@ -10643,6 +10553,11 @@ msgstr "无法加载帖子。请稍后重试。" msgid "Couldn't load settings" msgstr "无法加载设置" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "无法加载举报表单。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "无法加载此应用" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "无法处理图片" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "无法发布此消息" @@ -10825,11 +10740,6 @@ msgstr "无法发送邀请" msgid "Couldn't send invite. Try again." msgstr "无法发送邀请。请重试。" -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "发送失败。请重试。" - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "倒计时" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "居住国家/地区" @@ -11301,13 +11211,8 @@ msgstr "创建时间:" msgid "Credentials" msgstr "凭据" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "可信的威胁、露骨的暴力或美化暴力。" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "克罗地亚" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "切断低于响度阈值的音频,CPU 占用极低。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "塞浦路斯" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "捷克语" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "捷克" @@ -11965,7 +11870,7 @@ msgstr "调试频道" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "调试社区" @@ -12151,7 +12056,6 @@ msgstr "特拉华州" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "特拉华州" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "删除主题?" msgid "Delete this invite? Can't be undone." msgstr "删除此邀请?此操作无法撤销。" -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "删除此消息" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "删除这条消息?此操作无法撤销。" #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "删除此消息?无法撤销。此消息也将从关注此频道的每个社群中移除。" @@ -12461,11 +12359,6 @@ msgstr "删除你在此社区中的消息?" msgid "Delete your messages in this conversation?" msgstr "删除你在此对话中的消息?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "已删除" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "拒绝 {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "丹麦" @@ -12554,11 +12447,6 @@ msgstr "描述贴纸" msgid "Describe this media for screen readers" msgstr "为屏幕阅读器描述此媒体" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "描述内容为何违法" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "独立横幅" msgid "Detail" msgstr "细节" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "详情" @@ -13315,11 +13203,6 @@ msgstr "显示名称(可选)" msgid "Display scaling" msgstr "显示缩放" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "传播恶意软件、窃取凭据的工具或其他有害文件。" - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "私信" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "私信和好友请求设置" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "文档" msgid "Doesn't allow being added to group DMs" msgstr "不允许被添加到群聊" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "不会屏蔽对方。你可以稍后重新打开。" - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "改为捐赠" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "下载源代码映射,以便堆栈跟踪和开发者工具指向真实 msgid "Download video" msgstr "下载视频" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "人肉搜索、泄露隐私或跟踪骚扰。" - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "人肉搜索、跟踪、冒充他人或使用不当的个人资料。" - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "编辑 {tokenLabel} 的颜色" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "编辑社区资料" @@ -14043,7 +13908,7 @@ msgstr "编辑此频道中身份组和成员的权限覆盖。" #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "编辑个人资料" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "编辑个人资料中的当地时间" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "编辑已发布的帖子?" @@ -14191,13 +14056,13 @@ msgstr "在 {windowEndsOn} 之前可申请退款。此操作还会立即取消 #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "邮箱" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "邮箱地址" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "需要填写邮箱地址。" @@ -14721,16 +14586,6 @@ msgstr "新屏幕共享的首选编码器。" msgid "Encoder, SVC, and bitrate presets" msgstr "编码器、SVC 和比特率预设" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "宣扬自残" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "宣扬自杀、自残或饮食失调。" - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "由于此通话中有一位不受支持的参与者,端到端加密不 msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "由于此语音频道中有不受支持的参与者,端到端加密不可用。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "危害未成年人或存在儿童性剥削内容。" - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "回车" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "输入格式为 ABCD-1234 的代码。" @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "请输入有效的 {theOtherPlatform} 模板网址或代码。" #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "请输入有效的电子邮件地址。" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "请输入有效的消息链接。" @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "输入身份验证器应用中的 {digitCount} 位验证码。" #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "请输入验证码以继续。" @@ -15008,7 +14858,7 @@ msgstr "按 Enter 键<0><1>保存" msgid "Enter username" msgstr "输入用户名" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "输入验证码" @@ -15017,6 +14867,11 @@ msgstr "输入验证码" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "输入你的邮箱,我们会给你发送重置密码的链接。" +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "请输入您的法定全名以发送举报。" + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "按 Esc 键<0><1>取消" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "爱沙尼亚" @@ -15412,6 +15267,16 @@ msgstr "{earliest} 到期" msgid "Expires:" msgstr "过期时间:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "说明问题" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "说明问题以发送举报。" + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "外部链接可能存在风险,请谨慎点击。" msgid "Extra large" msgstr "特大" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "极端主义社区" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "移除自定义邀请链接失败。请重试。" #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "重新发送验证码失败。请重试。" @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "重置会员状态失败。" #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "发送验证码失败。请重试。" @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "消息发送失败。长按可查看选项。" #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "发送举报失败。请重试。" @@ -15840,11 +15700,6 @@ msgstr "从 {startLabel} 开始的表情上传失败:{errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "表情上传失败。请重试。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "可能在现实中造成伤害的不实信息。" - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "搜索贴纸" msgid "Fingerprint" msgstr "指纹" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "完成账号设置" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "请先完成账号设置" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "请先完成注册,然后才能发送好友请求。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "芬兰" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "芬兰语" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "名字和姓氏" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "高于 30 FPS 的帧率需要 {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "法国" @@ -16834,10 +16689,10 @@ msgstr "完整" msgid "Full dynamic range" msgstr "完整动态范围" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "法定全名" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "法定全名(举报儿童性虐待内容时可不填)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "德语" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "德国" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "返回" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "请返回并输入有效的邮箱地址。" @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "很高兴见到你,{username}!欢迎加入。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "希腊" @@ -17572,11 +17427,6 @@ msgstr "希腊语" msgid "Grid view" msgstr "网格视图" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "诱骗或儿童剥削内容。" - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "账号" msgid "Hang out with voice, video and screen share" msgstr "和好友语音、视频、共享屏幕畅聊" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "骚扰" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "骚扰(含成人内容)" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "骚扰或欺凌" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "骚扰或跟踪" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "骚扰或恶意辱骂" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "骚扰或威胁" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "硬件密钥" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "在大多数 Windows 和 macOS 系统上支持硬件加速。在旧设备上也能稳定运行。" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "有害虚假信息" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "曾购买过" msgid "Has ever purchased override" msgstr "曾购买过覆盖" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "仇恨言论" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "隐藏自己的屏幕共享?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "隐藏此频道中图片和视频的下载、在浏览器中打开和复制按钮。" +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "隐藏对方的消息,并阻止对方给你发私信" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "匈牙利语" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "匈牙利" @@ -18399,6 +18212,11 @@ msgstr "我是一个工具提示" msgid "I changed my mind" msgstr "我改变主意了" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "我谨本着善意确认,本通知中的信息和指控均准确、完整。" + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "闲置设置" msgid "Idle timeout" msgstr "闲置超时" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "如果涉及未成年人,请改用“{childSafetyReasonName}”。" - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "如果该地址关联了账号,我们已向其发送密码重置说明 msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "如果 macOS 要求退出并重新打开 {productName},请选择稍后。" -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "如果有人可能处于紧急危险中,请在安全的情况下联系当地紧急服务。" +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "如果有人正处于紧急危险中,请先联系当地紧急服务机构。" #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "如果有人让你在这里粘贴内容,那是一个骗局,他们可能会因此获取你的 {productName} 账号。" -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "如果涉及儿童性虐待材料或剥削未成年人,请立即提交举报,不要再次分享该材料。" - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "如果这是可信的紧急威胁,请同时联系当地紧急服务部门。" - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "如果这是迫在眉睫的恐怖威胁,请同时联系当地紧急服务部门。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "如果举报内容是此社区中的某条消息,请改为举报该消息。举报消息能为我们的安全团队提供最清晰的上下文,在评论中添加详细信息有助于我们更快地审核。仅当举报消息无法涵盖更广泛的问题时,才继续举报整个社区。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "如果举报内容是针对某条消息,请改为举报该消息。举报消息能为我们的安全团队提供最清晰的上下文,在评论中添加详细信息有助于我们更快地审核。仅当该消息无法涵盖更广泛的问题时,才继续举报整个用户。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "如果举报涉及特定消息,请改为举报最相关的消息。举报消息能为我们的安全团队提供最清晰的上下文,在评论中添加详细信息有助于我们更快地审核。仅当举报消息无法涵盖更广泛的问题时,才继续举报整个用户。" +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "如果你认为这属于违法内容,请说明涉及哪条法律以及原因。" #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "忽略此频道的慢速模式冷却时间。" msgid "Ignore virtual" msgstr "忽略虚拟设备" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "违法活动" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "违法活动或其他" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "非法销售、协助犯罪或不属于上述类别的明显违规行为。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "非法销售、协助犯罪或非法活动。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "图片" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "从剪贴板粘贴的图片将作为附件发送,但你没有在此频道中附加文件的权限。" -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "冒充" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "冒充或欺骗性媒体内容" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "不活跃" msgid "Inactive timeout" msgstr "不活跃超时" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "不当的个人资料" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "在 PDF 和打印件中包含我的两步验证备份代码" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "请填写社区 ID。" @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "邀请背景" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "邀请码(可选)" @@ -19471,7 +19220,7 @@ msgstr "隐藏邀请链接" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "邀请成员" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP 地址已授权" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "爱尔兰" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "斜体" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "意大利" @@ -20120,7 +19869,7 @@ msgstr "按键" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "稍后" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "拉脱维亚" @@ -20291,11 +20040,6 @@ msgstr "了解详情" msgid "Learn more about Visionary" msgstr "了解更多关于 Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "退出" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "退出私密话题" msgid "Leave silently" msgstr "静默退出" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "退出社区" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "在成员列表中将拥有此身份组的成员单独分组显示。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "立陶宛" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "正在加载…" #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "加载中…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "低" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "卢森堡" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "维护计划于 {localizedTime} 进行。预计持续时间:{duration}。" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "将 {userName} 设为群主?你将失去群主权限。" #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "设为群主" @@ -21091,38 +20830,21 @@ msgstr "设为群主" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "请确保此代码与 {PRODUCT_NAME} 应用中的代码匹配。" +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "发送前请仔细检查。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "个性化你的实例" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "恶意链接" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "马耳他" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "传播恶意软件" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "恶意软件或危险链接" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "恶意软件、窃取凭据或有害文件。" - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "在共享屏幕或直播前隐藏隐私信息。" msgid "Mask Visionary as subscription" msgstr "将 Visionary 显示为普通订阅" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "大量垃圾信息、欺诈、虚假赠品或账号滥用。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "成人内容媒体门控" msgid "Mature content not allowed" msgstr "不允许发布成人内容" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "成人内容或骚扰" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "成人内容或分级设置不当" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "成人内容覆盖" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "违反成人内容政策" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "未正确分级的成人内容。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "消息" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "消息链接" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "消息链接" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "私信列表中的消息预览" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "消息已发布" @@ -22211,6 +21908,11 @@ msgstr "消息时间" msgid "Message unpinned" msgstr "消息已取消置顶" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "你要举报的消息" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "明尼苏达州" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "未成年人面临风险、成人内容出现在不当位置,或不受欢迎的行为。" - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "更多" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "更多操作" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "嵌套" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "荷兰" @@ -24099,7 +23796,7 @@ msgstr "无结果" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "未找到结果" @@ -24858,6 +24555,16 @@ msgstr "只有受邀者和管理员才能看到此频道。" msgid "Only places I can't access anymore" msgstr "仅限我已无法访问的地方" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "仅举报你真心认为违反规则的内容,请勿重复发送相同的举报。" + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "仅举报你真心认为违反规则的内容。滥用举报功能将违反我们的<0>社区准则。" + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "不透明度" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "在 {instanceName} 上打开" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "打开弹出窗口" @@ -25379,11 +25084,6 @@ msgstr "打开“系统设置”→“隐私与安全性”→“屏幕录制” msgid "Open template JSON" msgstr "打开模板 JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "打开此社区的封禁对话框。" - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "打开设置" msgid "Opened the thread again" msgstr "重新打开了此帖子" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "在新标签页中打开" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "于 {date} 封禁" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "其他" @@ -25654,11 +25357,6 @@ msgstr "其他反应…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "我们的安全团队正在审核。有结果后,我们会通过私信和电子邮件通知你。" - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "暂时无法将所有权转让给<0>{username}。" #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "所有权已转让" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "在此粘贴 JSON 响应" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "请粘贴消息链接。" @@ -26260,11 +25958,6 @@ msgstr "下翻页" msgid "PgUp" msgstr "上翻页" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "网络钓鱼、欺诈、恶意链接或可能造成实际危害的虚假信息。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "选择网页搜索提供方" msgid "Pick an emoji" msgstr "选择表情符号" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "请选择一个选项以继续。" - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "选择你用户名后的四位数字" msgid "Pick the appearance this administrator account should start with." msgstr "选择此管理员账号的初始外观。" -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "请选择要查看的规则。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "请稍候片刻,然后再次尝试重命名。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "波兰" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "端口" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "葡萄牙" @@ -26872,11 +26555,6 @@ msgstr "轻触以添加表情回应" msgid "press to remove reaction" msgstr "轻触以移除表情回应" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "冒充他人,包括使用 AI 生成的欺骗性内容。" - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "阻止 <0>{targetUserTag} 在指定时间内发送消息、添加反应和连接语音频道。" @@ -27078,11 +26756,6 @@ msgstr "优先发言者" msgid "Privacy" msgstr "隐私" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "隐私或冒充" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "隐私设置提醒" msgid "Privacy URL" msgstr "隐私网址" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "侵犯隐私" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "侵犯隐私或人肉搜索" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "侵犯隐私或跟踪骚扰" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "个人资料类型" msgid "Profile updated" msgstr "个人资料已更新" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "个人资料、用户名或头像违规" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "宣扬对受保护群体的仇恨。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "宣扬、招募或协调暴力极端主义活动。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "宣扬或教唆自残或饮食失调。" +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "你正在举报的个人资料" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "代词: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "启用双重认证来保护你的 Visionary 账号。感谢你支持 {productName}!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "请至少提供一个用户 ID 或用户标签。" #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "请提供被举报用户的 ID 或用户名。" -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "请提供你的完整法定姓名,用于此声明。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "单选按钮可从一组选项中选择一个。" msgid "Radio group" msgstr "单选按钮组" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "组织突袭" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "准备好购买礼物了吗?" msgid "Ready to upgrade?" msgstr "准备好升级了吗?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "原因" @@ -28291,8 +27924,8 @@ msgstr "记住窗口大小和位置" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "移除 {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "将 {userName} 移出群聊?" @@ -28419,8 +28052,8 @@ msgstr "从收藏夹中移除" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "移出群聊" @@ -28458,11 +28091,6 @@ msgstr "从仅限 URL 的 GIF 收藏夹中移除" msgid "Remove icon" msgstr "移除图标" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "为频道中的所有人移除该消息。" - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "已从收藏夹中移除" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "已移出群聊" @@ -28919,28 +28547,18 @@ msgstr "举报社区" msgid "Report a message" msgstr "举报消息" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "举报违规行为,或查找管理联系人和偏好设置的工具。" - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "举报用户资料" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "举报社区" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "举报详情" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "举报违法内容" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "报告问题" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "举报消息" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "举报个人资料" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "举报已发送" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "举报类型" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "举报用户" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "被举报用户标签(可选)" @@ -29100,6 +28716,10 @@ msgstr "需满足中等安全等级的所有要求,并且加入社区至少 10 msgid "Resend" msgstr "重新发送" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "重新发送({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "重新发送({newSecondsRemaining} 秒)" @@ -29108,7 +28728,7 @@ msgstr "重新发送({newSecondsRemaining} 秒)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "重新发送({originalSecondsRemaining} 秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "重新发送({resendCooldownSeconds} 秒)" @@ -29122,7 +28742,7 @@ msgstr "重新发送({resendSecondsRemaining} 秒)" msgid "Resend ({secondsRemaining}s)" msgstr "重新发送({secondsRemaining} 秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "重新发送验证码" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "身份组更新成功" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "罗马尼亚" @@ -29947,7 +29567,7 @@ msgstr "饱和度" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "向 <0>{displayName} 打个招呼吧。你们的私信对话从这 msgid "Scale" msgstr "缩放" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "诈骗、恶意软件或虚假信息" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "使用你的身份验证器应用扫描二维码。" @@ -30855,11 +30470,6 @@ msgstr "选择" msgid "Select {accessibleName}" msgstr "选择 {accessibleName}" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "选择类别" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "选择一个你拥有{permissionName}权限的社区,或你所属的群聊。" #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "选择国家" @@ -30911,11 +30521,6 @@ msgstr "选择重定向 URI" msgid "Select a scenario to apply..." msgstr "选择要应用的场景…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "选择违规类别。" - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "选择你想在新设备上登录的账号。" msgid "Select voice processing mode" msgstr "选择语音处理模式" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "选择要举报的内容。" #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "选择你居住的国家/地区。" #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "选择…" @@ -31037,13 +30642,6 @@ msgstr "已选:{0}(最长 {1})" msgid "Selections" msgstr "选择控件" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "自残或自杀" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "发送操作消息(斜体显示)。" msgid "Send animation" msgstr "发送动图" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "再发送一份举报" @@ -31138,7 +30736,7 @@ msgstr "发送按钮" msgid "Send code" msgstr "发送验证码" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "发送 DSA 举报" @@ -31158,9 +30756,9 @@ msgstr "发送高达 {size} 的文件" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "发送好友请求" @@ -31220,8 +30818,8 @@ msgstr "在帖子中发送消息" msgid "Send messages, images, GIFs and emoji" msgstr "发送消息、图片、GIF 和表情符号" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "发送举报" @@ -31255,7 +30853,7 @@ msgstr "要把这条置顶消息送回过去吗?" msgid "Send TTS messages" msgstr "发送 TTS 消息" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "发送验证码" @@ -31273,11 +30871,6 @@ msgstr "发送语音消息" msgid "Send:" msgstr "发送:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "发送恶意软件或危险链接" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "分享主题" msgid "Share voice activity with all friends?" msgstr "与所有好友分享语音活动?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "请提供我们团队评估此事所需的信息。" @@ -31709,11 +31302,6 @@ msgstr "请提供我们团队评估此事所需的信息。" msgid "Share with a friend" msgstr "分享给好友" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "分享给社区管理员。" - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "共享窗口" msgid "Shared window audio" msgstr "共享窗口音频" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "泄露他人个人信息、跟踪骚扰用户或组织侵犯隐私的行为。" - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "泄露个人信息" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "滑块" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "斯洛伐克" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "斯洛文尼亚" @@ -32889,11 +32467,6 @@ msgstr "慢速模式模拟" msgid "Slowmode time remaining" msgstr "慢速模式剩余时间" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "蔑称、非人化言论或针对受保护群体的攻击。" - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "准备此贴纸时出错了。请尝试其他文件或稍后重试。" #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "发布时出现问题。请稍后重试。" @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "宽敞的布局,消息之间视觉分隔清晰。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "西班牙" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "垃圾信息账号" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "垃圾信息分类" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "垃圾信息或诈骗" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "垃圾信息或诈骗社区" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "垃圾信息、诈骗或钓鱼账号" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "垃圾信息、诈骗或钓鱼" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "最小化启动" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "重新开始" @@ -33752,22 +33302,26 @@ msgstr "保持登录状态" msgid "Step {current} of {total}" msgstr "第 {current} 步,共 {total} 步" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "第 1 步" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "第 2 步" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "第 3 步" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "第 4 步" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "第 5 步" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "停止发送公告?" msgid "Stop hiding muted channels by default?" msgstr "不再默认隐藏已静音频道?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "停止接收消息和好友请求。" - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "停止麦克风测试" @@ -33959,11 +33508,6 @@ msgstr "停止修补 Node.prototype 的 insertBefore 和 removeChild。当页面 msgid "Stop ringing" msgstr "停止响铃" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "不再看到该社区的内容和成员。" - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "发送消息时,将 :) 和 <3 等常见颜文字替换为表情" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "瑞典" @@ -34804,11 +34348,6 @@ msgstr "轻触添加备注" msgid "tar.gz archive" msgstr "tar.gz 压缩包" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "基于受保护特征针对他人。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "服务条款" msgid "Terms URL" msgstr "条款网址" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "恐怖主义或暴力极端主义" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "泰语" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "感谢你帮助维护 {productName} 的安全。我们会尽快审核你的举报。" +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "感谢你的提醒" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "感谢你告知我们。此内容本身并未违反我们的规则,因此我们未发送举报。" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "感谢你告知我们。此内容本身并未违反我们的规则,因此我们没有发送举报。如果内容针对某人或包含侮辱性言辞,请再次举报并选择“辱骂性或有害的内容”。" + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "无法完成。请重试或取消。" msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "这看起来不是有效的颜色。请尝试使用十六进制、rgb()、hsl() 或 CSS 颜色名称。" -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "网址格式不正确。" @@ -35104,6 +34653,11 @@ msgstr "您在另一台设备上的 {PRODUCT_NAME} 应用中,可以在“在 msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} 应用未登录。您可以关闭此标签页。" +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName} 安全团队将审核你的举报。我们不会透露举报人是你。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "提供的 redirect_uri 未在此应用中注册。" msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "提供的 redirect_uri 必须使用 HTTP 或 HTTPS。" +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "举报表单已更改。请重新开始。" + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "此实例上的用户名标签已设置。它们无法再更改。" #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "验证码无效或已过期。" @@ -36115,13 +35674,8 @@ msgstr "该成员已不在语音频道中。" msgid "This message can only be forwarded to age-restricted channels" msgstr "此消息只能转发到已设年龄限制的频道" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "此消息已删除。" - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "此消息已发布" @@ -36279,11 +35833,6 @@ msgstr "此帖子已关闭。发送消息将重新开启它。" msgid "This thread is locked. Only moderators can send messages." msgstr "此频道已锁定。只有版主可以发送消息。" -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "该用户" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "该用户已限制其个人资料。部分详细信息对非好友用户隐藏。" @@ -36292,11 +35841,6 @@ msgstr "该用户已限制其个人资料。部分详细信息对非好友用户 msgid "This user has no roles in this community." msgstr "该用户在此社区中没有身份组。" -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "该用户已被此社区封禁。" - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "该用户已不可用。" @@ -36465,16 +36009,6 @@ msgstr "主题已更新" msgid "Threads" msgstr "话题" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "威胁、跨社区跟踪他人或不受欢迎的接触。" - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "威胁、骚扰或伤害" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "已将 {targetUserTag} 禁言" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "禁言" @@ -36787,6 +36321,11 @@ msgstr "色调" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "将 HDR 图像色调映射到标准范围,降低峰值亮度。" +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "发送的验证码过多。请等待 {duration} 后重试。" + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "转让社区所有权" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "要将群聊所有权转让给 {userName} 吗?" @@ -37561,7 +37100,7 @@ msgstr "请先取消屏蔽,才能发送好友请求。" #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "取消屏蔽用户" @@ -37607,16 +37146,6 @@ msgstr "取消所有设备的拒听" msgid "Undeafen yourself" msgstr "取消自己的拒听" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "未成年人或儿童安全问题" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "未成年用户" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "直到我重新开启" msgid "Unverified email" msgstr "邮箱未验证" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "不受欢迎的行为,或出现在不当位置的成人内容。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "不受欢迎的成人行为、评论或请求。" - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "最多可添加 {DISCOVERY_MAX_TAGS} 个标签,帮助大家发现你的社区。这些标签会显示在社区发现的搜索结果中。" @@ -38840,11 +38359,6 @@ msgstr "使用浅色主题" msgid "Use native title bar" msgstr "使用原生标题栏" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "仅当它明确违反 {productName} 规则且不符合上述任何选项时使用。" - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "仅用于此社区。" msgid "User" msgstr "用户" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "用户可能未成年,或涉嫌诱骗、剥削儿童。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "用户调试" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "用户 ID(可选)" @@ -39061,12 +38570,12 @@ msgstr "用户不存在" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "用户资料" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "用户资料:{tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "用户设置" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "用户标签(可选)" @@ -39339,7 +38848,7 @@ msgstr "已认证社区" msgid "Verify" msgstr "验证" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "验证" @@ -39368,7 +38877,7 @@ msgstr "验证你的身份" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "验证邮箱" @@ -39718,7 +39227,7 @@ msgstr "查看备用码" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "查看社区个人资料" @@ -39751,7 +39260,7 @@ msgstr "查看礼物" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "查看全局个人资料" @@ -39847,26 +39356,6 @@ msgstr "观众加入直播" msgid "Viewer leaves stream" msgstr "观众离开直播" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "违规类别" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "违规内容在用户的个人资料中,而不是某条具体消息。" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "暴力或暴力威胁" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "暴力或血腥内容" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "我们已将此表情的尺寸调整并压缩到 128x128 像素,但它 msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "我们已将此贴纸的尺寸调整并压缩到 320x320 像素,但它仍有 {fileSize}。上限为 {maxSize}。请尝试使用更简单的图片、更少的颜色或更小的源文件。" -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "验证码已发送至 {email}。" @@ -40472,7 +39961,7 @@ msgstr "我们会尽快处理。存档准备就绪后,你会收到一封邮件 msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "我们将恢复您的旧邮箱,退出其他登录会话,禁用多重身份验证,并使用新密码保护您的账户。" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "我们将发送一个验证码,以确认你能收到这份举报的更新。" @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "西弗吉尼亚州" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "违反了哪类规则?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "在忙些什么?" msgid "What's new" msgstr "新功能" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "你举报的原因是什么?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "如果未设置自定义阈值日期,则没有 <0>{readMessageHistoryPermissionLabel} 权限的成员无法查看任何历史消息。他们只能实时查看收到的消息,并且这些消息会在他们重启客户端后消失。" @@ -40832,11 +40321,6 @@ msgstr "哪些社区" msgid "Which conversations" msgstr "哪些对话" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "违反了哪条规则?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "开启按住说话时,快捷键会控制你的麦克风,因此静音按钮已禁用。" @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "你无法在此频道中附加文件。" #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "你不能加自己为好友" @@ -41341,7 +40825,7 @@ msgstr "你无法给该用户发消息" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "你必须同意服务条款才能创建账号" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "发送举报前,请先验证你的邮箱。" @@ -41891,6 +41375,11 @@ msgstr "你使用的是旧价格。此套餐的当前价格为 {currentSubscript msgid "You're sending messages too quickly" msgstr "你发送消息的速度太快了" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "你发送举报的速度过快。请稍后再试。" + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "你正在查看较早的消息" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "你添加的人数超过了群聊上限。请移除几位后重试。" +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "你已举报过此消息。" + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "你今天已经举报过此个人资料了。" + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "你的账户和设置未被更改或删除。" msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "你的操作未能完成,因为它被我们的安全系统标记了。如果你认为这是误判,请联系支持团队。" +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "你的回答" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "你的申请正在审核中。你仍可以更新展示信息或撤回申请。" @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "你的浏览器需要用户交互后才能播放音频。请点击下方按钮以启用语音聊天。" #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "你的更改将触达关注此频道的所有社群,这可能需要一分钟时间。每条已发布的动态允许快速编辑 3 次,之后每 20 分钟可编辑 1 次。" @@ -42311,6 +41815,11 @@ msgstr "你的新昵称,留空则重置。" msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "您旧的恢复密钥已失效。请妥善保管新的恢复密钥。" +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "你的选项" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "你的地区" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "你的续订付款失败,但<0/>在 <1>{graceDate} 之前仍然有效。请在此之前更新付款方式,以保留你的订阅。" +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "你的举报未能发送。请重试。" + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "你的订阅将在下次续订时切换为按年计费。" msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "你的主题 CSS 过大,无法分享。请精简后重试。" -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "你的用户名(选填)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index b1d944a6d..7610b45e2 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -2081,7 +2081,7 @@ msgstr "還剩 {remainingSlotCount} 個" #: src/features/channel/components/CrosspostCommunityCard.tsx:247 #: src/features/channel/components/InviteEmbed.tsx:250 #: src/features/channel/components/InviteEmbed.tsx:358 -#: src/features/channel/components/InviteEmbed.tsx:629 +#: src/features/channel/components/InviteEmbed.tsx:627 msgid "{renderedMemberCount} {memberCount, plural, one {member} other {members}}" msgstr "{renderedMemberCount} {memberCount, plural, one {位成員} other {位成員}}" @@ -2134,7 +2134,7 @@ msgid "{seconds, plural, one {Your invite link expires in # second.} other {Your msgstr "{seconds, plural, one {您的邀請連結將於 # 秒後過期。} other {您的邀請連結將於 # 秒後過期。}}" #. Generic multi-select summary label. selectedCount is the number of selected options. -#: src/features/ui/components/form/FormCombobox.tsx:80 +#: src/features/ui/components/form/FormCombobox.tsx:81 msgid "{selectedCount} selected" msgstr "已選取 {selectedCount} 個" @@ -2957,11 +2957,6 @@ msgstr "帳號資料" msgid "Account details unavailable" msgstr "帳號詳細資料無法取得" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:258 -msgid "Account exists to spam, scam, or abuse the platform." -msgstr "此帳號用於發送垃圾訊息、詐騙或濫用平台。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AccountSecuritySections.ts:124 msgid "Account removal" @@ -3639,11 +3634,6 @@ msgstr "新增日期:{createdDate}" msgid "Added: {createdDate} • last used: {lastUsedDate}" msgstr "新增日期:{createdDate} • 上次使用:{lastUsedDate}" -#. Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see. -#: src/features/moderation/components/report/ReportStepDetails.tsx:72 -msgid "Additional comments (optional)" -msgstr "其他意見(選填)" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:26 @@ -4186,8 +4176,8 @@ msgstr "已兌換" msgid "Already set to cancel" msgstr "已排定取消" -#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer). -#: src/features/messaging/commands/MessageCommands.tsx:94 +#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer). +#: src/features/messaging/commands/MessageCommands.tsx:98 msgid "Also report this message to the {productName} Safety Team" msgstr "同時將此訊息檢舉給 {productName} 安全團隊" @@ -4576,11 +4566,6 @@ msgstr "每年" msgid "Another checkbox" msgstr "另一個核取方塊" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:362 -msgid "Another clear rule violation" -msgstr "另一個明顯違反規定的行為" - #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:301 msgid "Another round checkbox" msgstr "另一個圓形核取方塊" @@ -5247,7 +5232,7 @@ msgid "Audio upload" msgstr "上傳音訊" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:111 +#: src/features/moderation/components/report/OptionDescriptors.ts:24 msgid "Austria" msgstr "奧地利" @@ -5620,6 +5605,7 @@ msgstr "目前離開中" #. Accessible label of the back button on the Plutonium page in the mobile layout. #. Generic secondary button label that returns to the previous step or screen. +#. Report flow: footer button that returns to the previous question. #: src/features/auth/flow/IpAuthorizationScreen.tsx:164 #: src/features/connection/components/modals/AddConnectionModal.tsx:397 #: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:167 @@ -5628,7 +5614,8 @@ msgstr "目前離開中" #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:381 #: src/features/guild/components/modals/add_guild_modal/TemplateImportForm.tsx:401 #: src/features/i18n/utils/CommonMessageDescriptors.ts:834 -#: src/features/moderation/components/report/ReportStepDetails.tsx:312 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:34 +#: src/features/moderation/components/report/ReportStepDetails.tsx:374 #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:269 msgid "Back" msgstr "返回" @@ -5788,9 +5775,7 @@ msgstr "備用碼已重新產生" msgid "Badge" msgstr "徽章" -#. IAR modal: quick-action card button label for opening the ban dialog. #. Short moderation action label. Ban a member from a community by removing them and preventing rejoining. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:134 #: src/features/moderation/utils/ModerationMessageDescriptors.ts:5 msgid "Ban" msgstr "停權" @@ -5819,7 +5804,7 @@ msgstr "停權期間" #. Moderation action that bans the selected member from the community. #. Moderation action that bans the selected member from the community. #: src/features/moderation/components/modals/BanMemberModal.tsx:274 -#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:67 +#: src/features/ui/action_menu/GuildMemberContextMenu.tsx:66 #: src/features/ui/action_menu/items/GuildMemberMenuItems.tsx:51 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:124 msgid "Ban member" @@ -5840,21 +5825,11 @@ msgstr "將成員從社群停權,並可選擇刪除他們近期的訊息。" msgid "Ban reason" msgstr "停權原因" -#. IAR modal: quick-action card title for banning the reported user (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:126 -msgid "Ban this user" -msgstr "將此使用者停權" - #. Section heading in the voice connection status popout for current media bitrate usage. #: src/features/voice/components/voice_connection_status/shared.ts:67 msgid "Bandwidth" msgstr "頻寬" -#. IAR modal: disabled-state label on the ban card after the user is banned from this community. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:138 -msgid "Banned" -msgstr "已停權" - #: src/features/moderation/components/modals/BanMemberModal.tsx:134 msgid "Banned {targetUserTag} from the community" msgstr "已將 {targetUserTag} 從社群停權" @@ -5937,7 +5912,7 @@ msgid "Before date" msgstr "此日期之前" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:115 +#: src/features/moderation/components/report/OptionDescriptors.ts:28 msgid "Belgium" msgstr "比利時" @@ -6031,7 +6006,7 @@ msgstr "位元率" #. Generic destructive action label that blocks a user. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:25 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:22 #: src/features/user/components/settings_utils/search_index/BlockedUsersIndex.ts:14 msgid "Block" msgstr "封鎖" @@ -6042,6 +6017,11 @@ msgctxt "sensitive-media-filter-level" msgid "Block" msgstr "隱藏" +#. Report flow: title of the block action on the final screen. {name} is the display name of the reported user. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:71 +msgid "Block {name}" +msgstr "封鎖 {name}" + #. Body of the destructive confirmation modal for blocking a user. Explains the consequences. {userName} is the target user. #: src/features/relationship/utils/RelationshipActionUtils.tsx:90 msgid "Block {userName}? They won't be able to message or friend you." @@ -6087,11 +6067,6 @@ msgstr "在所有社群中封鎖" msgid "Block spoiler" msgstr "區塊劇透" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:386 -msgid "Block this user" -msgstr "封鎖此使用者" - #. Title of the destructive confirmation modal for blocking a user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:86 msgid "Block user" @@ -6102,6 +6077,12 @@ msgstr "封鎖使用者" msgid "Blocked" msgstr "已封鎖" +#. Report flow: disabled button label shown after the reporter blocked the one reported user. A state of that single person, not a list of blocked users. Use the singular or an impersonal past participle. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:81 +msgctxt "report-flow-blocked-button" +msgid "Blocked" +msgstr "已封鎖" + #. Activity log detail line under a change to a member, for a block a moderator put on the member. The block stops the member from sending messages, reacting and joining voice, and it lifts on its own at the given date. Spell the effect out the way the English does. Do not name it with a word for a ban, a kick, a mute, a suspension or a waiting period, and do not say that time ran out. Keep the three things that are blocked. It continues the entry summary, so it has no subject. It is a past tense record of an action that already happened, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. {date} is when the block ends, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:250 msgid "Blocked the member from sending messages, reacting and joining voice until {date}" @@ -6505,7 +6486,7 @@ msgid "Built-in translators" msgstr "內建翻譯工具" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:119 +#: src/features/moderation/components/report/OptionDescriptors.ts:32 msgid "Bulgaria" msgstr "保加利亞" @@ -6519,16 +6500,6 @@ msgstr "保加利亞文" msgid "Bulk delete" msgstr "批次刪除" -#. IAR modal: rule description for a message report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:150 -msgid "Bullying, repeated unwanted contact, stalking, or targeted abuse." -msgstr "霸凌、反覆的不受歡迎聯繫、跟蹤騷擾或針對性攻擊。" - -#. IAR modal: rule-category description for the targeted-harm group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:49 -msgid "Bullying, threats, hate, violence, raids, or content that pushes self-harm." -msgstr "霸凌、威脅、仇恨、暴力、突襲,或助長自殘的內容。" - #. Short label in the app constants. #: src/features/app/constants/AppConstants.ts:45 msgid "Busy right now" @@ -6640,11 +6611,6 @@ msgstr "加利福尼亞州" msgid "Call" msgstr "通話" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:438 -msgid "Call & group chat settings" -msgstr "通話與群組聊天設定" - #. Status label in the mobile direct-call lobby bottom sheet. Indicates an ongoing call you can join. #. Status text in the DM channel header pill when an ongoing call exists that the user can join. #: src/features/channel/components/channel_view/dm_channel_view/shared.ts:100 @@ -7131,7 +7097,7 @@ msgstr "更換封面" msgid "Change chat embed background" msgstr "變更聊天嵌入背景圖片" -#: src/features/moderation/components/report/ReportStepVerification.tsx:119 +#: src/features/moderation/components/report/ReportStepVerification.tsx:150 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:97 msgid "Change email" msgstr "變更電子郵件" @@ -7150,8 +7116,8 @@ msgstr "更改好友的暱稱" #. Group DM action that opens the change-nickname modal for the selected user. #. Group DM action that opens the change-nickname modal for the selected user. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:97 -#: src/features/ui/action_menu/UserContextMenu.tsx:113 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:96 +#: src/features/ui/action_menu/UserContextMenu.tsx:112 msgid "Change group nickname" msgstr "變更群組暱稱" @@ -7193,7 +7159,7 @@ msgid "Change language" msgstr "變更語言" #. Group DM action that lets the current user change their own nickname in the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:88 msgid "Change my group nickname" msgstr "變更我的群組暱稱" @@ -7218,7 +7184,7 @@ msgid "Change own nickname" msgstr "變更自己的暱稱" #. Action that transfers ownership of the selected group or community. -#: src/features/ui/action_menu/UserContextMenu.tsx:101 +#: src/features/ui/action_menu/UserContextMenu.tsx:100 msgid "Change owner" msgstr "變更擁有者" @@ -7283,16 +7249,6 @@ msgstr "更改語音頻道使用的語音區域。" msgid "Change which voice region this channel uses." msgstr "更改此頻道使用的語音區域。" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:442 -msgid "Change who can call or add you." -msgstr "變更誰可以與您通話或加您為好友。" - -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:430 -msgid "Change who can reach you." -msgstr "變更誰可以聯絡您。" - #. Short label in the email change modal. Keep it concise. #: src/features/user/components/modals/EmailChangeModal.tsx:39 msgid "Change your email" @@ -7860,6 +7816,11 @@ msgstr "請查看 {emailAddress} 收件匣中的授權連結。" msgid "Check your inbox for a verification email." msgstr "請查看收件匣中的驗證電子郵件。" +#. Report flow: title of the summary screen shown before the report is sent. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:5 +msgid "Check your report" +msgstr "檢查您的檢舉" + #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:250 msgid "Checkboxes" msgstr "核取方塊" @@ -7901,21 +7862,6 @@ msgstr "此帳號無法使用結帳功能。如需協助,請聯絡 {supportEma msgid "Checkout unavailable" msgstr "無法結帳" -#. Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface. -#: src/features/moderation/components/report/OptionDescriptors.ts:57 -msgid "Child safety concerns" -msgstr "兒童安全疑慮" - -#. IAR modal: child-safety rule label (message and guild reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:85 -msgid "Child safety or exploitation of minors" -msgstr "兒童安全或未成年人剝削" - -#. IAR modal: rule-category label grouping child-safety and mature-content reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:53 -msgid "Child safety or mature content" -msgstr "兒童安全或成人內容" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:140 msgid "Chinese (simplified)" @@ -7941,7 +7887,7 @@ msgstr "選項" msgid "Choices: {choiceList}" msgstr "選項:{choiceList}" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:27 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:36 msgid "Choose" msgstr "選擇" @@ -8122,6 +8068,11 @@ msgstr "選擇最符合您社群的類別。您可以隨時變更。" msgid "Choose the premium model" msgstr "選擇進階方案模式" +#. Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step. +#: src/features/moderation/components/report/ReportStepDetails.tsx:80 +msgid "Choose the reason again" +msgstr "再選一次原因" + #. Empty-state title in the screen-share picker displays tab when running in a web browser. #: src/features/voice/components/modals/screen_share_picker_modal/useNativePickerCopy.ts:20 msgid "Choose the screen in your browser" @@ -8271,8 +8222,8 @@ msgstr "領取禮物" msgid "Claim your account" msgstr "認領您的帳號" -#. IAR modal: body of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:28 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:124 msgid "Claim your account and verify your email to send reports." msgstr "請先認領帳號並驗證電子郵件,才能傳送檢舉。" @@ -8352,12 +8303,12 @@ msgstr "認領您的帳號即可兌換此禮物。" #: src/features/channel/components/direct_message/AddFriendForm.tsx:70 #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:37 #: src/features/ui/action_menu/items/RelationshipMenuItems.tsx:40 -#: src/features/user/components/modals/UserProfileModal.tsx:122 +#: src/features/user/components/modals/UserProfileModal.tsx:125 msgid "Claim your account to send friend requests." msgstr "請先認領帳號,才能傳送好友邀請。" -#. IAR modal: body of the account-not-ready notice on an instance where people sign in with a username. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:32 +#. Report flow: body of the notice on the summary screen when the account cannot send reports yet, on an instance where people sign in with a username. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:128 msgid "Claim your account to send reports." msgstr "領取你的帳號即可傳送檢舉。" @@ -8378,11 +8329,6 @@ msgstr "請先認領帳號,才能開始或加入一對一通話。" msgid "Claim your gift to activate your {premiumProductName} subscription!" msgstr "領取您的禮物,啟用您的 {premiumProductName} 訂閱!" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:318 -msgid "Claiming to be another person, brand, or organization." -msgstr "假冒他人、品牌或組織。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:175 msgid "Clean link" @@ -8501,7 +8447,7 @@ msgstr "清除搜尋輸入" #. Accessible label for the combobox clear button. #. Button or menu action label in the authorized apps tab. Keep it concise. #. Button or menu action label in the devices tab. Keep it concise. -#: src/features/ui/components/form/FormCombobox.tsx:92 +#: src/features/ui/components/form/FormCombobox.tsx:93 #: src/features/user/components/modals/tabs/AuthorizedAppsTab.tsx:46 #: src/features/user/components/modals/tabs/DevicesTab.tsx:62 msgid "Clear selection" @@ -8733,11 +8679,6 @@ msgstr "關閉視窗" msgid "Close popout" msgstr "關閉子母畫面" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:406 -msgid "Close this DM" -msgstr "關閉此私訊" - #. Body of the close confirmation alert for a group DM. Reassures that the DM can be reopened. #: src/features/channel/components/direct_message/useDMListItemHandlers.tsx:54 msgid "Close this group DM? You can reopen it anytime." @@ -8765,13 +8706,8 @@ msgstr "關閉至系統匣" msgid "Close window" msgstr "關閉視窗" -#. Confirmation copy in the IAR modal for the Close DM quick action. Reassures the user the action is not destructive. -#: src/features/moderation/components/report_modal/IARModal.tsx:67 -msgid "Close your current DM with {dmDisplayName}. This does not block the user, and you can reopen the DM later." -msgstr "關閉您與 {dmDisplayName} 目前的私訊。這不會封鎖該使用者,您之後也可以重新開啟私訊。" - #. Confirm dialog body before closing a DM channel. -#: src/features/ui/action_menu/UserContextMenu.tsx:109 +#: src/features/ui/action_menu/UserContextMenu.tsx:108 msgid "Close your DM with {displayName}? You can reopen it anytime." msgstr "要關閉您與 {displayName} 的私訊嗎?您可以隨時重新開啟。" @@ -8837,7 +8773,7 @@ msgstr "煤炭主題" #. Generic field label for a short verification or backup code the user types in. #: src/features/i18n/utils/CommonMessageDescriptors.ts:858 #: src/features/invite/components/InviteListItem.tsx:77 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:29 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:38 msgid "Code" msgstr "驗證碼" @@ -8868,7 +8804,7 @@ msgstr "來自 {productName} 應用程式的驗證碼" #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 -#: src/features/moderation/components/pages/ReportPage.tsx:62 +#: src/features/moderation/components/pages/ReportPage.tsx:83 msgid "Code resent" msgstr "已重新傳送驗證碼" @@ -9090,14 +9026,12 @@ msgid "Communities you can join" msgstr "你可以加入的社群" #. Community settings sidebar category grouping discovery and the vanity URL. -#. Developer / debug surface — keep terse and technical. Fallback label used in the IAR preview tool when no community context is supplied. #. Field label in the follow announcement channel dialog. The user picks the community that receives updates. #. Generic label for a community. Used as a field label, filter label, or fallback community name. #. Tag shown next to messages copied from a followed announcement channel. Keep it one short word. #: src/features/channel/components/ChannelUserTag.tsx:27 #: src/features/channel/components/modals/ChannelFollowModal.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:882 -#: src/features/moderation/components/report_modal/IARModalPreview.tsx:16 #: src/features/user/components/settings_utils/GuildSettingsConstants.ts:223 msgid "Community" msgstr "社群" @@ -9131,7 +9065,7 @@ msgstr "社群耳機靜音" #. Title of the developer-mode community debug modal. #. Title of the developer-mode community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:27 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:81 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:78 msgid "Community debug" msgstr "社群偵錯" @@ -9150,16 +9084,6 @@ msgstr "社群已刪除" msgid "Community DM" msgstr "社群私訊" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:262 -msgid "Community exists to spam, scam, or abuse the platform." -msgstr "社群的存在是為了濫發訊息、詐騙或濫用平台。" - -#. IAR modal: rule description for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:166 -msgid "Community facilitates pile-ons or targeted abuse." -msgstr "社群助長群體圍攻或針對性騷擾。" - #. Form label for the dropdown that switches the community filter between exclude and include-only modes. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:165 msgid "Community filter" @@ -9171,11 +9095,11 @@ msgid "Community icon" msgstr "社群圖示" #. Field label on the details step of the DSA report form (community report). The reported community's snowflake ID. -#: src/features/moderation/components/report/ReportStepDetails.tsx:43 +#: src/features/moderation/components/report/ReportStepDetails.tsx:42 msgid "Community ID" msgstr "社群 ID" -#: src/features/moderation/components/report/ReportStepDetails.tsx:237 +#: src/features/moderation/components/report/ReportStepDetails.tsx:283 msgid "Community ID is required." msgstr "必須填寫社群 ID。" @@ -9526,6 +9450,11 @@ msgstr "確認新密碼" msgid "Confirm password" msgstr "確認密碼" +#. Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked. +#: src/features/moderation/components/pages/ReportPage.tsx:128 +msgid "Confirm the statement to send the report." +msgstr "請確認聲明以送出檢舉。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AppearanceIndex.ts:30 @@ -9816,16 +9745,6 @@ msgstr "在瀏覽器中繼續" msgid "Continue to checkout" msgstr "繼續結帳" -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:37 -msgid "Continue to report community" -msgstr "繼續檢舉社群" - -#. Button or menu action label in the report action utils helper. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:27 -msgid "Continue to report user" -msgstr "繼續檢舉使用者" - #: src/features/auth/components/modals/SudoVerificationModal.tsx:343 #: src/features/auth/components/modals/SudoVerificationModal.tsx:356 #: src/features/auth/components/modals/SudoVerificationModal.tsx:379 @@ -9926,11 +9845,6 @@ msgstr "將此頻道轉換為文字頻道將會移除所有追蹤它的頻道。 msgid "Converts incoming content to speech, regardless of whether it came from /tts." msgstr "將收到的內容轉換為語音,無論是否來自 /tts。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:342 -msgid "Coordinates raids, brigading, or harassment against people or communities." -msgstr "協調對個人或社群發動突襲、集體圍攻或騷擾。" - #. Generic short status label confirming a value was copied to the clipboard. #: src/features/auth/flow/HandoffCodeDisplay.tsx:165 #: src/features/i18n/utils/CommonMessageDescriptors.ts:395 @@ -9960,7 +9874,6 @@ msgstr "已將網址複製到剪貼簿" #. Button or menu action label in the gift inventory tab. Keep it concise. #. Button that copies account backup codes to the clipboard. #. Button that copies the account recovery key to the clipboard. -#. IAR modal: quick-action card button label. #. Native Edit menu item that copies the selection to the clipboard. Imperative verb, not the noun. #. Short label in the settings dialog copy link section. #. Textarea right-click context menu item that copies the selected text. @@ -9968,7 +9881,6 @@ msgstr "已將網址複製到剪貼簿" #: src/features/auth/components/modals/BackupCodesModal.tsx:96 #: src/features/auth/components/modals/RecoveryKitModal.tsx:417 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:50 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:402 #: src/features/platform/utils/DesktopLocaleBridge.ts:64 #: src/features/theme_studio/sections/QuickCssSection.tsx:214 #: src/features/ui/action_menu/MessageContextMenu.tsx:73 @@ -10203,11 +10115,9 @@ msgid "Copy message ID" msgstr "複製訊息 ID" #. Generic action label that copies a permalink to the selected message. -#. IAR modal: quick-action card title. #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/i18n/utils/CommonMessageDescriptors.ts:532 #: src/features/input/state/input_keybind/shared.ts:290 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:394 msgid "Copy message link" msgstr "複製訊息連結" @@ -10643,6 +10553,11 @@ msgstr "無法載入貼文。請稍後再試。" msgid "Couldn't load settings" msgstr "無法載入設定" +#. Report flow: error shown when the report questions could not be loaded. A Try again button follows. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:91 +msgid "Couldn't load the report form." +msgstr "無法載入檢舉表單。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:585 msgid "Couldn't load this application" msgstr "無法載入此應用程式" @@ -10696,7 +10611,7 @@ msgid "Couldn't process image" msgstr "無法處理圖片" #. Title of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:126 +#: src/features/messaging/commands/MessageCommands.tsx:130 msgid "Couldn't publish this message" msgstr "無法發布此訊息" @@ -10825,11 +10740,6 @@ msgstr "無法傳送邀請" msgid "Couldn't send invite. Try again." msgstr "無法傳送邀請。請再試一次。" -#. Error toast in the IAR modal when the report submission fails. Keep tone plain and short. -#: src/features/moderation/components/report_modal/IARModal.tsx:80 -msgid "Couldn't send it. Try again." -msgstr "傳送失敗。請再試一次。" - #. Body of the generic fallback friend-request error modal. #. Generic error toast when sending a friend request fails with no recognized API error code. #: src/features/relationship/components/alerts/RelationshipErrorModalUtils.tsx:45 @@ -10993,7 +10903,7 @@ msgid "Countdown timer" msgstr "倒數計時器" #. Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration. -#: src/features/moderation/components/report/ReportStepDetails.tsx:62 +#: src/features/moderation/components/report/ReportStepDetails.tsx:70 msgid "Country of residence" msgstr "居住國家/地區" @@ -11301,13 +11211,8 @@ msgstr "建立時間:" msgid "Credentials" msgstr "登入憑證" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:190 -msgid "Credible threats, graphic violence, or glorification of violence." -msgstr "可信的威脅、露骨的暴力內容或美化暴力。" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:123 +#: src/features/moderation/components/report/OptionDescriptors.ts:36 msgid "Croatia" msgstr "克羅埃西亞" @@ -11735,7 +11640,7 @@ msgid "Cuts audio below a loudness threshold with minimal CPU usage." msgstr "切除低於響度閾值的音訊,CPU 用量極低。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:127 +#: src/features/moderation/components/report/OptionDescriptors.ts:40 msgid "Cyprus" msgstr "賽普勒斯" @@ -11745,7 +11650,7 @@ msgid "Czech" msgstr "捷克文" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:131 +#: src/features/moderation/components/report/OptionDescriptors.ts:44 msgid "Czech Republic" msgstr "捷克" @@ -11965,7 +11870,7 @@ msgstr "偵錯頻道" #. Developer-mode action that opens the community debug modal. #. Developer-mode action that opens the community debug modal. #: src/features/ui/action_menu/items/DebugMenuItems.tsx:31 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:93 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:90 msgid "Debug community" msgstr "偵錯社群" @@ -12151,7 +12056,6 @@ msgstr "德拉瓦州" #. Confirm button label on the destructive delete-saved-media alert. #. Danger button label that confirms deleting a custom emoji. #. Destructive action label. Surface varies, see surrounding code for the specific object being deleted. -#. IAR modal: quick-action card button label for deleting the reported message. #. Native Edit menu item that deletes the current selection. Imperative verb. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -12163,8 +12067,7 @@ msgstr "德拉瓦州" #: src/features/emoji/components/emojis/EmojiListItem.tsx:204 #: src/features/emoji/components/emojis/EmojiListItem.tsx:216 #: src/features/emoji/components/stickers/StickerGridItem.tsx:35 -#: src/features/messaging/commands/MessageCommands.tsx:90 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:114 +#: src/features/messaging/commands/MessageCommands.tsx:94 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 #: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 @@ -12411,18 +12314,13 @@ msgstr "刪除主題?" msgid "Delete this invite? Can't be undone." msgstr "要刪除此邀請嗎?此動作無法復原。" -#. IAR modal: quick-action card title for deleting the reported message (moderator-only). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:106 -msgid "Delete this message" -msgstr "刪除此訊息" - #. Error message in the messaging commands. Keep the tone plain and specific. -#: src/features/messaging/commands/MessageCommands.tsx:86 +#: src/features/messaging/commands/MessageCommands.tsx:90 msgid "Delete this message? Can't be undone." msgstr "要刪除這則訊息嗎?此動作無法復原。" #. Body of the delete confirmation for a message that was published from an announcement channel to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:99 +#: src/features/messaging/commands/MessageCommands.tsx:103 msgid "Delete this message? Can't be undone. This message is also removed from every community that follows this channel." msgstr "刪除此訊息?無法復原。此訊息也會從所有追蹤此頻道的社群中移除。" @@ -12461,11 +12359,6 @@ msgstr "要刪除您在此社群中的訊息嗎?" msgid "Delete your messages in this conversation?" msgstr "要刪除您在此對話中的所有訊息嗎?" -#. IAR modal: disabled-state label on the delete card after the message has been deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:118 -msgid "Deleted" -msgstr "已刪除" - #. Activity log detail line under a ban, shown when the ban also deleted the messages the banned user sent shortly before it. This matches the "Delete message history" choice in the ban dialog. "The member" is the banned user, a single person. {duration} is how far back from the ban the messages were deleted, shown as a full duration phrase such as "1 hour" or "7 days". The number and unit change at runtime, so do not put an article, adjective or case ending next to {duration} that has to agree with it. It continues the entry summary, so it has no subject. It is a past tense record of a change the actor in the summary already made, never an instruction to the reader. Do not write it as a command, a button label or in first or second person. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:25 msgid "Deleted {duration} of the member's recent message history" @@ -12514,7 +12407,7 @@ msgid "Denied {permissions}" msgstr "拒絕了 {permissions}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:135 +#: src/features/moderation/components/report/OptionDescriptors.ts:48 msgid "Denmark" msgstr "丹麥" @@ -12554,11 +12447,6 @@ msgstr "描述貼圖" msgid "Describe this media for screen readers" msgstr "為螢幕閱讀器描述此媒體內容" -#. Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:77 -msgid "Describe what makes the content illegal" -msgstr "請說明此內容為何違法" - #. Placeholder in the description textarea on the Discovery application form. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:128 msgid "Describe what your community is about" @@ -12713,7 +12601,7 @@ msgstr "分離式橫幅" msgid "Detail" msgstr "細節" -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:30 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:44 msgid "Details" msgstr "詳細資訊" @@ -13315,11 +13203,6 @@ msgstr "顯示名稱(選填)" msgid "Display scaling" msgstr "顯示比例" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:282 -msgid "Distributes malware, credential-stealing tools, or other harmful files." -msgstr "散佈惡意軟體、竊取帳號密碼的工具或其他有害檔案。" - #. US federal district name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:263 msgctxt "us-state" @@ -13337,11 +13220,6 @@ msgctxt "channel-badge" msgid "DM" msgstr "私訊" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:426 -msgid "DM & friend request settings" -msgstr "私訊和好友邀請設定" - #. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option). #. Generic success-toast label confirming that a DM channel was closed. #: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:87 @@ -13468,11 +13346,6 @@ msgstr "說明文件" msgid "Doesn't allow being added to group DMs" msgstr "不允許被加入群組私訊" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:410 -msgid "Doesn't block. You can reopen later." -msgstr "不會封鎖。您可以稍後再重新開啟。" - #. Generic form-field / table-column label for an internet domain. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:786 @@ -13545,11 +13418,13 @@ msgstr "捐款支持" #. Button that closes the recovery kit modal once the kit is stored. #. Generic action or status label indicating that the current flow is complete. +#. Report flow: footer button on the last screen. Closes the report window. #: src/features/auth/components/modals/RecoveryKitModal.tsx:447 #: src/features/auth/components/pages/oauth_authorize_page/OAuthSuccessState.tsx:44 #: src/features/i18n/utils/CommonMessageDescriptors.ts:838 #: src/features/input/components/KeybindRecorder.tsx:510 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:31 +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:38 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:45 #: src/features/search/components/search/ChannelFilterSheet.tsx:165 #: src/features/search/components/search/HasFilterSheet.tsx:206 #: src/features/search/components/search/UserFilterSheet.tsx:186 @@ -13678,16 +13553,6 @@ msgstr "下載原始碼地圖,以便堆疊追蹤和開發人員工具能指向 msgid "Download video" msgstr "下載影片" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:290 -msgid "Doxxing, exposed private info, or stalking." -msgstr "人肉搜索、洩漏個人資訊或跟蹤騷擾。" - -#. IAR modal: rule-category description for the privacy / impersonation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:65 -msgid "Doxxing, stalking, pretending to be someone, or an inappropriate profile." -msgstr "人肉搜索、跟蹤、冒充他人或不當的個人檔案。" - #. Billing invoice status for an invoice not finalized yet. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:25 msgid "Draft" @@ -13970,7 +13835,7 @@ msgstr "編輯「{tokenLabel}」的顏色" #. Action that opens the community profile editor for the current member. #. Button or menu action label in the guild header popout. Keep it concise. #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:61 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:89 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:86 #: src/features/ui/action_menu/items/GuildMenuItems.tsx:86 msgid "Edit community profile" msgstr "編輯社群個人檔案" @@ -14043,7 +13908,7 @@ msgstr "編輯此頻道中身分組和成員的覆寫權限。" #: src/features/app/components/floating/UserAreaPopout.tsx:645 #: src/features/app/components/pages/YouPage.tsx:162 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:686 -#: src/features/user/components/modals/UserProfileModal.tsx:590 +#: src/features/user/components/modals/UserProfileModal.tsx:593 #: src/features/user/components/popouts/UserProfilePopout.tsx:435 msgid "Edit profile" msgstr "編輯個人檔案" @@ -14054,7 +13919,7 @@ msgid "Edit profile local time" msgstr "編輯個人檔案當地時間" #. Title of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:105 +#: src/features/messaging/commands/MessageCommands.tsx:109 msgid "Edit published message?" msgstr "編輯已發布的訊息?" @@ -14191,13 +14056,13 @@ msgstr "在 {windowEndsOn} 前可申請退款。這也會立即取消您的訂 #. Setup wizard option where people sign in with an email address and password. #: src/features/app/components/setup/SetupWizardSteps.tsx:87 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 -#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:28 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:37 msgid "Email" msgstr "電子郵件" #. Short label in the inputs tab. Keep it concise. #. Short label in the moderation report step email. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepEmail.tsx:11 +#: src/features/moderation/components/report/ReportStepEmail.tsx:13 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:60 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:115 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:30 @@ -14205,7 +14070,7 @@ msgid "Email address" msgstr "電子郵件地址" #. Inline validation error on the email step of the DSA report flow when the email field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:54 +#: src/features/moderation/components/pages/ReportPage.tsx:75 msgid "Email address required." msgstr "必須填寫電子郵件地址。" @@ -14721,16 +14586,6 @@ msgstr "新螢幕分享的編碼器偏好設定。" msgid "Encoder, SVC, and bitrate presets" msgstr "編碼器、SVC 和位元率預設" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:354 -msgid "Encourages self-harm" -msgstr "鼓勵自殘" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:358 -msgid "Encourages suicide, self-harm, or eating disorders." -msgstr "鼓勵自殺、自殘或飲食失調。" - #: src/features/input/utils/KeybindUtils.ts:86 msgctxt "keyboard-key-name" msgid "End" @@ -14771,11 +14626,6 @@ msgstr "由於通話中有不支援的參與者,因此無法使用端對端加 msgid "End-to-end encryption is unavailable because an unsupported participant is in this voice channel." msgstr "由於語音頻道中有不支援的參與者,因此無法使用端對端加密。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:234 -msgid "Endangers minors or hosts child-exploitation content." -msgstr "危害未成年人或含有兒童剝削內容。" - #. Voice stats field label (mobile lobby). Shows the voice server endpoint hostname. #. Voice stats field label (mobile voice lobby). Shows the voice server endpoint hostname. #: src/features/voice/components/bottomsheets/DirectCallLobbyBottomSheet.tsx:122 @@ -14817,7 +14667,7 @@ msgid "Enter" msgstr "Enter" #. Inline validation error on the verification step of the DSA report flow when the code does not match the expected 4-letter-dash-4-digit format. "ABCD-1234" is a literal example pattern. -#: src/features/moderation/components/pages/ReportPage.tsx:78 +#: src/features/moderation/components/pages/ReportPage.tsx:104 msgid "Enter a code in the format ABCD-1234." msgstr "請輸入 ABCD-1234 格式的代碼。" @@ -14862,12 +14712,12 @@ msgid "Enter a valid {theOtherPlatform} template URL or code." msgstr "請輸入有效的 {theOtherPlatform} 範本網址或代碼。" #. Inline validation error on the email step of the DSA report flow when the email is malformed. -#: src/features/moderation/components/pages/ReportPage.tsx:58 +#: src/features/moderation/components/pages/ReportPage.tsx:79 msgid "Enter a valid email address." msgstr "請輸入有效的電子郵件地址。" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is not a valid URL. -#: src/features/moderation/components/pages/ReportPage.tsx:116 +#: src/features/moderation/components/pages/ReportPage.tsx:148 msgid "Enter a valid message link." msgstr "請輸入有效的訊息連結。" @@ -14941,7 +14791,7 @@ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "請輸入驗證器應用程式中的 {digitCount} 位數驗證碼。" #. Inline validation error on the verification step of the DSA report flow when the code field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:74 +#: src/features/moderation/components/pages/ReportPage.tsx:100 msgid "Enter the code before continuing." msgstr "請先輸入驗證碼再繼續。" @@ -15008,7 +14858,7 @@ msgstr "按 Enter 鍵<0><1>儲存" msgid "Enter username" msgstr "輸入使用者名稱" -#: src/features/moderation/components/report/ReportStepVerification.tsx:48 +#: src/features/moderation/components/report/ReportStepVerification.tsx:73 msgid "Enter verification code" msgstr "輸入驗證碼" @@ -15017,6 +14867,11 @@ msgstr "輸入驗證碼" msgid "Enter your email address and we'll send you a link to reset your password." msgstr "請輸入您的電子郵件地址,我們會傳送密碼重設連結給您。" +#. Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse. +#: src/features/moderation/components/pages/ReportPage.tsx:133 +msgid "Enter your full legal name to send the report." +msgstr "請輸入您的法定全名以送出檢舉。" + #. Short label in the inputs tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:26 msgid "Enter your name" @@ -15160,7 +15015,7 @@ msgid "Escape to <0><1>cancel" msgstr "按 Esc 鍵<0><1>取消" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:139 +#: src/features/moderation/components/report/OptionDescriptors.ts:52 msgid "Estonia" msgstr "愛沙尼亞" @@ -15412,6 +15267,16 @@ msgstr "將於 {earliest} 到期" msgid "Expires:" msgstr "到期時間:" +#. Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content. +#: src/features/moderation/components/report/ReportStepDetails.tsx:52 +msgid "Explain the problem" +msgstr "說明問題" + +#. Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty. +#: src/features/moderation/components/pages/ReportPage.tsx:123 +msgid "Explain the problem to send the report." +msgstr "請說明問題以送出檢舉。" + #. Accessible label for the explicit content filter radio group in the community moderation settings tab. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:129 msgid "Explicit content filter setting" @@ -15507,11 +15372,6 @@ msgstr "外部連結可能會有危險,請小心。" msgid "Extra large" msgstr "特大" -#. Report category label for a community organized around extremist content or ideology. -#: src/features/moderation/components/report/OptionDescriptors.ts:90 -msgid "Extremist community" -msgstr "極端主義社群" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:126 msgid "Face recognition" @@ -15729,7 +15589,7 @@ msgid "Failed to remove vanity URL. Try again." msgstr "無法移除自訂網址。請再試一次。" #. Error toast when the resend-code request fails on the verification step of the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:70 +#: src/features/moderation/components/pages/ReportPage.tsx:91 msgid "Failed to resend code. Try again." msgstr "無法重新傳送驗證碼。請再試一次。" @@ -15739,7 +15599,7 @@ msgid "Failed to reset premium state." msgstr "無法重設付費狀態。" #. Error shown when the initial email verification code send fails on the DSA report flow. -#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/pages/ReportPage.tsx:87 msgid "Failed to send code. Try again." msgstr "傳送驗證碼失敗。請再試一次。" @@ -15754,7 +15614,7 @@ msgid "Failed to send message. Hold for options." msgstr "訊息傳送失敗。長按可顯示選項。" #. Generic error shown on the DSA report submission page when the report could not be sent. -#: src/features/moderation/components/pages/ReportPage.tsx:50 +#: src/features/moderation/components/pages/ReportPage.tsx:71 msgid "Failed to send report. Try again." msgstr "無法傳送檢舉。請再試一次。" @@ -15840,11 +15700,6 @@ msgstr "無法上傳表情符號(從 {startLabel} 開始):{errorMsg}" msgid "Failed to upload emojis. Try again." msgstr "表情符號上傳失敗。請再試一次。" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:242 -msgid "False claims likely to cause real-world harm." -msgstr "可能對現實世界造成傷害的不實說法。" - #. Label for the favicon branding asset. #: src/features/app/components/setup/SetupWizardSteps.tsx:222 msgid "Favicon" @@ -16127,13 +15982,13 @@ msgstr "尋找最適合的貼圖" msgid "Fingerprint" msgstr "指紋" -#. Button label in the IAR modal that opens the account-setup flow. -#: src/features/moderation/components/report_modal/IARModal.tsx:84 +#. Report flow: button in the account notice that opens the account setup screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:133 msgid "Finish account setup" msgstr "完成帳號設定" -#. IAR modal: title of the account-not-ready notice. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:24 +#. Report flow: title of the notice on the summary screen when the account cannot send reports yet. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:120 msgid "Finish account setup first" msgstr "請先完成帳號設定" @@ -16162,7 +16017,7 @@ msgid "Finish signing up to send friend requests." msgstr "完成註冊以傳送好友邀請。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:143 +#: src/features/moderation/components/report/OptionDescriptors.ts:56 msgid "Finland" msgstr "芬蘭" @@ -16172,7 +16027,7 @@ msgid "Finnish" msgstr "芬蘭語" #. Placeholder in the Full legal name input on the DSA report form. -#: src/features/moderation/components/report/ReportStepDetails.tsx:58 +#: src/features/moderation/components/report/ReportStepDetails.tsx:66 msgid "First and last name" msgstr "姓名" @@ -16617,7 +16472,7 @@ msgid "Frame rates above 30 FPS require {premiumProductName}" msgstr "高於 30 FPS 的影格速率需要 {premiumProductName}" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:147 +#: src/features/moderation/components/report/OptionDescriptors.ts:60 msgid "France" msgstr "法國" @@ -16834,10 +16689,10 @@ msgstr "完整" msgid "Full dynamic range" msgstr "全動態範圍" -#. Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral. -#: src/features/moderation/components/report/ReportStepDetails.tsx:53 -msgid "Full legal name" -msgstr "法定全名" +#. Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral. +#: src/features/moderation/components/report/ReportStepDetails.tsx:61 +msgid "Full legal name (optional for child sexual abuse reports)" +msgstr "法定全名(檢舉兒童性虐待時可選填)" #. Screen-reader-only identity detail appended to a user mention in the message composer. Preserve {tag}; it contains the full user tag. #: src/features/lexical/composer/nodes/ComposerMentionPill.tsx:20 @@ -17021,7 +16876,7 @@ msgid "German" msgstr "德文" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:151 +#: src/features/moderation/components/report/OptionDescriptors.ts:64 msgid "Germany" msgstr "德國" @@ -17376,7 +17231,7 @@ msgid "Go back" msgstr "返回" #. Inline error on the verification step of the DSA report flow when the stored email is missing or malformed and the user must return to the email step. -#: src/features/moderation/components/pages/ReportPage.tsx:83 +#: src/features/moderation/components/pages/ReportPage.tsx:109 msgid "Go back and enter a valid email." msgstr "返回並輸入有效的電子郵件。" @@ -17557,7 +17412,7 @@ msgid "Great to see you, {username}! Welcome in." msgstr "很高興見到您,{username}!歡迎加入。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:155 +#: src/features/moderation/components/report/OptionDescriptors.ts:68 msgid "Greece" msgstr "希臘" @@ -17572,11 +17427,6 @@ msgstr "希臘文" msgid "Grid view" msgstr "格狀顯示" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:226 -msgid "Grooming or child-exploitation content." -msgstr "誘騙或兒童剝削內容。" - #. Short label in the channel source preview. Keep it concise. #: src/features/channel/components/ChannelSourcePreview.tsx:32 msgid "Group" @@ -17716,36 +17566,6 @@ msgstr "帳號" msgid "Hang out with voice, video and screen share" msgstr "與好友語音、視訊和螢幕共享" -#. Report category label, community variant. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:86 -msgid "Harassment" -msgstr "騷擾" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:210 -msgid "Harassment involving mature content" -msgstr "涉及成人內容的騷擾" - -#. Report category label for messages or users engaged in harassment or bullying. Keep tone plain. -#: src/features/moderation/components/report/OptionDescriptors.ts:24 -msgid "Harassment or bullying" -msgstr "騷擾或霸凌" - -#. IAR modal: rule label for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:154 -msgid "Harassment or stalking" -msgstr "騷擾或跟蹤" - -#. IAR modal: rule label for a community report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:162 -msgid "Harassment or targeted abuse" -msgstr "騷擾或針對性攻擊" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:146 -msgid "Harassment or threats" -msgstr "騷擾或威脅" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:43 msgid "Hardware" @@ -17775,11 +17595,6 @@ msgstr "硬體金鑰" msgid "Hardware-accelerated on most Windows and macOS systems. Reliable for older devices." msgstr "在多數 Windows 和 macOS 系統上支援硬體加速。在舊裝置上也能穩定運作。" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:238 -msgid "Harmful misinformation" -msgstr "有害不實資訊" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:218 msgid "Harvest" @@ -17799,13 +17614,6 @@ msgstr "曾購買過" msgid "Has ever purchased override" msgstr "「曾購買過」覆寫" -#. IAR modal: rule label. -#. Report category label for hate speech. Keep tone plain and neutral. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:170 -#: src/features/moderation/components/report/OptionDescriptors.ts:28 -msgid "Hate speech" -msgstr "仇恨言論" - #. Premium page text shown on an instance where the premium tier cannot be bought, only redeemed. {PREMIUM_PRODUCT_NAME} is the premium tier name. #: src/features/app/components/dialogs/components/PlutoniumContent.tsx:306 msgid "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." @@ -18162,6 +17970,11 @@ msgstr "要隱藏自己的螢幕分享嗎?" msgid "Hides the download, open in browser and copy buttons on images and videos in this channel." msgstr "隱藏此頻道中圖片和影片的下載、在瀏覽器中開啟及複製按鈕。" +#. Report flow: short description under the block action on the final screen. Blocking hides the reported person's messages and stops them sending you direct messages. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:76 +msgid "Hides their messages and stops them messaging you" +msgstr "隱藏對方的訊息,並使對方無法傳送私訊給您" + #. Activity log value naming the high member verification level of a community. #. Member verification level option in the community moderation settings tab. Short standalone severity label. #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:85 @@ -18318,7 +18131,7 @@ msgid "Hungarian" msgstr "匈牙利文" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:159 +#: src/features/moderation/components/report/OptionDescriptors.ts:72 msgid "Hungary" msgstr "匈牙利" @@ -18399,6 +18212,11 @@ msgstr "這是一個工具提示" msgid "I changed my mind" msgstr "我改變心意了" +#. Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal. +#: src/features/moderation/components/report/ReportStepDetails.tsx:75 +msgid "I confirm in good faith that the information and allegations in this notice are accurate and complete." +msgstr "我本於善意確認,本通知中的資訊與指控均正確且完整。" + #. Short label in the voice tab. Keep it concise. #: src/features/channel/components/MatureContentChannelGate.tsx:207 #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:107 @@ -18460,11 +18278,6 @@ msgstr "閒置設定" msgid "Idle timeout" msgstr "閒置逾時" -#. IAR modal: inline routing hint shown under reasons that overlap with child safety. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:93 -msgid "If a minor is involved, use \"{childSafetyReasonName}\" instead." -msgstr "如果涉及未成年人,請改用「{childSafetyReasonName}」。" - #: src/features/auth/components/accounts/account_switcher_modal/AccountSwitcherForgotPasswordStep.tsx:40 #: src/features/auth/components/pages/ForgotPasswordPage.tsx:55 msgid "If an account uses that address, we've sent it password reset instructions. Check your inbox for the reset link." @@ -18475,45 +18288,20 @@ msgstr "如果該地址已註冊帳戶,我們已寄送密碼重設說明。請 msgid "If macOS asks to quit and reopen {productName}, choose Later." msgstr "如果 macOS 要求結束並重新啟動 {productName},請選擇稍後再說。" -#. IAR modal: inline safety note for self-harm reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:374 -msgid "If someone may be in immediate danger, contact local emergency services if you can do so safely." -msgstr "如果有人可能處於立即危險中,請在安全的情況下聯絡當地緊急服務。" +#. Report flow: safety banner shown on urgent questions and on the summary of an urgent report. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:87 +msgid "If someone is in immediate danger, contact local emergency services first." +msgstr "如果有人面臨立即危險,請先聯絡當地緊急救援單位。" #. Console warning about self-XSS scams. productName is the app name. Keep the warning plain and serious. #: src/features/devtools/utils/SelfXssNotice.ts:20 msgid "If someone told you to paste something here, it is a scam that can hand them your {productName} account." msgstr "如果有人要求您將某些內容貼到這裡,那就是詐騙,可能會讓對方取得您的 {productName} 帳號。" -#. IAR modal: inline safety note shown for child-safety reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:370 -msgid "If this involves CSAM or exploitation of a minor, send the report now and don't reshare the material." -msgstr "如果這涉及兒童性虐待材料 (CSAM) 或剝削未成年人,請立即送出檢舉,且不要再次分享該材料。" - -#. IAR modal: inline safety note for violence reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:378 -msgid "If this is a credible imminent threat, contact local emergency services too." -msgstr "如果這是可信的緊急威脅,請同時聯絡當地緊急服務單位。" - -#. IAR modal: inline safety note for terrorism reports. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:382 -msgid "If this is an imminent terrorist threat, contact local emergency services too." -msgstr "如果這是迫在眉睫的恐怖威脅,請同時聯絡當地緊急服務單位。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:32 -msgid "If this report is about a specific message in this community, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the community as a whole if reporting a message would not capture the broader issue." -msgstr "如果這份檢舉是關於此社群中的特定訊息,請改為檢舉該訊息。訊息檢舉能讓我們的安全團隊掌握最清楚的脈絡,在意見中新增詳細資訊也能幫助我們更快審查。只有在檢舉訊息無法涵蓋更廣泛的問題時,才繼續檢舉整個社群。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:17 -msgid "If this report is about a specific message, report that message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if that message does not capture the broader issue." -msgstr "如果這則檢舉是關於特定訊息,請改為檢舉該訊息。訊息檢舉能讓我們的安全團隊掌握最清楚的脈絡,在意見中新增詳細資訊也能幫助我們更快審查。只有在該訊息無法涵蓋更廣泛的問題時,才繼續檢舉這位使用者整體。" - -#. Label in the report action utils helper. Keep the tone plain and specific. -#: src/features/moderation/utils/ReportActionUtils.tsx:22 -msgid "If this report is about specific messages, report the most relevant message instead. Message reports give our safety team the clearest context, and adding details in the comments can help us review it faster. Only continue with reporting the user as a whole if reporting a message would not capture the broader issue." -msgstr "如果此檢舉是關於多則特定訊息,請改為檢舉最相關的那一則。訊息檢舉能讓我們的安全團隊掌握最清楚的脈絡,在意見中新增詳細資訊也能幫助我們更快審查。只有在檢舉訊息無法涵蓋更廣泛的問題時,才繼續檢舉這位使用者整體。" +#. Helper text under the Explain the problem field on the details step of the DSA report form. +#: src/features/moderation/components/report/ReportStepDetails.tsx:57 +msgid "If you believe it is illegal, say which law and why." +msgstr "如果您認為這是違法內容,請說明涉及哪一項法律及原因。" #. Confirmation modal body shown before dismissing the desktop-notification nagbar. {notificationSettingsPath} is the localized settings path. #: src/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar.tsx:39 @@ -18600,28 +18388,6 @@ msgstr "忽略此頻道的慢速模式冷卻時間。" msgid "Ignore virtual" msgstr "忽略虛擬裝置" -#. IAR modal: rule label. -#. Report category label for content describing or coordinating illegal activity. Keep tone plain. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:330 -#: src/features/moderation/components/report/OptionDescriptors.ts:44 -msgid "Illegal activity" -msgstr "非法活動" - -#. IAR modal: rule-category label grouping illegal activity and the catch-all "Other" option. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:77 -msgid "Illegal activity or something else" -msgstr "非法活動或其他" - -#. IAR modal: rule-category description for the illegal / other group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:81 -msgid "Illegal sales, criminal facilitation, or a clear rule violation that doesn't fit above." -msgstr "非法銷售、協助犯罪,或上述未涵蓋的明顯違規行為。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:334 -msgid "Illegal sales, criminal facilitation, or unlawful activity." -msgstr "非法銷售、協助犯罪或非法活動。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:73 msgctxt "us-state" @@ -18716,18 +18482,6 @@ msgstr "圖片" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "從剪貼簿貼上的圖片會以附件形式傳送,但您沒有權限在此頻道中附加檔案。" -#. IAR modal: rule label. -#. Report category label for a user impersonating another person or brand. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:306 -#: src/features/moderation/components/report/OptionDescriptors.ts:66 -msgid "Impersonation" -msgstr "冒充" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:310 -msgid "Impersonation or deceptive media" -msgstr "冒充或欺騙性媒體內容" - #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx:58 msgid "Import" @@ -18910,11 +18664,6 @@ msgstr "閒置" msgid "Inactive timeout" msgstr "閒置逾時" -#. Report category label for an account whose profile (name, avatar, bio) violates policy. -#: src/features/moderation/components/report/OptionDescriptors.ts:82 -msgid "Inappropriate profile" -msgstr "不當的個人檔案" - #. Generic header / tab label for the unread / mentions / bookmarks inbox. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/i18n/utils/CommonMessageDescriptors.ts:500 @@ -18963,7 +18712,7 @@ msgid "Include my two-factor backup codes in the PDF and printout" msgstr "在 PDF 和列印文件中包含我的雙重驗證備份代碼" #. Inline validation error on the details step of the DSA report flow (community report) when the community ID field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:126 +#: src/features/moderation/components/pages/ReportPage.tsx:158 msgid "Include the community ID." msgstr "請提供社群 ID。" @@ -19403,7 +19152,7 @@ msgid "Invite background" msgstr "邀請背景" #. Field label on the details step of the DSA report form (community report). Optional invite code to the reported community. -#: src/features/moderation/components/report/ReportStepDetails.tsx:48 +#: src/features/moderation/components/report/ReportStepDetails.tsx:47 msgid "Invite code (optional)" msgstr "邀請碼(非必填)" @@ -19471,7 +19220,7 @@ msgstr "邀請遮蔽" #. Tooltip and accessible label for the invite button shown beside a channel in the channel list. #: src/features/app/components/layout/ChannelItem.tsx:125 #: src/features/guild/components/popouts/GuildHeaderPopout.tsx:57 -#: src/features/ui/action_menu/items/GuildMenuData.tsx:85 +#: src/features/ui/action_menu/items/GuildMenuData.tsx:82 msgid "Invite members" msgstr "邀請成員" @@ -19650,7 +19399,7 @@ msgid "IP address authorized" msgstr "IP 位址已授權" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:163 +#: src/features/moderation/components/report/OptionDescriptors.ts:76 msgid "Ireland" msgstr "愛爾蘭" @@ -19690,7 +19439,7 @@ msgid "Italic" msgstr "斜體" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:167 +#: src/features/moderation/components/report/OptionDescriptors.ts:80 msgid "Italy" msgstr "義大利" @@ -20120,7 +19869,7 @@ msgstr "按鍵" #. Button or menu action label in the kick member modal. Keep it concise. Keep the tone plain and specific. #. Button or menu action label in the user profile actions sheet. Keep it concise. Keep the tone plain and specific. #. Member actions sheet menu item. Opens the kick-member confirmation (moderation action). Short verb used as a menu label. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:97 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:96 #: src/features/moderation/components/modals/KickMemberModal.tsx:16 #: src/features/user/components/modals/UserProfileActionsSheet.tsx:77 msgid "Kick" @@ -20230,7 +19979,7 @@ msgid "Later" msgstr "稍後" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:171 +#: src/features/moderation/components/report/OptionDescriptors.ts:84 msgid "Latvia" msgstr "拉脫維亞" @@ -20291,11 +20040,6 @@ msgstr "瞭解詳情" msgid "Learn more about Visionary" msgstr "進一步了解 Visionary" -#. IAR modal: quick-action card button label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:422 -msgid "Leave" -msgstr "離開" - #. Confirmation text before leaving a private thread. threadName is the thread name. #: src/features/threads/utils/ThreadMessageDescriptors.ts:65 msgid "Leave {threadName}? It's private, so you can only come back if someone adds you again." @@ -20336,11 +20080,6 @@ msgstr "離開私人討論串" msgid "Leave silently" msgstr "安靜離開" -#. IAR modal: quick-action card title. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:414 -msgid "Leave the community" -msgstr "離開社群" - #. Body text in the leave-community confirmation modal. #: src/features/guild/hooks/useLeaveGuild.tsx:22 msgid "Leave this community? You won't see its messages anymore." @@ -20799,7 +20538,7 @@ msgid "Lists members with this role in their own section in the member list." msgstr "在成員列表中,將擁有此身分組的成員顯示在獨立區塊。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:175 +#: src/features/moderation/components/report/OptionDescriptors.ts:88 msgid "Lithuania" msgstr "立陶宛" @@ -20893,7 +20632,7 @@ msgid "Loading..." msgstr "正在載入…" #. Combobox popup status shown while options are loading. -#: src/features/ui/components/form/FormCombobox.tsx:88 +#: src/features/ui/components/form/FormCombobox.tsx:89 #: src/features/ui/components/Spinner.tsx:30 msgid "Loading…" msgstr "載入中…" @@ -21023,7 +20762,7 @@ msgid "Low" msgstr "低" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:179 +#: src/features/moderation/components/report/OptionDescriptors.ts:92 msgid "Luxembourg" msgstr "盧森堡" @@ -21075,14 +20814,14 @@ msgid "Maintenance is scheduled for {localizedTime}. Expected duration: {duratio msgstr "預計於 {localizedTime} 進行維護。預計持續時間:{duration}。" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:81 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:80 msgid "Make {userName} the group owner? You'll lose owner privileges." msgstr "要將 {userName} 設為群組擁有者嗎?您將會失去擁有者權限。" #. Group DM action that transfers ownership of the group to the selected member. #. Group DM action that transfers ownership of the group to the selected member. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:93 -#: src/features/ui/action_menu/UserContextMenu.tsx:117 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:92 +#: src/features/ui/action_menu/UserContextMenu.tsx:116 msgid "Make group owner" msgstr "設為群組擁有者" @@ -21091,38 +20830,21 @@ msgstr "設為群組擁有者" msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." msgstr "請確認此代碼與 {PRODUCT_NAME} 應用程式中的代碼相符。" +#. Report flow: subtitle of the summary screen. Asks the reporter to check their answers. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:9 +msgid "Make sure this looks right before you send it." +msgstr "送出前請再次確認內容是否正確。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" msgstr "打造專屬於您的實例" -#. Report category label for messages containing phishing or malware links. -#: src/features/moderation/components/report/OptionDescriptors.ts:62 -msgid "Malicious links" -msgstr "惡意連結" - #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:183 +#: src/features/moderation/components/report/OptionDescriptors.ts:96 msgid "Malta" msgstr "馬爾他" -#. IAR modal: rule label. -#. Report category label for a community distributing malware or malicious software. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:278 -#: src/features/moderation/components/report/OptionDescriptors.ts:103 -msgid "Malware distribution" -msgstr "散佈惡意軟體" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:266 -msgid "Malware or dangerous links" -msgstr "惡意軟體或危險連結" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:270 -msgid "Malware, credential theft, or harmful files." -msgstr "惡意軟體、竊取帳號密碼或有害檔案。" - #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:561 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:596 msgid "Manage" @@ -21408,11 +21130,6 @@ msgstr "分享螢幕或直播前,遮蓋私人詳細資訊。" msgid "Mask Visionary as subscription" msgstr "將 Visionary 顯示為訂閱" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:250 -msgid "Mass spam, fraud, fake giveaways, or account abuse." -msgstr "大量垃圾訊息、詐騙、假贈品或濫用帳號。" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:113 msgctxt "us-state" @@ -21491,31 +21208,11 @@ msgstr "成人內容媒體閘門" msgid "Mature content not allowed" msgstr "不允許成人內容" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:202 -msgid "Mature content or harassment" -msgstr "成人內容或騷擾" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:218 -msgid "Mature content or unsafe gating" -msgstr "成人內容或把關不當" - #. Channel overview settings tab label, control, or validation message (name, topic, slowmode, voice region, mature content gate). #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/MatureContentSection.tsx:35 msgid "Mature content override" msgstr "覆寫成人內容設定" -#. Report category label for mature-content policy violations. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:40 -msgid "Mature content policy violation" -msgstr "違反成人內容政策" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:222 -msgid "Mature content without proper gating." -msgstr "未經適當把關的成人內容。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the mature media gate details modal. Keep it concise. #: src/features/moderation/components/modals/MatureMediaGateDetailsModal.tsx:26 @@ -21959,13 +21656,13 @@ msgstr "訊息" #. Action that opens a DM conversation with the selected user. #. Member actions sheet menu item. Sends a direct message to the target user. Standalone verb used as a menu label. #. Voice participant menu action that opens a DM conversation with the selected user. -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:87 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:86 #: src/features/ui/action_menu/items/ActionsSubmenu.tsx:41 #: src/features/ui/action_menu/items/MessageUserMenuItem.tsx:26 #: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:78 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:719 -#: src/features/user/components/modals/UserProfileModal.tsx:565 -#: src/features/user/components/modals/UserProfileModal.tsx:773 +#: src/features/user/components/modals/UserProfileModal.tsx:568 +#: src/features/user/components/modals/UserProfileModal.tsx:776 #: src/features/user/components/popouts/UserProfilePopout.tsx:421 #: src/features/user/components/popouts/UserProfilePopout.tsx:451 #: src/features/user/components/profile/ProfilePreview.tsx:321 @@ -22128,7 +21825,7 @@ msgid "message link" msgstr "訊息連結" #. Field label on the details step of the DSA report form (message report). The reporter pastes a direct link to the offending message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:23 +#: src/features/moderation/components/report/ReportStepDetails.tsx:22 msgid "Message link" msgstr "訊息連結" @@ -22167,7 +21864,7 @@ msgid "Message previews in the DM list" msgstr "私訊列表中的訊息預覽" #. Toast shown after a message in an announcement channel was published to the channels that follow it. -#: src/features/messaging/commands/MessageCommands.tsx:118 +#: src/features/messaging/commands/MessageCommands.tsx:122 msgid "Message published" msgstr "訊息已發布" @@ -22211,6 +21908,11 @@ msgstr "訊息時間" msgid "Message unpinned" msgstr "訊息已解除釘選" +#. Report flow: section heading above the preview of the message being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:18 +msgid "Message you're reporting" +msgstr "您要檢舉的訊息" + #. Collapsible group heading in the Theme Studio tokens list, for chat message tokens. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short heading in the keyboard shortcuts cheatsheet. @@ -22422,11 +22124,6 @@ msgctxt "us-state" msgid "Minnesota" msgstr "明尼蘇達州" -#. IAR modal: rule-category description for the child-safety / mature-content group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:57 -msgid "Minors at risk, mature content in the wrong place, or unwanted conduct." -msgstr "未成年人面臨風險、成人內容出現在不當的地方,或不受歡迎的行為。" - #. Camera settings menu checkbox for flipping the local camera preview horizontally. #. Switch label in the camera preview modal for flipping the local camera preview horizontally. #. Switch label in the video tab for flipping the local camera preview horizontally. @@ -22633,7 +22330,7 @@ msgstr "更多" #. Short label in the index. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:47 -#: src/features/user/components/modals/UserProfileModal.tsx:114 +#: src/features/user/components/modals/UserProfileModal.tsx:117 msgid "More actions" msgstr "更多操作" @@ -23359,7 +23056,7 @@ msgid "Nested" msgstr "巢狀" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:187 +#: src/features/moderation/components/report/OptionDescriptors.ts:100 msgid "Netherlands" msgstr "荷蘭" @@ -24099,7 +23796,7 @@ msgstr "沒有結果" #. Empty state shown when a combobox search returns no matches. #. Empty state shown when a combobox search returns no matches. #: src/features/channel/components/embeds/attachments/TextualAttachmentLanguageCombobox.tsx:30 -#: src/features/ui/components/form/FormCombobox.tsx:84 +#: src/features/ui/components/form/FormCombobox.tsx:85 msgid "No results found" msgstr "沒有結果" @@ -24858,6 +24555,16 @@ msgstr "只有你邀請的使用者和管理員才能看到這個討論串。" msgid "Only places I can't access anymore" msgstr "僅限我無法再存取的地方" +#. Report flow: good-faith statement on the summary screen, used when the instance has no community guidelines page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:13 +msgid "Only report what you honestly believe breaks the rules, and please don't send the same report twice." +msgstr "請僅檢舉您真心認為違反規則的內容,且請勿重複送出相同的檢舉。" + +#. Report flow: good-faith statement on the summary screen. The linked text opens the community guidelines. +#: src/features/moderation/components/report_flow/ReportFlowSummary.tsx:52 +msgid "Only report what you honestly believe breaks the rules. Misusing reports goes against our <0>Community Guidelines." +msgstr "僅檢舉您真心認為違反規則的內容。濫用檢舉功能將違反我們的<0>社群準則。" + #. Console warning line advising users not to run unknown code. #: src/features/devtools/utils/SelfXssNotice.ts:24 msgid "Only run code here if you understand exactly what it does." @@ -24927,11 +24634,9 @@ msgstr "不透明度" #. Action button on a Linux desktop notification. Imperative verb: opens the message the notification is about. #. Billing invoice status for an invoice awaiting payment. #. Button label that opens the source settings section for an advanced setting. -#. IAR modal: quick-action card button label. #. Short button that opens a billing invoice or receipt. #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:21 #: src/features/app/components/dialogs/components/plutonium/InvoiceList.tsx:159 -#: src/features/moderation/components/report_modal/IARModalCopy.ts:434 #: src/features/platform/utils/DesktopLocaleBridge.ts:254 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedSettingRow.tsx:22 msgid "Open" @@ -25306,7 +25011,7 @@ msgid "Open on {instanceName}" msgstr "在 {instanceName} 上開啟" #. Accessible label for the combobox popup trigger button. -#: src/features/ui/components/form/FormCombobox.tsx:96 +#: src/features/ui/components/form/FormCombobox.tsx:97 msgid "Open popup" msgstr "開啟彈出式視窗" @@ -25379,11 +25084,6 @@ msgstr "開啟「系統設定」>「隱私權與安全性」>「螢幕錄影」 msgid "Open template JSON" msgstr "開啟範本 JSON" -#. IAR modal: quick-action card description for banning the reported user. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:130 -msgid "Open the ban dialog for this community." -msgstr "開啟此社群的停權對話框。" - #. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case. #: src/features/input/state/input_keybind/shared.ts:249 msgid "Open the context menu" @@ -25485,6 +25185,11 @@ msgstr "開啟設定" msgid "Opened the thread again" msgstr "重新開啟了討論串" +#. Report flow: screen reader hint on answers that open an external page. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:116 +msgid "Opens in a new tab" +msgstr "在新分頁中開啟" + #. Screen-reader-only hint for the Members entry in community settings. The entry receives keyboard focus without automatically opening. #: src/features/app/components/dialogs/components/DesktopGuildSettingsView.tsx:67 msgid "Opens the Members page. Press Space or Enter to open." @@ -25621,9 +25326,7 @@ msgstr "原始停權日期為 {date}" #. Catch-all Discovery category dropdown option in the community Discovery settings tab. #. Collapsible group heading in the Theme Studio tokens list, for tokens that fit no other group. -#. Report category label for a reason that does not match any predefined category. #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:110 -#: src/features/moderation/components/report/OptionDescriptors.ts:70 #: src/features/theme_studio/sections/TokenGroups.ts:118 msgid "Other" msgstr "其他" @@ -25654,11 +25357,6 @@ msgstr "其他反應…" msgid "OTP" msgstr "OTP" -#. IAR modal: body copy on the success step shown after a platform report is submitted. Reassures the user about follow-up. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:101 -msgid "Our safety team is reviewing it. We'll send you a DM and email once we've reached a verdict." -msgstr "我們的安全團隊正在審核。一旦有結果,我們會透過私訊和電子郵件通知您。" - #. Field label in the voice connection status popout. Shows WebRTC estimated available outgoing bandwidth. #: src/features/voice/components/voice_connection_status/shared.ts:120 msgid "Outgoing capacity:" @@ -25755,7 +25453,7 @@ msgid "Ownership could not be transferred to <0>{username} at this time." msgstr "目前無法將擁有權轉移給 <0>{username}。" #. Toast confirming group DM ownership was transferred. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:85 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:84 msgid "Ownership transferred" msgstr "已轉移擁有權" @@ -25956,7 +25654,7 @@ msgid "Paste the JSON response here" msgstr "在此貼上 JSON 回應" #. Inline validation error on the details step of the DSA report flow (message report) when the message link is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:111 +#: src/features/moderation/components/pages/ReportPage.tsx:143 msgid "Paste the message link." msgstr "請貼上訊息連結。" @@ -26260,11 +25958,6 @@ msgstr "PgDn" msgid "PgUp" msgstr "PgUp" -#. IAR modal: rule-category description for the scams / malware / misinformation group. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:73 -msgid "Phishing, fraud, malicious links, or false claims likely to cause real-world harm." -msgstr "網路釣魚、詐騙、惡意連結或可能造成實際危害的虛假聲明。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:21 msgid "Photo" @@ -26300,11 +25993,6 @@ msgstr "選擇網路搜尋服務供應商" msgid "Pick an emoji" msgstr "選擇表情符號" -#. Validation hint in the IAR modal when the user tries to advance without picking a radio option. -#: src/features/moderation/components/report_modal/IARModal.tsx:72 -msgid "Pick an option to continue." -msgstr "請選擇一個選項以繼續。" - #. Validation error when the user advances with all inclusion toggles off in the custom scope. #: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:205 msgid "Pick at least one kind of conversation to include." @@ -26330,11 +26018,6 @@ msgstr "選擇您名稱後面的 4 位數字" msgid "Pick the appearance this administrator account should start with." msgstr "選擇此管理員帳號的初始外觀。" -#. Validation hint in the IAR modal on the rule selection step. -#: src/features/moderation/components/report_modal/IARModal.tsx:76 -msgid "Pick the rule to review." -msgstr "選擇要審查的規則。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:359 msgid "Pick what appears when you type a colon in the message input" @@ -26607,7 +26290,7 @@ msgid "Please wait a moment and try renaming again." msgstr "請稍候片刻,然後再試著重新命名。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:191 +#: src/features/moderation/components/report/OptionDescriptors.ts:104 msgid "Poland" msgstr "波蘭" @@ -26659,7 +26342,7 @@ msgid "Port" msgstr "埠號" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:195 +#: src/features/moderation/components/report/OptionDescriptors.ts:108 msgid "Portugal" msgstr "葡萄牙" @@ -26872,11 +26555,6 @@ msgstr "按一下以新增反應" msgid "press to remove reaction" msgstr "按一下以移除反應" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:314 -msgid "Pretending to be someone else, including deceptive AI-generated content." -msgstr "假冒他人,包括欺騙性 AI 生成內容。" - #: src/features/moderation/components/modals/TimeoutMemberSheet.tsx:135 msgid "Prevent <0>{targetUserTag} from sending messages, reacting, and connecting to voice channels for the specified duration." msgstr "禁止 <0>{targetUserTag} 在指定期間內傳送訊息、新增反應和連線至語音頻道。" @@ -27078,11 +26756,6 @@ msgstr "優先發言者" msgid "Privacy" msgstr "隱私" -#. IAR modal: rule-category label grouping privacy violations and impersonation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:61 -msgid "Privacy or impersonation" -msgstr "隱私或冒充" - #: src/features/app/components/dialogs/components/DesktopSettingsView.tsx:444 #: src/features/app/components/dialogs/components/PurchaseDisclaimer.tsx:24 msgid "Privacy policy" @@ -27103,21 +26776,6 @@ msgstr "隱私設定通知列" msgid "Privacy URL" msgstr "隱私權政策網址" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:286 -msgid "Privacy violation" -msgstr "侵犯隱私" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:298 -msgid "Privacy violation or doxxing" -msgstr "侵犯隱私或人肉搜索" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:294 -msgid "Privacy violation or stalking" -msgstr "侵犯隱私或跟蹤騷擾" - #. Switch in the channel create modal that limits who can view the new channel. #: src/features/channel/components/modals/ChannelCreateModal.tsx:55 msgid "Private channel" @@ -27280,25 +26938,10 @@ msgstr "個人檔案類型" msgid "Profile updated" msgstr "個人檔案已更新" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:322 -msgid "Profile, username, or avatar violation" -msgstr "個人檔案、使用者名稱或大頭貼違規" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:182 -msgid "Promotes hatred against protected groups." -msgstr "宣揚對受保護族群的仇恨。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:198 -msgid "Promotes, recruits for, or coordinates violent extremist activity." -msgstr "宣傳、招募或協調暴力極端主義活動。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:350 -msgid "Promotion or instructions encouraging self-harm or eating disorders." -msgstr "鼓勵自殘或飲食失調的宣傳或教學內容。" +#. Report flow: section heading above the card of the user whose profile is being reported. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:22 +msgid "Profile you're reporting" +msgstr "您要檢舉的個人檔案" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:475 @@ -27329,20 +26972,15 @@ msgstr "代名詞: " msgid "Protect your Visionary account by enabling two-factor authentication. Thanks for supporting {productName}!" msgstr "啟用雙重驗證,保護您的 Visionary 帳號。感謝您對 {productName} 的支持!" -#: src/features/moderation/components/report/ReportStepDetails.tsx:216 +#: src/features/moderation/components/report/ReportStepDetails.tsx:261 msgid "Provide at least a user ID or a user tag." msgstr "請至少提供使用者 ID 或使用者標籤。" #. Inline validation error on the details step of the DSA report flow (user report) when both user ID and username fields are empty. -#: src/features/moderation/components/pages/ReportPage.tsx:121 +#: src/features/moderation/components/pages/ReportPage.tsx:153 msgid "Provide either a user ID or a username for the person you are reporting." msgstr "請提供您要檢舉對象的使用者 ID 或使用者名稱。" -#. Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:101 -msgid "Provide your full legal name for the declaration." -msgstr "請提供您的完整法定姓名以進行聲明。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27701,13 +27339,6 @@ msgstr "單選按鈕可讓您從一組選項中選取一個。" msgid "Radio group" msgstr "單選按鈕群組" -#. IAR modal: rule label. -#. Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:338 -#: src/features/moderation/components/report/OptionDescriptors.ts:94 -msgid "Raid coordination" -msgstr "協調突襲" - #. Setup wizard finish summary value when every username gets a random four digit tag. #. Setup wizard option where every username gets a random four digit tag. #: src/features/app/components/setup/SetupWizardSteps.tsx:104 @@ -27831,8 +27462,10 @@ msgstr "準備好購買禮物了嗎?" msgid "Ready to upgrade?" msgstr "準備好升級了嗎?" +#. DSA report page: step indicator label for the step where the reporter picks why they are reporting. #: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:611 #: src/features/moderation/components/modals/BanDetailsModal.tsx:75 +#: src/features/moderation/components/report/ReportBreadcrumbs.tsx:40 msgid "Reason" msgstr "原因" @@ -28291,8 +27924,8 @@ msgstr "記住視窗大小和位置" #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildIconUploadField.tsx:140 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashUploadField.tsx:143 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:271 -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:73 -#: src/features/ui/action_menu/UserContextMenu.tsx:97 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:72 +#: src/features/ui/action_menu/UserContextMenu.tsx:96 #: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx:26 #: src/features/user/components/modals/tabs/LinkedAccountsTab.tsx:55 #: src/features/user/components/settings_utils/search_index/AccountSecurityIndex.ts:198 @@ -28328,8 +27961,8 @@ msgstr "移除 {engineName}" #. Confirm dialog body before removing a member from a group DM. #. Confirm dialog body before removing a member from a group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:69 -#: src/features/ui/action_menu/UserContextMenu.tsx:93 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:68 +#: src/features/ui/action_menu/UserContextMenu.tsx:92 msgid "Remove {userName} from the group?" msgstr "要將 {userName} 從群組中移除嗎?" @@ -28419,8 +28052,8 @@ msgstr "從我的最愛移除" #. Group DM action that removes the selected member from the group. #. Group DM action that removes the selected member from the group. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:65 -#: src/features/ui/action_menu/UserContextMenu.tsx:89 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:64 +#: src/features/ui/action_menu/UserContextMenu.tsx:88 msgid "Remove from group" msgstr "從群組中移除" @@ -28458,11 +28091,6 @@ msgstr "從僅限網址的 GIF 最愛中移除" msgid "Remove icon" msgstr "移除圖示" -#. IAR modal: quick-action card description for deleting the reported message. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:110 -msgid "Remove it from the channel for everyone." -msgstr "為所有人從頻道中移除這則訊息。" - #. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban. #: src/features/permissions/utils/PermissionLabelDescriptors.ts:119 msgid "Remove members from the community. They can rejoin with a new invite." @@ -28578,7 +28206,7 @@ msgid "Removed from favorites" msgstr "已從我的最愛移除" #. Toast confirming the selected member was removed from the group DM. -#: src/features/ui/action_menu/GroupDMContextMenu.tsx:77 +#: src/features/ui/action_menu/GroupDMContextMenu.tsx:76 msgid "Removed from group" msgstr "已從群組中移除" @@ -28919,28 +28547,18 @@ msgstr "檢舉社群" msgid "Report a message" msgstr "檢舉訊息" -#. IAR modal: screen-reader description for the whole modal. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:446 -msgid "Report a rule violation, or find tools to manage contact and preferences." -msgstr "檢舉違規行為,或尋找工具來管理聯絡人和偏好設定。" - #. Report flow target option. Selects reporting another user account or profile. Keep tone plain and neutral. #: src/features/moderation/components/report/OptionDescriptors.ts:11 msgid "Report a user profile" msgstr "檢舉使用者個人檔案" -#. Action label that opens the report flow targeting a community. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:17 -msgid "Report community" -msgstr "檢舉社群" - -#: src/features/moderation/components/report/ReportStepDetails.tsx:128 +#: src/features/moderation/components/report/ReportStepDetails.tsx:151 msgid "Report details" msgstr "檢舉詳情" #. Document/page title for the public DSA illegal-content report page. Sensitive/legal flow; keep tone plain and factual. -#: src/features/moderation/components/pages/ReportPage.tsx:45 -#: src/features/moderation/components/report/ReportStepSelection.tsx:32 +#: src/features/moderation/components/pages/ReportPage.tsx:66 +#: src/features/moderation/components/report/ReportStepSelection.tsx:33 msgid "Report illegal content" msgstr "檢舉違法內容" @@ -28950,30 +28568,28 @@ msgid "Report issue" msgstr "回報問題" #. Generic action label that opens the report flow targeting a specific message. -#. Modal title for the IAR flow when reporting a specific message. #: src/features/i18n/utils/CommonMessageDescriptors.ts:544 -#: src/features/moderation/components/report_modal/IARModalContext.ts:22 msgid "Report message" msgstr "檢舉訊息" -#. IAR modal: title on the success step shown after a platform report is submitted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:97 -#: src/features/moderation/components/report/ReportStepComplete.tsx:31 +#. Action label in the full user profile's overflow menu, and the title of the report window it opens. Reports the user's profile: their photo, name or bio. +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 +msgid "Report profile" +msgstr "檢舉個人檔案" + +#. Report flow: title of the final screen after a report was sent to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:42 +#: src/features/moderation/components/report/ReportStepComplete.tsx:32 msgid "Report sent" msgstr "已送出檢舉" #. Button or menu action label in the moderation report step selection. Keep it concise. Keep the tone plain and specific. -#: src/features/moderation/components/report/ReportStepSelection.tsx:11 +#: src/features/moderation/components/report/ReportStepSelection.tsx:12 msgid "Report type" msgstr "檢舉類型" -#. Action label that opens the report flow targeting a user. -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:13 -msgid "Report user" -msgstr "檢舉使用者" - #. Field label on the details step of the DSA report form (message report). Optional FluxerTag of the user who sent the message. -#: src/features/moderation/components/report/ReportStepDetails.tsx:28 +#: src/features/moderation/components/report/ReportStepDetails.tsx:27 msgid "Reported user tag (optional)" msgstr "被檢舉使用者的標籤(選填)" @@ -29100,6 +28716,10 @@ msgstr "除了中等安全等級的所有要求外,還必須成為社群成員 msgid "Resend" msgstr "重新傳送" +#: src/features/moderation/components/report/ReportStepVerification.tsx:31 +msgid "Resend ({duration})" +msgstr "重新傳送({duration})" + #: src/features/user/components/modals/EmailChangeModal.tsx:333 msgid "Resend ({newSecondsRemaining}s)" msgstr "重新傳送({newSecondsRemaining} 秒)" @@ -29108,7 +28728,7 @@ msgstr "重新傳送({newSecondsRemaining} 秒)" msgid "Resend ({originalSecondsRemaining}s)" msgstr "重新傳送({originalSecondsRemaining} 秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:103 +#: src/features/moderation/components/report/ReportStepVerification.tsx:29 msgid "Resend ({resendCooldownSeconds}s)" msgstr "重新傳送({resendCooldownSeconds} 秒)" @@ -29122,7 +28742,7 @@ msgstr "重新傳送({resendSecondsRemaining} 秒)" msgid "Resend ({secondsRemaining}s)" msgstr "重新傳送({secondsRemaining} 秒)" -#: src/features/moderation/components/report/ReportStepVerification.tsx:105 +#: src/features/moderation/components/report/ReportStepVerification.tsx:134 msgid "Resend code" msgstr "重新傳送驗證碼" @@ -29841,7 +29461,7 @@ msgid "Roles updated successfully" msgstr "身分組已成功更新" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:199 +#: src/features/moderation/components/report/OptionDescriptors.ts:112 msgid "Romania" msgstr "羅馬尼亞" @@ -29947,7 +29567,7 @@ msgstr "飽和度" #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:631 #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:279 #: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:91 -#: src/features/messaging/commands/MessageCommands.tsx:114 +#: src/features/messaging/commands/MessageCommands.tsx:118 #: src/features/messaging/components/modals/AttachmentEditModal.tsx:136 #: src/features/messaging/components/modals/EditAltTextModal.tsx:193 #: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:115 @@ -30093,11 +29713,6 @@ msgstr "向 <0>{displayName} 打聲招呼。私訊對話從這裡開始。" msgid "Scale" msgstr "縮放" -#. IAR modal: rule-category label grouping spam/scams, malware, and harmful misinformation. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:69 -msgid "Scams, malware, or misinformation" -msgstr "詐騙、惡意軟體或不實資訊" - #: src/features/auth/components/modals/MfaTotpEnableModal.tsx:97 msgid "Scan the QR code with your authenticator app." msgstr "使用您的驗證器應用程式掃描 QR 碼。" @@ -30855,11 +30470,6 @@ msgstr "選擇" msgid "Select {accessibleName}" msgstr "選取「{accessibleName}」" -#. Placeholder option label for the report category dropdown when no category has been chosen yet. -#: src/features/moderation/components/report/OptionDescriptors.ts:20 -msgid "Select a category" -msgstr "選擇類別" - #. Button or menu action label in the idle settings section. Keep it concise. #. Button or menu action label in the system welcome section. Keep it concise. #. Placeholder of the channel picker in the follow announcement channel dialog. @@ -30892,7 +30502,7 @@ msgid "Select a community where you have {permissionName} permission, or a group msgstr "選擇您擁有「{permissionName}」權限的社群,或您所屬的群組私訊。" #. Placeholder option label for the country dropdown in the EU illegal-content report flow. -#: src/features/moderation/components/report/OptionDescriptors.ts:107 +#: src/features/moderation/components/report/OptionDescriptors.ts:20 msgid "Select a country" msgstr "選取國家/地區" @@ -30911,11 +30521,6 @@ msgstr "選取重新導向 URI" msgid "Select a scenario to apply..." msgstr "選擇要套用的情境…" -#. Inline validation error on the details step of the DSA report flow when the category field is empty. -#: src/features/moderation/components/pages/ReportPage.tsx:97 -msgid "Select a violation category." -msgstr "請選擇違規類別。" - #. Native Edit menu item that selects everything in the focused field. Imperative verb. #. Textarea right-click context menu item that selects all text in the textarea. #: src/features/channel/components/textarea/TextareaContextMenu.tsx:58 @@ -30972,17 +30577,17 @@ msgstr "選擇您想在新裝置上登入的帳號。" msgid "Select voice processing mode" msgstr "選取語音處理模式" -#: src/features/moderation/components/report/ReportStepSelection.tsx:35 +#: src/features/moderation/components/report/ReportStepSelection.tsx:36 msgid "Select what you want to report." msgstr "請選擇您要檢舉的項目。" #. Inline validation error on the details step of the DSA report flow when the country dropdown has no selection. -#: src/features/moderation/components/pages/ReportPage.tsx:106 +#: src/features/moderation/components/pages/ReportPage.tsx:138 msgid "Select your country of residence." msgstr "請選擇您的居住國家/地區。" #. Generic combobox control placeholder. -#: src/features/ui/components/form/FormCombobox.tsx:76 +#: src/features/ui/components/form/FormCombobox.tsx:77 msgid "Select…" msgstr "選擇…" @@ -31037,13 +30642,6 @@ msgstr "選取範圍:{0}(上限 {1})" msgid "Selections" msgstr "選擇" -#. IAR modal: rule label. -#. Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:346 -#: src/features/moderation/components/report/OptionDescriptors.ts:52 -msgid "Self-harm or suicide" -msgstr "自殘或自殺" - #. Accessible label for the self-host setup wizard carousel. #: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97 msgid "Self-host setup" @@ -31121,7 +30719,7 @@ msgstr "傳送動作訊息(會以斜體顯示)。" msgid "Send animation" msgstr "傳送動畫" -#: src/features/moderation/components/report/ReportStepComplete.tsx:36 +#: src/features/moderation/components/report/ReportStepComplete.tsx:37 msgid "Send another report" msgstr "再送出一則檢舉" @@ -31138,7 +30736,7 @@ msgstr "傳送按鈕" msgid "Send code" msgstr "傳送驗證碼" -#: src/features/moderation/components/report/ReportStepDetails.tsx:302 +#: src/features/moderation/components/report/ReportStepDetails.tsx:364 msgid "Send DSA report" msgstr "送出 DSA 檢舉" @@ -31158,9 +30756,9 @@ msgstr "傳送檔案上限為 {size}" #. Button or menu action label in the user profile modal. Keep it concise. #. Member actions sheet menu item. Sends a friend request to the target user. #: src/features/channel/components/direct_message/DMWelcomeSection.tsx:146 -#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:93 +#: src/features/guild/components/modals/guild_tabs/GuildMemberActionsSheet.tsx:92 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:111 -#: src/features/user/components/modals/UserProfileModal.tsx:126 +#: src/features/user/components/modals/UserProfileModal.tsx:129 msgid "Send friend request" msgstr "傳送好友邀請" @@ -31220,8 +30818,8 @@ msgstr "在討論串中傳送訊息" msgid "Send messages, images, GIFs and emoji" msgstr "傳送訊息、圖片、GIF 和表情符號" -#. Footer submit button in the IAR modal. Sends the report to the safety team. -#: src/features/moderation/components/report_modal/IARModal.tsx:88 +#. Report flow: footer button on the summary screen that sends the report to the safety team. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:30 msgid "Send report" msgstr "送出檢舉" @@ -31255,7 +30853,7 @@ msgstr "將此釘選訊息送回過去?" msgid "Send TTS messages" msgstr "傳送 TTS 訊息" -#: src/features/moderation/components/report/ReportStepEmail.tsx:86 +#: src/features/moderation/components/report/ReportStepEmail.tsx:101 msgid "Send verification code" msgstr "傳送驗證碼" @@ -31273,11 +30871,6 @@ msgstr "傳送語音訊息" msgid "Send:" msgstr "傳送:" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:274 -msgid "Sending malware or dangerous links" -msgstr "傳送惡意軟體或危險連結" - #. Short label under a destination row in the forward modal, shown when the community has messaging disabled. #: src/features/app/components/dialogs/shared/UseForwardDestinations.ts:55 msgid "Sending messages is disabled in this community" @@ -31701,7 +31294,7 @@ msgstr "分享主題" msgid "Share voice activity with all friends?" msgstr "與所有好友分享語音活動嗎?" -#: src/features/moderation/components/report/ReportStepDetails.tsx:131 +#: src/features/moderation/components/report/ReportStepDetails.tsx:154 msgid "Share what our team needs to assess this." msgstr "提供我們的團隊評估此事所需的資訊。" @@ -31709,11 +31302,6 @@ msgstr "提供我們的團隊評估此事所需的資訊。" msgid "Share with a friend" msgstr "分享給好友" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:398 -msgid "Share with community mods." -msgstr "分享給社群管理員。" - #. Voice control button or tooltip label for starting screen sharing. #: src/features/voice/utils/VoiceMessageDescriptors.ts:223 msgid "Share your screen" @@ -31757,16 +31345,6 @@ msgstr "分享的視窗" msgid "Shared window audio" msgstr "分享的視窗音訊" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:302 -msgid "Shares personal info, stalks users, or coordinates privacy abuse." -msgstr "分享個人資訊、跟蹤騷擾使用者或串連侵犯隱私的行為。" - -#. Report category label for doxxing or sharing private personal information without consent. -#: src/features/moderation/components/report/OptionDescriptors.ts:48 -msgid "Sharing personal information" -msgstr "分享個人資訊" - #. Description for the free-tier Screen share streaming preset. Resolution and frame rate are technical tokens. #: src/features/voice/components/StreamSettingsMenuContent.tsx:98 msgid "Sharp text at 720p, up to 30 FPS" @@ -32758,12 +32336,12 @@ msgid "Sliders" msgstr "滑桿" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:203 +#: src/features/moderation/components/report/OptionDescriptors.ts:116 msgid "Slovakia" msgstr "斯洛伐克" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:207 +#: src/features/moderation/components/report/OptionDescriptors.ts:120 msgid "Slovenia" msgstr "斯洛維尼亞" @@ -32889,11 +32467,6 @@ msgstr "慢速模式模擬" msgid "Slowmode time remaining" msgstr "慢速模式剩餘時間" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:174 -msgid "Slurs, dehumanizing language, or attacks on protected groups." -msgstr "歧視性字眼、貶低人格的言論或針對受保護群體的攻擊。" - #. Short label in the selections tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/SelectionsTab.tsx:45 msgid "Small" @@ -33094,7 +32667,7 @@ msgid "Something went wrong while preparing this sticker. Try another file or tr msgstr "準備貼圖時發生錯誤。請嘗試其他檔案,或稍後再試一次。" #. Fallback body of the error alert shown when publishing an announcement message fails. -#: src/features/messaging/commands/MessageCommands.tsx:130 +#: src/features/messaging/commands/MessageCommands.tsx:134 msgid "Something went wrong while publishing. Try again in a moment." msgstr "發布時發生了問題。請稍後再試。" @@ -33302,40 +32875,15 @@ msgid "Spacious layout with clear visual separation between messages." msgstr "寬敞的版面配置,訊息之間有清晰的視覺區隔。" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:211 +#: src/features/moderation/components/report/OptionDescriptors.ts:124 msgid "Spain" msgstr "西班牙" -#. Report category label for a user profile used primarily to send spam. -#: src/features/moderation/components/report/OptionDescriptors.ts:74 -msgid "Spam account" -msgstr "垃圾帳號" - #. Section label for spam classification debug controls. #: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:21 msgid "Spam classification" msgstr "垃圾訊息分類" -#. Report category label for spam or scam messages. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:36 -msgid "Spam or scam" -msgstr "垃圾訊息或詐騙" - -#. Report category label for a community whose purpose is spam or scams. -#: src/features/moderation/components/report/OptionDescriptors.ts:99 -msgid "Spam or scam community" -msgstr "垃圾訊息或詐騙社群" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:254 -msgid "Spam, scam, or phishing account" -msgstr "垃圾訊息、詐騙或網路釣魚帳號" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:246 -msgid "Spam, scams, or phishing" -msgstr "垃圾訊息、詐騙或網路釣魚" - #. Short label in the language and locale names. Keep it concise. #: src/features/user/utils/LocaleUtils.ts:48 msgid "Spanish (Latin America)" @@ -33628,9 +33176,11 @@ msgstr "最小化啟動" #. Button on the browser page after cancelling that goes back to choosing an account. #: src/features/auth/flow/HandoffApprovalFlow.tsx:337 -#: src/features/moderation/components/report/ReportStepDetails.tsx:326 -#: src/features/moderation/components/report/ReportStepEmail.tsx:97 -#: src/features/moderation/components/report/ReportStepVerification.tsx:134 +#: src/features/moderation/components/report/ReportStepDetails.tsx:389 +#: src/features/moderation/components/report/ReportStepEmail.tsx:113 +#: src/features/moderation/components/report/ReportStepReason.tsx:149 +#: src/features/moderation/components/report/ReportStepReason.tsx:219 +#: src/features/moderation/components/report/ReportStepVerification.tsx:167 msgid "Start over" msgstr "重新開始" @@ -33752,22 +33302,26 @@ msgstr "保持登入" msgid "Step {current} of {total}" msgstr "步驟 {current} / {total}" -#: src/features/moderation/components/report/ReportStepSelection.tsx:29 +#: src/features/moderation/components/report/ReportStepSelection.tsx:30 msgid "Step 1" msgstr "步驟 1" -#: src/features/moderation/components/report/ReportStepEmail.tsx:40 +#: src/features/moderation/components/report/ReportStepEmail.tsx:46 msgid "Step 2" msgstr "步驟 2" -#: src/features/moderation/components/report/ReportStepVerification.tsx:45 +#: src/features/moderation/components/report/ReportStepVerification.tsx:70 msgid "Step 3" msgstr "步驟 3" -#: src/features/moderation/components/report/ReportStepDetails.tsx:125 +#: src/features/moderation/components/report/ReportStepReason.tsx:195 msgid "Step 4" msgstr "步驟 4" +#: src/features/moderation/components/report/ReportStepDetails.tsx:148 +msgid "Step 5" +msgstr "步驟 5" + #. Switch label in the voice settings that sends both channels of a stereo microphone. Keep it concise. #: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:50 msgid "Stereo microphone" @@ -33935,11 +33489,6 @@ msgstr "停止將其設為公告頻道?" msgid "Stop hiding muted channels by default?" msgstr "要停止預設隱藏已設為靜音的頻道嗎?" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:390 -msgid "Stop messages and friend requests." -msgstr "不再收到訊息和好友邀請。" - #: src/features/user/components/modals/tabs/components/MicTestSection.tsx:16 msgid "Stop mic test" msgstr "停止麥克風測試" @@ -33959,11 +33508,6 @@ msgstr "停止修補 Node.prototype 的 insertBefore 和 removeChild。當頁面 msgid "Stop ringing" msgstr "停止響鈴" -#. IAR modal: quick-action card description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:418 -msgid "Stop seeing its content and members." -msgstr "不再看到社群的內容和成員。" - #. Privacy > Active now: confirmation modal title when turning sharing off. #: src/features/user/components/modals/tabs/privacy_safety_tab/ActiveNowTab.tsx:37 msgid "Stop sharing voice activity with all friends?" @@ -34344,7 +33888,7 @@ msgid "Swap common text faces such as :) and <3 for emoji when sending messages" msgstr "傳送訊息時,將 :) 和 <3 等常見文字表情替換成表情符號" #. Country name. EU member state in the illegal-content report country dropdown. -#: src/features/moderation/components/report/OptionDescriptors.ts:215 +#: src/features/moderation/components/report/OptionDescriptors.ts:128 msgid "Sweden" msgstr "瑞典" @@ -34804,11 +34348,6 @@ msgstr "輕觸以新增記事" msgid "tar.gz archive" msgstr "tar.gz 封存檔" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:178 -msgid "Targets people by protected characteristics." -msgstr "針對具有受保護特徵的人。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts:34 @@ -34885,11 +34424,6 @@ msgstr "服務條款" msgid "Terms URL" msgstr "條款網址" -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:194 -msgid "Terrorism or violent extremism" -msgstr "恐怖主義或暴力極端主義" - #. Button that validates SMTP credentials. #: src/features/app/components/setup/SetupWizardSteps.tsx:1125 msgid "Test SMTP" @@ -35030,10 +34564,25 @@ msgid "Thai" msgstr "泰文" #. Confirmation text shown after a user submits a moderation report. -#: src/features/moderation/components/report/ReportStepComplete.tsx:22 +#: src/features/moderation/components/report/ReportStepComplete.tsx:23 msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "感謝您協助維護 {productName} 的安全。我們會盡快審核您的檢舉。" +#. Report flow: title of the final screen when the chosen answer does not lead to a report, so nothing was sent. Thanks the person for raising it. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:46 +msgid "Thanks for flagging this" +msgstr "感謝您告知我們" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. Used when the reporter already picked a category. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:62 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report." +msgstr "感謝您告訴我們。這本身並未違反我們的規定,因此我們沒有送出檢舉。" + +#. Report flow: body of the final screen when the chosen answer does not lead to a report, so nothing was sent. "Abusive or harmful content" is the name of an answer in the same flow. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:56 +msgid "Thanks for telling us. This doesn't break our rules on its own, so we didn't send a report. If it targets someone or uses slurs, report it again and choose Abusive or harmful content." +msgstr "感謝您告訴我們。這本身並不違反我們的規定,所以我們沒有送出檢舉。如果內容針對特定對象或使用侮辱性字眼,請再次檢舉並選擇「辱罵性或有害的內容」。" + #. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. #: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." @@ -35048,7 +34597,7 @@ msgstr "操作未成功。請再試一次或取消。" msgid "That doesn't look like a valid color. Try hex, rgb(), hsl(), or a CSS color name." msgstr "這看起來不是有效的顏色。請試試看十六進位、rgb()、hsl() 或 CSS 顏色名稱。" -#: src/features/moderation/components/report/ReportStepDetails.tsx:175 +#: src/features/moderation/components/report/ReportStepDetails.tsx:217 msgid "That doesn't look like a valid URL." msgstr "這看起來不是有效的網址。" @@ -35104,6 +34653,11 @@ msgstr "您在其他裝置上的 {PRODUCT_NAME} App 中,可以在「在其他 msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." msgstr "{PRODUCT_NAME} 應用程式未登入。您可以關閉此分頁。" +#. Report flow: body of the final screen after a report was sent. {productName} is the name of the app. The second sentence promises the reported person is not told who reported them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:51 +msgid "The {productName} safety team will review your report. We won't reveal that it came from you." +msgstr "{productName} 安全團隊會審核您的檢舉。我們不會透露是您檢舉的。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -35308,6 +34862,11 @@ msgstr "提供的 redirect_uri 未在此應用程式中註冊。" msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "提供的 redirect_uri 必須使用 HTTP 或 HTTPS。" +#. Report flow: toast shown when the report questions changed while the reporter was answering them. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:95 +msgid "The report form changed. Please start again." +msgstr "檢舉表單已變更。請重新開始。" + #. Activity log detail line under a deleted role, listing the permissions the role gave its members before it was deleted. The role is the subject. {permissions} is a list of permission names that the app joins with commas and the word for "and" in your language. When the list is long it ends with a count of the permissions not named, such as "3 more permissions". Use the same word for role as the rest of the app. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogRoleMessages.ts:170 msgid "The role granted {permissions}" @@ -35359,7 +34918,7 @@ msgid "The username tags on this instance are already set. They can no longer ch msgstr "此伺服器的使用者名稱標籤已設定完成,無法再變更。" #. Inline error on the verification step of the DSA report flow when the entered code is rejected. -#: src/features/moderation/components/pages/ReportPage.tsx:88 +#: src/features/moderation/components/pages/ReportPage.tsx:114 msgid "The verification code is invalid or expired." msgstr "驗證碼無效或已過期。" @@ -36115,13 +35674,8 @@ msgstr "此成員已不在語音連線中。" msgid "This message can only be forwarded to age-restricted channels" msgstr "此訊息只能轉發至設有年齡限制的頻道" -#. IAR modal: tooltip on the delete card when the reported message is already deleted. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:122 -msgid "This message has already been deleted." -msgstr "此訊息已被刪除。" - #. Toast shown when someone tries to publish an announcement message that was already published. -#: src/features/messaging/commands/MessageCommands.tsx:122 +#: src/features/messaging/commands/MessageCommands.tsx:126 msgid "This message has already been published" msgstr "此訊息已發佈過" @@ -36279,11 +35833,6 @@ msgstr "這個討論串已關閉。傳送訊息將會重新開啟它。" msgid "This thread is locked. Only moderators can send messages." msgstr "此討論串已鎖定。只有管理員可以傳送訊息。" -#. Lowercase phrase used mid-sentence in IAR copy when referring to the reported user without a name. -#: src/features/moderation/components/report_modal/IARModalContext.ts:26 -msgid "this user" -msgstr "這位使用者" - #: src/features/user/components/popouts/LimitedProfileNotice.tsx:10 msgid "This user has limited their profile. Some details are hidden from people who aren't their friends." msgstr "此使用者已限制個人檔案。部分詳細資訊不會顯示給非好友的使用者。" @@ -36292,11 +35841,6 @@ msgstr "此使用者已限制個人檔案。部分詳細資訊不會顯示給非 msgid "This user has no roles in this community." msgstr "此使用者在此社群中沒有任何身分組。" -#. IAR modal: tooltip on the ban card when the reported user is already banned. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:142 -msgid "This user is already banned from the community." -msgstr "此使用者已被社群停權。" - #: src/features/channel/components/channel_view/DMChannelView.tsx:282 msgid "This user is no longer available." msgstr "此使用者已無法使用。" @@ -36465,16 +36009,6 @@ msgstr "執行緒已更新" msgid "Threads" msgstr "討論串" -#. IAR modal: rule description for a user report. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:158 -msgid "Threats, following across spaces, or unwanted contact." -msgstr "威脅、到處跟蹤或不受歡迎的接觸。" - -#. IAR modal: rule-category label grouping harassment, hate, violence, terrorism, raids, and self-harm content. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:44 -msgid "Threats, harassment, or harm" -msgstr "威脅、騷擾或傷害" - #. Short label in the message history threshold content. Keep it concise. #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:41 msgid "Threshold date" @@ -36570,7 +36104,7 @@ msgstr "已將 {targetUserTag} 暫時禁言" #. Moderation action label that times a member out (temporary mute) in a community. #: src/features/moderation/components/modals/TimeoutMemberModal.tsx:134 -#: src/features/moderation/utils/ModerationMessageDescriptors.ts:21 +#: src/features/moderation/utils/ModerationMessageDescriptors.ts:18 msgid "Timeout" msgstr "暫時禁言" @@ -36787,6 +36321,11 @@ msgstr "色調" msgid "Tone-map HDR images to standard range, reducing peak brightness." msgstr "將 HDR 影像色調對應至標準範圍,降低峰值亮度。" +#. Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes". +#: src/features/moderation/components/pages/ReportPage.tsx:95 +msgid "Too many codes sent. Wait {duration} and try again." +msgstr "傳送的驗證碼過多。請等待 {duration} 後再試一次。" + #. Error message in the max guilds modal. #: src/features/guild/components/alerts/MaxGuildsModal.tsx:9 msgid "Too many communities" @@ -36860,7 +36399,7 @@ msgid "Transfer community ownership" msgstr "轉移社群擁有權" #. Confirm dialog body before transferring ownership of a group DM. -#: src/features/ui/action_menu/UserContextMenu.tsx:105 +#: src/features/ui/action_menu/UserContextMenu.tsx:104 msgid "Transfer group ownership to {userName}?" msgstr "要將群組擁有權轉移給 {userName} 嗎?" @@ -37561,7 +37100,7 @@ msgstr "請先解除封鎖,才能傳送好友邀請。" #. Title of the confirmation modal for unblocking a previously blocked user. Short command title. #: src/features/relationship/utils/RelationshipActionUtils.tsx:95 #: src/features/user/components/modals/UserProfileMobileSheet.tsx:106 -#: src/features/user/components/modals/UserProfileModal.tsx:118 +#: src/features/user/components/modals/UserProfileModal.tsx:121 msgid "Unblock user" msgstr "解除封鎖" @@ -37607,16 +37146,6 @@ msgstr "解除所有裝置的耳機靜音" msgid "Undeafen yourself" msgstr "解除自己的耳機靜音" -#. IAR modal: child-safety rule label (user reports). -#: src/features/moderation/components/report_modal/IARModalCopy.ts:89 -msgid "Underage or child-safety concern" -msgstr "未成年或兒童安全疑慮" - -#. Report category label for an account that appears to belong to someone under the minimum age. -#: src/features/moderation/components/report/OptionDescriptors.ts:78 -msgid "Underage user" -msgstr "未成年使用者" - #. Selection formatting toolbar button. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. @@ -38268,16 +37797,6 @@ msgstr "直到我再次開啟" msgid "Unverified email" msgstr "未驗證的電子郵件" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:206 -msgid "Unwanted conduct or mature content in the wrong place." -msgstr "不受歡迎的行為,或出現在不當場合的成人內容。" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:214 -msgid "Unwanted mature conduct, comments, or requests." -msgstr "不受歡迎的成人行為、言論或要求。" - #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:608 msgid "Up to {DISCOVERY_MAX_TAGS} tags help people find your community. They show up in Discovery search." msgstr "最多可設定 {DISCOVERY_MAX_TAGS} 個標籤,讓大家更容易找到您的社群。這些標籤會顯示在探索搜尋結果中。" @@ -38840,11 +38359,6 @@ msgstr "使用淺色主題" msgid "Use native title bar" msgstr "使用原生標題列" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:366 -msgid "Use only if it clearly breaks {productName}'s rules and doesn't fit above." -msgstr "僅在內容明確違反 {productName} 規則且不符合上述任何選項時使用。" - #. Security settings: confirmation modal title for turning on passkey-based two-factor authentication. #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:51 msgid "Use passkeys for two-factor authentication?" @@ -39000,11 +38514,6 @@ msgstr "僅在此社群中使用。" msgid "User" msgstr "使用者" -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:230 -msgid "User appears underage, or is involved in grooming or child exploitation." -msgstr "使用者疑似未成年,或涉及誘騙、剝削兒童。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:306 msgid "User avatars" @@ -39021,7 +38530,7 @@ msgid "User debug" msgstr "使用者偵錯" #. Field label on the details step of the DSA report form (user report). Optional Fluxer user snowflake ID. "ID" is conventional. -#: src/features/moderation/components/report/ReportStepDetails.tsx:33 +#: src/features/moderation/components/report/ReportStepDetails.tsx:32 msgid "User ID (optional)" msgstr "使用者 ID(選填)" @@ -39061,12 +38570,12 @@ msgstr "找不到使用者" #. Short label in the inputs tab. Keep it concise. #. Short label in the user profile modal. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:46 -#: src/features/user/components/modals/UserProfileModal.tsx:90 +#: src/features/user/components/modals/UserProfileModal.tsx:93 msgid "User profile" msgstr "使用者個人檔案" #. Short label in the user profile modal. Keep it concise. Preserve {tag}; it is inserted by code. -#: src/features/user/components/modals/UserProfileModal.tsx:94 +#: src/features/user/components/modals/UserProfileModal.tsx:97 msgid "User profile: {tag}" msgstr "使用者個人檔案:{tag}" @@ -39081,7 +38590,7 @@ msgid "User settings" msgstr "使用者設定" #. Field label on the details step of the DSA report form (user report). Optional FluxerTag of the reported user. -#: src/features/moderation/components/report/ReportStepDetails.tsx:38 +#: src/features/moderation/components/report/ReportStepDetails.tsx:37 msgid "User tag (optional)" msgstr "使用者標籤(選填)" @@ -39339,7 +38848,7 @@ msgstr "已驗證社群" msgid "Verify" msgstr "驗證" -#: src/features/moderation/components/report/ReportStepVerification.tsx:91 +#: src/features/moderation/components/report/ReportStepVerification.tsx:116 msgid "Verify code" msgstr "驗證代碼" @@ -39368,7 +38877,7 @@ msgstr "驗證是您本人操作" #: src/features/app/components/alerts/DmActionErrorModal.tsx:44 #: src/features/channel/components/direct_message/AddFriendForm.tsx:86 #: src/features/channel/utils/CreateDMModalUtils.tsx:52 -#: src/features/moderation/components/report/ReportStepEmail.tsx:43 +#: src/features/moderation/components/report/ReportStepEmail.tsx:49 msgid "Verify your email" msgstr "驗證您的電子郵件" @@ -39718,7 +39227,7 @@ msgstr "檢視備用碼" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:69 -#: src/features/user/components/modals/UserProfileModal.tsx:98 +#: src/features/user/components/modals/UserProfileModal.tsx:101 msgid "View community profile" msgstr "查看社群個人檔案" @@ -39751,7 +39260,7 @@ msgstr "檢視禮物" #. Button or menu action label in the user profile actions sheet. Keep it concise. #. Button or menu action label in the user profile modal. Keep it concise. #: src/features/user/components/modals/UserProfileActionsSheet.tsx:73 -#: src/features/user/components/modals/UserProfileModal.tsx:102 +#: src/features/user/components/modals/UserProfileModal.tsx:105 msgid "View global profile" msgstr "查看全域個人檔案" @@ -39847,26 +39356,6 @@ msgstr "觀眾加入直播" msgid "Viewer leaves stream" msgstr "觀眾離開直播" -#. Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal. -#: src/features/moderation/components/report/ReportStepDetails.tsx:18 -msgid "Violation category" -msgstr "違規類別" - -#. IAR modal: rule description. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:326 -msgid "Violation is in the user's profile, not a specific message." -msgstr "違規內容在使用者的個人檔案中,而非特定訊息。" - -#. IAR modal: rule label. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:186 -msgid "Violence or violent threats" -msgstr "暴力或暴力威脅" - -#. Report category label for violent or graphic content. Keep tone plain and neutral. -#: src/features/moderation/components/report/OptionDescriptors.ts:32 -msgid "Violent or graphic content" -msgstr "暴力或血腥內容" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:238 msgctxt "us-state" @@ -40421,7 +39910,7 @@ msgstr "我們已將此表情符號調整大小並壓縮為 128x128 像素,但 msgid "We resized and compressed this sticker to 320x320 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file." msgstr "我們已將此貼圖調整大小並壓縮至 320x320 像素,但它仍為 {fileSize}。限制為 {maxSize}。請嘗試使用更簡單的圖片、更少的顏色或更小的原始檔案。" -#: src/features/moderation/components/report/ReportStepVerification.tsx:51 +#: src/features/moderation/components/report/ReportStepVerification.tsx:76 msgid "We sent a code to {email}." msgstr "我們已將驗證碼傳送至 {email}。" @@ -40472,7 +39961,7 @@ msgstr "我們會盡快處理。當您的封存檔準備好時,您會收到一 msgid "We'll restore your previous email, sign out old sessions, disable MFA, and secure your account with a new password." msgstr "我們將會復原您先前的電子郵件、登出舊的裝置,停用多重要素驗證,並以新密碼保護您的帳號。" -#: src/features/moderation/components/report/ReportStepEmail.tsx:46 +#: src/features/moderation/components/report/ReportStepEmail.tsx:52 msgid "We'll send a short code to confirm you can receive updates about this report." msgstr "我們會傳送一組驗證碼,確認您可接收此檢舉的最新消息。" @@ -40714,11 +40203,6 @@ msgctxt "us-state" msgid "West Virginia" msgstr "西維吉尼亞州" -#. IAR modal: category-step title for the platform-report path. User picks a broad area before drilling in. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:36 -msgid "What kind of rule was broken?" -msgstr "違反了哪一類規則?" - #. Display-name field placeholder in account registration forms. #: src/features/i18n/utils/CommonMessageDescriptors.ts:878 msgid "What should people call you?" @@ -40755,6 +40239,11 @@ msgstr "近況如何?" msgid "What's new" msgstr "最新功能" +#. DSA report page: title of the reason step while its questions load or when they could not be loaded. +#: src/features/moderation/components/report/ReportStepReason.tsx:33 +msgid "What's the reason for your report?" +msgstr "您檢舉的原因是什麼?" + #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/MessageHistoryThresholdContent.tsx:66 msgid "When a custom threshold date is not set, members without the <0>{readMessageHistoryPermissionLabel} permission cannot view any historical messages. They'll only see messages in real time as they arrive, and they'll disappear when they restart their clients." msgstr "如果沒有設定自訂門檻日期,沒有<0>{readMessageHistoryPermissionLabel}權限的成員將無法查看任何歷史訊息。他們只能即時看到訊息,當他們重新啟動應用程式時,訊息就會消失。" @@ -40832,11 +40321,6 @@ msgstr "哪些社群" msgid "Which conversations" msgstr "哪些對話" -#. IAR modal: reason-step title for the platform-report path after a category has been picked. -#: src/features/moderation/components/report_modal/IARModalCopy.ts:40 -msgid "Which rule was broken?" -msgstr "違反了哪一條規則?" - #: src/features/user/components/modals/tabs/UserVoiceTab.tsx:362 msgid "While push-to-talk is on, your shortcut controls your microphone, so the mute button is disabled." msgstr "啟用「按住說話」時,您的快速鍵會控制麥克風,因此靜音按鈕會停用。" @@ -41277,7 +40761,7 @@ msgid "You can't attach files in this channel." msgstr "您無法在此頻道中附加檔案。" #. Error message in the user profile modal. -#: src/features/user/components/modals/UserProfileModal.tsx:106 +#: src/features/user/components/modals/UserProfileModal.tsx:109 msgid "You can't befriend yourself" msgstr "您無法將自己新增為朋友" @@ -41341,7 +40825,7 @@ msgstr "您無法傳送訊息給這位使用者" #. Error message in the user profile modal. #. Error message in the user profile popout. #. Error message in the user settings profile preview. -#: src/features/user/components/modals/UserProfileModal.tsx:110 +#: src/features/user/components/modals/UserProfileModal.tsx:113 #: src/features/user/components/popouts/UserProfilePopout.tsx:73 #: src/features/user/components/profile/ProfilePreview.tsx:44 msgid "You can't message yourself" @@ -41606,7 +41090,7 @@ msgid "You must agree to the terms of service to create an account" msgstr "您必須同意服務條款才能建立帳號" #. Inline error on the details step of the DSA report flow when the user has not completed email verification. -#: src/features/moderation/components/pages/ReportPage.tsx:92 +#: src/features/moderation/components/pages/ReportPage.tsx:118 msgid "You must verify your email before sending a report." msgstr "您必須先驗證電子郵件,才能傳送檢舉。" @@ -41891,6 +41375,11 @@ msgstr "您目前享有舊版費率。此方案目前的價格為 {currentSubscr msgid "You're sending messages too quickly" msgstr "您傳送訊息的速度太快了" +#. Report flow: note on the summary screen when the reporter hit the report rate limit. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:108 +msgid "You're sending reports too quickly. Try again later." +msgstr "您傳送檢舉的速度太快了。請稍後再試。" + #. Title of the browser page after the user approved signing in to the app. #: src/features/auth/flow/HandoffApprovalFlow.tsx:282 msgid "You're signed in" @@ -41915,6 +41404,16 @@ msgstr "您正在檢視較舊的訊息" msgid "You've added more people than a group DM allows. Remove a few and try again." msgstr "您新增的人數已超出群組私訊的上限。請移除幾位成員,然後再試一次。" +#. Report flow: note on the summary screen when the reporter already reported this message. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:99 +msgid "You've already reported this message." +msgstr "您已經檢舉過這則訊息了。" + +#. Report flow: note on the summary screen when the reporter already reported this user profile in the last day. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:103 +msgid "You've already reported this profile today." +msgstr "您今天已經檢舉過這個個人檔案了。" + #. Body of the error modal shown when a self-serve refund is blocked by the cooldown period. #: src/features/app/components/dialogs/components/plutonium/SelfServeRefundSection.tsx:51 msgid "You've already used a self-serve refund recently. You can refund again once the cooldown ends." @@ -42079,6 +41578,11 @@ msgstr "你的帳號和設定並未變更或刪除。" msgid "Your action could not be completed because it was flagged by our safety systems. If you believe this is a mistake, please contact support." msgstr "您的操作未能完成,因為系統偵測到有安全疑慮。如果您認為這是錯誤,請聯絡客服。" +#. Report flow: section heading above the list of answers the reporter picked, on the summary screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:26 +msgid "Your answers" +msgstr "您的回答" + #: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx:409 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "您的申請正在審核中。您仍然可以更新刊登資訊或撤回申請。" @@ -42089,7 +41593,7 @@ msgid "Your browser requires user interaction before audio can be played. Click msgstr "您的瀏覽器需要使用者互動才能播放音訊。請點擊下方按鈕以啟用語音聊天。" #. Body of the confirmation shown before saving an edit to a message published from an announcement channel. -#: src/features/messaging/commands/MessageCommands.tsx:109 +#: src/features/messaging/commands/MessageCommands.tsx:113 msgid "Your changes reach every community that follows this channel, which can take a minute. Each published message allows 3 quick edits, then 1 every 20 minutes." msgstr "你的變更會傳送給所有追蹤此頻道的社群,這可能需要一分鐘。每則已發布的訊息可快速編輯 3 次,之後每 20 分鐘可編輯 1 次。" @@ -42311,6 +41815,11 @@ msgstr "您的新暱稱,留空則重設。" msgid "Your old recovery kit no longer works. Store this new one somewhere safe." msgstr "你舊的復原工具組已失效。請將這個新的工具組存放在安全的地方。" +#. Report flow: heading above the box of follow-up actions on the final screen. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:67 +msgid "Your options" +msgstr "您的選項" + #. Recovery kit modal description shown after someone recovers their account with a recovery key. #: src/features/auth/components/modals/RecoveryKitModal.tsx:55 msgid "Your password is reset. Your old recovery kit no longer works. Store this new one somewhere safe." @@ -42370,6 +41879,11 @@ msgstr "您的地區" msgid "Your renewal payment failed but <0/> stay active until <1>{graceDate}. Update your payment method before then to keep your subscription." msgstr "您的續訂付款失敗,但 <0/> 會保持啟用狀態直到 <1>{graceDate}。請在此之前更新付款方式,以保留您的訂閱。" +#. Report flow: note on the summary screen when sending the report failed for an unknown reason. +#: src/features/moderation/components/report_flow/ReportFlowCopy.ts:112 +msgid "Your report didn't go through. Try again." +msgstr "您的檢舉未成功送出。請再試一次。" + #. Video settings note shown when the saved screen share quality is above what this account can send. Resolutions are short labels such as 1440p or Source and rates are whole numbers. FPS is a technical token. #: src/features/user/components/modals/tabs/UserVideoTab.tsx:86 msgid "Your saved {savedResolution} at {savedFrameRate} FPS needs {premiumProductName}, so shares use {resolution} at {frameRate} FPS." @@ -42464,11 +41978,6 @@ msgstr "您的訂閱將在下次續訂時切換為按年計費。" msgid "Your theme CSS is too large to share. Trim it down and try again." msgstr "您的主題 CSS 檔案過大,無法分享。請縮減檔案大小後再試一次。" -#. Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up. -#: src/features/moderation/components/report/ReportStepDetails.tsx:67 -msgid "Your username (optional)" -msgstr "您的使用者名稱(選填)" - #. Success toast after removing a community vanity invite URL. #: src/features/guild/components/modals/guild_tabs/GuildVanityURLTab.tsx:54 msgid "Your vanity URL has been removed." diff --git a/fluxer_app/src/features/i18n/utils/LocaleDirection.ts b/fluxer_app/src/features/i18n/utils/LocaleDirection.ts new file mode 100644 index 000000000..0b2990640 --- /dev/null +++ b/fluxer_app/src/features/i18n/utils/LocaleDirection.ts @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +const RTL_LANGUAGES: ReadonlySet = new Set(['ar', 'he', 'fa', 'ur']); + +export function getLocaleDirection(locale: string | null | undefined): 'rtl' | 'ltr' { + const language = locale?.split(/[-_]/)[0]?.toLowerCase() ?? ''; + return RTL_LANGUAGES.has(language) ? 'rtl' : 'ltr'; +} diff --git a/fluxer_app/src/features/messaging/commands/MessageCommands.tsx b/fluxer_app/src/features/messaging/commands/MessageCommands.tsx index f6c411eab..a64204b63 100644 --- a/fluxer_app/src/features/messaging/commands/MessageCommands.tsx +++ b/fluxer_app/src/features/messaging/commands/MessageCommands.tsx @@ -7,7 +7,9 @@ import {showGenericErrorModal} from '@app/features/app/components/alerts/Generic import {ConfirmModal} from '@app/features/app/components/dialogs/ConfirmModal'; import {Endpoints} from '@app/features/app/constants/Endpoints'; import {getActiveInstanceProductName} from '@app/features/app/state/ActiveInstanceProductName'; +import RuntimeConfig from '@app/features/app/state/RuntimeConfig'; import Authentication from '@app/features/auth/state/Authentication'; +import {canReportMessage} from '@app/features/channel/components/MessageActionUtils'; import Channels from '@app/features/channel/state/Channels'; import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions'; import GatewayConnection from '@app/features/gateway/transport/GatewayConnection'; @@ -46,7 +48,7 @@ import { normalizeMessageContent, } from '@app/features/messaging/utils/MessageRequestUtils'; import {resolveRetryAfterMs} from '@app/features/messaging/utils/RetryAfterUtils'; -import * as IARCommands from '@app/features/moderation/commands/IARCommands'; +import {openReportMessageModal} from '@app/features/moderation/utils/ReportActionUtils'; import * as NavigationCommands from '@app/features/navigation/commands/NavigationCommands'; import Permission from '@app/features/permissions/state/Permission'; import {AccountScopedWork} from '@app/features/platform/state/AccountScopedWork'; @@ -82,6 +84,8 @@ import type { import * as SnowflakeUtils from '@fluxer/snowflake/src/SnowflakeUtils'; import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; +import {useLingui} from '@lingui/react/macro'; +import {observer} from 'mobx-react-lite'; const ARE_YOU_SURE_YOU_WANT_TO_DELETE_THIS_DESCRIPTOR = msg({ message: "Delete this message? Can't be undone.", @@ -94,7 +98,7 @@ const DELETE_DESCRIPTOR = msg({ const ALSO_REPORT_TO_SAFETY_TEAM_DESCRIPTOR = msg({ message: 'Also report this message to the {productName} Safety Team', comment: - 'Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).', + 'Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, confirming opens the report flow for the message, and the message is deleted when that flow ends. {productName} is the product name (e.g., Fluxer).', }); const DELETE_PUBLISHED_MESSAGE_BODY_DESCRIPTOR = msg({ message: @@ -797,6 +801,24 @@ export async function remove(channelId: string, messageId: string): Promise void; +} + +const SafetyTeamReportSwitch = observer(({value = false, onChange}: SafetyTeamReportSwitchProps) => { + const {i18n} = useLingui(); + return ( + onChange?.(checked)} + label={i18n._(ALSO_REPORT_TO_SAFETY_TEAM_DESCRIPTOR, {productName: getActiveInstanceProductName()})} + compact + data-flx="messaging.message-commands.safety-team-report-switch.switch" + /> + ); +}); + interface ShowDeleteConfirmationOptions { message: MessageModel; onDelete?: () => void; @@ -815,8 +837,13 @@ export function showDeleteConfirmation( ): void { const showSafetyTeamReportToggle = !suppressSafetyTeamReportToggle && - message.author.id !== Authentication.currentUserId && + canReportMessage(message) && Permission.can(Permissions.MANAGE_MESSAGES, {channelId: message.channelId}); + if (showSafetyTeamReportToggle) { + RuntimeConfig.revalidateDiscovery().catch((error: unknown) => { + logger.warn('Failed to refresh discovery for the delete confirmation:', error); + }); + } ModalCommands.push( modal(() => ( {}} - label={i18n._(ALSO_REPORT_TO_SAFETY_TEAM_DESCRIPTOR, {productName: getActiveInstanceProductName()})} - compact - data-flx="messaging.message-commands.show-delete-confirmation.switch" - /> + ) : undefined } - onPrimary={async (alsoReportToSafetyTeam) => { + onPrimary={(alsoReportToSafetyTeam) => { + const deleteMessage = () => { + remove(message.channelId, message.id); + onDelete?.(); + }; if (alsoReportToSafetyTeam) { - try { - await IARCommands.reportMessage(message.channelId, message.id, 'other'); - } catch (error) { - logger.error('Failed to also-report message before deletion:', error); - } + openReportMessageModal(message, {onFinish: deleteMessage}); + return; } - remove(message.channelId, message.id); - onDelete?.(); + deleteMessage(); }} showShiftBypassConfirmationTip={showShiftBypassConfirmationTip} data-flx="messaging.message-commands.show-delete-confirmation.confirm-modal" diff --git a/fluxer_app/src/features/moderation/commands/IARCommands.ts b/fluxer_app/src/features/moderation/commands/IARCommands.ts deleted file mode 100644 index 07bdd0783..000000000 --- a/fluxer_app/src/features/moderation/commands/IARCommands.ts +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {Endpoints} from '@app/features/app/constants/Endpoints'; -import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions'; -import {http} from '@app/features/platform/transport/RestTransport'; -import {Logger} from '@app/features/platform/utils/AppLogger'; - -const logger = new Logger('IAR'); - -type ReportKind = 'message' | 'user' | 'guild'; - -async function submitReport(endpoint: string, body: Record): Promise { - await http.post(endpoint, {body}); -} - -function rethrowReportFailure(kind: ReportKind, error: unknown): never { - logger.error(`Failed to submit ${kind} report:`, error); - throw error; -} - -function shouldSkipReport(): boolean { - if (DeveloperOptions.noOpInAppReports) { - logger.info('No-op in-app reports is enabled; skipping network call.'); - return true; - } - return false; -} - -export async function reportMessage(channelId: string, messageId: string, category: string): Promise { - if (shouldSkipReport()) return; - try { - await submitReport(Endpoints.REPORT_MESSAGE, { - category, - channel_id: channelId, - message_id: messageId, - }); - } catch (error) { - rethrowReportFailure('message', error); - } -} - -export async function reportUser(userId: string, category: string, guildId?: string): Promise { - if (shouldSkipReport()) return; - try { - await submitReport(Endpoints.REPORT_USER, { - category, - user_id: userId, - ...(guildId ? {guild_id: guildId} : {}), - }); - } catch (error) { - rethrowReportFailure('user', error); - } -} - -export async function reportGuild(guildId: string, category: string, inviteCode?: string): Promise { - if (shouldSkipReport()) return; - try { - await submitReport(Endpoints.REPORT_GUILD, { - category, - guild_id: guildId, - ...(inviteCode ? {invite_code: inviteCode} : {}), - }); - } catch (error) { - rethrowReportFailure('guild', error); - } -} diff --git a/fluxer_app/src/features/moderation/commands/ReportFlowCommands.ts b/fluxer_app/src/features/moderation/commands/ReportFlowCommands.ts new file mode 100644 index 000000000..2e172c728 --- /dev/null +++ b/fluxer_app/src/features/moderation/commands/ReportFlowCommands.ts @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {Endpoints} from '@app/features/app/constants/Endpoints'; +import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions'; +import {http} from '@app/features/platform/transport/RestTransport'; +import {Logger} from '@app/features/platform/utils/AppLogger'; +import type { + ReportFlowResponse, + ReportFlowStep, + ReportFlowSurface, + ReportFlowTargetType, +} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; + +const logger = new Logger('ReportFlow'); + +export type ReportFlowSubmissionTarget = + | {type: 'message'; channelId: string; messageId: string} + | {type: 'user'; userId: string; guildId?: string}; + +export async function fetchReportFlow( + targetType: ReportFlowTargetType, + surface: ReportFlowSurface, + locale: string, +): Promise { + const response = await http.get(Endpoints.REPORT_FLOW(targetType), { + query: {surface, locale}, + }); + return response.body; +} + +function buildTargetFields(target: ReportFlowSubmissionTarget): Record { + switch (target.type) { + case 'message': + return {channel_id: target.channelId, message_id: target.messageId}; + case 'user': + return target.guildId ? {user_id: target.userId, guild_id: target.guildId} : {user_id: target.userId}; + } +} + +export async function submitReportFlow( + target: ReportFlowSubmissionTarget, + flow: ReportFlowResponse, + steps: ReadonlyArray, +): Promise { + if (DeveloperOptions.noOpInAppReports) { + logger.info('No-op in-app reports is enabled; skipping network call.'); + return; + } + try { + await http.post(Endpoints.REPORT_FLOW_SUBMISSIONS(target.type), { + body: { + ...buildTargetFields(target), + revision_hash: flow.revision_hash, + locale: flow.locale, + steps, + }, + }); + } catch (error) { + logger.error(`Failed to submit ${target.type} report:`, error); + throw error; + } +} diff --git a/fluxer_app/src/features/moderation/components/pages/ReportPage.module.css b/fluxer_app/src/features/moderation/components/pages/ReportPage.module.css index 3cd4a4e93..f7bd35c6d 100644 --- a/fluxer_app/src/features/moderation/components/pages/ReportPage.module.css +++ b/fluxer_app/src/features/moderation/components/pages/ReportPage.module.css @@ -19,10 +19,19 @@ margin-bottom: 0.25rem; } +.breadcrumbGroup { + display: inline-flex; + align-items: center; + gap: 0.5rem; + white-space: nowrap; +} + .breadcrumbShell { position: sticky; top: 0; z-index: 5; + background-color: var(--background-secondary); + box-shadow: 0 -2rem 0 var(--background-secondary); padding-top: 0.3rem; padding-bottom: 0.5rem; margin-bottom: 0.25rem; @@ -98,6 +107,10 @@ font-size: 0.9rem; } +[dir='rtl'] .breadcrumbSeparator { + transform: scaleX(-1); +} + .card { background: transparent; border: none; diff --git a/fluxer_app/src/features/moderation/components/pages/ReportPage.tsx b/fluxer_app/src/features/moderation/components/pages/ReportPage.tsx index b9bd3705a..12b6b22bb 100644 --- a/fluxer_app/src/features/moderation/components/pages/ReportPage.tsx +++ b/fluxer_app/src/features/moderation/components/pages/ReportPage.tsx @@ -2,14 +2,13 @@ import Accessibility from '@app/features/accessibility/state/Accessibility'; import {Endpoints} from '@app/features/app/constants/Endpoints'; +import {getLocaleDirection} from '@app/features/i18n/utils/LocaleDirection'; +import {resolveRetryAfterMs} from '@app/features/messaging/utils/RetryAfterUtils'; import {showModerationErrorModal} from '@app/features/moderation/components/alerts/ModerationErrorModalUtils'; import styles from '@app/features/moderation/components/pages/ReportPage.module.css'; import { COUNTRY_OPTIONS, - GUILD_CATEGORY_OPTIONS, - MESSAGE_CATEGORY_OPTIONS, REPORT_TYPE_OPTION_DESCRIPTORS, - USER_CATEGORY_OPTIONS, } from '@app/features/moderation/components/report/OptionDescriptors'; import {ReportBreadcrumbs} from '@app/features/moderation/components/report/ReportBreadcrumbs'; import { @@ -20,9 +19,19 @@ import { import {ReportStepComplete} from '@app/features/moderation/components/report/ReportStepComplete'; import {ReportStepDetails} from '@app/features/moderation/components/report/ReportStepDetails'; import {ReportStepEmail} from '@app/features/moderation/components/report/ReportStepEmail'; +import {ReportStepReason} from '@app/features/moderation/components/report/ReportStepReason'; import {ReportStepSelection} from '@app/features/moderation/components/report/ReportStepSelection'; -import {ReportStepVerification} from '@app/features/moderation/components/report/ReportStepVerification'; -import type {Action, FlowStep, FormValues, ReportType} from '@app/features/moderation/components/report/ReportTypes'; +import { + formatCooldownDuration, + ReportStepVerification, +} from '@app/features/moderation/components/report/ReportStepVerification'; +import type { + Action, + FlowStep, + FormValues, + ReportField, + ReportType, +} from '@app/features/moderation/components/report/ReportTypes'; import { EMAIL_REGEX, formatVerificationCodeInput, @@ -30,12 +39,24 @@ import { normalizeLikelyUrl, VERIFICATION_CODE_REGEX, } from '@app/features/moderation/components/report/Validators'; +import { + getReportFlowStepKey, + isReportFlowWalkUrgent, + type ReportFlowWalk, +} from '@app/features/moderation/components/report_flow/ReportFlowWalk'; +import ReportFlows from '@app/features/moderation/state/ReportFlows'; +import {useLocation} from '@app/features/platform/components/router/RouterReact'; +import {getProtectedSessionStorage} from '@app/features/platform/state/ProtectedWebStorage'; import {http} from '@app/features/platform/transport/RestTransport'; +import {HttpError} from '@app/features/platform/types/EndpointError'; +import {failureCode} from '@app/features/platform/utils/ResponseInspection'; import * as ToastCommands from '@app/features/ui/commands/ToastCommands'; import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox'; import type {RadioOption} from '@app/features/ui/radio_group/RadioGroup'; import {useFluxerDocumentTitle} from '@app/features/window/hooks/useFluxerDocumentTitle'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {HttpStatus} from '@fluxer/constants/src/HttpConstants'; +import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes'; import type {MessageDescriptor} from '@lingui/core'; import {msg} from '@lingui/core/macro'; import {useLingui} from '@lingui/react/macro'; @@ -71,6 +92,11 @@ const FAILED_TO_RESEND_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR = msg({ message: 'Failed to resend code. Try again.', comment: 'Error toast when the resend-code request fails on the verification step of the DSA report flow.', }); +const TOO_MANY_CODES_SENT_DESCRIPTOR = msg({ + message: 'Too many codes sent. Wait {duration} and try again.', + comment: + 'Inline error on the email or code step of the DSA report flow when the verification code send was rate limited. {duration} is a localized duration such as "45 seconds" or "12 minutes".', +}); const ENTER_THE_CODE_BEFORE_CONTINUING_DESCRIPTOR = msg({ message: 'Enter the code before continuing.', comment: 'Inline validation error on the verification step of the DSA report flow when the code field is empty.', @@ -94,14 +120,20 @@ const YOU_MUST_VERIFY_YOUR_EMAIL_BEFORE_SENDING_A_DESCRIPTOR = msg({ comment: 'Inline error on the details step of the DSA report flow when the user has not completed email verification.', }); -const SELECT_A_VIOLATION_CATEGORY_DESCRIPTOR = msg({ - message: 'Select a violation category.', - comment: 'Inline validation error on the details step of the DSA report flow when the category field is empty.', -}); -const PROVIDE_YOUR_FULL_LEGAL_NAME_FOR_THE_DECLARATION_DESCRIPTOR = msg({ - message: 'Provide your full legal name for the declaration.', +const EXPLAIN_THE_PROBLEM_TO_SEND_DESCRIPTOR = msg({ + message: 'Explain the problem to send the report.', comment: - 'Inline validation error on the details step of the DSA report flow. The reporter must give their legal name for the legal declaration; keep tone neutral and factual.', + 'Inline validation error on the details step of the DSA report flow when the Explain the problem field is empty.', +}); +const CONFIRM_THE_STATEMENT_TO_SEND_DESCRIPTOR = msg({ + message: 'Confirm the statement to send the report.', + comment: + 'Inline validation error on the details step of the DSA report flow when the good-faith statement checkbox is not ticked.', +}); +const ENTER_YOUR_FULL_LEGAL_NAME_DESCRIPTOR = msg({ + message: 'Enter your full legal name to send the report.', + comment: + 'Inline validation error on the Full legal name field of the DSA report form, shown when the server requires the name for the chosen reason. The name is required for every reason except child sexual abuse.', }); const SELECT_YOUR_COUNTRY_OF_RESIDENCE_DESCRIPTOR = msg({ message: 'Select your country of residence.', @@ -132,53 +164,151 @@ const PLEASE_INCLUDE_THE_COMMUNITY_ID_YOU_ARE_REPORTING_DESCRIPTOR = msg({ interface ValidationError { path: string; message: string; + code?: string; +} + +interface ParsedSubmitError { + fieldErrors: Partial>; + generalMessage: string | null; + answersRejected: boolean; +} + +interface ReportPrefill { + reportType: ReportType; + values: Partial; + option: string | null; +} + +const SURFACE = 'dsa'; +const REPORT_TYPES: ReadonlyArray = ['message', 'user', 'guild']; +const SNOWFLAKE_REGEX = /^\d{1,20}$/; +const PREFILL_OPTION_REGEX = /^[a-z0-9_]{1,48}$/; +const RESEND_COOLDOWN_SECONDS = 60; +const CODE_COOLDOWNS_STORAGE_KEY = 'dsa_report_code_cooldowns'; +const FIELD_BY_ERROR_PATH: Record = { + reporter_full_legal_name: 'reporterFullName', + reporter_country_of_residence: 'reporterCountry', + message_link: 'messageLink', + reported_user_tag: 'messageUserTag', + user_id: 'userId', + user_tag: 'userTag', + guild_id: 'guildId', + invite_code: 'inviteCode', + additional_info: 'additionalInfo', + good_faith_confirmed: 'goodFaithConfirmed', +}; +const ANSWER_ERROR_CODES: ReadonlySet = new Set([ + APIErrorCodes.INVALID_REPORT_FLOW_ANSWERS, + APIErrorCodes.REPORT_FLOW_OUTDATED, +]); + +function isAnswerErrorPath(path: string): boolean { + return path === 'revision_hash' || path === 'steps' || path.startsWith('steps.') || path.startsWith('steps['); +} + +function readReportPrefill(search: string): ReportPrefill | null { + const params = new URLSearchParams(search); + const reportType = REPORT_TYPES.find((type) => type === params.get('type')); + if (!reportType) return null; + const values: Partial = {}; + const messageLink = normalizeLikelyUrl(params.get('message_link') ?? ''); + if (reportType === 'message' && isValidHttpUrl(messageLink)) values.messageLink = messageLink; + const userId = params.get('user_id')?.trim() ?? ''; + if (reportType === 'user' && SNOWFLAKE_REGEX.test(userId)) values.userId = userId; + const option = params.get('option') ?? ''; + return {reportType, values, option: PREFILL_OPTION_REGEX.test(option) ? option : null}; +} + +function readCodeCooldowns(): Record { + try { + const parsed: unknown = JSON.parse(getProtectedSessionStorage()?.getItem(CODE_COOLDOWNS_STORAGE_KEY) ?? '{}'); + if (!parsed || typeof parsed !== 'object') return {}; + const now = Date.now(); + return Object.fromEntries( + Object.entries(parsed).filter( + (entry): entry is [string, number] => typeof entry[1] === 'number' && entry[1] > now, + ), + ); + } catch { + return {}; + } +} + +function writeCodeCooldowns(cooldowns: Record): void { + try { + getProtectedSessionStorage()?.setItem(CODE_COOLDOWNS_STORAGE_KEY, JSON.stringify(cooldowns)); + } catch {} +} + +function readRateLimitSeconds(error: unknown): number | null { + if (!(error instanceof HttpError)) return null; + if (error.status !== HttpStatus.TOO_MANY_REQUESTS && failureCode(error) !== APIErrorCodes.RATE_LIMITED) return null; + return Math.max(1, Math.ceil((resolveRetryAfterMs(error) ?? RESEND_COOLDOWN_SECONDS * 1000) / 1000)); +} + +function walkIsComplete(walk: ReportFlowWalk | null): boolean { + return walk?.phase === 'summary'; } export const ReportPage = observer(() => { const {i18n} = useLingui(); useFluxerDocumentTitle(i18n._(REPORT_ILLEGAL_CONTENT_DESCRIPTOR)); - const [reportSnapshot, setReportSnapshot] = useState(createReportSnapshot); + const location = useLocation(); + const locale = i18n.locale; + const [reportSnapshot, setReportSnapshot] = useState(() => { + const snapshot = createReportSnapshot(); + const prefill = readReportPrefill(location.search); + return prefill ? transitionReportSnapshot(snapshot, {type: 'PREFILL', ...prefill}) : snapshot; + }); const state = useMemo(() => selectReportState(reportSnapshot), [reportSnapshot]); const dispatch = useCallback((event: Action) => { setReportSnapshot((snapshot) => transitionReportSnapshot(snapshot, event)); }, []); - const parseValidationErrors = useCallback( - ( - error: unknown, - ): {fieldErrors: Partial>; generalMessage: string | null} | null => { - if (error && typeof error === 'object' && 'body' in error && (error as {body?: unknown}).body) { - const body = (error as {body?: Record}).body; - const pathMap: Record = { - category: 'category', - reporter_full_legal_name: 'reporterFullName', - reporter_country_of_residence: 'reporterCountry', - reporter_fluxer_tag: 'reporterFluxerTag', - message_link: 'messageLink', - reported_user_tag: 'messageUserTag', - user_id: 'userId', - user_tag: 'userTag', - guild_id: 'guildId', - invite_code: 'inviteCode', - additional_info: 'additionalInfo', + const [codeCooldowns, setCodeCooldowns] = useState(readCodeCooldowns); + const startCodeCooldown = useCallback((email: string, seconds: number) => { + setCodeCooldowns((current) => { + const next = {...current, [email.toLowerCase()]: Date.now() + seconds * 1000}; + writeCodeCooldowns(next); + return next; + }); + }, []); + const parseSubmitError = useCallback( + (error: unknown): ParsedSubmitError | null => { + if (!error || typeof error !== 'object' || !('body' in error)) return null; + const body = (error as {body?: Record}).body; + if (!body) return null; + const fallback = i18n._(SOMETHING_WENT_WRONG_WHILE_SENDING_THE_REPORT_PLEASE_DESCRIPTOR); + if (typeof body.code === 'string' && ANSWER_ERROR_CODES.has(body.code)) { + return { + fieldErrors: {}, + generalMessage: typeof body.message === 'string' ? body.message : fallback, + answersRejected: true, }; - if (body?.code === APIErrorCodes.INVALID_FORM_BODY && Array.isArray(body.errors)) { - const fieldErrors: Partial> = {}; - const errors = body.errors as Array; - for (const err of errors) { - const mapped = pathMap[err.path]; - if (mapped) { - fieldErrors[mapped] = err.message; - } + } + if (body.code === APIErrorCodes.INVALID_FORM_BODY && Array.isArray(body.errors)) { + const fieldErrors: Partial> = {}; + const errors = body.errors as Array; + const answerError = errors.find((err) => isAnswerErrorPath(err.path)); + for (const err of errors) { + const mapped = FIELD_BY_ERROR_PATH[err.path]; + if (mapped === 'reporterFullName' && err.code === ValidationErrorCodes.INVALID_FORMAT) { + fieldErrors[mapped] = i18n._(ENTER_YOUR_FULL_LEGAL_NAME_DESCRIPTOR); + } else if (mapped) { + fieldErrors[mapped] = err.message; } - const hasFieldErrors = Object.keys(fieldErrors).length > 0; - const generalMessage = hasFieldErrors - ? null - : (errors[0]?.message ?? i18n._(SOMETHING_WENT_WRONG_WHILE_SENDING_THE_REPORT_PLEASE_DESCRIPTOR)); - return {fieldErrors, generalMessage}; } - if (typeof body?.message === 'string') { - return {fieldErrors: {}, generalMessage: body.message}; + if (answerError) { + return {fieldErrors, generalMessage: answerError.message, answersRejected: true}; } + const hasFieldErrors = Object.keys(fieldErrors).length > 0; + return { + fieldErrors, + generalMessage: hasFieldErrors ? null : (errors[0]?.message ?? fallback), + answersRejected: false, + }; + } + if (typeof body.message === 'string') { + return {fieldErrors: {}, generalMessage: body.message, answersRejected: false}; } return null; }, @@ -190,38 +320,37 @@ export const ReportPage = observer(() => { name: i18n._(option.name), })); }, [i18n.locale]); - const messageCategoryOptions = useMemo>>(() => { - return MESSAGE_CATEGORY_OPTIONS.map((option: {value: string; label: MessageDescriptor}) => ({ - value: option.value, - label: i18n._(option.label), - })); - }, [i18n.locale]); - const userCategoryOptions = useMemo>>(() => { - return USER_CATEGORY_OPTIONS.map((option: {value: string; label: MessageDescriptor}) => ({ - value: option.value, - label: i18n._(option.label), - })); - }, [i18n.locale]); - const guildCategoryOptions = useMemo>>(() => { - return GUILD_CATEGORY_OPTIONS.map((option: {value: string; label: MessageDescriptor}) => ({ - value: option.value, - label: i18n._(option.label), - })); - }, [i18n.locale]); const countryOptions = useMemo>>(() => { return COUNTRY_OPTIONS.map((option: {value: string; label: MessageDescriptor}) => ({ value: option.value, label: i18n._(option.label), })); }, [i18n.locale]); - const categoryOptionsByType = useMemo(() => { - return { - message: messageCategoryOptions, - user: userCategoryOptions, - guild: guildCategoryOptions, - } satisfies Record>>; - }, [messageCategoryOptions, userCategoryOptions, guildCategoryOptions]); - const categoryOptions = state.selectedType ? categoryOptionsByType[state.selectedType] : []; + const loadFlow = useCallback( + (reportType: ReportType, reload: boolean) => { + dispatch({type: 'FLOW_REQUESTED'}); + const request = reload + ? ReportFlows.reload(reportType, SURFACE, locale) + : ReportFlows.load(reportType, SURFACE, locale); + void request.then((flow) => { + if (flow) { + dispatch({type: 'FLOW_LOADED', flow}); + } else if (ReportFlows.getState(reportType, SURFACE, locale)?.status === 'error') { + dispatch({type: 'FLOW_UNAVAILABLE', reportType}); + } + }); + }, + [locale, dispatch], + ); + useEffect(() => { + if (state.selectedType) loadFlow(state.selectedType, false); + }, [state.selectedType, loadFlow]); + useEffect(() => { + if (state.flowStep !== 'email' && state.flowStep !== 'verification') return; + const cooldownUntil = codeCooldowns[state.email.trim().toLowerCase()]; + const remainingSeconds = cooldownUntil === undefined ? 0 : Math.ceil((cooldownUntil - Date.now()) / 1000); + dispatch({type: 'START_RESEND_COOLDOWN', seconds: Math.max(0, remainingSeconds)}); + }, [state.flowStep, state.email, codeCooldowns, dispatch]); useEffect(() => { if (state.resendCooldownSeconds <= 0) return; const timer = window.setInterval(() => dispatch({type: 'TICK_RESEND_COOLDOWN'}), 1000); @@ -237,20 +366,28 @@ export const ReportPage = observer(() => { dispatch({type: 'GO_TO_EMAIL'}); return; } - if (state.flowStep === 'details' && !state.ticket) { + if ((state.flowStep === 'reason' || state.flowStep === 'details') && !state.ticket) { dispatch({type: 'GO_TO_EMAIL'}); return; } + if (state.flowStep === 'details' && !walkIsComplete(state.walk)) { + dispatch({type: 'GO_TO_REASON'}); + return; + } if (state.flowStep === 'complete' && !state.successReportId) { dispatch({type: 'GO_TO_SELECTION'}); } - }, [state.flowStep, state.selectedType, state.email, state.ticket, state.successReportId]); + }, [state.flowStep, state.selectedType, state.email, state.ticket, state.successReportId, state.walk]); + const walkKey = state.walk ? getReportFlowStepKey(state.walk) : null; useEffect(() => { window.scrollTo({top: 0, behavior: Accessibility.useSmoothScrolling ? 'smooth' : 'auto'}); - }, [state.flowStep]); + }, [state.flowStep, walkKey]); const onSelectType = useCallback((type: ReportType) => { dispatch({type: 'SELECT_TYPE', reportType: type}); }, []); + const continueVerified = useCallback(() => { + dispatch({type: walkIsComplete(state.walk) ? 'GO_TO_DETAILS' : 'GO_TO_REASON'}); + }, [state.walk, dispatch]); const sendVerificationCode = useCallback(async () => { if (state.isSendingCode || state.isVerifying || state.isSubmitting) return; const normalizedEmail = state.email.trim(); @@ -264,19 +401,24 @@ export const ReportPage = observer(() => { } dispatch({type: 'SET_ERROR', message: null}); dispatch({type: 'SENDING_CODE', value: true}); - if (state.flowStep === 'verification') { - dispatch({type: 'START_RESEND_COOLDOWN', seconds: 30}); - } try { await http.post(Endpoints.DSA_REPORT_EMAIL_SEND, { body: {email: normalizedEmail}, }); dispatch({type: 'SET_EMAIL', email: normalizedEmail}); dispatch({type: 'GO_TO_VERIFICATION'}); + startCodeCooldown(normalizedEmail, RESEND_COOLDOWN_SECONDS); if (state.flowStep === 'verification') { ToastCommands.createToast({type: 'success', children: i18n._(CODE_RESENT_DESCRIPTOR)}); } - } catch (_error) { + } catch (error) { + const waitSeconds = readRateLimitSeconds(error); + if (waitSeconds !== null) { + startCodeCooldown(normalizedEmail, waitSeconds); + const duration = formatCooldownDuration(i18n, waitSeconds); + dispatch({type: 'SET_ERROR', message: i18n._(TOO_MANY_CODES_SENT_DESCRIPTOR, {duration}), rateLimit: true}); + return; + } dispatch({type: 'SET_ERROR', message: i18n._(FAILED_TO_SEND_VERIFICATION_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR)}); if (state.flowStep === 'verification') { showModerationErrorModal( @@ -288,9 +430,21 @@ export const ReportPage = observer(() => { } finally { dispatch({type: 'SENDING_CODE', value: false}); } - }, [state.email, state.isSendingCode, state.isVerifying, state.isSubmitting, state.flowStep, i18n]); + }, [ + state.email, + state.isSendingCode, + state.isVerifying, + state.isSubmitting, + state.flowStep, + i18n, + startCodeCooldown, + ]); const verifyCode = useCallback(async () => { if (state.isSendingCode || state.isVerifying || state.isSubmitting) return; + if (state.ticket) { + continueVerified(); + return; + } const code = state.verificationCode.trim().toUpperCase(); if (!code) { dispatch({type: 'SET_ERROR', message: i18n._(ENTER_THE_CODE_BEFORE_CONTINUING_DESCRIPTOR)}); @@ -312,13 +466,22 @@ export const ReportPage = observer(() => { body: {email: normalizedEmail, code}, }); dispatch({type: 'SET_TICKET', ticket: response.body.ticket}); - dispatch({type: 'GO_TO_DETAILS'}); + continueVerified(); } catch (_error) { dispatch({type: 'SET_ERROR', message: i18n._(THE_VERIFICATION_CODE_IS_INVALID_OR_EXPIRED_DESCRIPTOR)}); } finally { dispatch({type: 'VERIFYING', value: false}); } - }, [state.email, state.verificationCode, state.isSendingCode, state.isVerifying, state.isSubmitting, i18n]); + }, [ + state.email, + state.ticket, + state.verificationCode, + state.isSendingCode, + state.isVerifying, + state.isSubmitting, + i18n, + continueVerified, + ]); const handleSubmit = useCallback(async () => { if (!state.selectedType) return; if (state.isSubmitting || state.isSendingCode || state.isVerifying) return; @@ -326,17 +489,21 @@ export const ReportPage = observer(() => { dispatch({type: 'SET_ERROR', message: i18n._(YOU_MUST_VERIFY_YOUR_EMAIL_BEFORE_SENDING_A_DESCRIPTOR)}); return; } + const {flow, walk} = state; + if (!flow || !walk || !walkIsComplete(walk)) { + dispatch({type: 'GO_TO_REASON'}); + return; + } dispatch({type: 'CLEAR_FIELD_ERRORS'}); const reporterFullName = state.formValues.reporterFullName.trim(); const reporterCountry = state.formValues.reporterCountry; - const reporterFluxerTag = state.formValues.reporterFluxerTag.trim(); const additionalInfo = state.formValues.additionalInfo.trim(); - if (!state.formValues.category) { - dispatch({type: 'SET_ERROR', message: i18n._(SELECT_A_VIOLATION_CATEGORY_DESCRIPTOR)}); + if (!additionalInfo) { + dispatch({type: 'SET_ERROR', message: i18n._(EXPLAIN_THE_PROBLEM_TO_SEND_DESCRIPTOR)}); return; } - if (!reporterFullName) { - dispatch({type: 'SET_ERROR', message: i18n._(PROVIDE_YOUR_FULL_LEGAL_NAME_FOR_THE_DECLARATION_DESCRIPTOR)}); + if (!state.goodFaithConfirmed) { + dispatch({type: 'SET_ERROR', message: i18n._(CONFIRM_THE_STATEMENT_TO_SEND_DESCRIPTOR)}); return; } if (!reporterCountry) { @@ -346,12 +513,14 @@ export const ReportPage = observer(() => { const payload: Record = { ticket: state.ticket, report_type: state.selectedType, - category: state.formValues.category, - reporter_full_legal_name: reporterFullName, + revision_hash: flow.revision_hash, + steps: walk.steps, + locale: flow.locale, + good_faith_confirmed: true, + additional_info: additionalInfo, reporter_country_of_residence: reporterCountry, }; - if (reporterFluxerTag) payload.reporter_fluxer_tag = reporterFluxerTag; - if (additionalInfo) payload.additional_info = additionalInfo; + if (reporterFullName) payload.reporter_full_legal_name = reporterFullName; switch (state.selectedType) { case 'message': { const raw = state.formValues.messageLink; @@ -403,27 +572,36 @@ export const ReportPage = observer(() => { }); dispatch({type: 'SUBMIT_SUCCESS', reportId: response.body.report_id}); } catch (_error) { - const parsed = parseValidationErrors(_error); + const parsed = parseSubmitError(_error); if (parsed) { dispatch({type: 'SET_FIELD_ERRORS', errors: parsed.fieldErrors}); - dispatch({type: 'SET_ERROR', message: parsed.generalMessage}); + if (parsed.answersRejected && parsed.generalMessage) { + dispatch({type: 'ANSWERS_REJECTED', message: parsed.generalMessage}); + } else { + dispatch({type: 'SET_ERROR', message: parsed.generalMessage}); + } } else { dispatch({type: 'SET_ERROR', message: i18n._(SOMETHING_WENT_WRONG_WHILE_SENDING_THE_REPORT_PLEASE_DESCRIPTOR)}); } dispatch({type: 'SUBMITTING', value: false}); } - }, [state, i18n]); - const reporterFullName = state.formValues.reporterFullName.trim(); + }, [state, i18n, parseSubmitError]); + const chooseReasonAgain = useCallback(() => { + if (!state.selectedType) return; + dispatch({type: 'GO_TO_REASON'}); + loadFlow(state.selectedType, true); + }, [state.selectedType, loadFlow, dispatch]); const reporterCountry = state.formValues.reporterCountry; - const category = state.formValues.category; + const additionalInfo = state.formValues.additionalInfo.trim(); const messageLinkNormalized = normalizeLikelyUrl(state.formValues.messageLink); const messageLinkOk = state.selectedType !== 'message' ? true : isValidHttpUrl(messageLinkNormalized); const userTargetOk = state.selectedType !== 'user' ? true : Boolean(state.formValues.userId.trim() || state.formValues.userTag.trim()); const guildTargetOk = state.selectedType !== 'guild' ? true : Boolean(state.formValues.guildId.trim()); const canSubmit = - Boolean(category) && - Boolean(reporterFullName) && + walkIsComplete(state.walk) && + Boolean(additionalInfo) && + state.goodFaithConfirmed && Boolean(reporterCountry) && messageLinkOk && userTargetOk && @@ -439,6 +617,9 @@ export const ReportPage = observer(() => { case 'verification': dispatch({type: 'GO_TO_VERIFICATION'}); break; + case 'reason': + dispatch({type: 'GO_TO_REASON'}); + break; case 'details': dispatch({type: 'GO_TO_DETAILS'}); break; @@ -463,9 +644,11 @@ export const ReportPage = observer(() => { email={state.email} errorMessage={state.errorMessage} isSending={state.isSendingCode} + verified={Boolean(state.ticket)} + resendCooldownSeconds={state.resendCooldownSeconds} onEmailChange={(value) => dispatch({type: 'SET_EMAIL', email: value})} - onSubmit={() => void sendVerificationCode()} - onStartOver={() => dispatch({type: 'GO_TO_SELECTION'})} + onSubmit={() => (state.ticket ? continueVerified() : void sendVerificationCode())} + onStartOver={() => dispatch({type: 'RESET_ALL'})} data-flx="moderation.report-page.render-step.report-step-email" /> ); @@ -473,6 +656,7 @@ export const ReportPage = observer(() => { return ( { onCodeChange={(value) => dispatch({type: 'SET_VERIFICATION_CODE', code: formatVerificationCodeInput(value)}) } - onStartOver={() => dispatch({type: 'GO_TO_SELECTION'})} + onStartOver={() => dispatch({type: 'RESET_ALL'})} data-flx="moderation.report-page.render-step.report-step-verification" /> ); - case 'details': + case 'reason': return ( + dispatch({type: 'WALK_CHANGED', walk})} + onBack={() => dispatch({type: 'GO_TO_VERIFICATION'})} + onRetryLoad={() => state.selectedType && loadFlow(state.selectedType, true)} + onStartOver={() => dispatch({type: 'RESET_ALL'})} + data-flx="moderation.report-page.render-step.report-step-reason" + /> + ); + case 'details': + return state.flow && state.walk ? ( dispatch({type: 'SET_FORM_FIELD', field, value})} + onGoodFaithChange={(value) => dispatch({type: 'SET_GOOD_FAITH_CONFIRMED', value})} + onChooseReasonAgain={chooseReasonAgain} onSubmit={() => void handleSubmit()} onStartOver={() => dispatch({type: 'RESET_ALL'})} - onBack={() => dispatch({type: 'GO_TO_VERIFICATION'})} + onBack={() => dispatch({type: 'GO_TO_REASON'})} messageLinkOk={messageLinkOk} userTargetOk={userTargetOk} guildTargetOk={guildTargetOk} data-flx="moderation.report-page.render-step.report-step-details" /> - ); + ) : null; case 'complete': return state.successReportId ? ( { @@ -544,7 +748,7 @@ export const ReportPage = observer(() => { ); return ( -

+
{breadcrumbShell}
{renderStep()} diff --git a/fluxer_app/src/features/moderation/components/report/OptionDescriptors.ts b/fluxer_app/src/features/moderation/components/report/OptionDescriptors.ts index 8ae7014d4..e94f97029 100644 --- a/fluxer_app/src/features/moderation/components/report/OptionDescriptors.ts +++ b/fluxer_app/src/features/moderation/components/report/OptionDescriptors.ts @@ -17,93 +17,6 @@ const REPORT_A_COMMUNITY_DESCRIPTOR = msg({ comment: 'Report flow target option. Selects reporting an entire community (server). Use the localized term for community, not server.', }); -const SELECT_A_CATEGORY_DESCRIPTOR = msg({ - message: 'Select a category', - comment: 'Placeholder option label for the report category dropdown when no category has been chosen yet.', -}); -const HARASSMENT_OR_BULLYING_DESCRIPTOR = msg({ - message: 'Harassment or bullying', - comment: 'Report category label for messages or users engaged in harassment or bullying. Keep tone plain.', -}); -const HATE_SPEECH_DESCRIPTOR = msg({ - message: 'Hate speech', - comment: 'Report category label for hate speech. Keep tone plain and neutral.', -}); -const VIOLENT_OR_GRAPHIC_CONTENT_DESCRIPTOR = msg({ - message: 'Violent or graphic content', - comment: 'Report category label for violent or graphic content. Keep tone plain and neutral.', -}); -const SPAM_OR_SCAM_DESCRIPTOR = msg({ - message: 'Spam or scam', - comment: 'Report category label for spam or scam messages. Keep tone plain and neutral.', -}); -const MATURE_CONTENT_POLICY_VIOLATION_DESCRIPTOR = msg({ - message: 'Mature content policy violation', - comment: 'Report category label for mature-content policy violations. Keep tone plain and neutral.', -}); -const ILLEGAL_ACTIVITY_DESCRIPTOR = msg({ - message: 'Illegal activity', - comment: 'Report category label for content describing or coordinating illegal activity. Keep tone plain.', -}); -const SHARING_PERSONAL_INFORMATION_DESCRIPTOR = msg({ - message: 'Sharing personal information', - comment: 'Report category label for doxxing or sharing private personal information without consent.', -}); -const SELF_HARM_OR_SUICIDE_DESCRIPTOR = msg({ - message: 'Self-harm or suicide', - comment: - 'Report category label for content that promotes or depicts self-harm or suicide. Keep tone calm and respectful; this is a safety surface.', -}); -const CHILD_SAFETY_CONCERNS_DESCRIPTOR = msg({ - message: 'Child safety concerns', - comment: - 'Report category label for content endangering minors. Keep tone calm and serious; this is a safety surface.', -}); -const MALICIOUS_LINKS_DESCRIPTOR = msg({ - message: 'Malicious links', - comment: 'Report category label for messages containing phishing or malware links.', -}); -const IMPERSONATION_DESCRIPTOR = msg({ - message: 'Impersonation', - comment: 'Report category label for a user impersonating another person or brand.', -}); -const OTHER_DESCRIPTOR = msg({ - message: 'Other', - comment: 'Report category label for a reason that does not match any predefined category.', -}); -const SPAM_ACCOUNT_DESCRIPTOR = msg({ - message: 'Spam account', - comment: 'Report category label for a user profile used primarily to send spam.', -}); -const UNDERAGE_USER_DESCRIPTOR = msg({ - message: 'Underage user', - comment: 'Report category label for an account that appears to belong to someone under the minimum age.', -}); -const INAPPROPRIATE_PROFILE_DESCRIPTOR = msg({ - message: 'Inappropriate profile', - comment: 'Report category label for an account whose profile (name, avatar, bio) violates policy.', -}); -const HARASSMENT_DESCRIPTOR = msg({ - message: 'Harassment', - comment: 'Report category label, community variant. Keep tone plain.', -}); -const EXTREMIST_COMMUNITY_DESCRIPTOR = msg({ - message: 'Extremist community', - comment: 'Report category label for a community organized around extremist content or ideology.', -}); -const RAID_COORDINATION_DESCRIPTOR = msg({ - message: 'Raid coordination', - comment: - 'Report category label for a community coordinating raids (mass harassment of other communities or users). "Raid" is product jargon.', -}); -const SPAM_OR_SCAM_COMMUNITY_DESCRIPTOR = msg({ - message: 'Spam or scam community', - comment: 'Report category label for a community whose purpose is spam or scams.', -}); -const MALWARE_DISTRIBUTION_DESCRIPTOR = msg({ - message: 'Malware distribution', - comment: 'Report category label for a community distributing malware or malicious software.', -}); const SELECT_A_COUNTRY_DESCRIPTOR = msg({ message: 'Select a country', comment: 'Placeholder option label for the country dropdown in the EU illegal-content report flow.', @@ -232,43 +145,6 @@ export const REPORT_TYPE_OPTION_DESCRIPTORS: ReadonlyArray = [ - {value: '', label: SELECT_A_CATEGORY_DESCRIPTOR}, - {value: 'harassment', label: HARASSMENT_OR_BULLYING_DESCRIPTOR}, - {value: 'hate_speech', label: HATE_SPEECH_DESCRIPTOR}, - {value: 'violent_content', label: VIOLENT_OR_GRAPHIC_CONTENT_DESCRIPTOR}, - {value: 'spam', label: SPAM_OR_SCAM_DESCRIPTOR}, - {value: 'nsfw_violation', label: MATURE_CONTENT_POLICY_VIOLATION_DESCRIPTOR}, - {value: 'illegal_activity', label: ILLEGAL_ACTIVITY_DESCRIPTOR}, - {value: 'doxxing', label: SHARING_PERSONAL_INFORMATION_DESCRIPTOR}, - {value: 'self_harm', label: SELF_HARM_OR_SUICIDE_DESCRIPTOR}, - {value: 'child_safety', label: CHILD_SAFETY_CONCERNS_DESCRIPTOR}, - {value: 'malicious_links', label: MALICIOUS_LINKS_DESCRIPTOR}, - {value: 'impersonation', label: IMPERSONATION_DESCRIPTOR}, - {value: 'other', label: OTHER_DESCRIPTOR}, -]; -export const USER_CATEGORY_OPTIONS: ReadonlyArray = [ - {value: '', label: SELECT_A_CATEGORY_DESCRIPTOR}, - {value: 'harassment', label: HARASSMENT_OR_BULLYING_DESCRIPTOR}, - {value: 'hate_speech', label: HATE_SPEECH_DESCRIPTOR}, - {value: 'spam_account', label: SPAM_ACCOUNT_DESCRIPTOR}, - {value: 'impersonation', label: IMPERSONATION_DESCRIPTOR}, - {value: 'underage_user', label: UNDERAGE_USER_DESCRIPTOR}, - {value: 'inappropriate_profile', label: INAPPROPRIATE_PROFILE_DESCRIPTOR}, - {value: 'other', label: OTHER_DESCRIPTOR}, -]; -export const GUILD_CATEGORY_OPTIONS: ReadonlyArray = [ - {value: '', label: SELECT_A_CATEGORY_DESCRIPTOR}, - {value: 'harassment', label: HARASSMENT_DESCRIPTOR}, - {value: 'hate_speech', label: HATE_SPEECH_DESCRIPTOR}, - {value: 'extremist_community', label: EXTREMIST_COMMUNITY_DESCRIPTOR}, - {value: 'illegal_activity', label: ILLEGAL_ACTIVITY_DESCRIPTOR}, - {value: 'child_safety', label: CHILD_SAFETY_CONCERNS_DESCRIPTOR}, - {value: 'raid_coordination', label: RAID_COORDINATION_DESCRIPTOR}, - {value: 'spam', label: SPAM_OR_SCAM_COMMUNITY_DESCRIPTOR}, - {value: 'malware_distribution', label: MALWARE_DISTRIBUTION_DESCRIPTOR}, - {value: 'other', label: OTHER_DESCRIPTOR}, -]; export const COUNTRY_OPTIONS: ReadonlyArray = [ {value: '', label: SELECT_A_COUNTRY_DESCRIPTOR}, {value: 'AT', label: AUSTRIA_DESCRIPTOR}, diff --git a/fluxer_app/src/features/moderation/components/report/ReportBreadcrumbs.tsx b/fluxer_app/src/features/moderation/components/report/ReportBreadcrumbs.tsx index fc29845ff..58fec867e 100644 --- a/fluxer_app/src/features/moderation/components/report/ReportBreadcrumbs.tsx +++ b/fluxer_app/src/features/moderation/components/report/ReportBreadcrumbs.tsx @@ -4,29 +4,43 @@ import styles from '@app/features/moderation/components/pages/ReportPage.module. import type {FlowStep} from '@app/features/moderation/components/report/ReportTypes'; import {Trans} from '@lingui/react/macro'; import clsx from 'clsx'; -import React from 'react'; +import type React from 'react'; interface Props { current: FlowStep; hasSelection: boolean; hasEmail: boolean; hasTicket: boolean; + hasAnswers: boolean; onSelect: (step: FlowStep) => void; } -const STEP_ORDER: Array = ['selection', 'email', 'verification', 'details']; -export const ReportBreadcrumbs: React.FC = ({current, hasSelection, hasEmail, hasTicket, onSelect}) => { +const STEP_ORDER: Array = ['selection', 'email', 'verification', 'reason', 'details']; +export const ReportBreadcrumbs: React.FC = ({ + current, + hasSelection, + hasEmail, + hasTicket, + hasAnswers, + onSelect, +}) => { const isEnabled = (step: FlowStep) => { if (step === 'selection') return true; if (step === 'email') return hasSelection; if (step === 'verification') return hasEmail; - if (step === 'details') return hasTicket; + if (step === 'reason') return hasTicket; + if (step === 'details') return hasTicket && hasAnswers; return false; }; const labelMap: Record = { selection: Choose, email: Email, verification: Code, + reason: ( + + Reason + + ), details: Details, complete: Done, }; @@ -35,34 +49,39 @@ export const ReportBreadcrumbs: React.FC = ({current, hasSelection, hasEm {STEP_ORDER.map((step, index) => { const active = current === step; const clickable = !active && isEnabled(step); + const button = ( + + ); + if (index === STEP_ORDER.length - 1) return button; return ( - - - {index < STEP_ORDER.length - 1 && ( - - › - - )} - + › + + ); })}
diff --git a/fluxer_app/src/features/moderation/components/report/ReportState.ts b/fluxer_app/src/features/moderation/components/report/ReportState.ts index a5310cc0f..f18a4840f 100644 --- a/fluxer_app/src/features/moderation/components/report/ReportState.ts +++ b/fluxer_app/src/features/moderation/components/report/ReportState.ts @@ -7,6 +7,11 @@ import { INITIAL_FORM_VALUES, type State, } from '@app/features/moderation/components/report/ReportTypes'; +import { + backReportFlowWalk, + startReportFlowWalk, + walkToReportFlowOption, +} from '@app/features/moderation/components/report_flow/ReportFlowWalk'; import {assign, initialTransition, type SnapshotFrom, setup, transition} from 'xstate'; type ReportMachineContext = Omit; @@ -18,10 +23,17 @@ function createInitialContext(): ReportMachineContext { verificationCode: '', ticket: null, formValues: {...INITIAL_FORM_VALUES}, + prefillOption: null, + goodFaithConfirmed: false, + flow: null, + flowStatus: 'loading', + walk: null, + answersRejected: false, isSendingCode: false, isVerifying: false, isSubmitting: false, errorMessage: null, + errorIsRateLimit: false, successReportId: null, resendCooldownSeconds: 0, fieldErrors: {}, @@ -42,39 +54,88 @@ export const reportStateMachine = setup({ }, actions: { resetContext: assign(() => createInitialContext()), - selectType: assign(({event}) => { + returnToSelection: assign(({context}) => ({ + ...createInitialContext(), + email: context.email, + verificationCode: context.verificationCode, + ticket: context.ticket, + })), + selectType: assign(({context, event}) => { if (event.type !== 'SELECT_TYPE') return {}; return { ...createInitialContext(), + email: context.email, + verificationCode: context.verificationCode, + ticket: context.ticket, selectedType: event.reportType, }; }), - goToEmail: assign(() => ({ - verificationCode: '', - ticket: null, + prefill: assign(({event}) => { + if (event.type !== 'PREFILL') return {}; + return { + ...createInitialContext(), + selectedType: event.reportType, + formValues: {...INITIAL_FORM_VALUES, ...event.values}, + prefillOption: event.option, + }; + }), + goToEmail: assign(({context}) => ({ + verificationCode: context.ticket ? context.verificationCode : '', isVerifying: false, errorMessage: null, - resendCooldownSeconds: 0, fieldErrors: {}, })), - goToVerification: assign(() => ({ - verificationCode: '', - ticket: null, + goToVerification: assign(({context}) => ({ + verificationCode: context.ticket ? context.verificationCode : '', errorMessage: null, - resendCooldownSeconds: 0, + fieldErrors: {}, + })), + goToReason: assign(({context}) => ({ + walk: context.walk?.phase === 'summary' ? backReportFlowWalk(context.walk) : context.walk, + errorMessage: null, + answersRejected: false, fieldErrors: {}, })), goToDetails: assign(() => ({ errorMessage: null, + answersRejected: false, fieldErrors: {}, })), + requestFlow: assign(() => ({ + flowStatus: 'loading' as const, + })), + loadFlow: assign(({context, event}) => { + if (event.type !== 'FLOW_LOADED' || event.flow.target_type !== context.selectedType) return {}; + if (event.flow === context.flow) return {flowStatus: 'loaded' as const}; + const prefilledWalk = + context.prefillOption !== null ? walkToReportFlowOption(event.flow, context.prefillOption) : null; + return { + flow: event.flow, + walk: prefilledWalk ?? startReportFlowWalk(event.flow), + prefillOption: null, + flowStatus: 'loaded' as const, + }; + }), + markFlowUnavailable: assign(({context, event}) => { + if (event.type !== 'FLOW_UNAVAILABLE' || event.reportType !== context.selectedType) return {}; + return {flowStatus: 'unavailable' as const}; + }), + setWalk: assign(({event}) => (event.type === 'WALK_CHANGED' ? {walk: event.walk} : {})), + rejectAnswers: assign(({event}) => ({ + errorMessage: event.type === 'ANSWERS_REJECTED' ? event.message : null, + errorIsRateLimit: false, + answersRejected: true, + })), setError: assign(({event}) => ({ errorMessage: event.type === 'SET_ERROR' ? event.message : null, + errorIsRateLimit: event.type === 'SET_ERROR' && event.rateLimit === true, + answersRejected: false, })), - setEmail: assign(({event}) => ({ - email: event.type === 'SET_EMAIL' ? event.email : '', - errorMessage: null, - })), + setEmail: assign(({context, event}) => { + const email = event.type === 'SET_EMAIL' ? event.email : ''; + if (email.trim() === context.email.trim()) return {email, errorMessage: null}; + return {email, ticket: null, verificationCode: '', errorMessage: null}; + }), setVerificationCode: assign(({event}) => ({ verificationCode: event.type === 'SET_VERIFICATION_CODE' ? event.code : '', errorMessage: null, @@ -90,6 +151,11 @@ export const reportStateMachine = setup({ fieldErrors: {...context.fieldErrors, [event.field]: undefined}, }; }), + setGoodFaithConfirmed: assign(({context, event}) => ({ + goodFaithConfirmed: event.type === 'SET_GOOD_FAITH_CONFIRMED' ? event.value : false, + errorMessage: null, + fieldErrors: {...context.fieldErrors, goodFaithConfirmed: undefined}, + })), setSendingCode: assign(({event}) => ({ isSendingCode: event.type === 'SENDING_CODE' ? event.value : false, })), @@ -105,12 +171,16 @@ export const reportStateMachine = setup({ errorMessage: null, fieldErrors: {}, })), - startResendCooldown: assign(({event}) => ({ - resendCooldownSeconds: event.type === 'START_RESEND_COOLDOWN' ? event.seconds : 0, - })), - tickResendCooldown: assign(({context}) => ({ - resendCooldownSeconds: Math.max(0, context.resendCooldownSeconds - 1), - })), + startResendCooldown: assign(({context, event}) => { + const resendCooldownSeconds = event.type === 'START_RESEND_COOLDOWN' ? event.seconds : 0; + if (resendCooldownSeconds > 0 || !context.errorIsRateLimit) return {resendCooldownSeconds}; + return {resendCooldownSeconds, errorMessage: null, errorIsRateLimit: false}; + }), + tickResendCooldown: assign(({context}) => { + const resendCooldownSeconds = Math.max(0, context.resendCooldownSeconds - 1); + if (resendCooldownSeconds > 0 || !context.errorIsRateLimit) return {resendCooldownSeconds}; + return {resendCooldownSeconds, errorMessage: null, errorIsRateLimit: false}; + }), setFieldErrors: assign(({event}) => ({ fieldErrors: event.type === 'SET_FIELD_ERRORS' ? event.errors : {}, })), @@ -124,6 +194,9 @@ export const reportStateMachine = setup({ return {fieldErrors}; }), }, + guards: { + walkReachedSummary: ({event}) => event.type === 'WALK_CHANGED' && event.walk.phase === 'summary', + }, }).createMachine({ id: 'reportFlow', context: createInitialContext(), @@ -131,10 +204,21 @@ export const reportStateMachine = setup({ on: { RESET_ALL: {target: '.selection', actions: 'resetContext'}, SELECT_TYPE: {target: '.email', actions: 'selectType'}, - GO_TO_SELECTION: {target: '.selection', actions: 'resetContext'}, + PREFILL: {target: '.email', actions: 'prefill'}, + GO_TO_SELECTION: {target: '.selection', actions: 'returnToSelection'}, GO_TO_EMAIL: {target: '.email', actions: 'goToEmail'}, GO_TO_VERIFICATION: {target: '.verification', actions: 'goToVerification'}, + GO_TO_REASON: {target: '.reason', actions: 'goToReason'}, GO_TO_DETAILS: {target: '.details', actions: 'goToDetails'}, + FLOW_REQUESTED: {actions: 'requestFlow'}, + FLOW_LOADED: {actions: 'loadFlow'}, + FLOW_UNAVAILABLE: {actions: 'markFlowUnavailable'}, + WALK_CHANGED: [ + {guard: 'walkReachedSummary', target: '.details', actions: ['setWalk', 'goToDetails']}, + {actions: 'setWalk'}, + ], + ANSWERS_REJECTED: {actions: 'rejectAnswers'}, + SET_GOOD_FAITH_CONFIRMED: {actions: 'setGoodFaithConfirmed'}, SET_ERROR: {actions: 'setError'}, SET_EMAIL: {actions: 'setEmail'}, SET_VERIFICATION_CODE: {actions: 'setVerificationCode'}, @@ -154,6 +238,7 @@ export const reportStateMachine = setup({ selection: {}, email: {}, verification: {}, + reason: {}, details: {}, complete: {}, }, @@ -173,6 +258,7 @@ export function getReportFlowStep(snapshot: ReportMachineSnapshot): FlowStep { switch (snapshot.value) { case 'email': case 'verification': + case 'reason': case 'details': case 'complete': return snapshot.value; @@ -190,10 +276,17 @@ export function selectReportState(snapshot: ReportMachineSnapshot): State { verificationCode: context.verificationCode, ticket: context.ticket, formValues: context.formValues as FormValues, + prefillOption: context.prefillOption, + goodFaithConfirmed: context.goodFaithConfirmed, + flow: context.flow, + flowStatus: context.flowStatus, + walk: context.walk, + answersRejected: context.answersRejected, isSendingCode: context.isSendingCode, isVerifying: context.isVerifying, isSubmitting: context.isSubmitting, errorMessage: context.errorMessage, + errorIsRateLimit: context.errorIsRateLimit, successReportId: context.successReportId, resendCooldownSeconds: context.resendCooldownSeconds, fieldErrors: context.fieldErrors, diff --git a/fluxer_app/src/features/moderation/components/report/ReportStepComplete.tsx b/fluxer_app/src/features/moderation/components/report/ReportStepComplete.tsx index bc9e9ded0..67a13a1c4 100644 --- a/fluxer_app/src/features/moderation/components/report/ReportStepComplete.tsx +++ b/fluxer_app/src/features/moderation/components/report/ReportStepComplete.tsx @@ -5,6 +5,7 @@ import {getActiveInstanceProductName} from '@app/features/app/state/ActiveInstan import {msg} from '@lingui/core/macro'; import {Trans, useLingui} from '@lingui/react/macro'; import {CheckCircleIcon} from '@phosphor-icons/react'; +import {observer} from 'mobx-react-lite'; import type React from 'react'; const FilledCheckCircleIcon: React.FC> = (props) => ( @@ -23,7 +24,7 @@ const REPORT_COMPLETE_DESCRIPTION_DESCRIPTOR = msg({ message: "Thank you for helping keep {productName} safe. We'll review your report as soon as possible.", comment: 'Confirmation text shown after a user submits a moderation report.', }); -export const ReportStepComplete: React.FC = ({onStartOver}) => { +export const ReportStepComplete: React.FC = observer(({onStartOver}) => { const {i18n} = useLingui(); return ( = ({onStartOver}) => { data-flx="moderation.report.report-step-complete.status-slate" /> ); -}; +}); diff --git a/fluxer_app/src/features/moderation/components/report/ReportStepDetails.tsx b/fluxer_app/src/features/moderation/components/report/ReportStepDetails.tsx index 17ada7518..c4200fd96 100644 --- a/fluxer_app/src/features/moderation/components/report/ReportStepDetails.tsx +++ b/fluxer_app/src/features/moderation/components/report/ReportStepDetails.tsx @@ -1,25 +1,24 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import { - EXAMPLE_INVITE_CODE, - EXAMPLE_MESSAGE_LINK, - EXAMPLE_REPORT_USER_TAG, - EXAMPLE_USERNAME_TAG, -} from '@app/features/app/config/I18nDisplayConstants'; +import Accessibility from '@app/features/accessibility/state/Accessibility'; +import {EXAMPLE_INVITE_CODE, EXAMPLE_REPORT_USER_TAG} from '@app/features/app/config/I18nDisplayConstants'; +import {getLocaleDirection} from '@app/features/i18n/utils/LocaleDirection'; import styles from '@app/features/moderation/components/pages/ReportPage.module.css'; -import type {FormValues, ReportType} from '@app/features/moderation/components/report/ReportTypes'; +import type {FormValues, ReportField, ReportType} from '@app/features/moderation/components/report/ReportTypes'; +import {ReportFlowBanner} from '@app/features/moderation/components/report_flow/ReportFlowBanner'; +import {REPORT_CATEGORY_DESCRIPTOR} from '@app/features/moderation/components/report_flow/ReportFlowCopy'; +import {ReportFlowAnswerList} from '@app/features/moderation/components/report_flow/ReportFlowSummary'; import {Button} from '@app/features/ui/button/Button'; +import {Checkbox} from '@app/features/ui/checkbox/Checkbox'; import {Combobox, type ComboboxOption} from '@app/features/ui/components/form/FormCombobox'; import {Input, Textarea} from '@app/features/ui/components/form/FormInput'; +import FocusRing from '@app/features/ui/focus_ring/FocusRing'; +import type {ReportFlowResponse, ReportFlowStep} from '@fluxer/schema/src/domains/report/ReportFlowSchemas'; import {msg} from '@lingui/core/macro'; import {Trans, useLingui} from '@lingui/react/macro'; import type React from 'react'; +import {useEffect, useRef} from 'react'; -const VIOLATION_CATEGORY_DESCRIPTOR = msg({ - message: 'Violation category', - comment: - 'Field label on the details step of the DSA illegal-content report form. The category dropdown narrows the type of violation. Legal/sensitive flow; keep tone formal.', -}); const MESSAGE_LINK_DESCRIPTOR = msg({ message: 'Message link', comment: @@ -50,10 +49,19 @@ const INVITE_CODE_OPTIONAL_DESCRIPTOR = msg({ comment: 'Field label on the details step of the DSA report form (community report). Optional invite code to the reported community.', }); -const FULL_LEGAL_NAME_DESCRIPTOR = msg({ - message: 'Full legal name', +const EXPLAIN_THE_PROBLEM_DESCRIPTOR = msg({ + message: 'Explain the problem', comment: - 'Field label on the details step of the DSA report form. Required legal name of the reporter for the formal declaration. Sensitive PII; keep tone neutral.', + 'Field label on the details step of the DSA report form. Required free text where the reporter explains what is wrong with the reported content.', +}); +const EXPLAIN_THE_PROBLEM_HELPER_DESCRIPTOR = msg({ + message: 'If you believe it is illegal, say which law and why.', + comment: 'Helper text under the Explain the problem field on the details step of the DSA report form.', +}); +const FULL_LEGAL_NAME_OPTIONAL_FOR_CSAM_DESCRIPTOR = msg({ + message: 'Full legal name (optional for child sexual abuse reports)', + comment: + 'Field label on the details step of the DSA report form. Legal name of the reporter for the formal declaration. The law lets people who report child sexual abuse material leave it empty. Keep the tone neutral.', }); const FIRST_AND_LAST_NAME_DESCRIPTOR = msg({ message: 'First and last name', @@ -64,32 +72,33 @@ const COUNTRY_OF_RESIDENCE_DESCRIPTOR = msg({ comment: 'Field label on the details step of the DSA report form. The country where the reporter resides, used for the legal declaration.', }); -const YOUR_USERNAME_OPTIONAL_DESCRIPTOR = msg({ - message: 'Your username (optional)', +const GOOD_FAITH_STATEMENT_DESCRIPTOR = msg({ + message: 'I confirm in good faith that the information and allegations in this notice are accurate and complete.', comment: - 'Field label on the details step of the DSA report form. Optional Fluxer username of the reporter so staff can follow up.', + 'Required checkbox on the details step of the DSA report form. A formal statement the law asks every reporter to make. Keep the tone formal.', }); -const ADDITIONAL_COMMENTS_OPTIONAL_DESCRIPTOR = msg({ - message: 'Additional comments (optional)', +const CHOOSE_THE_REASON_AGAIN_DESCRIPTOR = msg({ + message: 'Choose the reason again', comment: - 'Field label on the details step of the DSA report form. Optional free-text context the reporter wants staff to see.', -}); -const DESCRIBE_WHAT_MAKES_THE_CONTENT_ILLEGAL_DESCRIPTOR = msg({ - message: 'Describe what makes the content illegal', - comment: - 'Placeholder in the Additional comments textarea on the DSA report form. Prompts the reporter to explain why the content is illegal.', + 'Button on the details step of the DSA report form, shown when the server no longer accepts the chosen reason. Reloads the questions and returns to the reason step.', }); interface Props { selectedType: ReportType; formValues: FormValues; - categoryOptions: Array>; + flow: ReportFlowResponse; + steps: ReadonlyArray; + urgent: boolean; + goodFaithConfirmed: boolean; countryOptions: Array>; - fieldErrors: Partial>; + fieldErrors: Partial>; errorMessage: string | null; + answersRejected: boolean; canSubmit: boolean; isSubmitting: boolean; onFieldChange: (field: keyof FormValues, value: string) => void; + onGoodFaithChange: (value: boolean) => void; + onChooseReasonAgain: () => void; onSubmit: () => void; onStartOver: () => void; onBack: () => void; @@ -101,13 +110,19 @@ interface Props { export const ReportStepDetails: React.FC = ({ selectedType, formValues, - categoryOptions, + flow, + steps, + urgent, + goodFaithConfirmed, countryOptions, fieldErrors, errorMessage, + answersRejected, canSubmit, isSubmitting, onFieldChange, + onGoodFaithChange, + onChooseReasonAgain, onSubmit, onStartOver, onBack, @@ -117,12 +132,20 @@ export const ReportStepDetails: React.FC = ({ }) => { const {i18n} = useLingui(); const hasFieldErrors = Object.values(fieldErrors).some((value) => Boolean(value)); - const showGeneralError = Boolean(errorMessage && !hasFieldErrors); + const showGeneralError = Boolean(errorMessage && (answersRejected || !hasFieldErrors)); + const errorBoxRef = useRef(null); + useEffect(() => { + if (!showGeneralError) return; + errorBoxRef.current?.scrollIntoView({ + block: 'nearest', + behavior: Accessibility.useSmoothScrolling ? 'smooth' : 'auto', + }); + }, [showGeneralError, errorMessage]); return (

- Step 4 + Step 5

Report details @@ -134,14 +157,41 @@ export const ReportStepDetails: React.FC = ({
{showGeneralError && (
{errorMessage} + {answersRejected && ( +
+ +
+ )}
)} + {urgent && } +
+

+ {i18n._(REPORT_CATEGORY_DESCRIPTOR)} +

+ +
{ @@ -150,23 +200,15 @@ export const ReportStepDetails: React.FC = ({ }} data-flx="moderation.report.report-step-details.form.prevent-default" > - - label={i18n._(VIOLATION_CATEGORY_DESCRIPTOR)} - value={formValues.category} - options={categoryOptions} - error={fieldErrors.category} - onChange={(value) => onFieldChange('category', value)} - isSearchable={false} - data-flx="moderation.report.report-step-details.select.field-change" - /> {selectedType === 'message' && ( <> onFieldChange('messageLink', e.target.value)} - placeholder={EXAMPLE_MESSAGE_LINK} + placeholder={`${window.location.origin}/channels/...`} autoComplete="off" error={fieldErrors.messageLink} footer={ @@ -181,6 +223,7 @@ export const ReportStepDetails: React.FC = ({ onFieldChange('messageUserTag', e.target.value)} placeholder={EXAMPLE_REPORT_USER_TAG} @@ -195,6 +238,7 @@ export const ReportStepDetails: React.FC = ({ onFieldChange('userId', e.target.value)} placeholder="123456789012345678" @@ -205,6 +249,7 @@ export const ReportStepDetails: React.FC = ({ onFieldChange('userTag', e.target.value)} placeholder={EXAMPLE_REPORT_USER_TAG} @@ -226,6 +271,7 @@ export const ReportStepDetails: React.FC = ({ onFieldChange('guildId', e.target.value)} placeholder="123456789012345678" @@ -243,6 +289,7 @@ export const ReportStepDetails: React.FC = ({ onFieldChange('inviteCode', e.target.value)} placeholder={EXAMPLE_INVITE_CODE} @@ -252,8 +299,24 @@ export const ReportStepDetails: React.FC = ({ /> )} +