Compare commits

...
194 changed files with 9649 additions and 5111 deletions

No files matched your search

+14 -9
View File
@@ -16,18 +16,22 @@ on:
required: false
default: ""
type: string
allow_shell_drift:
description: Publish even though shell sources changed since the live shell was built. Only when the renderer does not depend on those changes.
required: false
default: false
type: boolean
shell_contract:
description: "Did the shell contract change since the oldest shell these modules still reach? unchanged refuses if it did. compatible keeps older shells on these modules because the renderer still works on them. raise stops sending these modules to shells without the new contract: Linux and managed shells keep their current renderer, Windows and macOS update their shell first."
required: true
type: choice
options:
- unchanged
- compatible
- raise
default: unchanged
permissions:
contents: write
id-token: write
actions: read
concurrency:
group: desktop-modules-${{ inputs.channel }}
group: desktop-${{ inputs.channel }}
cancel-in-progress: false
env:
@@ -260,13 +264,14 @@ jobs:
owner: fluxerapp
repositories: fluxer
permission-contents: read
- name: Check the live shell runs these modules
- name: Check which shells run these modules
env:
GH_TOKEN: ${{ steps.create-token.outputs.token }}
ALLOW_SHELL_DRIFT: ${{ inputs.allow_shell_drift }}
SHELL_CONTRACT: ${{ inputs.shell_contract }}
DESKTOP_MODULES_ONLY_RELEASE: true
run: >-
cargo run --locked --quiet --manifest-path tools/ci/Cargo.toml -- build-desktop
--step check_shell_drift
--step check_shell_contract
- name: Build the modules-only manifests
run: >-
+42 -1
View File
@@ -21,6 +21,15 @@ on:
required: false
default: ""
type: string
shell_contract:
description: "Did the shell contract change since the oldest shell these modules still reach? unchanged refuses if it did. compatible keeps older shells on these modules because the renderer still works on them. raise stops sending these modules to shells without the new contract: Linux and managed shells keep their current renderer, Windows and macOS update their shell first."
required: true
type: choice
options:
- unchanged
- compatible
- raise
default: unchanged
permissions:
contents: write
id-token: write
@@ -28,7 +37,7 @@ permissions:
concurrency:
group: desktop-${{ inputs.channel }}
cancel-in-progress: true
cancel-in-progress: false
env:
CHANNEL: ${{ inputs.channel }}
@@ -53,6 +62,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
ref: main
fetch-depth: 0
- name: Set up Rust toolchain (CI helpers)
uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de
@@ -78,6 +88,18 @@ jobs:
--step set_metadata
--channel "${{ inputs.channel }}"
- name: Check which shells run these modules
env:
GH_TOKEN: ${{ steps.create-token.outputs.token }}
CHANNEL: ${{ steps.meta.outputs.build_channel }}
SOURCE_SHA: ${{ steps.meta.outputs.source_sha }}
VERSION: ${{ steps.meta.outputs.version }}
SHELL_CONTRACT: ${{ inputs.shell_contract }}
DESKTOP_MODULES_ONLY_RELEASE: false
run: >-
cargo run --locked --quiet --manifest-path tools/ci/Cargo.toml -- build-desktop
--step check_shell_contract
matrix:
name: Resolve build matrix
runs-on: ubuntu-24.04-arm
@@ -745,6 +767,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
ref: ${{ needs.meta.outputs.source_sha }}
fetch-depth: 0
- name: Set up Rust toolchain (CI helpers)
uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de
@@ -771,6 +794,24 @@ jobs:
name: desktop-modules-${{ needs.meta.outputs.build_channel }}-${{ needs.meta.outputs.version }}-${{ needs.meta.outputs.source_sha }}
path: desktop-modules
- name: Create token
id: create-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1
with:
client-id: ${{ vars.FLUXER_CI_APP_ID }}
private-key: ${{ secrets.FLUXER_CI_APP_KEY }}
owner: fluxerapp
repositories: fluxer
permission-contents: read
- name: Check which shells run these modules
env:
GH_TOKEN: ${{ steps.create-token.outputs.token }}
SHELL_CONTRACT: ${{ inputs.shell_contract }}
DESKTOP_MODULES_ONLY_RELEASE: false
run: >-
cargo run --locked --quiet --manifest-path tools/ci/Cargo.toml -- build-desktop
--step check_shell_contract
- name: Build desktop module manifest
run: >-
cargo run --locked --quiet --manifest-path tools/ci/Cargo.toml -- build-desktop
+2 -1
View File
@@ -117,6 +117,7 @@ jobs:
with:
toolchain: "1.98.1"
components: clippy, rustfmt
targets: x86_64-pc-windows-msvc
- name: Install pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413
@@ -208,7 +209,7 @@ jobs:
- name: Clippy (warnings as errors)
run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
- name: Clippy (desktop native workspaces on Linux, warnings as errors)
- name: Clippy (desktop native workspaces on Linux and Windows backends, warnings as errors)
run: tools/ci/check-desktop-native-workspaces.sh clippy
- name: Verify the source-built ffmpeg CLI is on PATH
+3
View File
@@ -620,6 +620,9 @@ FLUXER_DISCOVERY_ENABLED=true
#FLUXER_CACHE_PURGE_HTTP_ENDPOINT=
#FLUXER_CACHE_PURGE_HTTP_TOKEN=
#FLUXER_CACHE_PURGE_HTTP_TIMEOUT_MS=10000
#FLUXER_CACHE_PURGE_CONTROLLER_ENDPOINT=
#FLUXER_CACHE_PURGE_CONTROLLER_TOKEN=
#FLUXER_CACHE_PURGE_CONTROLLER_TIMEOUT_MS=10000
# media-proxy limits and timeouts.
#FLUXER_MEDIA_PROXY_READ_ONLY=false
+3
View File
@@ -97,6 +97,9 @@ x-fluxer-env: &fluxer-env
FLUXER_CACHE_PURGE_HTTP_ENDPOINT: ${FLUXER_CACHE_PURGE_HTTP_ENDPOINT:-}
FLUXER_CACHE_PURGE_HTTP_TOKEN: ${FLUXER_CACHE_PURGE_HTTP_TOKEN:-}
FLUXER_CACHE_PURGE_HTTP_TIMEOUT_MS: ${FLUXER_CACHE_PURGE_HTTP_TIMEOUT_MS:-}
FLUXER_CACHE_PURGE_CONTROLLER_ENDPOINT: ${FLUXER_CACHE_PURGE_CONTROLLER_ENDPOINT:-}
FLUXER_CACHE_PURGE_CONTROLLER_TOKEN: ${FLUXER_CACHE_PURGE_CONTROLLER_TOKEN:-}
FLUXER_CACHE_PURGE_CONTROLLER_TIMEOUT_MS: ${FLUXER_CACHE_PURGE_CONTROLLER_TIMEOUT_MS:-}
FLUXER_LIVEKIT_ENABLED: "${FLUXER_LIVEKIT_ENABLED:-true}"
FLUXER_LIVEKIT_API_KEY: ${LIVEKIT_API_KEY:?set LIVEKIT_API_KEY in .env}
+117 -48
View File
@@ -4152,15 +4152,17 @@
}
}
},
"/admin/instance/pending-registrations/{user_id}": {
"patch": {
"operationId": "update_admin_pending_registration",
"summary": "Approve or reject a pending registration",
"/admin/instance/pending-registrations": {
"get": {
"operationId": "list_admin_pending_registrations",
"summary": "List pending registrations",
"tags": ["Admin"],
"responses": {
"200": {
"description": "Success",
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/InstanceConfigResponse"}}}
"content": {
"application/json": {"schema": {"$ref": "#/components/schemas/PendingRegistrationListResponse"}}
}
},
"400": {
"description": "Bad Request - The request was malformed or contained invalid data",
@@ -4201,7 +4203,62 @@
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
}
},
"description": "Decides a registration waiting for manual review. Approving removes its pending registration trait, rejecting also prevents the account from logging in. Requires INSTANCE_CONFIG_UPDATE permission.",
"description": "Lists every registration waiting for manual review, oldest first. Requires REGISTRATION_REVIEW permission.",
"security": [{"adminApiKey": []}]
}
},
"/admin/instance/pending-registrations/{user_id}": {
"patch": {
"operationId": "update_admin_pending_registration",
"summary": "Approve or reject a pending registration",
"tags": ["Admin"],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {"schema": {"$ref": "#/components/schemas/PendingRegistrationListResponse"}}
}
},
"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": "Decides a registration waiting for manual review and returns the registrations still waiting. Approving removes its pending registration trait, rejecting also prevents the account from logging in. Requires REGISTRATION_REVIEW permission.",
"security": [{"adminApiKey": []}],
"parameters": [
{
@@ -5887,7 +5944,7 @@
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
}
},
"description": "Return the admin the request was authenticated as, with the admin permissions, roles, and metadata of the account. Requires AUTHENTICATE permission.",
"description": "Return the admin the request was authenticated as, with the admin permissions, roles, and metadata of the account, plus the number of pending registrations when the admin holds REGISTRATION_REVIEW. Requires AUTHENTICATE permission.",
"security": [{"adminApiKey": []}]
}
},
@@ -10281,7 +10338,7 @@
"type": "object",
"properties": {
"acls": {
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"$ref": "#/components/schemas/AdminAclType"},
"description": "List of access control permissions to assign"
@@ -10297,8 +10354,11 @@
},
"AdminUsersMeResponse": {
"type": "object",
"properties": {"user": {"$ref": "#/components/schemas/UserAdminResponseSchema"}},
"required": ["user"],
"properties": {
"user": {"$ref": "#/components/schemas/UserAdminResponseSchema"},
"pending_registration_count": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/Int32Type"}]}
},
"required": ["user", "pending_registration_count"],
"additionalProperties": false
},
"SnowflakeStringType": {"type": "string", "pattern": "^(0|[1-9][0-9]*)$", "format": "snowflake"},
@@ -11331,40 +11391,9 @@
],
"additionalProperties": false
}
},
"pending_registrations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"user_id": {"$ref": "#/components/schemas/SnowflakeStringType"},
"username": {"type": "string"},
"discriminator": {"type": "integer", "minimum": 0, "maximum": 9999},
"global_name": {"nullable": true, "type": "string"},
"email": {"nullable": true, "type": "string"},
"requested_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"registration_url_id": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 128},
"client_ip": {"nullable": true, "type": "string"}
},
"required": [
"user_id",
"username",
"discriminator",
"global_name",
"email",
"requested_at",
"registration_url_id",
"client_ip"
],
"additionalProperties": false
}
}
},
"required": ["mode", "admin_registration_urls_enabled", "urls", "pending_registrations"],
"required": ["mode", "admin_registration_urls_enabled", "urls"],
"additionalProperties": false
},
"self_hosted": {"type": "boolean"},
@@ -11811,6 +11840,17 @@
},
"required": ["status"]
},
"PendingRegistrationListResponse": {
"type": "object",
"properties": {
"pending_registrations": {
"type": "array",
"items": {"$ref": "#/components/schemas/PendingRegistrationResponse"}
}
},
"required": ["pending_registrations"],
"additionalProperties": false
},
"InstanceEmailSmtpTestRequest": {
"type": "object",
"properties": {
@@ -13515,7 +13555,7 @@
},
"acls": {
"description": "Replacement list of access control permissions for the key",
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"$ref": "#/components/schemas/AdminAclType"}
}
@@ -13533,7 +13573,7 @@
"type": "string"
},
"acls": {
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"type": "string"},
"description": "List of access control permissions for the key"
@@ -13563,7 +13603,7 @@
"maximum": 365
},
"acls": {
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"$ref": "#/components/schemas/AdminAclType"},
"description": "List of access control permissions for the key"
@@ -13584,7 +13624,7 @@
"type": "string"
},
"acls": {
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"type": "string"},
"description": "List of access control permissions for the key"
@@ -13597,7 +13637,7 @@
"type": "object",
"properties": {
"acls": {
"maxItems": 106,
"maxItems": 107,
"type": "array",
"items": {"type": "string", "minLength": 1, "maxLength": 64},
"description": "Every admin access control permission the admin API recognises"
@@ -13679,6 +13719,7 @@
"message:delete",
"message:lookup",
"message:shred",
"registration:review",
"report:delete",
"report:resolve",
"report:view",
@@ -16471,6 +16512,34 @@
},
"PremiumCurrency": {"type": "string", "pattern": "^[A-Z]{3}$"},
"StripePriceIdSchema": {"type": "string", "maxLength": 255, "pattern": "^price_[A-Za-z0-9]+$"},
"PendingRegistrationResponse": {
"type": "object",
"properties": {
"user_id": {"$ref": "#/components/schemas/SnowflakeStringType"},
"username": {"type": "string"},
"discriminator": {"type": "integer", "minimum": 0, "maximum": 9999},
"global_name": {"nullable": true, "type": "string"},
"email": {"nullable": true, "type": "string"},
"requested_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"registration_url_id": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 128},
"client_ip": {"nullable": true, "type": "string"}
},
"required": [
"user_id",
"username",
"discriminator",
"global_name",
"email",
"requested_at",
"registration_url_id",
"client_ip"
],
"additionalProperties": false
},
"InstanceBillingResponse": {
"type": "object",
"properties": {
@@ -16839,7 +16908,7 @@
"description": "ISO 8601 timestamp when the pending deletion was scheduled",
"type": "string"
},
"acls": {"maxItems": 106, "type": "array", "items": {"type": "string"}},
"acls": {"maxItems": 107, "type": "array", "items": {"type": "string"}},
"traits": {"maxItems": 100, "type": "array", "items": {"type": "string"}},
"has_totp": {"type": "boolean"},
"authenticator_types": {"maxItems": 10, "type": "array", "items": {"$ref": "#/components/schemas/Int32Type"}},
+2
View File
@@ -70,6 +70,7 @@ pub const MESSAGE_DELETE_ALL: &str = "message:delete_all";
pub const MESSAGE_DELETE: &str = "message:delete";
pub const MESSAGE_LOOKUP: &str = "message:lookup";
pub const MESSAGE_SHRED: &str = "message:shred";
pub const REGISTRATION_REVIEW: &str = "registration:review";
pub const REPORT_DELETE: &str = "report:delete";
pub const REPORT_RESOLVE: &str = "report:resolve";
pub const REPORT_VIEW: &str = "report:view";
@@ -177,6 +178,7 @@ pub const ALL_ACLS: &[&str] = &[
MESSAGE_DELETE,
MESSAGE_LOOKUP,
MESSAGE_SHRED,
REGISTRATION_REVIEW,
REPORT_DELETE,
REPORT_RESOLVE,
REPORT_VIEW,
+23 -27
View File
@@ -6,7 +6,8 @@ use super::client::{AdminApiClient, ApiResult};
use super::types::{
AccountIdentitySettings, CreateRegistrationUrlRequest, CreateRegistrationUrlResponse,
InstanceAccountIdentityDiscovery, InstanceConfigResponse, InstanceConfigUpdateRequest,
InstanceEmailSmtpTestResponse, InstancePremiumDiscovery,
InstanceEmailSmtpTestResponse, InstancePremiumDiscovery, PendingRegistrationListResponse,
PendingRegistrationResponse, PendingRegistrationStatus,
};
impl AdminApiClient {
@@ -74,35 +75,30 @@ impl AdminApiClient {
.await
}
pub async fn approve_pending_registration(
&self,
user_id: &str,
) -> ApiResult<InstanceConfigResponse> {
self.decide_pending_registration(user_id, "approved").await
pub async fn list_pending_registrations(&self) -> ApiResult<Vec<PendingRegistrationResponse>> {
let response: PendingRegistrationListResponse = self
.get("/admin/instance/pending-registrations", None)
.await?;
Ok(response.pending_registrations)
}
pub async fn reject_pending_registration(
pub async fn decide_pending_registration(
&self,
user_id: &str,
) -> ApiResult<InstanceConfigResponse> {
self.decide_pending_registration(user_id, "rejected").await
}
async fn decide_pending_registration(
&self,
user_id: &str,
status: &str,
) -> ApiResult<InstanceConfigResponse> {
let body = serde_json::json!({"status": status});
self.send(
Method::PATCH,
&format!(
"/admin/instance/pending-registrations/{}",
urlencoding::encode(user_id)
),
Some(&body),
None,
)
.await
status: PendingRegistrationStatus,
) -> ApiResult<Vec<PendingRegistrationResponse>> {
let body = serde_json::json!({"status": status.as_str()});
let response: PendingRegistrationListResponse = self
.send(
Method::PATCH,
&format!(
"/admin/instance/pending-registrations/{}",
urlencoding::encode(user_id)
),
Some(&body),
None,
)
.await?;
Ok(response.pending_registrations)
}
}
+1
View File
@@ -32,6 +32,7 @@ pub fn deserialize_string_or_u64<'de, D: Deserializer<'de>>(d: D) -> Result<u64,
#[derive(Clone, Debug, Deserialize)]
pub struct AdminUserMeResponse {
pub user: AdminUser,
pub pending_registration_count: Option<u32>,
}
#[derive(Clone, Debug, Deserialize)]
+20 -3
View File
@@ -701,8 +701,6 @@ pub struct InstanceRegistrationResponse {
pub admin_registration_urls_enabled: bool,
#[serde(default)]
pub urls: Vec<RegistrationUrlResponse>,
#[serde(default)]
pub pending_registrations: Vec<PendingRegistrationResponse>,
}
impl Default for InstanceRegistrationResponse {
@@ -711,7 +709,6 @@ impl Default for InstanceRegistrationResponse {
mode: RegistrationMode::Open,
admin_registration_urls_enabled: true,
urls: Vec::new(),
pending_registrations: Vec::new(),
}
}
}
@@ -767,6 +764,26 @@ pub struct PendingRegistrationResponse {
pub client_ip: Option<String>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum PendingRegistrationStatus {
Approved,
Rejected,
}
impl PendingRegistrationStatus {
pub fn as_str(self) -> &'static str {
match self {
Self::Approved => "approved",
Self::Rejected => "rejected",
}
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct PendingRegistrationListResponse {
pub pending_registrations: Vec<PendingRegistrationResponse>,
}
#[derive(Clone, Debug, Default, Serialize)]
pub struct InstanceConfigUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
+15 -15
View File
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use crate::{
api::types::{AdminUser, PremiumBranding},
api::types::{AdminUser, AdminUserMeResponse, PremiumBranding},
middleware::flash,
session::{self, Session},
state::AppState,
@@ -16,6 +16,7 @@ use axum::{
pub struct AuthContext {
pub session: Session,
pub admin_user: Option<AdminUser>,
pub pending_registration_count: Option<u32>,
pub branding: Option<PremiumBranding>,
}
@@ -29,17 +30,19 @@ pub async fn require_auth(
let Some(session) = session else {
return Redirect::to(&format!("{}/auth/start", config.base_path)).into_response();
};
let admin_user = match fetch_admin_user(state.http_client(), config, &session).await {
AdminFetchResult::Unauthorized => {
let login_url = format!("{}/login", config.base_path);
return clear_session_and_redirect(&login_url, config);
}
AdminFetchResult::Ok(admin_user) => Some(*admin_user),
AdminFetchResult::None => None,
};
let (admin_user, pending_registration_count) =
match fetch_admin_user(state.http_client(), config, &session).await {
AdminFetchResult::Unauthorized => {
let login_url = format!("{}/login", config.base_path);
return clear_session_and_redirect(&login_url, config);
}
AdminFetchResult::Ok(me) => (Some(me.user), me.pending_registration_count),
AdminFetchResult::None => (None, None),
};
request.extensions_mut().insert(AuthContext {
session,
admin_user,
pending_registration_count,
branding: state.self_hosted_branding().await,
});
@@ -83,7 +86,7 @@ fn extract_session(request: &Request, secret_key: &str) -> Option<Session> {
}
enum AdminFetchResult {
Ok(Box<AdminUser>),
Ok(Box<AdminUserMeResponse>),
Unauthorized,
None,
}
@@ -109,11 +112,8 @@ async fn fetch_admin_user(
if !response.status().is_success() {
return AdminFetchResult::None;
}
match response
.json::<crate::api::types::AdminUserMeResponse>()
.await
{
Ok(resp) => AdminFetchResult::Ok(Box::new(resp.user)),
match response.json::<AdminUserMeResponse>().await {
Ok(me) => AdminFetchResult::Ok(Box::new(me)),
Err(_) => AdminFetchResult::None,
}
}
+2
View File
@@ -13,6 +13,7 @@ pub mod guilds;
pub mod jobs;
mod message_actions;
pub mod messages;
pub mod registrations;
pub mod reports;
pub mod system;
mod system_actions;
@@ -63,6 +64,7 @@ pub fn build_router(config: AdminConfig) -> Router {
.merge(applications::router())
.merge(codes::router())
.merge(discovery::router())
.merge(registrations::router())
.merge(jobs::router())
.merge(messages::router())
.merge(system::router())
+159
View File
@@ -0,0 +1,159 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use crate::{
api::{client::AdminApiClient, types::PendingRegistrationStatus},
middleware::{
auth::AuthContext,
csrf::CsrfToken,
flash::{self, FlashData},
htmx,
},
state::AppState,
templates::{self, layout_sidebar::pending_registration_count_markup},
utils::forms::clean_string,
};
use axum::{
Form, Router,
extract::State,
http::HeaderMap,
response::{Html, IntoResponse, Response},
routing::{get, post},
};
use serde::Deserialize;
#[derive(Deserialize)]
struct PendingRegistrationForm {
#[serde(default)]
user_id: Option<String>,
}
pub fn router() -> Router<AppState> {
Router::new()
.route("/pending-registrations", get(pending_registrations_page))
.route(
"/pending-registrations/approve",
post(approve_pending_registration),
)
.route(
"/pending-registrations/reject",
post(reject_pending_registration),
)
}
async fn pending_registrations_page(
State(state): State<AppState>,
auth: axum::Extension<AuthContext>,
csrf: axum::Extension<CsrfToken>,
) -> Response {
let config = state.config();
let client = AdminApiClient::new(state.http_client(), config, &auth.0.session);
let pending_registrations = match client.list_pending_registrations().await {
Ok(pending_registrations) => Some(pending_registrations),
Err(error) => {
tracing::warn!(%error, "admin API request failed: list pending registrations");
None
}
};
let markup = templates::pages::pending_registrations::pending_registrations_page(
config,
&auth.0,
&csrf.0.0,
pending_registrations.as_deref(),
);
Html(markup.into_string()).into_response()
}
async fn approve_pending_registration(
state: State<AppState>,
headers: HeaderMap,
auth: axum::Extension<AuthContext>,
csrf: axum::Extension<CsrfToken>,
form: Form<PendingRegistrationForm>,
) -> Response {
decide_pending_registration(
state,
headers,
auth,
csrf,
form,
PendingRegistrationStatus::Approved,
)
.await
}
async fn reject_pending_registration(
state: State<AppState>,
headers: HeaderMap,
auth: axum::Extension<AuthContext>,
csrf: axum::Extension<CsrfToken>,
form: Form<PendingRegistrationForm>,
) -> Response {
decide_pending_registration(
state,
headers,
auth,
csrf,
form,
PendingRegistrationStatus::Rejected,
)
.await
}
async fn decide_pending_registration(
State(state): State<AppState>,
headers: HeaderMap,
auth: axum::Extension<AuthContext>,
csrf: axum::Extension<CsrfToken>,
Form(form): Form<PendingRegistrationForm>,
status: PendingRegistrationStatus,
) -> Response {
let config = state.config();
let (success_message, error_message) = match status {
PendingRegistrationStatus::Approved => {
("Registration approved", "Failed to approve registration")
}
PendingRegistrationStatus::Rejected => {
("Registration rejected", "Failed to reject registration")
}
};
let flash = match clean_string(form.user_id.as_deref().unwrap_or("")) {
None => FlashData::error("User ID is required"),
Some(user_id) => {
let client = AdminApiClient::new(state.http_client(), config, &auth.0.session);
match client.decide_pending_registration(&user_id, status).await {
Ok(pending_registrations) => {
let flash = FlashData::success(success_message);
if htmx::targets(&headers, "pending-registration-list") {
let markup = maud::html! {
(templates::pages::pending_registrations::pending_registration_list(
config,
&csrf.0.0,
&pending_registrations,
))
(pending_registration_count_markup(
u32::try_from(pending_registrations.len()).ok(),
true,
))
};
let mut response = Html(markup.into_string()).into_response();
htmx::add_toast_header(&mut response, &flash);
return response;
}
flash
}
Err(error) => {
tracing::warn!(%error, ?status, "admin API request failed: decide pending registration");
FlashData::error(error_message)
}
}
}
};
if htmx::is_htmx_request(&headers) {
return htmx::toast_response(&flash);
}
flash::redirect_with_flash(
&format!("{}/pending-registrations", config.base_path),
flash,
config.secure_cookies(),
)
}
-58
View File
@@ -304,48 +304,6 @@ pub async fn instance_config_post(
},
None => FlashData::error("Registration URL ID is required"),
},
"approve_pending_registration" => match form.clean("user_id") {
Some(user_id) => match client.approve_pending_registration(&user_id).await {
Ok(instance_config) => {
let flash = FlashData::success("Registration approved");
if htmx::targets(&headers, "pending-registration-list") {
return render_pending_registration_list_response(
config,
&csrf.0.0,
&instance_config,
&flash,
);
}
flash
}
Err(error) => {
tracing::warn!(%error, "admin API request failed: approve pending registration");
FlashData::error("Failed to approve registration")
}
},
None => FlashData::error("User ID is required"),
},
"reject_pending_registration" => match form.clean("user_id") {
Some(user_id) => match client.reject_pending_registration(&user_id).await {
Ok(instance_config) => {
let flash = FlashData::success("Registration rejected");
if htmx::targets(&headers, "pending-registration-list") {
return render_pending_registration_list_response(
config,
&csrf.0.0,
&instance_config,
&flash,
);
}
flash
}
Err(error) => {
tracing::warn!(%error, "admin API request failed: reject pending registration");
FlashData::error("Failed to reject registration")
}
},
None => FlashData::error("User ID is required"),
},
_ => FlashData::error("Unknown instance config action"),
};
if htmx::is_htmx_request(&headers) {
@@ -381,22 +339,6 @@ fn render_registration_url_list_response(
)
}
fn render_pending_registration_list_response(
config: &AdminConfig,
csrf_token: &str,
instance_config: &crate::api::types::InstanceConfigResponse,
flash: &FlashData,
) -> Response {
render_fragment_with_toast(
templates::pages::instance_config::pending_registration_list(
config,
csrf_token,
&instance_config.registration.pending_registrations,
),
flash,
)
}
fn render_fragment_with_toast(markup: Markup, flash: &FlashData) -> Response {
let mut response = Html(markup.into_string()).into_response();
htmx::add_toast_header(&mut response, flash);
+1 -1
View File
@@ -104,7 +104,7 @@ pub fn admin_layout_ext(
body class="min-h-screen overflow-hidden bg-neutral-50" hx-boost="true" {
a href="#main-content" class="skip-link" { "Skip to main content" }
div class="flex h-[100dvh]" {
(render_sidebar(config, admin_acls, active_page, options.inspected_voice_region_id))
(render_sidebar(config, admin_acls, active_page, options.inspected_voice_region_id, auth.pending_registration_count))
div data-sidebar-overlay="" class="pointer-events-none fixed inset-0 z-30 bg-black/50 opacity-0 transition-opacity duration-200 ease-in-out lg:hidden" aria-hidden="true" {}
div class="flex h-[100dvh] w-full flex-1 flex-col overflow-y-auto" {
(render_header(config, auth, csrf_token))
+16 -2
View File
@@ -4,13 +4,14 @@ use crate::{acl, config::AdminConfig};
use maud::{Markup, PreEscaped, html};
use super::layout_scripts::SIDEBAR_ACTIVE_SCROLL_SCRIPT;
use super::layout_sidebar_nav::NAV_SECTIONS;
use super::layout_sidebar_nav::{NAV_SECTIONS, PENDING_REGISTRATIONS_KEY};
pub fn render_sidebar(
config: &AdminConfig,
admin_acls: &[String],
active_page: &str,
inspected_voice_region_id: Option<&str>,
pending_registration_count: Option<u32>,
) -> Markup {
let base = &config.base_path;
html! {
@@ -40,7 +41,7 @@ pub fn render_sidebar(
div class="space-y-1" {
@for item in &visible_items {
@let active = active_page == item.active_key;
@let base_classes = "block min-h-[44px] px-3 py-2.5 rounded text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-neutral-900";
@let base_classes = "flex min-h-[44px] items-center justify-between gap-3 px-3 py-2.5 rounded text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-neutral-900";
@let item_path = if item.active_key == "voice-servers" {
if let Some(region_id) = inspected_voice_region_id {
let encoded = urlencoding::encode(region_id);
@@ -58,6 +59,9 @@ pub fn render_sidebar(
};
a href={(base) (item_path)} class=(classes) aria-current=[active.then_some("page")] data-active=[active.then_some("")] {
(item.title)
@if item.active_key == PENDING_REGISTRATIONS_KEY {
(pending_registration_count_markup(pending_registration_count, false))
}
}
}
}
@@ -69,3 +73,13 @@ pub fn render_sidebar(
}
}
}
pub fn pending_registration_count_markup(count: Option<u32>, out_of_band: bool) -> Markup {
html! {
span id="pending-registration-count" class="tabular-nums text-neutral-400" hx-swap-oob=[out_of_band.then_some("true")] {
@if let Some(count) = count.filter(|count| *count > 0) {
(count)
}
}
}
}
@@ -9,6 +9,8 @@ pub struct NavItem {
pub required_acls: &'static [&'static str],
}
pub const PENDING_REGISTRATIONS_KEY: &str = "pending-registrations";
pub struct NavSection {
pub title: &'static str,
pub items: &'static [NavItem],
@@ -44,6 +46,12 @@ pub const NAV_SECTIONS: &[NavSection] = &[
"discovery",
[acl::DISCOVERY_REVIEW]
),
item!(
"Pending Registrations",
"/pending-registrations",
PENDING_REGISTRATIONS_KEY,
[acl::REGISTRATION_REVIEW]
),
item!(
"Bulk Actions",
"/bulk-actions",
@@ -8,9 +8,9 @@ use crate::{
EXPERIMENT_MAX_ROLLOUT_COUNTRY_CODES, EXPERIMENT_MAX_TARGETED_USERS,
ExperimentDeliveryConfigResponse, GatewayRolloutConfigResponse, InstanceConfigResponse,
InstanceIntegrationsResponse, InstanceMediaResponse, InstancePolicyResponse,
InstanceRegistrationResponse, LimitConfigResponse, PendingRegistrationResponse,
PremiumMode, PushRelayConfigResponse, RegistrationUrlResponse, SsoConfigResponse, TagStyle,
VOICE_P2P_DEFAULT_SALT, VOICE_P2P_MAX_PARTICIPANTS_RANGE, VoiceP2pConfigResponse,
InstanceRegistrationResponse, LimitConfigResponse, PremiumMode, PushRelayConfigResponse,
RegistrationUrlResponse, SsoConfigResponse, TagStyle, VOICE_P2P_DEFAULT_SALT,
VOICE_P2P_MAX_PARTICIPANTS_RANGE, VoiceP2pConfigResponse,
},
config::AdminConfig,
middleware::auth::AuthContext,
@@ -1640,7 +1640,7 @@ fn registration_config_section(
let base = &config.base_path;
section_card_with_description(
"Registration Controls",
"Control public registration, admin-issued registration URLs, and pending approval requests.",
"Control public registration and admin-issued registration URLs.",
html! {
div class="space-y-8" {
(registration_policy_form(base, csrf_token, registration))
@@ -1649,7 +1649,6 @@ fn registration_config_section(
}
(create_registration_url_form(base, csrf_token))
(registration_url_list(config, csrf_token, &registration.urls))
(pending_registration_list(config, csrf_token, &registration.pending_registrations))
}
},
)
@@ -1872,110 +1871,7 @@ fn registration_url_row(
}
}
pub fn pending_registration_list(
config: &AdminConfig,
csrf_token: &str,
pending_registrations: &[PendingRegistrationResponse],
) -> Markup {
let base = &config.base_path;
html! {
div id="pending-registration-list" class="space-y-4 border-t border-neutral-200 pt-6" {
h3 class="text-sm font-semibold text-neutral-900" { "Pending Registrations" }
@if pending_registrations.is_empty() {
p class="text-sm text-neutral-500" { "No pending registrations." }
} @else {
div class="overflow-x-auto rounded-lg border border-neutral-200" {
table class="min-w-[940px] divide-y divide-neutral-200 text-sm" {
thead class="bg-neutral-50" {
tr {
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Applicant" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Requested" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Registration URL" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "IP" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Action" }
}
}
tbody class="divide-y divide-neutral-200 bg-white" {
@for pending in pending_registrations {
(pending_registration_row(config, base, csrf_token, pending))
}
}
}
}
}
}
}
}
fn pending_registration_row(
config: &AdminConfig,
base: &str,
csrf_token: &str,
pending: &PendingRegistrationResponse,
) -> Markup {
let account_name = pending_registration_account_name(pending);
let requested_at = format_admin_timestamp(&pending.requested_at);
let email = pending.email.as_deref().unwrap_or("None");
let link_id = pending.registration_url_id.as_deref().unwrap_or("None");
let client_ip = pending.client_ip.as_deref().unwrap_or("None");
let approve_action = format!("{base}/instance-config?action=approve_pending_registration");
let reject_action = format!("{base}/instance-config?action=reject_pending_registration");
html! {
tr {
td class="max-w-[20rem] px-4 py-3 align-top" {
p class="font-medium text-neutral-900" { (account_name) }
@if let Some(global_name) = pending.global_name.as_deref() {
p class="truncate text-xs text-neutral-500" title=(global_name) { (global_name) }
}
p class="truncate text-xs text-neutral-500" title=(email) { (email) }
p class="whitespace-nowrap text-xs text-neutral-500" { "ID: " (&pending.user_id) }
}
td class="px-4 py-3 align-top text-neutral-700 whitespace-nowrap" {
(requested_at)
}
td class="px-4 py-3 align-top text-neutral-700" {
@if let Some(registration_url_id) = pending.registration_url_id.as_deref() {
@let full_url = admin_issued_registration_url(config, registration_url_id);
p class="whitespace-nowrap text-xs text-neutral-500" { "ID: " (registration_url_id) }
div class="mt-1" {
(compact_copy_button(&full_url, "Copy URL"))
}
} @else {
span class="text-neutral-500" { (link_id) }
}
}
td class="px-4 py-3 align-top text-neutral-700 whitespace-nowrap" {
(client_ip)
}
td class="px-4 py-3 align-top" {
div class="flex flex-nowrap gap-2" {
form method="post" action=(&approve_action)
hx-post=(&approve_action)
hx-target="#pending-registration-list"
hx-swap="outerHTML"
hx-push-url="false"
data-admin-allow-swap="true" {
(csrf_input(csrf_token))
input type="hidden" name="user_id" value=(&pending.user_id);
(compact_button("Approve", false))
}
form method="post" action=(&reject_action)
hx-post=(&reject_action)
hx-target="#pending-registration-list"
hx-swap="outerHTML"
hx-push-url="false"
data-admin-allow-swap="true" {
(csrf_input(csrf_token))
input type="hidden" name="user_id" value=(&pending.user_id);
(compact_button("Reject", true))
}
}
}
}
}
}
fn admin_issued_registration_url(config: &AdminConfig, code: &str) -> String {
pub(super) fn admin_issued_registration_url(config: &AdminConfig, code: &str) -> String {
format!(
"{}/register?registration_url={}",
config.web_app_endpoint.trim_end_matches('/'),
@@ -1994,7 +1890,7 @@ fn copyable_registration_url(value: &str, label: &str) -> Markup {
}
}
fn compact_copy_button(value: &str, label: &str) -> Markup {
pub(super) fn compact_copy_button(value: &str, label: &str) -> Markup {
html! {
button type="button"
class="inline-flex h-8 shrink-0 items-center justify-center rounded-lg border border-neutral-300 bg-neutral-50 px-3 text-xs font-medium text-neutral-700 transition-all hover:border-neutral-400 hover:text-neutral-900 focus:outline-none focus:ring-2 focus:ring-brand-primary/20"
@@ -2005,7 +1901,7 @@ fn compact_copy_button(value: &str, label: &str) -> Markup {
}
}
fn compact_button(label: &str, danger: bool) -> Markup {
pub(super) fn compact_button(label: &str, danger: bool) -> Markup {
let variant_class = if danger {
"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500/30"
} else {
@@ -2091,14 +1987,6 @@ fn registration_url_uses_text(url: &RegistrationUrlResponse) -> String {
}
}
fn pending_registration_account_name(pending: &PendingRegistrationResponse) -> String {
if pending.discriminator == 0 {
pending.username.clone()
} else {
format!("{}#{:04}", pending.username, pending.discriminator)
}
}
fn sso_config_section(base: &str, csrf_token: &str, sso: &SsoConfigResponse) -> Markup {
let allowed_domains = sso.allowed_domains.join("\n");
let secret_caption = if sso.client_secret_set {
+1
View File
@@ -25,6 +25,7 @@ pub mod jobs_list_helpers;
pub mod limit_config;
pub mod login;
pub mod messages_page;
pub mod pending_registrations;
pub mod profile_substring_bans;
pub mod report_detail;
pub mod reports_list;
@@ -0,0 +1,158 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use crate::{
api::types::PendingRegistrationResponse,
config::AdminConfig,
middleware::auth::AuthContext,
templates::{
components::{
error_display::error_alert, form::csrf_input, page_container::page_header,
table::empty_state,
},
layout::admin_layout,
layout_sidebar_nav::PENDING_REGISTRATIONS_KEY,
},
utils::timestamps::format_admin_timestamp,
};
use maud::{Markup, html};
use super::instance_config::{admin_issued_registration_url, compact_button, compact_copy_button};
pub fn pending_registrations_page(
config: &AdminConfig,
auth: &AuthContext,
csrf_token: &str,
pending_registrations: Option<&[PendingRegistrationResponse]>,
) -> Markup {
let content = html! {
(page_header(
"Pending Registrations",
Some("Approve or reject accounts waiting for a registration decision."),
))
@match pending_registrations {
Some(pending_registrations) => {
(pending_registration_list(config, csrf_token, pending_registrations))
}
None => (error_alert("Failed to load pending registrations.")),
}
};
admin_layout(
config,
auth,
"Pending Registrations",
PENDING_REGISTRATIONS_KEY,
None,
content,
)
}
pub fn pending_registration_list(
config: &AdminConfig,
csrf_token: &str,
pending_registrations: &[PendingRegistrationResponse],
) -> Markup {
let base = &config.base_path;
html! {
div id="pending-registration-list" {
@if pending_registrations.is_empty() {
(empty_state("No pending registrations."))
} @else {
div class="overflow-x-auto rounded-lg border border-neutral-200" {
table class="min-w-[940px] divide-y divide-neutral-200 text-sm" {
thead class="bg-neutral-50" {
tr {
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Applicant" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Requested" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Registration URL" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "IP" }
th scope="col" class="px-4 py-3 text-left font-semibold text-neutral-600" { "Action" }
}
}
tbody class="divide-y divide-neutral-200 bg-white" {
@for pending in pending_registrations {
(pending_registration_row(config, base, csrf_token, pending))
}
}
}
}
}
}
}
}
fn pending_registration_row(
config: &AdminConfig,
base: &str,
csrf_token: &str,
pending: &PendingRegistrationResponse,
) -> Markup {
let account_name = pending_registration_account_name(pending);
let requested_at = format_admin_timestamp(&pending.requested_at);
let email = pending.email.as_deref().unwrap_or("None");
let client_ip = pending.client_ip.as_deref().unwrap_or("None");
let approve_action = format!("{base}/pending-registrations/approve");
let reject_action = format!("{base}/pending-registrations/reject");
html! {
tr {
td class="max-w-[20rem] px-4 py-3 align-top" {
p class="font-medium text-neutral-900" { (account_name) }
@if let Some(global_name) = pending.global_name.as_deref() {
p class="truncate text-xs text-neutral-500" title=(global_name) { (global_name) }
}
p class="truncate text-xs text-neutral-500" title=(email) { (email) }
p class="whitespace-nowrap text-xs text-neutral-500" { "ID: " (&pending.user_id) }
}
td class="px-4 py-3 align-top text-neutral-700 whitespace-nowrap" {
(requested_at)
}
td class="px-4 py-3 align-top text-neutral-700" {
@if let Some(registration_url_id) = pending.registration_url_id.as_deref() {
p class="whitespace-nowrap text-xs text-neutral-500" { "ID: " (registration_url_id) }
div class="mt-1" {
(compact_copy_button(&admin_issued_registration_url(config, registration_url_id), "Copy URL"))
}
} @else {
span class="text-neutral-500" { "None" }
}
}
td class="px-4 py-3 align-top text-neutral-700 whitespace-nowrap" {
(client_ip)
}
td class="px-4 py-3 align-top" {
div class="flex flex-nowrap gap-2" {
(decision_form(&approve_action, csrf_token, &pending.user_id, "Approve", false))
(decision_form(&reject_action, csrf_token, &pending.user_id, "Reject", true))
}
}
}
}
}
fn decision_form(
action: &str,
csrf_token: &str,
user_id: &str,
label: &str,
danger: bool,
) -> Markup {
html! {
form method="post" action=(action)
hx-post=(action)
hx-target="#pending-registration-list"
hx-swap="outerHTML"
hx-push-url="false"
data-admin-allow-swap="true" {
(csrf_input(csrf_token))
input type="hidden" name="user_id" value=(user_id);
(compact_button(label, danger))
}
}
}
fn pending_registration_account_name(pending: &PendingRegistrationResponse) -> String {
if pending.discriminator == 0 {
pending.username.clone()
} else {
format!("{}#{:04}", pending.username, pending.discriminator)
}
}
+1 -2
View File
@@ -261,8 +261,7 @@ fn deserialize_instance_config_response_with_unknown_keys() {
"registration": {
"mode": "open",
"admin_registration_urls_enabled": false,
"urls": [],
"pending_registrations": []
"urls": []
},
"self_hosted": false,
"account_identity": {"mode": "username", "locked": true, "tag_style": "none"},
+99
View File
@@ -5,6 +5,7 @@
use axum::{
Json, Router,
body::{Body, to_bytes},
extract::Path,
http::{HeaderMap, Method, Request, StatusCode, Uri, header},
response::{IntoResponse, Response},
routing,
@@ -272,6 +273,91 @@ async fn report_delete_form_confirms_sends_the_reason_and_toasts_a_held_report()
);
}
#[tokio::test]
async fn pending_registration_decision_refreshes_the_list_and_sidebar_count() {
let received = Arc::new(Mutex::new(Vec::<(String, Value)>::new()));
let sink = received.clone();
let api = Router::new()
.route(
"/admin/users/@me",
routing::get(|| async {
json_response(json!({"user": admin_user(), "pending_registration_count": 2}))
}),
)
.route(
"/admin/instance/pending-registrations",
routing::get(|| async {
json_response(json!({"pending_registrations": [
pending_registration("1500000000000000002"),
pending_registration("1500000000000000003"),
]}))
}),
)
.route(
"/admin/instance/pending-registrations/{user_id}",
routing::patch(
move |Path(user_id): Path<String>, Json(body): Json<Value>| {
let sink = sink.clone();
async move {
sink.lock().unwrap().push((user_id, body));
json_response(json!({"pending_registrations": [
pending_registration("1500000000000000003"),
]}))
}
},
),
)
.fallback(mock_api);
let app = setup_with_api(api).await;
let (headers, page) = get_with_headers(&app, "/pending-registrations", &[]).await;
assert!(
page.contains(r#"<span id="pending-registration-count" class="tabular-nums text-neutral-400">2</span>"#),
"{page}"
);
assert!(page.contains("ID: 1500000000000000002"), "{page}");
let csrf_token = csrf_cookie(&headers).unwrap_or_else(|| {
panic!("pending registrations page did not set csrf_token cookie\n{page}")
});
assert_form_has_csrf(&page, "/pending-registrations/approve", &csrf_token);
assert_form_has_csrf(&page, "/pending-registrations/reject", &csrf_token);
let cookie = format!("{}; csrf_token={}", app.session_cookie, csrf_token);
let (status, headers, fragment) = post_form_with_headers(
&app,
"/pending-registrations/approve",
&[
("HX-Request", "true"),
("HX-Target", "pending-registration-list"),
("Cookie", &cookie),
],
&format!("_csrf={csrf_token}&user_id=1500000000000000002"),
)
.await;
assert_eq!(status, StatusCode::OK, "{fragment}");
assert!(
fragment.contains(r#"id="pending-registration-list""#),
"{fragment}"
);
assert!(!fragment.contains("ID: 1500000000000000002"), "{fragment}");
assert!(fragment.contains("ID: 1500000000000000003"), "{fragment}");
assert!(
fragment.contains(r#"hx-swap-oob="true">1</span>"#),
"{fragment}"
);
let toast = headers
.get("X-Fluxer-Admin-Toast")
.and_then(|value| value.to_str().ok())
.unwrap_or_default();
assert!(toast.contains("Registration approved"), "{toast}");
assert_eq!(
*received.lock().unwrap(),
vec![(
"1500000000000000002".to_owned(),
json!({"status": "approved"})
)]
);
}
async fn setup_with_api(api: Router) -> TestApp {
let api_endpoint = spawn_mock_api(api).await;
let router = build_router(test_config(api_endpoint));
@@ -440,6 +526,19 @@ fn user(id: &str, username: &str) -> Value {
})
}
fn pending_registration(user_id: &str) -> Value {
json!({
"user_id": user_id,
"username": "applicant",
"discriminator": 0,
"global_name": null,
"email": "[email protected]",
"requested_at": "2026-10-14T12:00:00.000Z",
"registration_url_id": null,
"client_ip": "203.0.113.7"
})
}
fn searched_report() -> Value {
json!({
"report_id": "1800000000000000001",
+5
View File
@@ -374,6 +374,11 @@ export function buildAPIConfigFromMaster(master: MasterConfig): APIConfig {
token: master.integrations.cache_purge.http.token,
timeoutMs: master.integrations.cache_purge.http.timeout_ms,
},
controller: {
endpoint: master.integrations.cache_purge.controller.endpoint,
token: master.integrations.cache_purge.controller.token,
timeoutMs: master.integrations.cache_purge.controller.timeout_ms,
},
},
clamav: {
enabled: master.integrations.clamav.enabled,
@@ -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_PENDING_REGISTRATIONS: 'list_pending_registrations',
LIST_REPORT_REASONS: 'list_report_reasons',
LIST_USER_APPLICATIONS: 'list_user_applications',
LIST_USER_CHANGE_LOG: 'list_user_change_log',
@@ -34,6 +34,7 @@ import {
InstanceEmailSmtpTestRequest,
InstanceEmailSmtpTestResponse,
PendingRegistrationActionRequest,
PendingRegistrationListResponse,
RegistrationUrlIdParam,
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import {DomainMigrationConfigSchema} from '@fluxer/schema/src/domains/admin/DomainMigrationSchemas';
@@ -98,7 +99,6 @@ async function buildInstanceConfigResponse(): Promise<InstanceConfigResponse> {
experimentDelivery,
registrationConfig,
registrationUrls,
pendingRegistrations,
] = await Promise.all([
instanceConfigRepository.getSsoConfig(),
instanceConfigRepository.getGatewayRolloutConfig(),
@@ -109,7 +109,6 @@ async function buildInstanceConfigResponse(): Promise<InstanceConfigResponse> {
instanceConfigRepository.getExperimentDeliveryConfig(),
instanceConfigRepository.getRegistrationConfig(),
instanceConfigRepository.getRegistrationUrlsForAdmin(),
instanceConfigRepository.getPendingRegistrations(),
]);
const [appPublic, policy, resolvedServices, integrations, media, billing, accountIdentity, accountIdentityLocked] =
await Promise.all([
@@ -148,7 +147,6 @@ async function buildInstanceConfigResponse(): Promise<InstanceConfigResponse> {
registration: {
...registrationConfig,
urls: registrationUrls,
pending_registrations: pendingRegistrations,
},
self_hosted: Config.instance.selfHosted,
account_identity: {
@@ -320,10 +318,7 @@ export function InstanceConfigAdminController(app: HonoApp) {
targetType: 'instance_config',
targetId: 0n,
action: AdminAuditReadActions.GET_INSTANCE_CONFIG,
metadata: {
registration_url_count: response.registration.urls.length,
pending_registration_count: response.registration.pending_registrations.length,
},
metadata: {registration_url_count: response.registration.urls.length},
});
return ctx.json(response);
},
@@ -738,18 +733,43 @@ export function InstanceConfigAdminController(app: HonoApp) {
return ctx.json(await buildInstanceConfigResponse());
},
);
app.get(
'/admin/instance/pending-registrations',
RateLimitMiddleware(RateLimitConfigs.ADMIN_LOOKUP),
requireAdminACL(AdminACLs.REGISTRATION_REVIEW),
OpenAPI({
operationId: 'list_admin_pending_registrations',
summary: 'List pending registrations',
description:
'Lists every registration waiting for manual review, oldest first. Requires REGISTRATION_REVIEW permission.',
responseSchema: PendingRegistrationListResponse,
statusCode: 200,
security: 'adminApiKey',
tags: 'Admin',
}),
async (ctx) => {
const pendingRegistrations = await instanceConfigRepository.getPendingRegistrations();
await recordAdminRead(ctx, {
targetType: 'instance_config',
targetId: 0n,
action: AdminAuditReadActions.LIST_PENDING_REGISTRATIONS,
metadata: {pending_registration_count: pendingRegistrations.length},
});
return ctx.json({pending_registrations: pendingRegistrations});
},
);
app.patch(
'/admin/instance/pending-registrations/:user_id',
RateLimitMiddleware(RateLimitConfigs.ADMIN_USER_MODIFY),
requireAdminACL(AdminACLs.INSTANCE_CONFIG_UPDATE),
requireAdminACL(AdminACLs.REGISTRATION_REVIEW),
Validator('param', UserIdParam),
Validator('json', PendingRegistrationActionRequest),
OpenAPI({
operationId: 'update_admin_pending_registration',
summary: 'Approve or reject a pending registration',
description:
'Decides a registration waiting for manual review. Approving removes its pending registration trait, rejecting also prevents the account from logging in. Requires INSTANCE_CONFIG_UPDATE permission.',
responseSchema: InstanceConfigResponse,
'Decides a registration waiting for manual review and returns the registrations still waiting. Approving removes its pending registration trait, rejecting also prevents the account from logging in. Requires REGISTRATION_REVIEW permission.',
responseSchema: PendingRegistrationListResponse,
statusCode: 200,
security: 'adminApiKey',
tags: 'Admin',
@@ -759,7 +779,7 @@ export function InstanceConfigAdminController(app: HonoApp) {
const decision = ctx.req.valid('json').status === 'approved' ? 'approve' : 'reject';
await updatePendingRegistrationUser(ctx, userId, decision);
await instanceConfigRepository.removePendingRegistration(userId);
return ctx.json(await buildInstanceConfigResponse());
return ctx.json({pending_registrations: await instanceConfigRepository.getPendingRegistrations()});
},
);
}
@@ -8,9 +8,10 @@ import {
RequireEmailAccountIdentity,
RequireUsernameAccountIdentity,
} from '@app/api/middleware/AccountIdentityMiddleware';
import {requireAdminACL, requireGrantedAdminACLs} from '@app/api/middleware/AdminMiddleware';
import {hasAdminACL, requireAdminACL, requireGrantedAdminACLs} from '@app/api/middleware/AdminMiddleware';
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
import {getInstanceConfigRepository} from '@app/api/middleware/ServiceSingletons';
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
import type {HonoApp} from '@app/api/types/HonoEnv';
import {inputValidationErrorFromZodIssues, Validator} from '@app/api/Validator';
@@ -94,14 +95,15 @@ export function UserAdminController(app: HonoApp) {
security: 'adminApiKey',
tags: 'Admin',
description:
'Return the admin the request was authenticated as, with the admin permissions, roles, and metadata of the account. Requires AUTHENTICATE permission.',
'Return the admin the request was authenticated as, with the admin permissions, roles, and metadata of the account, plus the number of pending registrations when the admin holds REGISTRATION_REVIEW. Requires AUTHENTICATE permission.',
}),
async (ctx) => {
const adminUser = ctx.get('user');
const cacheService = ctx.get('cacheService');
return ctx.json({
user: await mapUserToAdminResponse(adminUser, cacheService),
});
const canReviewRegistrations = hasAdminACL(ctx.get('adminUserAcls'), AdminACLs.REGISTRATION_REVIEW);
const [user, pendingRegistrations] = await Promise.all([
mapUserToAdminResponse(ctx.get('user'), ctx.get('cacheService')),
canReviewRegistrations ? getInstanceConfigRepository().getPendingRegistrations() : null,
]);
return ctx.json({user, pending_registration_count: pendingRegistrations?.length ?? null});
},
);
app.get(
@@ -13,7 +13,9 @@ import {createApiTestHarness} from '@app/api/test/ApiTestHarness';
import {HTTP_STATUS} from '@app/api/test/TestConstants';
import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder';
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
import {afterAll, beforeAll, beforeEach, describe, it} from 'vitest';
import type {PendingRegistrationListResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import type {AdminUsersMeResponse} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
interface PendingRegistrationResponse {
user_id: string;
@@ -37,7 +39,7 @@ describe('pending registration approval and the stock community', () => {
it('keeps a banned user out of the stock community on approval', async () => {
const admin = await setUserACLs(harness, await createTestAccount(harness), [
AdminACLs.AUTHENTICATE,
AdminACLs.INSTANCE_CONFIG_UPDATE,
AdminACLs.REGISTRATION_REVIEW,
]);
const {owner, guild} = await setupTestGuildWithMembers(harness, 0);
await getInstanceConfigRepository().setInstancePolicyConfig({
@@ -79,7 +81,7 @@ describe('pending registration approval and the stock community', () => {
it('does not add a user who was never pending to the stock community', async () => {
const admin = await setUserACLs(harness, await createTestAccount(harness), [
AdminACLs.AUTHENTICATE,
AdminACLs.INSTANCE_CONFIG_UPDATE,
AdminACLs.REGISTRATION_REVIEW,
]);
const {owner, guild} = await setupTestGuildWithMembers(harness, 0);
const outsider = await createTestAccount(harness);
@@ -99,4 +101,59 @@ describe('pending registration approval and the stock community', () => {
.expect(HTTP_STATUS.NOT_FOUND)
.execute();
});
it('lets the review ACL alone list and decide registrations', async () => {
const reviewer = await setUserACLs(harness, await createTestAccount(harness), [
AdminACLs.AUTHENTICATE,
AdminACLs.REGISTRATION_REVIEW,
]);
const configAdmin = await setUserACLs(harness, await createTestAccount(harness), [
AdminACLs.AUTHENTICATE,
AdminACLs.INSTANCE_CONFIG_VIEW,
AdminACLs.INSTANCE_CONFIG_UPDATE,
]);
await getInstanceConfigRepository().setRegistrationConfig({mode: 'approval'});
const pending = await createBuilderWithoutAuth<PendingRegistrationResponse>(harness)
.post('/auth/register')
.body({
email: createUniqueEmail('reviewonly'),
username: createUniqueUsername('reviewonly'),
global_name: 'Review only',
password: 'reviewing-since-1999',
date_of_birth: '2000-01-01',
consent: true,
})
.execute();
const listed = await createBuilder<PendingRegistrationListResponse>(harness, reviewer.token)
.get('/admin/instance/pending-registrations')
.expect(HTTP_STATUS.OK)
.execute();
expect(listed.pending_registrations.map((entry) => entry.user_id)).toEqual([pending.user_id]);
const reviewerMe = await createBuilder<AdminUsersMeResponse>(harness, reviewer.token)
.get('/admin/users/@me')
.execute();
expect(reviewerMe.pending_registration_count).toBe(1);
const configAdminMe = await createBuilder<AdminUsersMeResponse>(harness, configAdmin.token)
.get('/admin/users/@me')
.execute();
expect(configAdminMe.pending_registration_count).toBeNull();
await createBuilder(harness, configAdmin.token)
.get('/admin/instance/pending-registrations')
.expect(HTTP_STATUS.FORBIDDEN, 'MISSING_ACL')
.execute();
await createBuilder(harness, configAdmin.token)
.patch(`/admin/instance/pending-registrations/${pending.user_id}`)
.body({status: 'approved'})
.expect(HTTP_STATUS.FORBIDDEN, 'MISSING_ACL')
.execute();
const decided = await createBuilder<PendingRegistrationListResponse>(harness, reviewer.token)
.patch(`/admin/instance/pending-registrations/${pending.user_id}`)
.body({status: 'rejected'})
.expect(HTTP_STATUS.OK)
.execute();
expect(decided.pending_registrations).toEqual([]);
});
});
@@ -35,7 +35,7 @@ export const InstanceConfigAdminAuditCases: ReadonlyArray<AdminAuditCoverageCase
action: 'get_instance_config',
targetType: 'instance_config',
targetId: '0',
metadata: {registration_url_count: '1', pending_registration_count: '0'},
metadata: {registration_url_count: '1'},
},
};
},
@@ -129,6 +129,30 @@ export const InstanceConfigAdminAuditCases: ReadonlyArray<AdminAuditCoverageCase
};
},
},
{
method: 'GET',
route: '/admin/instance/pending-registrations',
async prepare({harness}) {
await getInstanceConfigRepository().setRegistrationConfig({mode: 'approval'});
await registerUser(harness, {
email: createUniqueEmail('coverage-listed'),
username: createUniqueUsername('coveragelisted'),
global_name: 'Coverage Listed',
password: 'coverage-listed-password',
date_of_birth: '2000-01-01',
consent: true,
});
return {
request: {path: '/admin/instance/pending-registrations'},
expected: {
action: 'list_pending_registrations',
targetType: 'instance_config',
targetId: '0',
metadata: {pending_registration_count: '1'},
},
};
},
},
{
method: 'PATCH',
route: '/admin/instance/pending-registrations/:user_id',
@@ -23,7 +23,10 @@ import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequest
import {UserRepository} from '@app/api/user/repositories/UserRepository';
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import type {InstanceConfigResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import type {
InstanceConfigResponse,
PendingRegistrationListResponse,
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest';
const REGISTRATION_URLS_KEY = 'registration_urls';
@@ -62,6 +65,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
AdminACLs.AUTHENTICATE,
AdminACLs.INSTANCE_CONFIG_VIEW,
AdminACLs.INSTANCE_CONFIG_UPDATE,
AdminACLs.REGISTRATION_REVIEW,
]);
});
@@ -82,6 +86,13 @@ describe('signups racing on registration URLs and pending approvals', () => {
const readAdminConfig = (): Promise<InstanceConfigResponse> =>
createBuilder<InstanceConfigResponse>(harness, admin.token).get('/admin/instance/config').execute();
const readPendingRegistrations = async (): Promise<PendingRegistrationListResponse['pending_registrations']> =>
(
await createBuilder<PendingRegistrationListResponse>(harness, admin.token)
.get('/admin/instance/pending-registrations')
.execute()
).pending_registrations;
const completeSso = async (prefix: string) => {
const start = await createBuilderWithoutAuth<{state: string}>(harness)
.post('/auth/sso/start')
@@ -116,7 +127,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
};
const expectOnePendingAccount = async () => {
const pending = (await readAdminConfig()).registration.pending_registrations;
const pending = await readPendingRegistrations();
expect(pending).toHaveLength(1);
const account = await new UserRepository().findUnique(createUserID(BigInt(pending[0]!.user_id)));
expect(account?.traits.has(REGISTRATION_PENDING_APPROVAL_TRAIT)).toBe(true);
@@ -209,8 +220,8 @@ describe('signups racing on registration URLs and pending approvals', () => {
const failed = await register('seatreleased', code);
expect(failed.response.status).toBe(HTTP_STATUS.INTERNAL_SERVER_ERROR);
expect(await readPendingRegistrations()).toEqual([]);
const withdrawn = await readAdminConfig();
expect(withdrawn.registration.pending_registrations).toEqual([]);
expect(withdrawn.registration.urls.find((url) => url.id === registrationUrl.id)?.use_count).toBe(0);
const retried = await register('seatreleasedretry', code);
@@ -307,7 +318,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
const attempts = await Promise.all(Array.from({length: 5}, (_, index) => register(`pending${index}`)));
expect(attempts.map((attempt) => attempt.json.registration_pending_approval)).toEqual(Array(5).fill(true));
const pending = (await readAdminConfig()).registration.pending_registrations.map((entry) => entry.user_id);
const pending = (await readPendingRegistrations()).map((entry) => entry.user_id);
expect(pending.toSorted()).toEqual(attempts.map((attempt) => attempt.json.user_id).toSorted());
});
@@ -340,7 +351,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
const failed = await register('pendingkept');
expect(failed.response.status).toBe(HTTP_STATUS.INTERNAL_SERVER_ERROR);
expect((await readAdminConfig()).registration.pending_registrations).toHaveLength(1);
expect(await readPendingRegistrations()).toHaveLength(1);
});
it('lists no pending approval for an approval-mode signup that failed before the account was created', async () => {
@@ -350,7 +361,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
const failed = await register('pendingnever');
expect(failed.response.status).toBe(HTTP_STATUS.INTERNAL_SERVER_ERROR);
expect((await readAdminConfig()).registration.pending_registrations).toEqual([]);
expect(await readPendingRegistrations()).toEqual([]);
});
it('lists an SSO account provisioned in approval mode whose provisioning failed after the account was created', async () => {
@@ -383,7 +394,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
const failed = await completeSso('ssopendingkept');
expect(failed.response.status).toBe(HTTP_STATUS.INTERNAL_SERVER_ERROR);
expect((await readAdminConfig()).registration.pending_registrations).toHaveLength(1);
expect(await readPendingRegistrations()).toHaveLength(1);
});
it('lists no pending approval for an SSO signup in approval mode that failed before the account was created', async () => {
@@ -394,7 +405,7 @@ describe('signups racing on registration URLs and pending approvals', () => {
const failed = await completeSso('ssopendingnever');
expect(failed.response.status).toBe(HTTP_STATUS.INTERNAL_SERVER_ERROR);
expect((await readAdminConfig()).registration.pending_registrations).toEqual([]);
expect(await readPendingRegistrations()).toEqual([]);
});
it('keeps a stored pending approval listed until an admin decides it', async () => {
@@ -417,16 +428,16 @@ describe('signups racing on registration URLs and pending approvals', () => {
await getInstanceConfigRepository().setRegistrationConfig({mode: 'approval'});
const fresh = await register('pendingafter');
const listed = (await readAdminConfig()).registration.pending_registrations.map((entry) => entry.user_id);
const listed = (await readPendingRegistrations()).map((entry) => entry.user_id);
expect(listed.toSorted()).toEqual([account.userId, fresh.json.user_id].toSorted());
const decided = await createBuilder<InstanceConfigResponse>(harness, admin.token)
const decided = await createBuilder<PendingRegistrationListResponse>(harness, admin.token)
.patch(`/admin/instance/pending-registrations/${account.userId}`)
.body({status: 'approved'})
.expect(HTTP_STATUS.OK)
.execute();
expect(decided.registration.pending_registrations.map((entry) => entry.user_id)).toEqual([fresh.json.user_id]);
expect(decided.pending_registrations.map((entry) => entry.user_id)).toEqual([fresh.json.user_id]);
expect(
JSON.parse(
(await getInstanceConfigRepository().getConfig(REGISTRATION_PENDING_APPROVALS_KEY)) ?? 'null',
+8 -5
View File
@@ -19,13 +19,16 @@ export interface TrustedCallerConfig {
buckets: Array<string>;
}
interface APICachePurgeTarget {
endpoint: string;
token: string;
timeoutMs: number;
}
export interface APICachePurgeConfig {
adapter: CachePurgeAdapterName;
http: {
endpoint: string;
token: string;
timeoutMs: number;
};
http: APICachePurgeTarget;
controller: APICachePurgeTarget;
}
interface APIGeoipFilesystemConfig {
+1 -1
View File
@@ -8,7 +8,7 @@
"billing.eu_withdrawal_waiver_checkout": "Якщо я є споживачем з ЄС/ЄЕЗ, я надаю явну згоду на негайне надання цифрового контенту {product_name} {premium_tier_name} і визнаю, що втрачаю своє законне право на відмову після отримання доступу. Це не впливає на інші обов'язкові права споживача. Див. [Умови надання послуг]({terms_url}).",
"bulk_message_deletion.complete": "Ми завершили видалення твоїх повідомлень. Видалено {message_count, plural, =0 {0 повідомлень} one {# повідомлення} few {# повідомлення} many {# повідомлень} other {# повідомлень}} з {channel_count, plural, =0 {0 місць} one {# місця} few {# місць} many {# місць} other {# місць}}.",
"content.virus_detected": "Цей файл позначено як потенційно небезпечний, і його вилучено.",
"guild.bulk_create.emoji_limit": "Досягнуто максимальної кількості емодзі ({limit}).",
"guild.bulk_create.emoji_limit": "Досягнуто максимальної кількості емоджі ({limit}).",
"guild.bulk_create.sticker_limit": "Досягнуто максимальної кількості наліпок ({limit}).",
"guild.bulk_create.unknown_error": "Невідома помилка.",
"guild.default_category_text": "Текстові канали",
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {APICachePurgeConfig} from '@app/api/config/APIConfig';
import {createControllerCachePurgeAdapter} from '@app/api/infrastructure/ControllerCachePurgeAdapter';
import {createHttpCachePurgeAdapter} from '@app/api/infrastructure/HttpCachePurgeAdapter';
import {createNoneCachePurgeAdapter} from '@app/api/infrastructure/NoneCachePurgeAdapter';
import type {CachePurgeAdapterName} from '@fluxer/config/src/MasterConfig';
@@ -17,6 +18,7 @@ export interface CachePurgeAdapter {
const CACHE_PURGE_ADAPTERS = {
none: createNoneCachePurgeAdapter,
http: createHttpCachePurgeAdapter,
controller: createControllerCachePurgeAdapter,
} satisfies Record<CachePurgeAdapterName, (config: APICachePurgeConfig) => CachePurgeAdapter>;
export function createCachePurgeAdapter(config: APICachePurgeConfig): CachePurgeAdapter {
@@ -0,0 +1,82 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {APICachePurgeConfig} from '@app/api/config/APIConfig';
import {createControllerCachePurgeAdapter} from '@app/api/infrastructure/ControllerCachePurgeAdapter';
import {afterEach, beforeEach, describe, expect, it, type MockInstance, vi} from 'vitest';
const ENDPOINT = 'https://controller.test/v1/orgs/org-a/sites/site-b/purge';
const CONFIG: APICachePurgeConfig = {
adapter: 'controller',
http: {endpoint: '', token: '', timeoutMs: 10_000},
controller: {endpoint: ENDPOINT, token: 'pak_test', timeoutMs: 10_000},
};
function prefixes(count: number): Array<string> {
return Array.from({length: count}, (_, index) => `media.test/attachments/1/${index}/photo`);
}
function sentPatterns(spy: MockInstance<typeof fetch>, call: number): Array<string> {
const init = spy.mock.calls[call]![1]!;
return JSON.parse(String(init.body)).patterns;
}
describe('createControllerCachePurgeAdapter', () => {
let fetchSpy: MockInstance<typeof fetch>;
beforeEach(() => {
fetchSpy = vi.spyOn(globalThis, 'fetch');
});
afterEach(() => {
fetchSpy.mockRestore();
});
it('sends each prefix as a wildcard pattern with the bearer token', async () => {
fetchSpy.mockResolvedValue(new Response(null, {status: 202}));
const outcome = await createControllerCachePurgeAdapter(CONFIG).purge(['media.test/emojis/1']);
expect(outcome).toEqual({kind: 'purged'});
const [url, init] = fetchSpy.mock.calls[0]!;
expect(url).toBe(ENDPOINT);
expect(init!.method).toBe('POST');
expect(new Headers(init!.headers).get('Authorization')).toBe('Bearer pak_test');
expect(JSON.parse(String(init!.body))).toEqual({patterns: ['media.test/emojis/1*'], soft: false});
});
it('splits a batch into requests of at most 30 patterns', async () => {
fetchSpy.mockImplementation(async () => new Response(null, {status: 202}));
const outcome = await createControllerCachePurgeAdapter(CONFIG).purge(prefixes(65));
expect(outcome).toEqual({kind: 'purged'});
expect(fetchSpy).toHaveBeenCalledTimes(3);
expect(sentPatterns(fetchSpy, 0)).toHaveLength(30);
expect(sentPatterns(fetchSpy, 1)).toHaveLength(30);
expect(sentPatterns(fetchSpy, 2)).toHaveLength(5);
});
it('stops at the first chunk that fails so the whole batch is retried', async () => {
fetchSpy
.mockResolvedValueOnce(new Response(null, {status: 202}))
.mockResolvedValueOnce(new Response(null, {status: 503}));
const outcome = await createControllerCachePurgeAdapter(CONFIG).purge(prefixes(90));
expect(outcome).toEqual({kind: 'failed', status: 503, error: null});
expect(fetchSpy).toHaveBeenCalledTimes(2);
});
it('reports a 400 as rejected', async () => {
fetchSpy.mockResolvedValue(new Response(null, {status: 400}));
expect(await createControllerCachePurgeAdapter(CONFIG).purge(prefixes(1))).toEqual({
kind: 'rejected',
status: 400,
});
});
it('reports a network error as failed', async () => {
const error = new TypeError('fetch failed');
fetchSpy.mockRejectedValue(error);
expect(await createControllerCachePurgeAdapter(CONFIG).purge(prefixes(1))).toEqual({
kind: 'failed',
status: null,
error,
});
});
});
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {APICachePurgeConfig} from '@app/api/config/APIConfig';
import type {CachePurgeAdapter, CachePurgeOutcome} from '@app/api/infrastructure/CachePurgeAdapter';
import * as FetchUtils from '@app/api/utils/FetchUtils';
const MAX_PATTERNS_PER_REQUEST = 30;
export function createControllerCachePurgeAdapter(config: APICachePurgeConfig): CachePurgeAdapter {
async function purgeChunk(patterns: ReadonlyArray<string>): Promise<CachePurgeOutcome> {
let response: Response;
try {
response = await fetch(config.controller.endpoint, {
method: 'POST',
headers: {'Content-Type': 'application/json', Authorization: `Bearer ${config.controller.token}`},
body: JSON.stringify({patterns, soft: false}),
redirect: 'manual',
signal: AbortSignal.timeout(config.controller.timeoutMs),
});
} catch (error) {
return {kind: 'failed', status: null, error};
}
FetchUtils.discardResponseBody(response.body, response.status);
if (response.ok) {
return {kind: 'purged'};
}
if (response.status === 400 || response.status === 422) {
return {kind: 'rejected', status: response.status};
}
return {kind: 'failed', status: response.status, error: null};
}
return {
async purge(prefixes: ReadonlyArray<string>): Promise<CachePurgeOutcome> {
const patterns = prefixes.map((prefix) => `${prefix}*`);
for (let start = 0; start < patterns.length; start += MAX_PATTERNS_PER_REQUEST) {
const outcome = await purgeChunk(patterns.slice(start, start + MAX_PATTERNS_PER_REQUEST));
if (outcome.kind !== 'purged') {
return outcome;
}
}
return {kind: 'purged'};
},
};
}
@@ -61,7 +61,7 @@ import {
InstanceConfigResponse,
InstanceConfigUpdateRequest,
type InstanceEmailSmtpTestRequest,
type PendingRegistrationResponse,
PendingRegistrationResponse,
type RegistrationUrlResponse,
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import {
@@ -1053,7 +1053,6 @@ function parseStoredRegistrationConfig(raw: string | null): InstanceRegistration
}
const RegistrationUrlSchema = InstanceConfigResponse.shape.registration.shape.urls.element;
const PendingRegistrationSchema = InstanceConfigResponse.shape.registration.shape.pending_registrations.element;
const StoredRegistrationTimestampSchema = z.iso
.datetime({offset: true})
.refine((value) => value === value.trim() && Number.isFinite(Date.parse(value)))
@@ -1086,9 +1085,9 @@ const StoredRegistrationUrlSchema = RegistrationUrlSchema.extend({
last_used_at: StoredRegistrationTimestampSchema.nullable().default(null),
last_used_by_user_id: StoredNullableStringSchema.pipe(StoredSnowflakeStringSchema.nullable()),
}) satisfies z.ZodType<InstanceRegistrationUrl>;
const StoredPendingRegistrationSchema = PendingRegistrationSchema.extend({
const StoredPendingRegistrationSchema = PendingRegistrationResponse.extend({
user_id: StoredSnowflakeStringSchema,
discriminator: PendingRegistrationSchema.shape.discriminator.default(0),
discriminator: PendingRegistrationResponse.shape.discriminator.default(0),
global_name: StoredNullableStringSchema,
email: StoredNullableStringSchema,
requested_at: StoredRegistrationTimestampSchema,
@@ -129,7 +129,7 @@ export async function transformPush(body: GitHubWebhook): Promise<RichEmbedReque
/This reverts commit (\w{40})\./g,
(_, hash) => `This reverts commit [\`${hash.substring(0, 7)}\`](${body.repository?.html_url}/commit/${hash}).`,
);
return `[\`${shortCommitId}\`](${commit.url}) ${commitMessage} - ${commit.author.name}`;
return `[\`${shortCommitId}\`](${body.repository?.html_url}/commit/${commit.id}) ${commitMessage} - ${commit.author.name}`;
})
.join('\n');
if (!body.compare) {
@@ -64,7 +64,11 @@ describe('processCachePurgeQueue', () => {
let previousMedia: string;
beforeEach(() => {
previousCachePurge = {adapter: Config.cachePurge.adapter, http: Config.cachePurge.http};
previousCachePurge = {
adapter: Config.cachePurge.adapter,
http: Config.cachePurge.http,
controller: Config.cachePurge.controller,
};
previousMedia = Config.endpoints.media;
Config.endpoints.media = MEDIA;
Config.cachePurge.adapter = 'http';
@@ -206,6 +206,7 @@ const UserAreaInner = observer(
}, [hasVoiceConnection]);
const wrapperClassName = styles.userAreaInnerWrapper;
const isPushToTalkEffective = Keybind.isPushToTalkEffective();
const isSelfMuted = isMuted || muteReason === 'self';
const microphoneState = selectUserAreaMicrophoneState({
effectiveAudioMuted: isMuted,
effectiveAudioDeafened: isDeafened,
@@ -214,7 +215,6 @@ const UserAreaInner = observer(
isPermissionMuted,
muteReason,
isPushToTalkEffective,
isPushToTalkHeld: Keybind.pushToTalkHeld,
isPushToMuteEffective: Keybind.isPushToMuteEffective(),
isPushToMuteHeld: Keybind.pushToMuteHeld,
});
@@ -224,7 +224,8 @@ const UserAreaInner = observer(
if (isGuildDeafened) return getVoiceDeafenedByModeratorsStatusLabel(i18n, true);
if (isGuildMuted) return i18n._(VOICE_MUTED_BY_MODERATORS_DESCRIPTOR);
if (isPermissionMuted || muteReason === 'permission') return i18n._(VOICE_NO_SPEAK_PERMISSION_DESCRIPTOR);
if (isPushToTalkEffective) return getPushToTalkHoldLabel(i18n, PUSH_TO_TALK_IS_ON_HOLD_TO_SPEAK_DESCRIPTOR);
if (isPushToTalkEffective && !isSelfMuted)
return getPushToTalkHoldLabel(i18n, PUSH_TO_TALK_IS_ON_HOLD_TO_SPEAK_DESCRIPTOR);
if (effectiveMuted) return i18n._(UNMUTE_MICROPHONE_DESCRIPTOR);
return i18n._(MUTE_MICROPHONE_DESCRIPTOR);
})();
@@ -232,7 +233,8 @@ const UserAreaInner = observer(
if (isGuildDeafened) return getVoiceDeafenedByModeratorsStatusLabel(i18n, true);
if (isGuildMuted) return i18n._(VOICE_MUTED_BY_MODERATORS_DESCRIPTOR);
if (isPermissionMuted || muteReason === 'permission') return i18n._(VOICE_NO_SPEAK_PERMISSION_DESCRIPTOR);
if (isPushToTalkEffective) return getPushToTalkHoldLabel(i18n, PUSH_TO_TALK_IS_ON_HOLD_TO_SPEAK_DESCRIPTOR);
if (isPushToTalkEffective && !isSelfMuted)
return getPushToTalkHoldLabel(i18n, PUSH_TO_TALK_IS_ON_HOLD_TO_SPEAK_DESCRIPTOR);
if (effectiveMuted) return i18n._(UNMUTE_MICROPHONE_DESCRIPTOR);
return i18n._(MUTE_MICROPHONE_DESCRIPTOR);
})();
@@ -0,0 +1,82 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
selectUserAreaMicrophoneState,
type UserAreaMicrophoneSignals,
} from '@app/features/app/components/layout/UserAreaState';
import {describe, expect, it} from 'vitest';
function signals(overrides: Partial<UserAreaMicrophoneSignals>): UserAreaMicrophoneSignals {
return {
effectiveAudioMuted: false,
effectiveAudioDeafened: false,
isGuildMuted: false,
isGuildDeafened: false,
isPermissionMuted: false,
muteReason: null,
isPushToTalkEffective: false,
isPushToMuteEffective: false,
isPushToMuteHeld: false,
...overrides,
};
}
describe('selectUserAreaMicrophoneState', () => {
it('shows the idle push to talk gate as unmuted without locking the toggle', () => {
expect(
selectUserAreaMicrophoneState(signals({isPushToTalkEffective: true, muteReason: 'voice_push_to_talk'})),
).toEqual({effectiveMuted: false, muteToggleLocked: false});
});
it('shows a self-muted push to talk user as muted', () => {
expect(
selectUserAreaMicrophoneState(
signals({isPushToTalkEffective: true, effectiveAudioMuted: true, muteReason: 'self'}),
),
).toEqual({effectiveMuted: true, muteToggleLocked: false});
});
it('shows a push to talk user muted by the failure latch as muted', () => {
expect(selectUserAreaMicrophoneState(signals({isPushToTalkEffective: true, muteReason: 'self'}))).toEqual({
effectiveMuted: true,
muteToggleLocked: false,
});
});
it('lets a self-deafened push to talk user click the toggle', () => {
expect(
selectUserAreaMicrophoneState(
signals({isPushToTalkEffective: true, effectiveAudioMuted: true, effectiveAudioDeafened: true}),
),
).toEqual({effectiveMuted: true, muteToggleLocked: false});
});
it('locks the toggle for server and permission mutes in push to talk', () => {
for (const overrides of [
{isGuildMuted: true, muteReason: 'guild' as const},
{isGuildDeafened: true},
{isPermissionMuted: true, muteReason: 'permission' as const},
]) {
expect(selectUserAreaMicrophoneState(signals({isPushToTalkEffective: true, ...overrides}))).toEqual({
effectiveMuted: true,
muteToggleLocked: true,
});
}
});
it('keeps voice activity and push to mute behaviour unchanged', () => {
expect(selectUserAreaMicrophoneState(signals({}))).toEqual({effectiveMuted: false, muteToggleLocked: false});
expect(selectUserAreaMicrophoneState(signals({effectiveAudioMuted: true, muteReason: 'self'}))).toEqual({
effectiveMuted: true,
muteToggleLocked: false,
});
expect(selectUserAreaMicrophoneState(signals({isPushToMuteEffective: true, isPushToMuteHeld: true}))).toEqual({
effectiveMuted: true,
muteToggleLocked: false,
});
expect(selectUserAreaMicrophoneState(signals({isGuildMuted: true}))).toEqual({
effectiveMuted: true,
muteToggleLocked: true,
});
});
});
@@ -10,7 +10,6 @@ export interface UserAreaMicrophoneSignals {
isPermissionMuted: boolean;
muteReason: UserAreaMuteReason;
isPushToTalkEffective: boolean;
isPushToTalkHeld: boolean;
isPushToMuteEffective: boolean;
isPushToMuteHeld: boolean;
}
@@ -32,13 +31,13 @@ export function selectUserAreaMicrophoneState(signals: UserAreaMicrophoneSignals
if (hardMuted) {
return {
effectiveMuted: true,
muteToggleLocked: muteToggleLocked || signals.isPushToTalkEffective,
muteToggleLocked,
};
}
if (signals.isPushToTalkEffective) {
return {
effectiveMuted: !signals.isPushToTalkHeld,
muteToggleLocked: true,
effectiveMuted: signals.effectiveAudioMuted || signals.muteReason === 'self',
muteToggleLocked,
};
}
return {
+11 -1
View File
@@ -24,6 +24,16 @@ if (!parsedBuildInfo.success) {
}
const buildInfo = parsedBuildInfo.output;
const SERVED_RELEASE_CHANNEL_META_SELECTOR = 'meta[name="fluxer-release-channel"]';
function servedReleaseChannel(): 'stable' | 'canary' | null {
if (typeof document === 'undefined') {
return null;
}
const value = document.querySelector<HTMLMetaElement>(SERVED_RELEASE_CHANNEL_META_SELECTOR)?.content;
return value === 'stable' || value === 'canary' ? value : null;
}
function clientReleaseChannel(value: (typeof buildInfo)['PUBLIC_RELEASE_CHANNEL']): 'stable' | 'canary' {
switch (value) {
case 'stable':
@@ -36,5 +46,5 @@ function clientReleaseChannel(value: (typeof buildInfo)['PUBLIC_RELEASE_CHANNEL'
export default {
PUBLIC_BUILD_VERSION: buildInfo.PUBLIC_BUILD_VERSION,
PUBLIC_RELEASE_CHANNEL: clientReleaseChannel(buildInfo.PUBLIC_RELEASE_CHANNEL),
PUBLIC_RELEASE_CHANNEL: servedReleaseChannel() ?? clientReleaseChannel(buildInfo.PUBLIC_RELEASE_CHANNEL),
} as const;
@@ -521,7 +521,7 @@ class KeybindManager {
}),
);
}
this.disposers.push(reactToPushToTalkModeChanges((options) => MediaEngine.handlePushToTalkModeChange(options)));
this.disposers.push(reactToPushToTalkModeChanges(() => MediaEngine.handlePushToTalkModeChange()));
this.disposers.push(
reaction(
() => ({entries: this.buildHoldBindingEntries(), routing: this.getGlobalHoldRouting()}),
@@ -229,7 +229,7 @@ describe('push-to-talk mode reconcile', () => {
dispose();
});
it('flips push-to-talk only on settled states and preserves self-mute when it does', () => {
it('flips push-to-talk only on settled states and reconciles once per flip', () => {
const {Keybind, AppStorage, reactToPushToTalkModeChanges} = modules;
const reconcile = vi.fn();
const dispose = reactToPushToTalkModeChanges(reconcile);
@@ -238,7 +238,7 @@ describe('push-to-talk mode reconcile', () => {
emit(status);
expect(Keybind.isPushToTalkEffective()).toBe(effective);
expect(reconcile).toHaveBeenCalledTimes(1);
expect(reconcile).toHaveBeenLastCalledWith({preserveSelfMute: true});
expect(reconcile).toHaveBeenLastCalledWith();
};
expectFlip(portalStatus('declined'), false);
expect(AppStorage.getJSON(PORTAL_ASSIGNED_ACTIONS_KEY)).toEqual([]);
@@ -251,8 +251,12 @@ describe('push-to-talk mode reconcile', () => {
expectFlip(portalStatus('bound'), true);
reconcile.mockClear();
Keybind.setTransmitMode('voice_activity');
expect(reconcile).toHaveBeenLastCalledWith({preserveSelfMute: false});
expect(Keybind.isPushToTalkEffective()).toBe(false);
expect(reconcile).toHaveBeenCalledTimes(1);
expect(reconcile).toHaveBeenLastCalledWith();
Keybind.setTransmitMode('voice_push_to_talk');
expect(Keybind.isPushToTalkEffective()).toBe(true);
expect(reconcile).toHaveBeenCalledTimes(2);
dispose();
});
});
@@ -3,14 +3,13 @@
import Keybind from '@app/features/input/state/InputKeybind';
import {compareStructural, reaction} from 'mobx';
export function reactToPushToTalkModeChanges(onChange: (options: {preserveSelfMute: boolean}) => void): () => void {
export function reactToPushToTalkModeChanges(onChange: () => void): () => void {
return reaction(
() => ({
transmitMode: Keybind.transmitMode,
pushToTalk: Keybind.isPushToTalkEffective(),
pushToMute: Keybind.isPushToMuteEffective(),
}),
(current, previous) => onChange({preserveSelfMute: current.transmitMode === previous.transmitMode}),
() => onChange(),
{equals: compareStructural},
);
}
+18 -109
View File
@@ -25,8 +25,7 @@ import {
type UpdaterMachineEvent,
type UpdaterMachineSnapshot,
} from '@app/features/updater/state/UpdaterStateMachine';
import {buildLinuxManualUpdateOptions} from '@app/features/updater/utils/LinuxManualUpdateOptions';
import type {UpdaterEvent as NativeUpdaterEvent, UpdaterDownloadOption} from '@app/types/electron.d';
import type {UpdaterEvent as NativeUpdaterEvent} from '@app/types/electron.d';
import {OFFICIAL_WEB_APP_HOSTS} from '@fluxer/instance_bootstrap/src/OfficialWebAppHosts';
import {makeAutoObservable, runInAction} from 'mobx';
@@ -41,7 +40,6 @@ type UpdaterEvent =
context: UpdaterContext;
version: string | null;
downloadUrl?: string;
downloadOptions?: Array<UpdaterDownloadOption>;
}
| {
type: 'not-available';
@@ -66,7 +64,6 @@ type UpdaterEvent =
const logger = new Logger('Updater');
const CHECK_INTERVAL_MS = 5 * 60 * 1000;
const MIN_CHECK_INTERVAL_MS = 60 * 1000;
const MANUAL_DOWNLOAD_REFRESH_TIMEOUT_MS = 5 * 1000;
const WEB_CHECK_TIMEOUT_MS = 15 * 1000;
const NATIVE_CHECK_TIMEOUT_MS = 30 * 1000;
const VERSION_ENDPOINT = '/version.json';
@@ -120,7 +117,6 @@ function normalizeUpdaterEvent(event: NativeUpdaterEvent): UpdaterEvent | null {
context,
version: event.version ?? null,
downloadUrl: event.downloadUrl,
downloadOptions: event.downloadOptions,
};
case 'not-available':
return {type: 'not-available', context};
@@ -151,7 +147,7 @@ class Updater {
private snapshot: UpdaterMachineSnapshot = createUpdaterMachineSnapshot();
currentVersion: string | null = null;
channel: string | null = null;
private desktopArch: string | null = null;
private flatpakAppId: string | null = null;
private isNative: boolean;
private backgroundCheckStarted = false;
private backgroundCheckInterval: number | null = null;
@@ -164,7 +160,6 @@ class Updater {
private olderShellUpdateDownloaded = false;
private olderShellInstallWhenDownloaded = false;
private desktopUpdateStarting = false;
private pendingManualDownloadRefreshes = 0;
private checkInProgress = false;
constructor() {
@@ -192,10 +187,6 @@ class Updater {
return this.snapshot.context.nativeManualDownloadUrl;
}
get nativeManualDownloadOptions(): ReadonlyArray<UpdaterDownloadOption> {
return this.snapshot.context.nativeManualDownloadOptions;
}
private get nativeCheckFailed(): boolean {
return this.snapshot.context.nativeCheckFailed;
}
@@ -260,11 +251,16 @@ class Updater {
private async bootstrapNative(): Promise<void> {
try {
const info = await getClientInfo();
const [info, desktopInfo] = await Promise.all([
getClientInfo(),
getElectronAPI()
?.getDesktopInfo()
.catch(() => null),
]);
runInAction(() => {
this.currentVersion = info.desktopVersion ?? null;
this.channel = info.desktopChannel ?? null;
this.desktopArch = info.desktopArch ?? info.arch ?? null;
this.flatpakAppId = desktopInfo?.flatpak === true ? (desktopInfo.flatpakAppId ?? null) : null;
});
} catch (error) {
logger.warn('Failed to read desktop info', error);
@@ -376,35 +372,22 @@ class Updater {
}
private handleNativeEvent(event: UpdaterEvent): void {
const isManualDownloadRefreshResult =
event.context === 'user' &&
this.pendingManualDownloadRefreshes > 0 &&
(event.type === 'available' ||
event.type === 'not-available' ||
event.type === 'error' ||
event.type === 'unsupported');
if (isManualDownloadRefreshResult) {
this.pendingManualDownloadRefreshes -= 1;
}
const isUserCheck = event.context === 'user' && !isManualDownloadRefreshResult;
const isUserCheck = event.context === 'user';
const shouldShowImmediateUserResult = isUserCheck && !this.checkInProgress;
switch (event.type) {
case 'checking':
this.transition({type: 'check.started'});
break;
case 'available': {
const manualDownloadOptions = this.resolveManualNativeDownloadOptions(event, event.downloadOptions ?? []);
case 'available':
this.transition({
type: 'native.available',
version: event.version ?? null,
downloadUrl: manualDownloadOptions[0]?.url ?? event.downloadUrl ?? null,
downloadOptions: manualDownloadOptions,
downloadUrl: getElectronAPI()?.platform === 'linux' ? DESKTOP_DOWNLOAD_URL : (event.downloadUrl ?? null),
});
if (shouldShowImmediateUserResult) {
this.showCurrentUpdateState();
}
break;
}
case 'not-available':
this.transition({type: 'native.notAvailable', now: Date.now()});
if (shouldShowImmediateUserResult) {
@@ -442,22 +425,6 @@ class Updater {
}
}
private resolveManualNativeDownloadOptions(
event: Extract<UpdaterEvent, {type: 'available'}>,
options: ReadonlyArray<UpdaterDownloadOption>,
): ReadonlyArray<UpdaterDownloadOption> {
if (getElectronAPI()?.platform !== 'linux') {
return options;
}
return buildLinuxManualUpdateOptions({
downloadUrl: event.downloadUrl ?? options[0]?.url ?? null,
channel: this.channel ?? Config.PUBLIC_RELEASE_CHANNEL,
arch: this.desktopArch,
version: event.version ?? null,
knownOptions: options,
});
}
private startBackgroundChecks(): void {
if (this.backgroundCheckStarted) return;
this.backgroundCheckStarted = true;
@@ -601,11 +568,7 @@ class Updater {
await this.startDesktopUpdate();
return;
}
if (this.isNative && this.nativeUnsupported?.reason === 'managed-package' && !this.updateInfo.web.available) {
showUpdaterModal((modals) => modals.pushUnsupportedUpdateModal('managed-package'));
return;
}
if (this.isNative && this.nativeManualUpdateAvailable && !this.nativeUnsupported) {
if (this.isNative && this.nativeManualUpdateAvailable) {
this.showManualNativeUpdateModal();
return;
}
@@ -617,15 +580,7 @@ class Updater {
}
if (this.isNative && this.updateInfo.native.available) {
logger.info('Native update is available but not installable in-app; opening desktop downloads...');
const url = this.nativeManualDownloadUrl ?? this.nativeUnsupported?.downloadUrl ?? null;
if (url) {
await openExternalUrl(url);
} else if (this.nativeUnsupported) {
const {reason, downloadUrl} = this.nativeUnsupported;
showUpdaterModal((modals) => modals.pushUnsupportedUpdateModal(reason, downloadUrl));
} else {
await openExternalUrl(DESKTOP_DOWNLOAD_URL);
}
await openExternalUrl(DESKTOP_DOWNLOAD_URL);
}
}
@@ -663,63 +618,17 @@ class Updater {
private showManualNativeUpdateModal(): void {
const version = this.updateInfo.native.version;
const options = this.nativeManualDownloadOptions;
if (options.length > 0) {
const currentVersion = this.currentVersion;
showUpdaterModal((modals) =>
modals.pushManualUpdateAvailableModal({
currentVersion,
version,
options,
onDownload: (option) => this.downloadManualNativeUpdateOption(option),
}),
);
if (getElectronAPI()?.platform === 'linux') {
const flatpakAppId = this.flatpakAppId;
showUpdaterModal((modals) => modals.pushManagedShellUpdateModal({version, flatpakAppId}));
return;
}
const url = this.nativeManualDownloadUrl ?? this.nativeUnsupported?.downloadUrl ?? DESKTOP_DOWNLOAD_URL;
const url = this.nativeManualDownloadUrl ?? DESKTOP_DOWNLOAD_URL;
showUpdaterModal((modals) =>
modals.pushUpdateAvailableModal(version, () => this.downloadManualNativeUpdateOrOpen(url)),
);
}
private async refreshManualNativeDownloadOption(option: UpdaterDownloadOption): Promise<UpdaterDownloadOption> {
if (this.checkInProgress) {
return option;
}
this.checkInProgress = true;
this.transition({type: 'check.started'});
let timeoutId: number | undefined;
const timedOut = new Promise<boolean>((resolve) => {
timeoutId = window.setTimeout(() => resolve(false), MANUAL_DOWNLOAD_REFRESH_TIMEOUT_MS);
});
try {
this.pendingManualDownloadRefreshes += 1;
const checked = await Promise.race([this.checkNativeUpdate('user'), timedOut]);
if (!checked) {
return option;
}
return this.nativeManualDownloadOptions.find((candidate) => candidate.format === option.format) ?? option;
} finally {
window.clearTimeout(timeoutId);
this.checkInProgress = false;
this.transition({type: 'check.finished', now: Date.now()});
}
}
private async downloadManualNativeUpdateOption(option: UpdaterDownloadOption): Promise<void> {
if (this.manualNativeDownloadInFlight) {
return;
}
this.transition({type: 'manualDownload.started'});
let currentOption = option;
try {
currentOption = await this.refreshManualNativeDownloadOption(option);
} finally {
this.transition({type: 'manualDownload.finished'});
}
await this.downloadManualNativeUpdateOrOpen(currentOption.url, currentOption.suggestedName, currentOption.sha256);
}
private async downloadManualNativeUpdateOrOpen(
url: string,
suggestedName?: string,
@@ -5,9 +5,14 @@ import {usesUniqueUsernames} from '@app/features/app/utils/AccountIdentityFeatur
import {normalizeInstanceDomain} from '@app/features/auth/flow/instance_selector/InstanceDirectoryStorage';
import {parseAccountStorageKey} from '@app/features/auth/state/AccountStorageKey';
import type {Account} from '@app/features/platform/state/AuthSession';
import {formatTagForStreamerMode, getDisplayName} from '@app/features/user/utils/NicknameUtils';
import {shouldShowDiscriminator} from '@app/features/user/utils/UserTagUtils';
import {
formatNameForStreamerMode,
formatTagForStreamerMode,
getDisplayName,
} from '@app/features/user/utils/NicknameUtils';
import {formatUserTag, shouldShowDiscriminator} from '@app/features/user/utils/UserTagUtils';
import {msg} from '@lingui/core/macro';
import {noteText} from '../theme/fonts/ScriptFontLoader';
export const ACCOUNT_DETAILS_UNAVAILABLE_DESCRIPTOR = msg({
message: 'Account details unavailable',
@@ -18,6 +23,7 @@ export type AccountDisplayLabels =
| {
readonly available: true;
readonly displayLabel: string;
readonly usernameLabel: string;
readonly tagLabel: string;
readonly discriminatorLabel: string | null;
}
@@ -32,14 +38,17 @@ export function getAccountDisplayLabels(account: Account): AccountDisplayLabels
}
const displayLabel = getDisplayName(userData);
const discriminator = userData.discriminator;
const usernameLabel = formatNameForStreamerMode(userData.username);
noteText(usernameLabel);
const uniqueUsernames = account.instance != null && usesUniqueUsernames(account.instance.features);
if (!shouldShowDiscriminator(userData, uniqueUsernames)) {
return {available: true, displayLabel, tagLabel: displayLabel, discriminatorLabel: null};
return {available: true, displayLabel, usernameLabel, tagLabel: displayLabel, discriminatorLabel: null};
}
return {
available: true,
displayLabel,
tagLabel: formatTagForStreamerMode(`${displayLabel}#${discriminator}`),
usernameLabel,
tagLabel: formatTagForStreamerMode(formatUserTag(userData, uniqueUsernames)),
discriminatorLabel: formatTagForStreamerMode(`#${discriminator}`),
};
}
@@ -13,6 +13,7 @@ import {useCallback} from 'react';
interface AccountDisplayIdentityView {
readonly isAvailable: boolean;
readonly displayLabel: string;
readonly usernameLabel: string;
readonly tagLabel: string;
readonly discriminatorLabel: string | null;
}
@@ -22,11 +23,18 @@ function createAccountDisplayIdentityView(
unavailableLabel: string,
): AccountDisplayIdentityView {
if (!labels.available) {
return {isAvailable: false, displayLabel: unavailableLabel, tagLabel: unavailableLabel, discriminatorLabel: null};
return {
isAvailable: false,
displayLabel: unavailableLabel,
usernameLabel: unavailableLabel,
tagLabel: unavailableLabel,
discriminatorLabel: null,
};
}
return {
isAvailable: true,
displayLabel: labels.displayLabel,
usernameLabel: labels.usernameLabel,
tagLabel: labels.tagLabel,
discriminatorLabel: labels.discriminatorLabel,
};
@@ -64,7 +72,7 @@ export function AccountIdentityText({
const discriminatorLabel = identityView.discriminatorLabel;
return (
<>
{identityView.displayLabel}
{identityView.usernameLabel}
{discriminatorLabel == null ? null : (
<span className={discriminatorClassName} data-flx="auth.accounts.account-identity.discriminator">
{discriminatorLabel}
@@ -22,15 +22,6 @@ const UPDATING_DESCRIPTOR = msg({
comment:
'Tooltip and accessible label on the channel header updater icon in the desktop app while an update the user started is downloading. The app reloads by itself when it is done.',
});
const CHOOSE_LINUX_PACKAGE_DESCRIPTOR = msg({
message: 'Desktop update {version} available. Choose a Linux package.',
comment: 'Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.',
});
const CHOOSE_LINUX_PACKAGE_2_DESCRIPTOR = msg({
message: 'Desktop update available. Choose a Linux package.',
comment:
'Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.',
});
const CLICK_TO_RELOAD_AND_UPDATE_DESCRIPTOR = msg({
message: 'Reload {productName} to use web update {version}',
comment:
@@ -69,8 +60,6 @@ export const UpdaterIcon = observer(() => {
let tooltip: string;
if (affordance === 'updating') {
tooltip = i18n._(UPDATING_DESCRIPTOR);
} else if (affordance === 'manual' && Updater.nativeManualDownloadOptions.length > 0) {
tooltip = version ? i18n._(CHOOSE_LINUX_PACKAGE_DESCRIPTOR, {version}) : i18n._(CHOOSE_LINUX_PACKAGE_2_DESCRIPTOR);
} else if (affordance !== 'web') {
tooltip = i18n._(UPDATE_AVAILABLE_DESCRIPTOR);
} else {
@@ -0,0 +1,197 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {beforeEach, describe, expect, it, vi} from 'vitest';
const playSound = vi.fn();
const localVoiceState = {
selfMute: false,
selfDeaf: false,
getSelfMute: () => localVoiceState.selfMute,
getSelfDeaf: () => localVoiceState.selfDeaf,
updateSelfMute: (muted: boolean) => {
localVoiceState.selfMute = muted;
},
toggleSelfMute: () => {
if (localVoiceState.selfDeaf) {
localVoiceState.selfDeaf = false;
localVoiceState.selfMute = false;
return;
}
localVoiceState.selfMute = !localVoiceState.selfMute;
},
};
const permissionMuted = {active: false};
const microphoneFailureLatch = {active: false};
vi.mock('@app/features/input/state/InputKeybind', () => ({
default: {isPushToTalkEffective: () => true, pushToTalkHeld: true},
}));
const updateVoiceStateExplicit = vi.fn();
const gatewayVoiceStates: Record<
string,
{
guild_id: string;
channel_id: string;
self_mute: boolean;
self_deaf: boolean;
self_video: boolean;
self_stream: boolean;
}
> = {};
vi.mock('@app/features/gateway/transport/GatewaySessionPool', () => ({
default: {foregroundConnection: {socket: {updateVoiceStateExplicit}}},
}));
vi.mock('@app/features/ui/commands/SoundCommands', () => ({
playSound: (...args: Array<unknown>) => playSound(...args),
}));
vi.mock('@app/features/permissions/system/commands/MacPermissionsModalCommands', () => ({
handleMediaPermissionBlocked: () => undefined,
}));
vi.mock('@app/features/permissions/system/state/MediaPermission', () => ({
default: {
getMicrophonePermissionState: () => 'granted',
isMicrophoneGranted: () => true,
isMicrophoneExplicitlyDenied: () => false,
},
}));
vi.mock('@app/features/permissions/system/utils/NativePermissions', () => ({
ensureNativePermission: async () => 'granted',
}));
vi.mock('@app/features/ui/utils/NativeUtils', () => ({isDesktop: () => false}));
vi.mock('@app/features/voice/engine/MediaEngineFacade', () => ({
default: {
room: null,
guildId: '1',
channelId: '2',
connectionId: 'local',
getVoiceStateByConnectionId: (connectionId: string) => gatewayVoiceStates[connectionId] ?? null,
isMicrophoneFailureLatched: () => microphoneFailureLatch.active,
clearMicrophoneFailureLatch: () => {
microphoneFailureLatch.active = false;
},
getCurrentUserVoiceState: () => null,
syncLocalVoiceStateWithServer: () => undefined,
},
}));
vi.mock('@app/features/voice/state/LocalVoiceState', () => ({default: localVoiceState}));
vi.mock('@app/features/voice/utils/VoicePermissionUtils', () => ({
isVoicePermissionMuteActive: () => permissionMuted.active,
}));
const {bulkMuteConnections, getCurrentSelfMute, getSelfMuteForConnection, toggleSelfMute, toggleSelfMuteForConnection} =
await import('@app/features/devtools/commands/VoiceStateCommands');
const {SoundType} = await import('@app/features/notification/utils/SoundUtils');
describe('toggleSelfMute with push to talk enabled', () => {
beforeEach(() => {
localVoiceState.selfMute = false;
localVoiceState.selfDeaf = false;
permissionMuted.active = false;
microphoneFailureLatch.active = false;
playSound.mockClear();
});
it('mutes and unmutes', async () => {
await toggleSelfMute(null);
expect(localVoiceState.selfMute).toBe(true);
expect(playSound).toHaveBeenLastCalledWith(SoundType.Mute);
await toggleSelfMute(null);
expect(localVoiceState.selfMute).toBe(false);
expect(playSound).toHaveBeenLastCalledWith(SoundType.Unmute);
});
it('undeafens like voice activity mode', async () => {
localVoiceState.selfMute = true;
localVoiceState.selfDeaf = true;
await toggleSelfMute(null);
expect(localVoiceState.selfDeaf).toBe(false);
expect(localVoiceState.selfMute).toBe(false);
});
it('keeps a permission-muted user muted', async () => {
localVoiceState.selfMute = true;
permissionMuted.active = true;
await toggleSelfMute(null);
expect(localVoiceState.selfMute).toBe(true);
});
});
describe('device-scoped self-mute with push to talk enabled', () => {
beforeEach(() => {
localVoiceState.selfMute = false;
localVoiceState.selfDeaf = false;
permissionMuted.active = false;
microphoneFailureLatch.active = false;
playSound.mockClear();
updateVoiceStateExplicit.mockClear();
const idle = {
guild_id: '1',
channel_id: '2',
self_mute: true,
self_deaf: false,
self_video: false,
self_stream: false,
};
gatewayVoiceStates.local = {...idle};
gatewayVoiceStates.other = {...idle, self_mute: false};
});
it('reads the local device from local self-mute instead of the push-to-talk gateway value', () => {
expect(getSelfMuteForConnection('local')).toBe(false);
localVoiceState.selfMute = true;
gatewayVoiceStates.local.self_mute = false;
expect(getSelfMuteForConnection('local')).toBe(true);
expect(getSelfMuteForConnection('other')).toBe(false);
});
it('toggles the local device through local self-mute without a direct gateway write', async () => {
await toggleSelfMuteForConnection('local');
expect(localVoiceState.selfMute).toBe(true);
expect(playSound).toHaveBeenLastCalledWith(SoundType.Mute);
await toggleSelfMuteForConnection('local');
expect(localVoiceState.selfMute).toBe(false);
expect(playSound).toHaveBeenLastCalledWith(SoundType.Unmute);
expect(updateVoiceStateExplicit).not.toHaveBeenCalled();
});
it('toggles another device through the gateway without touching local self-mute', async () => {
await toggleSelfMuteForConnection('other');
expect(updateVoiceStateExplicit).toHaveBeenCalledTimes(1);
expect(updateVoiceStateExplicit).toHaveBeenLastCalledWith(
expect.objectContaining({connection_id: 'other', self_mute: true}),
);
expect(localVoiceState.selfMute).toBe(false);
});
it('reports a latched microphone failure as self-muted and unmutes it on toggle', async () => {
microphoneFailureLatch.active = true;
expect(getCurrentSelfMute()).toBe(true);
expect(getSelfMuteForConnection('local')).toBe(true);
await toggleSelfMuteForConnection('local');
expect(microphoneFailureLatch.active).toBe(false);
expect(getCurrentSelfMute()).toBe(false);
expect(playSound).toHaveBeenLastCalledWith(SoundType.Unmute);
});
it('bulk mutes the local device through local self-mute and other devices through the gateway', async () => {
await bulkMuteConnections(['local', 'other'], true);
expect(localVoiceState.selfMute).toBe(true);
expect(updateVoiceStateExplicit).toHaveBeenCalledTimes(1);
expect(updateVoiceStateExplicit).toHaveBeenLastCalledWith(
expect.objectContaining({connection_id: 'other', self_mute: true}),
);
updateVoiceStateExplicit.mockClear();
gatewayVoiceStates.other.self_mute = true;
microphoneFailureLatch.active = true;
await bulkMuteConnections(['local', 'other'], false);
expect(localVoiceState.selfMute).toBe(false);
expect(microphoneFailureLatch.active).toBe(false);
expect(updateVoiceStateExplicit).toHaveBeenCalledTimes(1);
expect(updateVoiceStateExplicit).toHaveBeenLastCalledWith(
expect.objectContaining({connection_id: 'other', self_mute: false}),
);
});
});
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import GatewaySessions from '@app/features/gateway/transport/GatewaySessionPool';
import Keybind from '@app/features/input/state/InputKeybind';
import {SoundType} from '@app/features/notification/utils/SoundUtils';
import {handleMediaPermissionBlocked} from '@app/features/permissions/system/commands/MacPermissionsModalCommands';
import MediaPermission from '@app/features/permissions/system/state/MediaPermission';
@@ -119,14 +118,10 @@ const requestMicrophoneDirectly = async (): Promise<boolean> => {
};
export async function toggleSelfMute(_guildId: string | null = null): Promise<void> {
if (Keybind.isPushToTalkEffective()) {
logger.debug('Ignoring self-mute toggle: push-to-talk controls the microphone');
return;
}
const room = MediaEngine.room;
const connectedChannelId = MediaEngine.channelId;
const microphoneFailureLatched = MediaEngine.isMicrophoneFailureLatched();
const currentMute = LocalVoiceState.getSelfMute() || microphoneFailureLatched;
const currentMute = getCurrentSelfMute();
const currentDeaf = LocalVoiceState.getSelfDeaf();
const willUndeafen = currentDeaf;
const willUnmute = currentMute;
@@ -238,7 +233,20 @@ const updateConnectionsProperty = async (
}
};
export function getCurrentSelfMute(): boolean {
return LocalVoiceState.getSelfMute() || MediaEngine.isMicrophoneFailureLatched();
}
export function getSelfMuteForConnection(connectionId: string): boolean {
if (connectionId === MediaEngine.connectionId) return getCurrentSelfMute();
return MediaEngine.getVoiceStateByConnectionId(connectionId)?.self_mute ?? false;
}
export async function toggleSelfMuteForConnection(connectionId: string): Promise<void> {
if (connectionId === MediaEngine.connectionId) {
await toggleSelfMute(null);
return;
}
const voiceState = MediaEngine.getVoiceStateByConnectionId(connectionId);
if (!voiceState) return;
const target = !voiceState.self_mute;
@@ -265,7 +273,16 @@ export async function turnOffStreamForConnection(connectionId: string): Promise<
}
export async function bulkMuteConnections(connectionIds: Array<string>, mute: boolean = true): Promise<void> {
await updateConnectionsProperty(connectionIds, 'self_mute', mute);
const currentConnectionId = MediaEngine.connectionId;
if (currentConnectionId && connectionIds.includes(currentConnectionId)) {
if (!mute) MediaEngine.clearMicrophoneFailureLatch();
LocalVoiceState.updateSelfMute(mute);
}
await updateConnectionsProperty(
connectionIds.filter((connectionId) => connectionId !== currentConnectionId),
'self_mute',
mute,
);
}
export async function bulkDeafenConnections(connectionIds: Array<string>, deafen: boolean = true): Promise<void> {
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "يحتاج {PRODUCT_NAME} إلى إعادة التشغيل لتطبيق
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "يحتاج {PRODUCT_NAME} إلى إعادة التشغيل لتعطيل تسريع الأجهزة في Chromium. لا تستخدم هذا الخيار إلا عند معالجة مشكلات في الرسوميات أو ارتفاع استخدام وحدة معالجة الرسوميات (GPU)."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "يتوفر {productName} الإصدار {version}. قم بتحديثه من مركز البرامج الخاص بك."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "الإصدار {version} من {productName} متاح. قم بتحديثه باستخدام مدير الحزم الخاص بك، أو قم بتنزيل الإصدار الجديد."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "بوت مفيد يقوم بأشياء مذهلة!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "اسم مضيف، مثل {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "يتوفر تحديث لتطبيق سطح المكتب على Linux. اختر تنسيق الحزمة لهذا النظام وسيحفظه {productName} محليًا."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "السمع معطّل"
msgid "Deafened by moderators"
msgstr "السمع معطّل من قبل المشرفين"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "حزمة DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "إعدادات الإشعارات الافتراضية"
msgid "Default notifications"
msgstr "الإشعارات الافتراضية"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "جهاز الإخراج الافتراضي"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "تم حظر إشعارات سطح المكتب. يمكنك تمكينه
msgid "Desktop startup"
msgstr "بدء تشغيل سطح المكتب"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "يتوفر تحديث سطح المكتب {version}. اختر حزمة Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "يتوفر تحديث لتطبيق سطح المكتب"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "يتوفر تحديث لتطبيق سطح المكتب. اختر حزمة Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "صوت الجهاز فقط"
msgid "Device details"
msgstr "تفاصيل الجهاز"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "الجهاز غير متصل"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "تنزيل المثبّت"
msgid "Download media"
msgstr "تنزيل الوسائط"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "تنزيل الحزمة"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "النظام بأكمله"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "صوت النظام بالكامل"
@@ -15617,6 +15611,10 @@ msgstr "متابعة"
msgid "Following master • {effectiveValue}"
msgstr "يتبع مستوى الصوت الرئيسي • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "يتبع إعدادات الصوت في نظام Windows لديك"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "ثبّته من قائمة متصفحك."
msgid "Install the new app"
msgstr "تثبيت التطبيق الجديد"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "مثبّت"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "تطبيق Linux"
msgid "Linux default"
msgstr "الافتراضي في Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "حزمة لينكس"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "أقصى حماية للمساحات الملائمة للعائلة"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "قد يسبب مشكلات توافق لدى المشاهدين. نعمل على تحسين ذلك."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "قد يتضمن صوت المكالمة من تطبيقات المزج"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "ستتوقف المواضيع الجديدة عن الظهور في قا
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "لا يمكن للمستخدمين الجدد الانضمام الآن. لا يزال بإمكانك إنشاء حساب أو تسجيل الدخول، ثم إعادة المحاولة باستخدام هذا الرابط لاحقًا."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "إصدار جديد"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "فتح الإعدادات"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "فتح مركز البرامج"
@@ -25337,6 +25326,11 @@ msgstr "تشغيل."
msgid "Playback"
msgstr "التشغيل"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "أجهزة التشغيل"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "مربع اختيار دائري"
msgid "Rows per page"
msgstr "الصفوف لكل صفحة"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "حزمة RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "اضغط على \"مشاركة\"، ثم \"إضافة إلى الشاشة
msgid "Tap to add a note"
msgstr "اضغط لإضافة ملاحظة"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "أرشيف tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "يتم ترقية الاتصال إلى TLS فقط إذا كان الخ
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "تعذر تنزيل تحديث سطح المكتب. حاول مرة أخرى من زر التحديث عندما يصبح اتصالك مستقرًا."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "حُفظ الملف الذي تم تنزيله على جهاز الكمبيوتر. ثبّته باستخدام مدير الحزم الذي تستخدمه عادةً."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "حتى 4K بمعدل 60 إطارًا في الثانية"
msgid "Up to 720p at 30 FPS"
msgstr "حتى 720p بمعدل 30 إطارًا في الثانية"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "تحديث {appName} من مركز البرامج الخاص بك."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "تحديث {appName} الآن"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "حدّث {appName} باستخدام مدير الحزم الخاص بك، أو قم بتنزيل الإصدار الجديد."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
@@ -883,6 +883,7 @@
"Decide how premium limits apply to people on this instance.",
"Default hide after inactivity",
"Default layout",
"Default output device",
"Default reaction",
"Default sort order",
"Delete other members' messages in this channel. Pinning is controlled separately.",
@@ -899,6 +900,7 @@
"Details: {reason}",
"Device audio ({deviceLabel})",
"Device audio only",
"Device not connected",
"Device volume",
"Direct connection. Media is encrypted between participants.",
"Disable direct messages and friend requests",
@@ -983,6 +985,7 @@
"Followed channel {currentName}",
"Followed channels",
"Following",
"Follows your Windows sound settings",
"Footnote about custom tags",
"For push-to-mute, use a single key without Ctrl, Alt or Shift. With a combination, let go of the main key first or the microphone can stay muted.",
"For push-to-talk, use a single key without Ctrl, Alt or Shift. With a combination, let go of the main key first or the microphone can stay on.",
@@ -1119,6 +1122,7 @@
"Manage posts",
"Manage threads",
"May cause compatibility issues for viewers. We’re working on improving this.",
"May include call audio from mixer apps",
"Media in channels that are not marked 18+. Channels marked 18+ always show it.",
"Media in group chats and in direct messages from people who aren't your friends.",
"Media items you can save for later",
@@ -1243,6 +1247,7 @@
"Pin post",
"Pinned",
"Plans, perks, gifts and your subscription are all on one page.",
"Playback devices",
"Pop out user",
"Pop out video",
"Popped out",
@@ -1608,6 +1613,7 @@
"Update passkey",
"Update your passkey",
"Update {appName} now",
"Update {appName} with your package manager, or download the new version.",
"Update {productName} to use system-wide shortcuts on Wayland.",
"Updates are on their way!",
"Updates from this channel will stop arriving here. Messages already delivered stay. You can follow it again from the announcement channel.",
@@ -1818,6 +1824,7 @@
"{productName} recovery kit",
"{productName} registered its shortcuts with Hyprland. Bind them in your Hyprland config to use them while {productName} is not focused.",
"{productName} wordmark",
"{productName} {version} is available. Update it with your package manager, or download the new version.",
"{remaining, plural, one {+# more} other {+# more}}",
"{renderedOnlineCount} online",
"{requestedLabel} could not start. Using {effectiveLabel} instead.",
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} трябва да се рестартира, за да в
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} трябва да се рестартира, за да изключи хардуерното ускорение на Chromium. Използвай това само ако отстраняваш графични проблеми или високо натоварване на графичния процесор."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} е наличен. Актуализирайте го от вашия софтуерен център."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} е наличен. Актуализирайте го с вашия пакетен мениджър или изтеглете новата версия."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Полезен бот, който прави невероятни нещ
msgid "a hostname, e.g. {exampleDomain}"
msgstr "име на хост, напр. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Налична е актуализация за настолното приложение на Linux. Избери формата на пакета за тази система и {productName} ще я запази локално."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Звукът е изключен"
msgid "Deafened by moderators"
msgstr "Звукът е изключен от модератори"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB пакет"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Настройки за известия по подразбиране"
msgid "Default notifications"
msgstr "Известия по подразбиране"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Устройство за аудио изход по подразбиране"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Известията на работния плот са блокира
msgid "Desktop startup"
msgstr "Стартиране с компютъра"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Налична е актуализация {version} за настолното приложение. Избери пакет за Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Налична е актуализация за настолното приложение"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Налична е актуализация за настолното приложение. Избери пакет за Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Само аудио от устройството"
msgid "Device details"
msgstr "Подробности за устройството"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Устройството не е свързано"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Изтегляне на инсталатор"
msgid "Download media"
msgstr "Изтегляне на медия"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Изтегляне на пакет"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Цялата система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Звук от цялата система"
@@ -15617,6 +15611,10 @@ msgstr "Следване"
msgid "Following master • {effectiveValue}"
msgstr "Следва общата сила на звука • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Следва настройките на звука на вашия Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Инсталирай го от менюто на браузъра си."
msgid "Install the new app"
msgstr "Инсталирай новото приложение"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Инсталирана"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Приложение за Linux"
msgid "Linux default"
msgstr "По подразбиране за Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Пакет за Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Максимална защита за пространства, под
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Може да причини проблеми със съвместимостта при зрителите. Работим по подобряването на това."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Може да включва аудио от разговори от миксерни приложения"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Новите нишки ще спрат да се показват в с
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "В момента нови потребители не могат да се присъединят. Все пак можеш да създадеш акаунт или да влезеш, а след това опитай отново с този линк по-късно."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Нова версия"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Отваряне на настройките"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Отваряне на софтуерния център"
@@ -25337,6 +25326,11 @@ msgstr "Пускане."
msgid "Playback"
msgstr "Възпроизвеждане"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Устройства за възпроизвеждане"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Кръгло поле за отметка"
msgid "Rows per page"
msgstr "Редове на страница"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM пакет"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Докосни „Споделяне“, след което „Доба
msgid "Tap to add a note"
msgstr "Докосни, за да добавиш бележка"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz архив"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Връзката се надгражда до TLS само ако сър
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Актуализацията за настолното приложение не можа да бъде изтеглена. Опитай отново от бутона за актуализация, когато връзката ти е стабилна."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Изтегленият файл е запазен на компютъра ти. Инсталирай го с обичайния си мениджър на пакети."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "До 4K при 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "До 720p при 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Актуализирайте {appName} от вашия софтуерен център."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Актуализирай {appName} сега"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Актуализирайте {appName} с вашия пакетен мениджър или изтеглете новата версия."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Aby se změna záhlaví okna projevila, je potřeba restartovat aplikaci
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Aplikace {PRODUCT_NAME} se musí restartovat, aby se vypnula hardwarová akcelerace Chromia. Tuto možnost použijte pouze při řešení problémů s grafikou nebo vysokým využitím GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} verze {version} je k dispozici. Aktualizujte ji ze svého centra softwaru."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Je k dispozici {productName} {version}. Aktualizujte jej pomocí správce balíčků nebo si stáhněte novou verzi."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Užitečný bot, který umí úžasné věci!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "název hostitele, např. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Je k dispozici aktualizace desktopové aplikace pro Linux. Vyberte formát balíčku pro tento systém a aplikace {productName} jej uloží do počítače."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Zvuk vypnutý"
msgid "Deafened by moderators"
msgstr "Zvuk vypnutý moderátory"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Balíček DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Výchozí nastavení oznámení"
msgid "Default notifications"
msgstr "Výchozí oznámení"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Výchozí výstupní zařízení"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Oznámení na plochu byla zablokována. Můžete je povolit později v n
msgid "Desktop startup"
msgstr "Spuštění na počítači"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Je k dispozici aktualizace desktopové aplikace {version}. Vyberte balíček pro Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Je k dispozici aktualizace desktopové aplikace"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Je k dispozici aktualizace desktopové aplikace. Vyberte balíček pro Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Zvuk zařízení"
msgid "Device details"
msgstr "Podrobnosti o zařízení"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Zařízení není připojené"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Stáhnout instalační program"
msgid "Download media"
msgstr "Stáhnout média"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Stáhnout balíček"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Celý systém"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Veškerý zvuk systému"
@@ -15617,6 +15611,10 @@ msgstr "Sleduji"
msgid "Following master • {effectiveValue}"
msgstr "Podle hlavní hlasitosti • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Řídí se nastavením zvuku Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Nainstalujte si ho z nabídky prohlížeče."
msgid "Install the new app"
msgstr "Nainstalovat novou aplikaci"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Nainstalováno"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplikace pro Linux"
msgid "Linux default"
msgstr "Výchozí zařízení v systému Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Balíček pro Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximální ochrana pro prostory vhodné pro rodiny"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Může způsobit problémy s kompatibilitou u diváků. Pracujeme na jejím vylepšení."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Může zahrnovat zvuk hovorů z mixovacích aplikací"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nové vlákna se po této době nečinnosti přestanou zobrazovat v sezn
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Noví uživatelé se teď nemůžou připojit. Můžete si ale vytvořit účet nebo se přihlásit a zkusit tento odkaz znovu později."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nová verze"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Otevřít nastavení"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Otevřít centrum softwaru"
@@ -25337,6 +25326,11 @@ msgstr "Přehrát."
msgid "Playback"
msgstr "Přehrávání"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Zvuková zařízení"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Kulaté zaškrtávací políčko"
msgid "Rows per page"
msgstr "Řádků na stránku"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Balíček RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Klepněte na Sdílet a poté na Přidat na plochu."
msgid "Tap to add a note"
msgstr "Klepnutím přidáte poznámku"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archiv tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Připojení se upgraduje na TLS pouze v případě, že jej server nabí
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Aktualizaci desktopové aplikace se nepodařilo stáhnout. Až bude připojení stabilní, zkuste to znovu pomocí tlačítka aktualizace."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Stažený soubor je uložen do vašeho počítače. Nainstalujte jej pomocí svého správce balíčků."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Až 4K při 60 snímcích za sekundu"
msgid "Up to 720p at 30 FPS"
msgstr "Až 720p při 30 snímcích za sekundu"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Aktualizujte {appName} ze svého centra softwaru."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Aktualizovat {appName} nyní"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Aktualizujte {appName} pomocí správce balíčků nebo si stáhněte novou verzi."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} skal genstartes, for at ændringen af titellinjen kan tr
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} skal genstartes for at deaktivere Chromiums hardwareacceleration. Brug kun dette, hvis du fejlfinder grafiske fejl eller høj GPU-brug."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} er tilgængelig. Opdater den fra dit softwarecenter."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} er tilgængelig. Opdater den med din pakkehåndtering, eller download den nye version."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "En hjælpsom bot, der kan fantastiske ting!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "et værtsnavn, f.eks. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "En opdatering til Linux-appen er tilgængelig. Vælg pakkeformatet for dette system, så gemmer {productName} det lokalt."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Lyden er slået fra"
msgid "Deafened by moderators"
msgstr "Lyden er slået fra af moderatorer"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-pakke"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Standardnotifikationsindstillinger"
msgid "Default notifications"
msgstr "Standardnotifikationer"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Standard lydenhed"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Notifikationer på computeren er blevet blokeret. Du kan aktivere dem se
msgid "Desktop startup"
msgstr "Opstart af computerapp"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Version {version} af computerappen er tilgængelig. Vælg en Linux-pakke."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Opdatering til computerappen tilgængelig"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Opdatering til computerappen tilgængelig. Vælg en Linux-pakke."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Kun lyden fra enheden"
msgid "Device details"
msgstr "Enhedsdetaljer"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Enhed ikke tilsluttet"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Download installationsprogram"
msgid "Download media"
msgstr "Download medier"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Download pakke"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Hele systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Hele systemets lyd"
@@ -15617,6 +15611,10 @@ msgstr "Følger"
msgid "Following master • {effectiveValue}"
msgstr "Følger overordnet lydstyrke • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Følger dine Windows-lydindstillinger"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installer det fra browsermenuen."
msgid "Install the new app"
msgstr "Installer den nye app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installeret"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-app"
msgid "Linux default"
msgstr "Linux-standard"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-pakke"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maksimal beskyttelse af familievenlige fællesskaber"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Kan forårsage kompatibilitetsproblemer for seere. Vi arbejder på at forbedre dette."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Kan inkludere opkaldslyd fra mixer-apps"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nye tråde vises ikke længere på kanallisten efter denne periode med i
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nye brugere kan ikke blive medlem lige nu. Du kan stadig oprette en konto eller logge ind og derefter prøve dette link igen senere."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Ny version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Åbn indstillinger"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Åbn softwarecenter"
@@ -25337,6 +25326,11 @@ msgstr "Afspil."
msgid "Playback"
msgstr "Afspilning"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Afspilningsenheder"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Afkrydsningsfelt i rund stil"
msgid "Rows per page"
msgstr "Rækker pr. side"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-pakke"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tryk på Del, og vælg derefter Føj til hjemmeskærm."
msgid "Tap to add a note"
msgstr "Tryk for at tilføje en note"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-arkiv"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Forbindelsen opgraderes kun til TLS, hvis serveren tilbyder det."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Opdateringen til computerappen kunne ikke downloades. Prøv igen via opdateringsknappen, når din forbindelse er stabil."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Den downloadede fil gemmes på din computer. Installer den med din normale pakkehåndtering."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Op til 4K ved 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Op til 720p ved 30 billeder/sek"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Opdater {appName} fra dit softwarecenter."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Opdater {appName} nu"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Opdater {appName} med din pakkehåndtering, eller download den nye version."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} muss neu gestartet werden, damit die Änderung der Titell
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} muss neu gestartet werden, um die Hardwarebeschleunigung von Chromium zu deaktivieren. Verwende dies nur, wenn du Grafikfehler oder eine hohe GPU-Auslastung beheben möchtest."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} ist verfügbar. Aktualisiere es über dein Softwarecenter."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} ist verfügbar. Aktualisiere es mit deinem Paketmanager oder lade die neue Version herunter."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Ein hilfreicher Bot, der tolle Dinge tut!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ein Hostname, z. B. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Ein Desktop-Update für Linux ist verfügbar. Wähle das Paketformat für dieses System und {productName} speichert es lokal."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Ton ausgeschaltet"
msgid "Deafened by moderators"
msgstr "Ton von Moderatoren ausgeschaltet"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-Paket"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Standard-Benachrichtigungseinstellungen"
msgid "Default notifications"
msgstr "Standardbenachrichtigungen"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Standard-Ausgabegerät"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Desktop-Benachrichtigungen wurden blockiert. Du kannst sie später in de
msgid "Desktop startup"
msgstr "Desktop-Start"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Desktop-Update {version} verfügbar. Wähle ein Linux-Paket."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Desktop-Update verfügbar"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Desktop-Update verfügbar. Wähle ein Linux-Paket."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Nur Audiogerät"
msgid "Device details"
msgstr "Gerätedetails"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Gerät nicht verbunden"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Installer herunterladen"
msgid "Download media"
msgstr "Medien herunterladen"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Paket herunterladen"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Gesamtes System"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Gesamtes System-Audio"
@@ -15617,6 +15611,10 @@ msgstr "Folge ich"
msgid "Following master • {effectiveValue}"
msgstr "Folgt der Gesamtlautstärke • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Folgt deinen Windows-Soundeinstellungen"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installiere es über das Menü deines Browsers."
msgid "Install the new app"
msgstr "Neue App installieren"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installiert"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-App"
msgid "Linux default"
msgstr "Linux-Standard"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-Paket"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximaler Schutz für familienfreundliche Bereiche"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Kann Kompatibilitätsprobleme für Zuschauer verursachen. Wir arbeiten daran, dies zu verbessern."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Kann Anrufaudio aus Mixer-Apps enthalten"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Neue Threads werden nach dieser Inaktivitätsperiode nicht mehr in der K
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Neue Benutzer können im Moment nicht beitreten. Du kannst aber trotzdem einen Account erstellen oder dich anmelden und es später noch einmal mit diesem Link versuchen."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Neue Version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Einstellungen öffnen"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Softwarecenter öffnen"
@@ -25337,6 +25326,11 @@ msgstr "Abspielen."
msgid "Playback"
msgstr "Wiedergabe"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Wiedergabegeräte"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Rundes Kästchen"
msgid "Rows per page"
msgstr "Zeilen pro Seite"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-Paket"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tippe auf „Teilen“ und dann auf „Zum Home-Bildschirm hinzufügen
msgid "Tap to add a note"
msgstr "Tippen, um eine Notiz hinzuzufügen"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-Archiv"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Die Verbindung wird nur dann auf TLS aktualisiert, wenn der Server dies
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Das Desktop-Update konnte nicht heruntergeladen werden. Versuche es erneut über die Schaltfläche „Update“, wenn deine Verbindung stabil ist."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Die heruntergeladene Datei ist auf deinem Computer gespeichert. Installiere sie mit deinem üblichen Paketmanager."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Bis zu 4K bei 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Bis zu 720p bei 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Aktualisiere {appName} über dein Software-Center."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "{appName} jetzt aktualisieren"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Aktualisiere {appName} mit deinem Paketmanager oder lade die neue Version herunter."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Το {PRODUCT_NAME} πρέπει να επανεκκινηθεί για
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Το {PRODUCT_NAME} πρέπει να επανεκκινηθεί για να απενεργοποιηθεί η επιτάχυνση υλικού του Chromium. Χρησιμοποιήστε το μόνο αν αντιμετωπίζετε προβλήματα γραφικών ή υψηλή χρήση GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "Το {productName} {version} είναι διαθέσιμο. Ενημερώστε το από το κέντρο λογισμικού σας."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Το {productName} {version} είναι διαθέσιμο. Ενημερώστε το με τον διαχειριστή πακέτων σας ή κατεβάστε τη νέα έκδοση."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Ένα εξυπηρετικό bot που κάνει καταπληκτι
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ένα όνομα κεντρικού υπολογιστή, π.χ. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Υπάρχει διαθέσιμη ενημέρωση της εφαρμογής για Linux. Επιλέξτε τη μορφή πακέτου για αυτό το σύστημα και το {productName} θα την αποθηκεύσει τοπικά."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Σε σίγαση ήχου"
msgid "Deafened by moderators"
msgstr "Σε σίγαση ήχου από συντονιστές"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Πακέτο DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Προεπιλεγμένες ρυθμίσεις ειδοποιήσεων
msgid "Default notifications"
msgstr "Προεπιλεγμένες ειδοποιήσεις"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Προεπιλεγμένη συσκευή εξόδου"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Οι ειδοποιήσεις στην επιφάνεια εργασία
msgid "Desktop startup"
msgstr "Εκκίνηση στην επιφάνεια εργασίας"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Διαθέσιμη ενημέρωση {version} για υπολογιστή. Επιλέξτε πακέτο Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Διαθέσιμη ενημέρωση για υπολογιστή"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Διαθέσιμη ενημέρωση για υπολογιστή. Επιλέξτε πακέτο Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Μόνο ήχος συσκευής"
msgid "Device details"
msgstr "Λεπτομέρειες συσκευής"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Η συσκευή δεν είναι συνδεδεμένη"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Λήψη προγράμματος εγκατάστασης"
msgid "Download media"
msgstr "Λήψη πολυμέσων"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Λήψη πακέτου"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Ολόκληρο το σύστημα"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Ήχος ολόκληρου του συστήματος"
@@ -15617,6 +15611,10 @@ msgstr "Παρακολούθηση"
msgid "Following master • {effectiveValue}"
msgstr "Ακολουθεί την κύρια ένταση • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Ακολουθεί τις ρυθμίσεις ήχου των Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Εγκαταστήστε το από το μενού του προγρά
msgid "Install the new app"
msgstr "Εγκατάσταση της νέας εφαρμογής"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Εγκατεστημένο"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Εφαρμογή Linux"
msgid "Linux default"
msgstr "Προεπιλεγμένη συσκευή Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Πακέτο Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Μέγιστη προστασία για χώρους φιλικούς
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Μπορεί να προκαλέσει προβλήματα συμβατότητας στους θεατές. Εργαζόμαστε για να το βελτιώσουμε."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Μπορεί να περιλαμβάνει ήχο κλήσης από εφαρμογές μίξης"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Τα νέα νήματα θα σταματήσουν να εμφανίζ
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Οι νέοι χρήστες δεν μπορούν να εγγραφούν αυτήν τη στιγμή. Μπορείτε να δημιουργήσετε έναν λογαριασμό ή να συνδεθείτε και να δοκιμάσετε ξανά αυτόν τον σύνδεσμο αργότερα."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Νέα έκδοση"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Άνοιγμα ρυθμίσεων"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Άνοιγμα κέντρου λογισμικού"
@@ -25337,6 +25326,11 @@ msgstr "Αναπαραγωγή."
msgid "Playback"
msgstr "Αναπαραγωγή"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Συσκευές αναπαραγωγής"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Στρογγυλό πλαίσιο επιλογής"
msgid "Rows per page"
msgstr "Σειρές ανά σελίδα"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Πακέτο RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Πατήστε Κοινοποίηση και, στη συνέχεια,
msgid "Tap to add a note"
msgstr "Πατήστε για προσθήκη σημείωσης"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Αρχείο tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Η σύνδεση αναβαθμίζεται σε TLS μόνο εάν ο
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Δεν ήταν δυνατή η λήψη της ενημέρωσης για την εφαρμογή υπολογιστή. Δοκιμάστε ξανά από το κουμπί ενημέρωσης όταν η σύνδεσή σας είναι σταθερή."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Το αρχείο που κατεβάσατε έχει αποθηκευτεί στον υπολογιστή σας. Εγκαταστήστε το με τον συνηθισμένο διαχειριστή πακέτων σας."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Έως 4K στα 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Έως 720p στα 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Ενημέρωση του {appName} από το κέντρο λογισμικού σας."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Ενημέρωση {appName} τώρα"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Ενημερώστε το {appName} με τον διαχειριστή πακέτων σας ή κατεβάστε τη νέα έκδοση."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} needs to restart for the title bar change to take effect.
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} is available. Update it from your software centre."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} is available. Update it with your package manager, or download the new version."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "A helpful bot that does amazing things!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "a hostname, e.g. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Deafened"
msgid "Deafened by moderators"
msgstr "Deafened by moderators"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB package"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Default notification settings"
msgid "Default notifications"
msgstr "Default notifications"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Default output device"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Desktop notifications have been blocked. You can enable them later in yo
msgid "Desktop startup"
msgstr "Desktop startup"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Desktop update {version} available. Choose a Linux package."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Desktop update available"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Desktop update available. Choose a Linux package."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Device audio only"
msgid "Device details"
msgstr "Device details"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Device not connected"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Download installer"
msgid "Download media"
msgstr "Download media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Download package"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Entire system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Entire system audio"
@@ -15617,6 +15611,10 @@ msgstr "Following"
msgid "Following master • {effectiveValue}"
msgstr "Following master • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Follows your Windows sound settings"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Install it from your browser menu."
msgid "Install the new app"
msgstr "Install the new app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installed"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux app"
msgid "Linux default"
msgstr "Linux default"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux package"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximum protection for family-friendly spaces"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "May cause compatibility issues for viewers. We’re working on improving this."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "May include call audio from mixer apps"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "New threads will stop showing in the channel list after this period of i
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "New users can't join right now. You can still create an account or sign in, then try this link again later."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "New version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Open settings"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Open software centre"
@@ -25337,6 +25326,11 @@ msgstr "Play."
msgid "Playback"
msgstr "Playback"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Playback devices"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Round style checkbox"
msgid "Rows per page"
msgstr "Rows per page"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM package"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tap Share, then Add to Home Screen."
msgid "Tap to add a note"
msgstr "Tap to add a note"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz archive"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "The connection upgrades to TLS only if the server offers it."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "The downloaded file is saved to your computer. Install it with your normal package manager."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Up to 4K at 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Up to 720p at 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Update {appName} from your software centre."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Update {appName} now"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Update {appName} with your package manager, or download the new version."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} needs to restart for the title bar change to take effect.
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} is available. Update it from your software center."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} is available. Update it with your package manager, or download the new version."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "A helpful bot that does amazing things!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "a hostname, e.g. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Deafened"
msgid "Deafened by moderators"
msgstr "Deafened by moderators"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB package"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Default notification settings"
msgid "Default notifications"
msgstr "Default notifications"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Default output device"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Desktop notifications have been blocked. You can enable them later in yo
msgid "Desktop startup"
msgstr "Desktop startup"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Desktop update {version} available. Choose a Linux package."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Desktop update available"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Desktop update available. Choose a Linux package."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Device audio only"
msgid "Device details"
msgstr "Device details"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Device not connected"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Download installer"
msgid "Download media"
msgstr "Download media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Download package"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Entire system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Entire system audio"
@@ -15617,6 +15611,10 @@ msgstr "Following"
msgid "Following master • {effectiveValue}"
msgstr "Following master • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Follows your Windows sound settings"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Install it from your browser menu."
msgid "Install the new app"
msgstr "Install the new app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installed"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux app"
msgid "Linux default"
msgstr "Linux default"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux package"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximum protection for family-friendly spaces"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "May cause compatibility issues for viewers. We’re working on improving this."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "May include call audio from mixer apps"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "New threads will stop showing in the channel list after this period of i
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "New users can't join right now. You can still create an account or sign in, then try this link again later."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "New version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Open settings"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Open software center"
@@ -25337,6 +25326,11 @@ msgstr "Play."
msgid "Playback"
msgstr "Playback"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Playback devices"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Round style checkbox"
msgid "Rows per page"
msgstr "Rows per page"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM package"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tap Share, then Add to Home Screen."
msgid "Tap to add a note"
msgstr "Tap to add a note"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz archive"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "The connection upgrades to TLS only if the server offers it."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "The downloaded file is saved to your computer. Install it with your normal package manager."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Up to 4K at 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Up to 720p at 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Update {appName} from your software center."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Update {appName} now"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Update {appName} with your package manager, or download the new version."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} necesita reiniciarse para que el cambio en la barra de t
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} debe reiniciarse para deshabilitar la aceleración de hardware de Chromium. Usa esto solo si estás solucionando problemas gráficos o un alto uso de la GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} está disponible. Actualízalo desde tu centro de software."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} está disponible. Actualízalo con tu gestor de paquetes o descarga la nueva versión."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "¡Un bot útil que hace cosas increíbles!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "un nombre de host, p. ej. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Hay una actualización de escritorio para Linux disponible. Elige el formato del paquete para este sistema y {productName} lo guardará localmente."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Sonido desactivado"
msgid "Deafened by moderators"
msgstr "Sonido desactivado por los moderadores"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Paquete DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Configuración de notificaciones predeterminada"
msgid "Default notifications"
msgstr "Notificaciones predeterminadas"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Dispositivo de salida predeterminado"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Las notificaciones de escritorio se bloquearon. Puedes activarlas más t
msgid "Desktop startup"
msgstr "Inicio de la aplicación de escritorio"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Actualización de escritorio {version} disponible. Elige un paquete de Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Actualización de escritorio disponible"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Actualización de escritorio disponible. Elige un paquete de Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Audio del dispositivo solamente"
msgid "Device details"
msgstr "Detalles del dispositivo"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Dispositivo no conectado"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Descargar instalador"
msgid "Download media"
msgstr "Descargar contenido multimedia"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Descargar paquete"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Sistema completo"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Audio de todo el sistema"
@@ -15617,6 +15611,10 @@ msgstr "Siguiendo"
msgid "Following master • {effectiveValue}"
msgstr "Sigue el volumen principal • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Sigue la configuración de sonido de tu Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instálalo desde el menú de tu navegador."
msgid "Install the new app"
msgstr "Instalar la nueva app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Instalado"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplicación para Linux"
msgid "Linux default"
msgstr "Predeterminado de Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Paquete para Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Máxima protección para espacios familiares"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Puede causar problemas de compatibilidad para los espectadores. Estamos trabajando para mejorar esto."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Puede incluir audio de llamadas de aplicaciones mezcladoras"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Los hilos nuevos dejarán de mostrarse en la lista del canal después de
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Los usuarios nuevos no pueden unirse en este momento. Puedes crear una cuenta o iniciar sesión y volver a intentar con este enlace más tarde."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nueva versión"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Abrir configuración"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Abrir centro de software"
@@ -25337,6 +25326,11 @@ msgstr "Reproducir."
msgid "Playback"
msgstr "Reproducción"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Dispositivos de reproducción"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Casilla de verificación de estilo redondo"
msgid "Rows per page"
msgstr "Filas por página"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Paquete RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Toca Compartir y luego Agregar a pantalla de inicio."
msgid "Tap to add a note"
msgstr "Toca para agregar una nota"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archivo tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "La conexión se actualiza a TLS solo si el servidor lo ofrece."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "No se pudo descargar la actualización de escritorio. Intenta de nuevo desde el botón de actualización cuando tu conexión sea estable."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "El archivo descargado se guarda en tu computadora. Instálalo con tu gestor de paquetes habitual."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Hasta 4K a 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Hasta 720p a 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Actualiza {appName} desde tu centro de software."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Actualizar {appName} ahora"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Actualiza {appName} con tu gestor de paquetes o descarga la nueva versión."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} necesita reiniciarse para que el cambio en la barra de t
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} necesita reiniciarse para deshabilitar la aceleración de hardware de Chromium. Usa esto solo si estás solucionando problemas gráficos o un alto uso de la GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} está disponible. Actualízalo desde tu centro de software."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} está disponible. Actualízalo con tu gestor de paquetes o descarga la nueva versión."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "¡Un bot útil que hace cosas increíbles!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "un nombre de host, p. ej., {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Hay una actualización de escritorio para Linux disponible. Elige el formato del paquete para este sistema y {productName} lo guardará localmente."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Sonido desactivado"
msgid "Deafened by moderators"
msgstr "Sonido desactivado por los moderadores"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Paquete DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Ajustes de notificaciones predeterminados"
msgid "Default notifications"
msgstr "Notificaciones predeterminadas"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Dispositivo de salida predeterminado"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Las notificaciones de escritorio se han bloqueado. Puedes activarlas má
msgid "Desktop startup"
msgstr "Inicio de la aplicación de escritorio"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Actualización de escritorio {version} disponible. Elige un paquete de Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Actualización de escritorio disponible"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Actualización de escritorio disponible. Elige un paquete de Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Solo audio del dispositivo"
msgid "Device details"
msgstr "Detalles del dispositivo"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Dispositivo no conectado"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Descargar instalador"
msgid "Download media"
msgstr "Descargar contenido multimedia"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Descargar paquete"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Todo el sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Audio de todo el sistema"
@@ -15617,6 +15611,10 @@ msgstr "Siguiendo"
msgid "Following master • {effectiveValue}"
msgstr "Sigue el volumen principal • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Sigue la configuración de sonido de tu Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instálalo desde el menú de tu navegador."
msgid "Install the new app"
msgstr "Instalar la nueva app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Instalada"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplicación para Linux"
msgid "Linux default"
msgstr "Predeterminado de Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Paquete de Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Máxima protección para espacios familiares"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Puede causar problemas de compatibilidad para los espectadores. Estamos trabajando para mejorar esto."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Puede incluir audio de llamadas de aplicaciones mezcladoras"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Los hilos nuevos dejarán de aparecer en la lista del canal tras este pe
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Los usuarios nuevos no pueden unirse ahora mismo. Puedes crear una cuenta o iniciar sesión y volver a probar este enlace más tarde."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nueva versión"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Abrir ajustes"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Abrir centro de software"
@@ -25337,6 +25326,11 @@ msgstr "Reproducir."
msgid "Playback"
msgstr "Reproducción"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Dispositivos de reproducción"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Casilla de verificación de estilo redondo"
msgid "Rows per page"
msgstr "Filas por página"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Paquete RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Toca Compartir y, a continuación, Añadir a pantalla de inicio."
msgid "Tap to add a note"
msgstr "Toca para añadir una nota"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archivo tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "La conexión se actualiza a TLS solo si el servidor lo ofrece."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "No se pudo descargar la actualización de escritorio. Inténtalo de nuevo desde el botón de actualización cuando tu conexión sea estable."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "El archivo descargado se guarda en tu ordenador. Instálalo con tu gestor de paquetes habitual."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Hasta 4K a 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Hasta 720p a 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Actualiza {appName} desde tu centro de software."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Actualizar {appName} ahora"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Actualiza {appName} con tu gestor de paquetes o descarga la nueva versión."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} täytyy käynnistää uudelleen, jotta otsikkopalkin muut
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} on käynnistettävä uudelleen, jotta Chromiumin laitteistokiihdytys voidaan poistaa käytöstä. Käytä tätä vain, jos selvität grafiikkaongelmia tai korkeaa GPU:n käyttöastetta."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} on saatavilla. Päivitä se ohjelmistokeskuksestasi."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} on saatavilla. Päivitä se paketinhallinnallasi tai lataa uusi versio."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Auttavainen botti, joka tekee uskomattomia asioita!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "isäntänimi, esim. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Linux-työpöytäpäivitys on saatavilla. Valitse pakettimuoto tälle järjestelmälle, niin {productName} tallentaa sen paikallisesti."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Äänet mykistetty"
msgid "Deafened by moderators"
msgstr "Moderaattorit mykistivät äänesi"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-paketti"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Oletusarvoiset ilmoitusasetukset"
msgid "Default notifications"
msgstr "Oletusilmoitukset"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Oletuslähtölaite"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Työpöytäilmoitukset on estetty. Voit ottaa ne käyttöön myöhemmin
msgid "Desktop startup"
msgstr "Käynnistys työpöydällä"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Työpöytäpäivitys {version} saatavilla. Valitse Linux-paketti."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Työpöytäsovelluksen päivitys saatavilla"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Työpöytäpäivitys saatavilla. Valitse Linux-paketti."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Laitteen ääni"
msgid "Device details"
msgstr "Laitteen tiedot"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Laite ei ole yhteydessä"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Lataa asennusohjelma"
msgid "Download media"
msgstr "Lataa media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Lataa paketti"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Koko järjestelmä"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Koko järjestelmän ääni"
@@ -15617,6 +15611,10 @@ msgstr "Seuraa"
msgid "Following master • {effectiveValue}"
msgstr "Seuraa yleisäänenvoimakkuutta • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Noudattaa Windowsin ääniasetuksiasi"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Asenna se selaimesi valikosta."
msgid "Install the new app"
msgstr "Asenna uusi sovellus"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Asennettu"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-sovellus"
msgid "Linux default"
msgstr "Linuxin oletusarvo"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-paketti"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Paras suoja perheystävällisille tiloille"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Voi aiheuttaa yhteensopivuusongelmia katsojille. Pyrimme parantamaan tätä."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Voi sisältää puheluääniä mikserisovelluksista"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Uudet keskustelut lakkaavat näkymästä kanavaluettelossa tämän toime
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Uudet käyttäjät eivät voi liittyä juuri nyt. Voit silti luoda tilin tai kirjautua sisään ja yrittää tätä linkkiä uudelleen myöhemmin."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Uusi versio"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Avaa asetukset"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Avaa ohjelmistokeskus"
@@ -25337,6 +25326,11 @@ msgstr "Toista."
msgid "Playback"
msgstr "Toisto"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Äänentoistolaitteet"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Pyöreä valintaruutu"
msgid "Rows per page"
msgstr "Rivejä sivulla"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-paketti"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Napauta Jaa ja sitten Lisää Koti-valikkoon."
msgid "Tap to add a note"
msgstr "Lisää muistiinpano napauttamalla"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-arkisto"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Yhteys päivitetään TLS-salausta käyttäväksi vain, jos palvelin tar
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Työpöytäpäivitystä ei voitu ladata. Yritä uudelleen päivityspainikkeesta, kun yhteytesi on vakaa."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Ladattu tiedosto tallennetaan tietokoneellesi. Asenna se tavallisella pakettienhallintaohjelmallasi."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Jopa 4K 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Jopa 720p 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Päivitä {appName} ohjelmistokeskuksestasi."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Päivitä {appName} nyt"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Päivitä {appName} paketinhallinnallasi tai lataa uusi versio."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} doit redémarrer pour que la modification de la barre de
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} doit redémarrer pour désactiver l'accélération matérielle de Chromium. N'utilisez cette option que si vous rencontrez des problèmes graphiques ou une utilisation élevée du GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} est disponible. Mettez-le à jour depuis votre centre logiciel."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Une nouvelle version de {productName} ({version}) est disponible. Mettez-la à jour avec votre gestionnaire de paquets, ou téléchargez la nouvelle version."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Un bot utile qui fait des choses incroyables !"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "un nom d'hôte, par exemple {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Une mise à jour de l’application pour Linux est disponible. Choisissez le format de paquet adapté à ce système et {productName} l’enregistrera sur votre ordinateur."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Son désactivé"
msgid "Deafened by moderators"
msgstr "Son désactivé par les modérateurs"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Paquet DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Paramètres de notification par défaut"
msgid "Default notifications"
msgstr "Notifications par défaut"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Périphérique de sortie par défaut"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Les notifications de bureau ont été bloquées. Vous pouvez les activer
msgid "Desktop startup"
msgstr "Démarrage sur ordinateur"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Mise à jour {version} de l’application de bureau disponible. Choisissez un paquet Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Mise à jour de l’application de bureau disponible"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Mise à jour de l’application disponible. Choisissez un paquet Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Audio de l'appareil uniquement"
msgid "Device details"
msgstr "Détails de l’appareil"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Appareil non connecté"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Télécharger l’installateur"
msgid "Download media"
msgstr "Télécharger le média"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Télécharger le paquet"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Tout le système"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Audio du système entier"
@@ -15617,6 +15611,10 @@ msgstr "Suivi"
msgid "Following master • {effectiveValue}"
msgstr "Suit le volume principal • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Suit les paramètres audio de votre Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installez-le depuis le menu de votre navigateur."
msgid "Install the new app"
msgstr "Installer la nouvelle application"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installé"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Application Linux"
msgid "Linux default"
msgstr "Linux (par défaut)"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Paquet Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Protection maximale pour les espaces familiaux"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Peut causer des problèmes de compatibilité pour les spectateurs. Nous travaillons à améliorer cela."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Peut inclure l'audio des appels des applications de mixage"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Les nouveaux fils de discussion ne s'afficheront plus dans la liste des
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "De nouveaux membres ne peuvent pas rejoindre la communauté pour le moment. Vous pouvez tout de même créer un compte ou vous connecter, puis réessayer ce lien plus tard."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nouvelle version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Ouvrir les réglages"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Ouvrir le centre logiciel"
@@ -25337,6 +25326,11 @@ msgstr "Lire."
msgid "Playback"
msgstr "Lecture"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Périphériques de lecture"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Case à cocher de style rond"
msgid "Rows per page"
msgstr "Lignes par page"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Paquet RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Touchez Partager, puis Sur l’écran d’accueil."
msgid "Tap to add a note"
msgstr "Appuyer pour ajouter une note"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archive tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "La connexion passe à TLS uniquement si le serveur le propose."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Impossible de télécharger la mise à jour de l’application de bureau. Réessayez avec le bouton de mise à jour lorsque votre connexion sera stable."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Le fichier téléchargé est enregistré sur votre ordinateur. Installez-le avec votre gestionnaire de paquets habituel."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Jusqu'à 4K à 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Jusqu'à 720p à 30 IPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Mettez à jour {appName} depuis votre centre logiciel."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Mettre à jour {appName} maintenant"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Mettez à jour {appName} avec votre gestionnaire de paquets, ou téléchargez la nouvelle version."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "כדי שהשינוי בשורת הכותרת ייכנס לתוקף, י
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "יש להפעיל מחדש את {PRODUCT_NAME} כדי להשבית את האצת החומרה של Chromium. השתמש באפשרות זו רק אם אתה מנסה לפתור תקלות גרפיקה או שימוש גבוה במעבד הגרפי."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} גרסה {version} זמינה. עדכן אותה ממרכז התוכנה שלך."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} גרסה {version} זמינה. עדכן אותה באמצעות מנהל החבילות שלך, או הורד את הגרסה החדשה."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "בוט מועיל שעושה דברים מדהימים!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "שם מארח, לדוגמה {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "זמין עדכון לאפליקציית שולחן העבודה ללינוקס. בחר את פורמט החבילה עבור המערכת הזו, ו-{productName} ישמור אותו באופן מקומי."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "השמע מושתק"
msgid "Deafened by moderators"
msgstr "השמע הושתק על ידי מנהלים"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "חבילת DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "הגדרות ברירת מחדל להתראות"
msgid "Default notifications"
msgstr "התראות ברירת מחדל"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "מכשיר הפלט המוגדר כברירת מחדל"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "התראות שולחן עבודה נחסמו. ניתן להפעיל א
msgid "Desktop startup"
msgstr "הפעלה במחשב"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "עדכון {version} זמין לאפליקציית המחשב. בחר חבילת Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "עדכון זמין לאפליקציית המחשב"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "עדכון זמין לאפליקציית המחשב. בחר חבילת Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "שמע מהמכשיר בלבד"
msgid "Device details"
msgstr "פרטי מכשיר"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "המכשיר אינו מחובר"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "הורדת קובץ ההתקנה"
msgid "Download media"
msgstr "הורדת מדיה"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "הורדת חבילה"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "כל המערכת"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "כל צלילי המערכת"
@@ -15617,6 +15611,10 @@ msgstr "עוקב"
msgid "Following master • {effectiveValue}"
msgstr "לפי עוצמת הקול הראשית • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "פועל לפי הגדרות השמע של Windows שלך"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "התקן אותו מתפריט הדפדפן שלך."
msgid "Install the new app"
msgstr "התקן את האפליקציה החדשה"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "מותקן"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "אפליקציית לינוקס"
msgid "Linux default"
msgstr "ברירת מחדל של לינוקס"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "חבילת לינוקס"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "הגנה מרבית למרחבים ידידותיים למשפחה"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "עלול לגרום לבעיות תאימות עבור צופים. אנו עובדים על שיפור זה."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "עשוי לכלול שמע שיחות מאפליקציות מיקסר"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "שרשורים חדשים יפסיקו להופיע ברשימת הער
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "משתמשים חדשים לא יכולים להצטרף כרגע. עדיין באפשרותך ליצור חשבון או להיכנס, ואז לנסות את הקישור הזה שוב מאוחר יותר."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "גרסה חדשה"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "פתח הגדרות"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "פתח את מרכז התוכנה"
@@ -25337,6 +25326,11 @@ msgstr "הפעל."
msgid "Playback"
msgstr "השמעה"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "התקני השמעה"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "תיבת סימון עגולה"
msgid "Rows per page"
msgstr "שורות לעמוד"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "חבילת RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "הקש על \"שיתוף\", ואז על \"הוספה למסך הבית\"
msgid "Tap to add a note"
msgstr "הקש כדי להוסיף הערה"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "ארכיון tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "החיבור משודרג ל-TLS רק אם השרת מציע זאת."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "לא ניתן היה להוריד את עדכון שולחן העבודה. נסה שוב באמצעות כפתור העדכון כשהחיבור שלך יציב."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "הקובץ שהורד נשמר במחשב שלך. התקן אותו באמצעות מנהל החבילות הרגיל שלך."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "עד 4K ב-60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "עד 720p ב-30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "עדכן את {appName} ממרכז התוכנה שלך."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "עדכן את {appName} כעת"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "עדכן את {appName} באמצעות מנהל החבילות שלך, או הורד את הגרסה החדשה."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "टाइटल बार का बदलाव लागू होन
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "क्रोमियम का हार्डवेयर एक्सीलरेशन बंद करने के लिए {PRODUCT_NAME} को रीस्टार्ट करना होगा। इसे तभी इस्तेमाल करें जब आप ग्राफ़िक्स की गड़बड़ियों या ज़्यादा GPU इस्तेमाल की समस्या सुलझा रहे हों।"
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} उपलब्ध है। इसे अपने सॉफ़्टवेयर सेंटर से अपडेट करें।"
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} उपलब्ध है। इसे अपने पैकेज मैनेजर से अपडेट करें, या नया संस्करण डाउनलोड करें।"
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "एक मददगार बॉट जो कमाल के काम
msgid "a hostname, e.g. {exampleDomain}"
msgstr "एक होस्टनेम, जैसे {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "लिनक्स डेस्कटॉप के लिए एक अपडेट उपलब्ध है। इस सिस्टम के लिए पैकेज फ़ॉर्मैट चुनें और {productName} उसे आपके डिवाइस पर सेव कर लेगा।"
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "डीफ़ेन किया गया"
msgid "Deafened by moderators"
msgstr "मॉडरेटर ने डीफ़ेन किया"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB पैकेज"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "डिफ़ॉल्ट नोटिफ़िकेशन सेटि
msgid "Default notifications"
msgstr "डिफ़ॉल्ट नोटिफ़िकेशन"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "डिफ़ॉल्ट आउटपुट डिवाइस"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "डेस्कटॉप नोटिफ़िकेशन ब्लॉ
msgid "Desktop startup"
msgstr "डेस्कटॉप स्टार्टअप"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "डेस्कटॉप अपडेट {version} उपलब्ध है। एक लिनक्स पैकेज चुनें।"
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "डेस्कटॉप अपडेट उपलब्ध है"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "डेस्कटॉप अपडेट उपलब्ध है। एक लिनक्स पैकेज चुनें।"
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "डिवाइस ऑडियो ही"
msgid "Device details"
msgstr "डिवाइस विवरण"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "डिवाइस कनेक्ट नहीं है"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "इंस्टॉलर डाउनलोड करें"
msgid "Download media"
msgstr "मीडिया डाउनलोड करें"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "पैकेज डाउनलोड करें"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "पूरा सिस्टम"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "पूरे सिस्टम का ऑडियो"
@@ -15617,6 +15611,10 @@ msgstr "फ़ॉलो कर रहे हैं"
msgid "Following master • {effectiveValue}"
msgstr "मास्टर के अनुसार • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "अपने ब्राउज़र मेनू से इसे इ
msgid "Install the new app"
msgstr "नया ऐप इंस्टॉल करें"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "इंस्टॉल किया गया"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "लिनक्स ऐप"
msgid "Linux default"
msgstr "लिनक्स डिफ़ॉल्ट"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "लिनक्स पैकेज"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "परिवार के अनुकूल जगहों के ल
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "यह देखने वालों के लिए अनुकूलता समस्याएँ पैदा कर सकता है। हम इसमें सुधार कर रहे हैं।"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "मिक्सर ऐप्स से कॉल ऑडियो शामिल हो सकता है"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "इस अवधि की निष्क्रियता के ब
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "नए यूज़र अभी शामिल नहीं हो सकते। आप अभी भी अकाउंट बना सकते हैं या साइन इन कर सकते हैं, फिर बाद में इस लिंक को दोबारा आज़माएँ।"
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "नया वर्ज़न"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "सेटिंग्स खोलें"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "सॉफ़्टवेयर सेंटर खोलें"
@@ -25337,6 +25326,11 @@ msgstr "चलाएँ।"
msgid "Playback"
msgstr "प्लेबैक"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "प्लेबैक डिवाइस"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "गोल स्टाइल चेकबॉक्स"
msgid "Rows per page"
msgstr "प्रति पेज पंक्तियाँ"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM पैकेज"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "\"शेयर करें\" पर टैप करें, फिर \
msgid "Tap to add a note"
msgstr "नोट जोड़ने के लिए टैप करें"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz आर्काइव"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "सर्वर द्वारा प्रदान किए जा
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "डेस्कटॉप अपडेट डाउनलोड नहीं किया जा सका। जब आपका कनेक्शन स्थिर हो, तो अपडेट बटन से फिर से कोशिश करें।"
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "डाउनलोड की गई फ़ाइल आपके कंप्यूटर पर सेव हो गई है। इसे अपने सामान्य पैकेज मैनेजर से इंस्टॉल करें।"
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "60 FPS पर 4K तक"
msgid "Up to 720p at 30 FPS"
msgstr "30 FPS पर 720p तक"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "अपने सॉफ़्टवेयर सेंटर से {appName} अपडेट करें।"
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "{appName} को अभी अपडेट करें"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "अपने पैकेज मैनेजर से {appName} अपडेट करें, या नया संस्करण डाउनलोड करें।"
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} se mora ponovno pokrenuti kako bi promjena naslovne trake
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} se mora ponovno pokrenuti kako bi se onemogućilo hardversko ubrzanje Chromiuma. Koristite ovo samo ako rješavate probleme s grafičkim smetnjama ili visokom upotrebom GPU-a."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "Dostupna je nova verzija {productName} {version}. Ažurirajte je iz svog centra za softver."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Dostupna je verzija {version} za {productName}. Ažurirajte je pomoću upravitelja paketa ili preuzmite novu verziju."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Koristan bot koji radi nevjerojatne stvari!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "naziv hosta, npr. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Dostupno je ažuriranje aplikacije za Linux. Odaberite format paketa za ovaj sustav i {productName} će ga spremiti lokalno."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Bez zvuka"
msgid "Deafened by moderators"
msgstr "Moderatori su vam isključili zvuk"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB paket"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Zadane postavke obavijesti"
msgid "Default notifications"
msgstr "Zadane obavijesti"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Zadani izlazni uređaj"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Blokirane su obavijesti na radnoj površini. Možete ih omogućiti kasni
msgid "Desktop startup"
msgstr "Pokretanje na računalu"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Dostupno je ažuriranje za stolno računalo {version}. Odaberite Linux paket."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Dostupno je ažuriranje za stolno računalo"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Dostupno je ažuriranje za stolno računalo. Odaberite Linux paket."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Samo zvuk uređaja"
msgid "Device details"
msgstr "Detalji uređaja"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Uređaj nije povezan"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Preuzmi instalacijski program"
msgid "Download media"
msgstr "Preuzmi medij"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Preuzmi paket"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Cijeli sustav"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Zvuk cijelog sustava"
@@ -15617,6 +15611,10 @@ msgstr "Pratim"
msgid "Following master • {effectiveValue}"
msgstr "Prati glavnu glasnoću • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Prati postavke zvuka vašeg Windowsa"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instalirajte ga iz izbornika preglednika."
msgid "Install the new app"
msgstr "Instaliraj novu aplikaciju"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Instalirano"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux aplikacija"
msgid "Linux default"
msgstr "Linux – zadani uređaj"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux paket"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maksimalna zaštita za prostore prikladne za obitelj"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Može uzrokovati probleme s kompatibilnošću za gledatelje. Radimo na poboljšanju ovoga."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Može uključivati zvuk poziva iz aplikacija miksera"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nove niti se više neće prikazivati na popisu kanala nakon ovog razdobl
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Novi se korisnici trenutačno ne mogu pridružiti. I dalje možete stvoriti račun ili se prijaviti pa kasnije ponovno pokušati s ovom poveznicom."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nova verzija"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Otvori postavke"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Otvori centar za softver"
@@ -25337,6 +25326,11 @@ msgstr "Reproduciraj."
msgid "Playback"
msgstr "Reprodukcija"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Reprodukcija zvuka"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Okrugli potvrdni okvir"
msgid "Rows per page"
msgstr "Redaka po stranici"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM paket"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Dodirnite Dijeli, a zatim Dodaj na početni zaslon."
msgid "Tap to add a note"
msgstr "Dodirnite za dodavanje bilješke"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz arhiva"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Veza se nadograđuje na TLS samo ako je poslužitelj ponudi."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Ažuriranje za stolno računalo nije preuzeto. Pokušajte ponovno pomoću gumba za ažuriranje kada vaša veza bude stabilna."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Preuzeta datoteka sprema se na vaše računalo. Instalirajte je pomoću uobičajenog upravitelja paketa."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Do 4K pri 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Do 720p pri 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Ažuriraj {appName} iz svog centra za softver."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Ažuriraj {appName} sada"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Ažurirajte {appName} pomoću upravitelja paketa ili preuzmite novu verziju."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "A címsor módosításának érvénybe lépéséhez újra kell indítani
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "A(z) {PRODUCT_NAME} újraindítása szükséges a Chromium hardveres gyorsításának kikapcsolásához. Ezt csak akkor használd, ha grafikai hibákat vagy magas GPU-használatot észlelsz."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} elérhető. Frissítsd a szoftverközpontodból."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} érhető el. Frissítsd a csomagkezelőddel, vagy töltsd le az új verziót."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Egy segítőkész bot, ami csodálatos dolgokra képes!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "állomásnév, pl. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Elérhető egy frissítés az asztali Linux-alkalmazáshoz. Válaszd ki a rendszeredhez megfelelő csomagformátumot, és a(z) {productName} helyileg menti a csomagot."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Hang kikapcsolva"
msgid "Deafened by moderators"
msgstr "A moderátorok kikapcsolták a hangot"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB csomag"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Alapértelmezett értesítési beállítások"
msgid "Default notifications"
msgstr "Alapértelmezett értesítések"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Alapértelmezett kimeneti eszköz"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Az asztali értesítések le vannak tiltva. Később engedélyezheted ő
msgid "Desktop startup"
msgstr "Asztali indítás"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Elérhető a(z) {version} asztali frissítés. Válassz Linux-csomagot."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Asztali frissítés érhető el"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Asztali frissítés érhető el. Válassz Linux-csomagot."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Csak az eszköz hangja"
msgid "Device details"
msgstr "Eszköz részletei"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Eszköz nincs csatlakoztatva"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Telepítő letöltése"
msgid "Download media"
msgstr "Média letöltése"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Csomag letöltése"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Teljes rendszer"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Teljes rendszerhang"
@@ -15617,6 +15611,10 @@ msgstr "Követem"
msgid "Following master • {effectiveValue}"
msgstr "Fő hangerőt követi • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Kövesse a Windows hangbeállításait"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Telepítsd a böngésző menüjéből."
msgid "Install the new app"
msgstr "Telepítsd az új alkalmazást"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Telepítve"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-alkalmazás"
msgid "Linux default"
msgstr "Linux alapértelmezett"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-csomag"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximális védelem a családbarát tereknek"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Előfordulhatnak kompatibilitási problémák a nézők számára. Dolgozunk a javításon."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Tartalmazhat híváshangot keverőalkalmazásokból"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Az új szálak egy idő után nem jelennek meg a csatornalistán."
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Új felhasználók jelenleg nem tudnak csatlakozni. Fiókot továbbra is létrehozhatsz, vagy bejelentkezhetsz, majd később újra megnyithatod ezt a linket."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Új verzió"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Beállítások megnyitása"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Szoftverközpont megnyitása"
@@ -25337,6 +25326,11 @@ msgstr "Lejátszás."
msgid "Playback"
msgstr "Lejátszás"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Lejátszóeszközök"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Kerek stílusú jelölőnégyzet"
msgid "Rows per page"
msgstr "Sorok száma oldalanként"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM csomag"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Érintsd meg a Megosztás gombot, majd a Főképernyőhöz adás lehető
msgid "Tap to add a note"
msgstr "Koppints jegyzet hozzáadásához"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz archívum"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "A kapcsolat csak akkor frissül TLS-re, ha a szerver felajánlja azt."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Nem sikerült letölteni az asztali frissítést. Próbáld újra a frissítés gombbal, ha stabil a kapcsolatod."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "A letöltött fájl a számítógépedre mentve. Telepítsd a szokásos csomagkezelőddel."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Akár 4K felbontás 60 FPS sebességgel"
msgid "Up to 720p at 30 FPS"
msgstr "Akár 720p felbontás 30 FPS sebességgel"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Frissítsd a(z) {appName} alkalmazást a szoftverközpontodból."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Frissítsd a(z) {appName} rendszert most"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Frissítsd a(z) {appName} alkalmazást a csomagkezelőddel, vagy töltsd le az új verziót."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} perlu dimulai ulang agar perubahan bilah judul berlaku."
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} perlu dimulai ulang untuk menonaktifkan akselerasi perangkat keras Chromium. Gunakan ini hanya jika kamu sedang mengatasi gangguan grafis atau penggunaan GPU yang tinggi."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} tersedia. Perbarui dari pusat perangkat lunak Anda."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} tersedia. Perbarui menggunakan manajer paket Anda, atau unduh versi baru."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Bot penolong yang bisa melakukan hal-hal menakjubkan!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "nama host, mis. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Pembaruan desktop untuk Linux tersedia. Pilih format paket untuk sistem ini dan {productName} akan menyimpannya secara lokal."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Suara masuk dibisukan"
msgid "Deafened by moderators"
msgstr "Suara masuk dibisukan oleh moderator"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Paket DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Setelan notifikasi default"
msgid "Default notifications"
msgstr "Notifikasi default"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Perangkat output default"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Notifikasi desktop telah diblokir. Kamu dapat mengaktifkannya nanti di p
msgid "Desktop startup"
msgstr "Mulai di desktop"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Pembaruan desktop {version} tersedia. Pilih paket Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Pembaruan desktop tersedia"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Pembaruan desktop tersedia. Pilih paket Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Audio perangkat saja"
msgid "Device details"
msgstr "Detail perangkat"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Perangkat tidak terhubung"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Unduh penginstal"
msgid "Download media"
msgstr "Unduh media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Unduh paket"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Seluruh sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Seluruh audio sistem"
@@ -15617,6 +15611,10 @@ msgstr "Mengikuti"
msgid "Following master • {effectiveValue}"
msgstr "Mengikuti volume utama • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Mengikuti pengaturan suara Windows Anda"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instal dari menu browsermu."
msgid "Install the new app"
msgstr "Instal aplikasi baru"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Terinstal"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplikasi Linux"
msgid "Linux default"
msgstr "Default Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Paket Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Perlindungan maksimal untuk ruang yang ramah keluarga"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Dapat menyebabkan masalah kompatibilitas bagi penonton. Kami sedang berupaya memperbaikinya."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Mungkin menyertakan audio panggilan dari aplikasi mixer"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Utas baru tidak akan lagi muncul di daftar saluran setelah periode tidak
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Pengguna baru tidak dapat bergabung sekarang. Kamu masih bisa membuat akun atau masuk, lalu coba tautan ini lagi nanti."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Versi baru"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Buka pengaturan"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Buka pusat perangkat lunak"
@@ -25337,6 +25326,11 @@ msgstr "Putar."
msgid "Playback"
msgstr "Pemutaran"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Perangkat pemutaran"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Kotak centang gaya bulat"
msgid "Rows per page"
msgstr "Baris per halaman"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Paket RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Ketuk Bagikan, lalu Tambah ke Layar Utama."
msgid "Tap to add a note"
msgstr "Ketuk untuk menambahkan catatan"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Arsip tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Koneksi ditingkatkan ke TLS hanya jika server menawarkannya."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Pembaruan desktop tidak dapat diunduh. Coba lagi dari tombol pembaruan saat koneksimu stabil."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "File yang diunduh disimpan di komputermu. Instal dengan manajer paket yang biasa kamu pakai."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Hingga 4K pada 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Hingga 720p pada 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Perbarui {appName} dari pusat perangkat lunak Anda."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Perbarui {appName} sekarang"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Perbarui {appName} dengan manajer paket Anda, atau unduh versi baru."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} deve riavviarsi affinché la modifica della barra del tit
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} deve riavviarsi per disabilitare l'accelerazione hardware di Chromium. Usalo solo se stai risolvendo problemi grafici o un elevato utilizzo della GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "È disponibile {productName} {version}. Aggiornalo dal tuo software center."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "È disponibile {productName} {version}. Aggiornalo con il tuo gestore di pacchetti o scarica la nuova versione."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Un bot utile che fa cose straordinarie!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "un nome host, ad es. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "È disponibile un aggiornamento dell’app desktop per Linux. Scegli il formato del pacchetto per questo sistema e {productName} lo salverà localmente."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Audio disattivato"
msgid "Deafened by moderators"
msgstr "Audio disattivato dai moderatori"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Pacchetto DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Impostazioni predefinite delle notifiche"
msgid "Default notifications"
msgstr "Notifiche predefinite"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Dispositivo di output predefinito"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Le notifiche desktop sono state bloccate. Puoi riattivarle in seguito ne
msgid "Desktop startup"
msgstr "Avvio su desktop"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Aggiornamento desktop {version} disponibile. Scegli un pacchetto Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Aggiornamento desktop disponibile"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Aggiornamento desktop disponibile. Scegli un pacchetto Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Solo audio del dispositivo"
msgid "Device details"
msgstr "Dettagli del dispositivo"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Dispositivo non connesso"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Scarica programma di installazione"
msgid "Download media"
msgstr "Scarica media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Scarica pacchetto"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Intero sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Audio dell’intero sistema"
@@ -15617,6 +15611,10 @@ msgstr "Seguendo"
msgid "Following master • {effectiveValue}"
msgstr "Segue il volume principale • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Segui le impostazioni audio di Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installalo dal menu del tuo browser."
msgid "Install the new app"
msgstr "Installa la nuova app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installata"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "App Linux"
msgid "Linux default"
msgstr "Linux (predefinito)"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Pacchetto Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Massima protezione per gli spazi adatti alle famiglie"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Potrebbe causare problemi di compatibilità per gli spettatori. Stiamo lavorando per migliorare la situazione."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Può includere l'audio della chiamata dalle app di mixer"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "I nuovi thread smetteranno di essere visualizzati nell'elenco dei canali
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "I nuovi utenti non possono entrare nella community in questo momento. Puoi comunque creare un account o accedere, poi riprovare questo link più tardi."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nuova versione"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Apri impostazioni"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Apri il centro software"
@@ -25337,6 +25326,11 @@ msgstr "Riproduci."
msgid "Playback"
msgstr "Riproduzione"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Dispositivi di riproduzione"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Casella di spunta rotonda"
msgid "Rows per page"
msgstr "Righe per pagina"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Pacchetto RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tocca Condividi, quindi Aggiungi alla schermata Home."
msgid "Tap to add a note"
msgstr "Tocca per aggiungere una nota"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archivio tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "La connessione viene aggiornata a TLS solo se il server lo offre."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Non è stato possibile scaricare l'aggiornamento desktop. Riprova dal pulsante di aggiornamento quando la tua connessione sarà stabile."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Il file scaricato viene salvato sul tuo computer. Installalo con il tuo normale gestore di pacchetti."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Fino a 4K a 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Fino a 720p a 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Aggiorna {appName} dal tuo centro software."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Aggiorna {appName} ora"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Aggiorna {appName} con il tuo gestore di pacchetti o scarica la nuova versione."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "タイトルバーの変更を反映するには、{PRODUCT_NAME}を再
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Chromiumのハードウェアアクセラレーションを無効にするには、{PRODUCT_NAME}を再起動する必要があります。この設定は、グラフィックの不具合やGPU使用率の高さをトラブルシューティングする場合にのみ使用してください。"
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} が利用可能です。ソフトウェアセンターからアップデートしてください。"
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} が利用可能です。パッケージマネージャーで更新するか、新しいバージョンをダウンロードしてください。"
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "便利な機能が使えるボットです!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ホスト名(例: {exampleDomain})"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Linuxデスクトップ版のアップデートが利用可能です。このシステムで使用するパッケージ形式を選択すると、{productName}がファイルをローカルに保存します。"
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "スピーカーミュート中"
msgid "Deafened by moderators"
msgstr "モデレーターによりスピーカーミュートされています"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEBパッケージ"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "デフォルトの通知設定"
msgid "Default notifications"
msgstr "デフォルトの通知"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "デフォルトの出力デバイス"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "デスクトップ通知がブロックされました。ブラウザ設
msgid "Desktop startup"
msgstr "デスクトップ起動"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "デスクトップ版アップデート {version} が利用可能です。Linuxパッケージを選択してください。"
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "デスクトップ版のアップデートがあります"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "デスクトップ版のアップデートがあります。Linuxパッケージを選択してください。"
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "デバイスの音声のみ"
msgid "Device details"
msgstr "デバイスの詳細"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "デバイスが接続されていません"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "インストーラーをダウンロード"
msgid "Download media"
msgstr "メディアをダウンロード"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "パッケージをダウンロード"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "システム全体"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "システム全体の音声"
@@ -15617,6 +15611,10 @@ msgstr "フォロー中"
msgid "Following master • {effectiveValue}"
msgstr "マスター音量に従う • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Windowsのサウンド設定に従います"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "ブラウザのメニューからインストールしてください。
msgid "Install the new app"
msgstr "新しいアプリをインストール"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "インストール済み"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linuxアプリ"
msgid "Linux default"
msgstr "Linux デフォルト"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linuxパッケージ"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "ファミリー向けスペースを最大限保護"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "視聴者に互換性の問題が発生する可能性があります。現在改善に取り組んでいます。"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "ミキサーアプリからの通話音声が含まれる場合があります"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "この期間アクティブでないスレッドは、チャンネルリ
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "現在、新しいユーザーは参加できません。アカウントを作成するかサインインしてから、後でもう一度このリンクをお試しください。"
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "新しいバージョン"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "設定を開く"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "ソフトウェアセンターを開く"
@@ -25337,6 +25326,11 @@ msgstr "再生。"
msgid "Playback"
msgstr "再生"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "再生デバイス"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "丸型チェックボックス"
msgid "Rows per page"
msgstr "ページあたりの行数"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPMパッケージ"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "「共有」をタップし、「ホーム画面に追加」をタップ
msgid "Tap to add a note"
msgstr "タップしてメモを追加"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gzアーカイブ"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "サーバーが提供する場合にのみ、接続はTLSにアップグ
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "デスクトップのアップデートをダウンロードできませんでした。インターネット接続が安定していることを確認し、アップデートボタンからもう一度お試しください。"
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "ダウンロードされたファイルはコンピューターに保存されます。通常のパッケージマネージャーでインストールしてください。"
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "最大 4K 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "最大720p、30FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "ソフトウェアセンターから{appName}をアップデートしてください。"
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "{appName} を今すぐアップデート"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "パッケージマネージャーで{appName}をアップデートするか、新しいバージョンをダウンロードしてください。"
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "제목 표시줄 변경 사항을 적용하려면 {PRODUCT_NAME}을(를)
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Chromium의 하드웨어 가속을 비활성화하려면 {PRODUCT_NAME}을(를) 다시 시작해야 합니다. 그래픽 오류나 GPU 사용량이 높은 문제를 해결할 때만 사용하세요."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} 업데이트를 사용할 수 있습니다. 소프트웨어 센터에서 업데이트하세요."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} 버전을 사용할 수 있습니다. 패키지 관리자를 사용하여 업데이트하거나 새 버전을 다운로드하세요."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "놀라운 기능을 수행하는 유용한 봇입니다!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "호스트 이름(예: {exampleDomain})"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Linux 데스크톱 업데이트가 있습니다. 이 시스템에 맞는 패키지 형식을 선택하면 {productName}이 파일을 로컬에 저장합니다."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "소리 꺼짐"
msgid "Deafened by moderators"
msgstr "모더레이터에 의해 소리 꺼짐"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB 패키지"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "기본 알림 설정"
msgid "Default notifications"
msgstr "기본 알림"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "기본 출력 기기"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "데스크톱 알림이 차단되었습니다. 나중에 브라우저 설
msgid "Desktop startup"
msgstr "데스크톱 시작"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "데스크톱 업데이트 {version}을(를) 사용할 수 있습니다. Linux 패키지를 선택하세요."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "데스크톱 업데이트 사용 가능"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "데스크톱 업데이트를 사용할 수 있습니다. Linux 패키지를 선택하세요."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "기기 오디오만"
msgid "Device details"
msgstr "기기 정보"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "기기가 연결되지 않았습니다"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "설치 프로그램 다운로드"
msgid "Download media"
msgstr "미디어 다운로드"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "패키지 다운로드"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "시스템 전체"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "시스템 오디오 전체"
@@ -15617,6 +15611,10 @@ msgstr "팔로우 중"
msgid "Following master • {effectiveValue}"
msgstr "마스터 볼륨 따름 • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Windows 소리 설정에 따릅니다"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "브라우저 메뉴에서 설치하세요."
msgid "Install the new app"
msgstr "새 앱 설치"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "설치됨"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux 앱"
msgid "Linux default"
msgstr "Linux 기본값"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux 패키지"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "가족 친화적인 공간을 위한 최고의 보호"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "시청자에게 호환성 문제가 발생할 수 있습니다. 개선 중입니다."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "믹서 앱의 통화 오디오가 포함될 수 있습니다"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "새로운 스레드는 이 기간 동안 활동이 없으면 채널 목
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "지금은 새 사용자가 참여할 수 없습니다. 계정을 만들거나 로그인한 다음 나중에 이 링크를 다시 시도할 수 있습니다."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "새 버전"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "설정 열기"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "소프트웨어 센터 열기"
@@ -25337,6 +25326,11 @@ msgstr "재생."
msgid "Playback"
msgstr "재생"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "재생 장치"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "원형 체크박스"
msgid "Rows per page"
msgstr "페이지당 행 수"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM 패키지"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "공유를 탭한 다음 홈 화면에 추가를 탭하세요."
msgid "Tap to add a note"
msgstr "메모를 추가하려면 탭하세요"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz 아카이브"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "서버에서 제공하는 경우에만 연결이 TLS로 업그레이드
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "데스크톱 업데이트를 다운로드할 수 없습니다. 연결이 안정적일 때 업데이트 버튼을 눌러 다시 시도해 주세요."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "다운로드한 파일은 컴퓨터에 저장됩니다. 평소 사용하는 패키지 관리자로 설치하세요."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "최대 4K 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "최대 720p, 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "소프트웨어 센터에서 {appName}을(를) 업데이트하세요."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "{appName} 업데이트"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "패키지 관리자를 사용하여 {appName}을(를) 업데이트하거나 새 버전을 다운로드하세요."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Kad pavadinimo juostos pakeitimas įsigaliotų, {PRODUCT_NAME} reikia pa
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} reikia paleisti iš naujo, kad būtų išjungtas „Chromium“ aparatinės įrangos spartinimas. Naudokite tai tik tada, kai sprendžiate grafikos trikdžių arba didelio GPU naudojimo problemas."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "Galimas naujinimas {productName} {version}. Atnaujinkite jį savo programėlių centre."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Galimas naujinimas {productName} {version}. Atnaujinkite naudodami paketų tvarkyklę arba atsisiųskite naują versiją."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Naudingas botas, kuris daro nuostabius dalykus!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "pagrindinio kompiuterio pavadinimas, pvz., {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Prieinamas „Linux“ darbalaukio atnaujinimas. Pasirinkite šios sistemos paketų formatą, o programa „{productName}“ išsaugos jį jūsų įrenginyje."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Garsas išjungtas"
msgid "Deafened by moderators"
msgstr "Garsą išjungė moderatoriai"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB paketas"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Numatytieji pranešimų nustatymai"
msgid "Default notifications"
msgstr "Numatytieji pranešimai"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Numatytasis išvesties įrenginys"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Darbalaukio pranešimai buvo užblokuoti. Juos vėliau galite įjungti n
msgid "Desktop startup"
msgstr "Darbalaukio paleidimas"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Galimas darbalaukio naujinimas {version}. Pasirinkite „Linux“ paketą."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Galimas darbalaukio naujinimas"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Galimas darbalaukio naujinimas. Pasirinkite „Linux“ paketą."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Tik garso įrenginys"
msgid "Device details"
msgstr "Įrenginio informacija"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Įrenginys neprijungtas"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Atsisiųsti diegimo programą"
msgid "Download media"
msgstr "Atsisiųsti mediją"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Atsisiųsti paketą"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Visa sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Visos sistemos garsas"
@@ -15617,6 +15611,10 @@ msgstr "Seku"
msgid "Following master • {effectiveValue}"
msgstr "Pagal pagrindinį garsumą • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Pagal jūsų „Windows“ garso nuostatas"
#. 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
msgid "Font"
@@ -18281,11 +18279,6 @@ msgstr "Įdiekite jį iš savo naršyklės meniu."
msgid "Install the new app"
msgstr "Įdiegti naująją programėlę"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Įdiegta"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19795,11 +19788,6 @@ msgstr "„Linux“ programa"
msgid "Linux default"
msgstr "„Linux“ numatytasis įrenginys"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "„Linux“ paketas"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20547,6 +20535,10 @@ msgstr "Didžiausia apsauga šeimai tinkamoms erdvėms"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Gali sukelti suderinamumo problemų žiūrovams. Stengiamės tai pagerinti."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Gali būti įtrauktas skambučio garsas iš mikserio programėlių"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22431,11 +22423,6 @@ msgstr "Naujos temos nustos rodytis kanalo sąraše po šio neaktyvumo laikotarp
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nauji naudotojai šiuo metu negali prisijungti. Vis tiek galite susikurti paskyrą arba prisijungti, o vėliau vėl pabandyti pasinaudoti šia nuoroda."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nauja versija"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24143,6 +24130,8 @@ msgid "Open settings"
msgstr "Atidaryti nustatymus"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Atidaryti programų centrą"
@@ -25338,6 +25327,11 @@ msgstr "Leisti."
msgid "Playback"
msgstr "Atkūrimas"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Garso įrenginiai"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28465,11 +28459,6 @@ msgstr "Apvalaus stiliaus žymimasis langelis"
msgid "Rows per page"
msgstr "Eilutės puslapyje"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM paketas"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33121,11 +33110,6 @@ msgstr "Palieskite Bendrinti, tada – Pridėti prie pradžios ekrano."
msgid "Tap to add a note"
msgstr "Palieskite, kad pridėtumėte pastabą"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz archyvas"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33514,11 +33498,6 @@ msgstr "Ryšys atnaujinamas į TLS tik tuo atveju, jei jį siūlo serveris."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Nepavyko atsisiųsti darbalaukio naujinimo. Bandykite dar kartą paspaudę naujinimo mygtuką, kai ryšys bus stabilus."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Atsisiųstas failas išsaugotas jūsų kompiuteryje. Įdiekite jį naudodami įprastą paketų tvarkyklę."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36549,11 +36528,21 @@ msgstr "Iki 4K esant 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Iki 720p esant 30 kadrų per sekundę"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Atnaujinkite {appName} savo programinės įrangos centre."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Atnaujinti {appName} dabar"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Atnaujinkite {appName} naudodami savo paketų tvarkytuvę arba atsisiųskite naują versiją."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} moet opnieuw worden opgestart om de wijziging van de tite
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} moet opnieuw worden opgestart om de hardwareversnelling van Chromium uit te schakelen. Gebruik dit alleen als je problemen met de grafische weergave of een hoog GPU-gebruik oplost."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} is beschikbaar. Werk het bij vanuit je softwarecentrum."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} is beschikbaar. Werk het bij met je pakketbeheerder of download de nieuwe versie."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Een behulpzame bot die geweldige dingen doet!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "een hostnaam, bijv. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Er is een Linux-desktopupdate beschikbaar. Kies het pakketformaat voor dit systeem, en {productName} zal het lokaal opslaan."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Geluid uitgeschakeld"
msgid "Deafened by moderators"
msgstr "Geluid uitgeschakeld door moderators"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-pakket"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Standaardmeldingsinstellingen"
msgid "Default notifications"
msgstr "Standaardmeldingen"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Standaard uitvoerapparaat"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Desktopmeldingen zijn geblokkeerd. Je kunt ze later inschakelen via je b
msgid "Desktop startup"
msgstr "Desktopapp opstarten"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Desktopupdate {version} beschikbaar. Kies een Linux-pakket."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Desktopupdate beschikbaar"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Desktopupdate beschikbaar. Kies een Linux-pakket."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Alleen apparaataudio"
msgid "Device details"
msgstr "Apparaatgegevens"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Apparaat niet verbonden"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Installatieprogramma downloaden"
msgid "Download media"
msgstr "Media downloaden"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Pakket downloaden"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Hele systeem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Volledige systeemaudio"
@@ -15617,6 +15611,10 @@ msgstr "Volgend"
msgid "Following master • {effectiveValue}"
msgstr "Volgt hoofdvolume • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Volgt uw Windows-geluidsinstellingen"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installeer het vanuit je browsermenu."
msgid "Install the new app"
msgstr "Nieuwe app installeren"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Geïnstalleerd"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-app"
msgid "Linux default"
msgstr "Standaard van Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-pakket"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximale bescherming voor gezinsvriendelijke ruimtes"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Kan compatibiliteitsproblemen veroorzaken voor kijkers. We werken eraan om dit te verbeteren."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Kan oproepaudio van mixer-apps bevatten"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nieuwe threads verdwijnen na deze periode van inactiviteit uit de kanaal
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nieuwe gebruikers kunnen nu niet deelnemen. Je kunt nog steeds een account aanmaken of inloggen en deze link later opnieuw proberen."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nieuwe versie"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Instellingen openen"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Open softwarecentrum"
@@ -25337,6 +25326,11 @@ msgstr "Afspelen."
msgid "Playback"
msgstr "Afspelen"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Afspelen apparaten"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Rond selectievakje"
msgid "Rows per page"
msgstr "Rijen per pagina"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-pakket"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tik op Deel en vervolgens op Zet op beginscherm."
msgid "Tap to add a note"
msgstr "Tik om een notitie toe te voegen"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-archief"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "De verbinding wordt alleen opgewaardeerd naar TLS als de server dit aanb
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "De desktopupdate kon niet worden gedownload. Probeer het opnieuw via de updateknop wanneer je verbinding stabiel is."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Het gedownloade bestand is opgeslagen op je computer. Installeer het met je normale pakketbeheerder."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Tot 4K bij 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Tot 720p op 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Update {appName} vanuit je softwarecentrum."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Update {appName} nu"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Update {appName} met je package manager, of download de nieuwe versie."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} må starte på nytt for at endringen i tittellinjen skal
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} må starte på nytt for å deaktivere Chromiums maskinvareakselerasjon. Bruk dette kun hvis du feilsøker grafikkfeil eller høy GPU-bruk."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} er tilgjengelig. Oppdater den fra programvaresenteret ditt."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} er tilgjengelig. Oppdater den med pakkebehandleren din, eller last ned den nye versjonen."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "En hjelpsom bot som gjør fantastiske ting!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "et vertsnavn, f.eks. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "En oppdatering av skrivebordsappen for Linux er tilgjengelig. Velg pakkeformatet for dette systemet, så lagrer {productName} det lokalt."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Lyden er slått av"
msgid "Deafened by moderators"
msgstr "Moderatorene har slått av lyden"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-pakke"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Standard varslingsinnstillinger"
msgid "Default notifications"
msgstr "Standardvarsler"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Standard utdataenhet"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Skrivebordsvarsler er blokkert. Du kan aktivere dem senere i nettleserin
msgid "Desktop startup"
msgstr "Oppstart på datamaskin"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Oppdatering {version} til skrivebordsappen er tilgjengelig. Velg en Linux-pakke."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Oppdatering til skrivebordsappen er tilgjengelig"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "En oppdatering til skrivebordsappen er tilgjengelig. Velg en Linux-pakke."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Kun lyden fra enheten"
msgid "Device details"
msgstr "Enhetsdetaljer"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Enhet ikke tilkoblet"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Last ned installasjonsprogram"
msgid "Download media"
msgstr "Last ned medier"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Last ned pakke"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Hele systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "All systemlyd"
@@ -15617,6 +15611,10 @@ msgstr "Følger"
msgid "Following master • {effectiveValue}"
msgstr "Følger hovedvolumet • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Følger lydinnstillingene dine i Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installer det fra nettlesermenyen din."
msgid "Install the new app"
msgstr "Installer den nye appen"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installert"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-app"
msgid "Linux default"
msgstr "Linux – standard"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-pakke"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maksimal beskyttelse for familievennlige områder"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Kan forårsake kompatibilitetsproblemer for seere. Vi jobber med å forbedre dette."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Kan inkludere samtalelyd fra mikserapper"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nye tråder slutter å vises i kanallisten etter denne perioden med inak
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nye brukere kan ikke bli med akkurat nå. Du kan fortsatt opprette en konto eller logge på, og deretter prøve denne lenken igjen senere."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Ny versjon"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Åpne innstillinger"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Åpne programvaresenteret"
@@ -25337,6 +25326,11 @@ msgstr "Spill av."
msgid "Playback"
msgstr "Avspilling"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Avspillingsenheter"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Rund avkrysningsboks"
msgid "Rows per page"
msgstr "Rader per side"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-pakke"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Trykk Del, deretter Legg til på Hjem-skjerm."
msgid "Tap to add a note"
msgstr "Trykk for å legge til et notat"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-arkiv"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Tilkoblingen oppgraderes til TLS kun hvis serveren tilbyr det."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Skrivebordsoppdateringen kunne ikke lastes ned. Prøv igjen fra oppdateringsknappen når tilkoblingen din er stabil."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Den nedlastede filen er lagret på datamaskinen din. Installer den med din vanlige pakkebehandler."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Opptil 4K ved 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Opptil 720p med 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Oppdater {appName} fra programvaresenteret ditt."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Oppdater {appName} nå"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Oppdater {appName} med pakkebehandleren din, eller last ned den nye versjonen."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Uruchom ponownie aplikację {PRODUCT_NAME}, aby zastosować zmianę pask
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Uruchom ponownie aplikację {PRODUCT_NAME}, aby wyłączyć przyspieszenie sprzętowe Chromium. Używaj tej opcji tylko przy rozwiązywaniu problemów z grafiką lub wysokim obciążeniem GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} w wersji {version} jest dostępna. Zaktualizuj ją z centrum oprogramowania."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Dostępna jest nowa wersja {productName} {version}. Zaktualizuj ją za pomocą menedżera pakietów lub pobierz nową wersję."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Pomocny bot, który potrafi zdziałać cuda!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "nazwa hosta, np. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Dostępna jest aktualizacja aplikacji komputerowej dla systemu Linux. Wybierz format pakietu dla tego systemu, a {productName} zapisze go lokalnie."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Dźwięk wyłączony"
msgid "Deafened by moderators"
msgstr "Dźwięk wyłączony przez moderatorów"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Pakiet DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Domyślne ustawienia powiadomień"
msgid "Default notifications"
msgstr "Domyślne powiadomienia"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Domyślne urządzenie wyjściowe"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Powiadomienia na komputerze zostały zablokowane. Możesz je włączyć
msgid "Desktop startup"
msgstr "Uruchamianie z systemem"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Dostępna aktualizacja aplikacji komputerowej {version}. Wybierz pakiet dla systemu Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Dostępna aktualizacja aplikacji komputerowej"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Dostępna aktualizacja aplikacji. Wybierz pakiet dla systemu Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Tylko dźwięk z urządzenia"
msgid "Device details"
msgstr "Szczegóły urządzenia"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Urządzenie nie jest podłączone"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Pobierz instalator"
msgid "Download media"
msgstr "Pobierz multimedia"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Pobierz pakiet"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Cały system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Dźwięk z całego systemu"
@@ -15617,6 +15611,10 @@ msgstr "Obserwuję"
msgid "Following master • {effectiveValue}"
msgstr "Jak głośność główna • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Zgodnie z ustawieniami dźwięku systemu Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Zainstaluj ją z menu przeglądarki."
msgid "Install the new app"
msgstr "Zainstaluj nową aplikację"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Zainstalowano"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplikacja dla systemu Linux"
msgid "Linux default"
msgstr "Domyślne urządzenie audio systemu Linux."
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Pakiet dla systemu Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maksymalna ochrona dla przestrzeni przyjaznych rodzinie"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Może powodować problemy z kompatybilnością u widzów. Pracujemy nad poprawą tej funkcji."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Może zawierać dźwięk rozmowy z aplikacji miksujących"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nowe wątki przestaną być widoczne na liście kanału po tym okresie b
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nowi użytkownicy nie mogą teraz dołączyć. Nadal możesz utworzyć konto lub się zalogować, a później spróbować ponownie użyć tego linku."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nowa wersja"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Otwórz ustawienia"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Otwórz centrum oprogramowania"
@@ -25337,6 +25326,11 @@ msgstr "Odtwórz."
msgid "Playback"
msgstr "Odtwarzanie"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Urządzenia odtwarzania"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Okrągłe pole wyboru"
msgid "Rows per page"
msgstr "Wiersze na stronę"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Pakiet RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Stuknij Udostępnij, a następnie Do ekranu początkowego."
msgid "Tap to add a note"
msgstr "Dotknij, aby dodać notatkę"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Archiwum tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Połączenie jest szyfrowane protokołem TLS tylko wtedy, gdy serwer go
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Nie udało się pobrać aktualizacji aplikacji komputerowej. Gdy połączenie będzie stabilne, spróbuj ponownie za pomocą przycisku aktualizacji."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Pobrany plik został zapisany na Twoim komputerze. Zainstaluj go za pomocą swojego menedżera pakietów."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Do 4K przy 60 kl./s"
msgid "Up to 720p at 30 FPS"
msgstr "Do 720p przy 30 kl./s"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Zaktualizuj {appName} z centrum oprogramowania."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Zaktualizuj {appName} teraz"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Zaktualizuj {appName} za pomocą menedżera pakietów lub pobierz nową wersję."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "O {PRODUCT_NAME} precisa reiniciar para que a alteração na barra de t
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "O {PRODUCT_NAME} precisa reiniciar para desativar a aceleração de hardware do Chromium. Use isso apenas se você estiver solucionando problemas gráficos ou alto uso da GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} está disponível. Atualize-o pelo seu gerenciador de pacotes."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} está disponível. Atualize-o com seu gerenciador de pacotes ou baixe a nova versão."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Um bot prestativo que faz coisas incríveis!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "um nome de host, por exemplo, {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Há uma atualização do aplicativo para Linux. Escolha o formato do pacote para este sistema e o {productName} salvará o arquivo localmente."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Com áudio desativado"
msgid "Deafened by moderators"
msgstr "Áudio desativado pelos moderadores"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Pacote DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Configurações de notificação padrão"
msgid "Default notifications"
msgstr "Notificações padrão"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Dispositivo de saída padrão"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "As notificações no computador foram bloqueadas. Você pode ativá-las
msgid "Desktop startup"
msgstr "Inicialização no computador"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Atualização {version} do aplicativo para computador disponível. Escolha um pacote Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Atualização do aplicativo para computador disponível"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Atualização para computador disponível. Escolha um pacote Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Áudio do dispositivo"
msgid "Device details"
msgstr "Detalhes do dispositivo"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Dispositivo não conectado"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Baixar instalador"
msgid "Download media"
msgstr "Baixar mídia"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Baixar pacote"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Sistema inteiro"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Áudio do sistema inteiro"
@@ -15617,6 +15611,10 @@ msgstr "Seguindo"
msgid "Following master • {effectiveValue}"
msgstr "Seguindo o volume principal • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Segue as configurações de som do seu Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instale-o pelo menu do seu navegador."
msgid "Install the new app"
msgstr "Instalar o novo app"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Instalado"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplicativo Linux"
msgid "Linux default"
msgstr "Dispositivo de áudio padrão do Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Pacote Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Proteção máxima para espaços familiares"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Pode causar problemas de compatibilidade para os espectadores. Estamos trabalhando para melhorar isso."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Pode incluir áudio de chamadas de apps de mixagem"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Novos tópicos deixarão de aparecer na lista de canais após este perí
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Novos usuários não podem entrar agora. Você ainda pode criar uma conta ou fazer login e tentar este link novamente mais tarde."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Nova versão"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Abrir configurações"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Abrir central de software"
@@ -25337,6 +25326,11 @@ msgstr "Reproduzir."
msgid "Playback"
msgstr "Reprodução"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Dispositivos de reprodução"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Caixa de seleção redonda"
msgid "Rows per page"
msgstr "Linhas por página"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Pacote RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Toque em Compartilhar e, em seguida, em Adicionar à Tela de Início."
msgid "Tap to add a note"
msgstr "Toque para adicionar uma nota"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Arquivo tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "A conexão é atualizada para TLS somente se o servidor a oferecer."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Não foi possível baixar a atualização para computador. Tente novamente no botão de atualização quando sua conexão estiver estável."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "O arquivo baixado é salvo no seu computador. Instale-o com seu gerenciador de pacotes normal."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Até 4K a 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Até 720p a 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Atualize o {appName} no seu gerenciador de softwares."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Atualizar {appName} agora"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Atualize o {appName} com seu gerenciador de pacotes ou baixe a nova versão."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} trebuie să repornească pentru ca modificarea barei de t
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} trebuie să repornească pentru a dezactiva accelerarea hardware a Chromium. Folosește această opțiune doar dacă depanezi erori grafice sau o utilizare ridicată a GPU-ului."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} este disponibil. Actualizați-l din centrul dvs. software."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} este disponibil. Actualizează-l cu managerul tău de pachete sau descarcă noua versiune."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Un bot util care face lucruri uimitoare!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "un nume de gazdă, de ex. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Este disponibilă o actualizare desktop pentru Linux. Alege formatul de pachet pentru acest sistem, iar {productName} îl va salva local."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Sunet dezactivat"
msgid "Deafened by moderators"
msgstr "Sunet dezactivat de moderatori"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Pachet DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Setări implicite de notificare"
msgid "Default notifications"
msgstr "Notificări implicite"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Dispozitiv de ieșire implicit"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Notificările desktop au fost blocate. Le poți activa mai târziu din s
msgid "Desktop startup"
msgstr "Pornire desktop"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Actualizare desktop {version} disponibilă. Alege un pachet Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Actualizare desktop disponibilă"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Actualizare desktop disponibilă. Alege un pachet Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Doar audio dispozitiv"
msgid "Device details"
msgstr "Detalii dispozitiv"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Dispozitivul nu este conectat"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Descarcă programul de instalare"
msgid "Download media"
msgstr "Descarcă media"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Descarcă pachetul"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Întregul sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Sunetul întregului sistem"
@@ -15617,6 +15611,10 @@ msgstr "Urmăresc"
msgid "Following master • {effectiveValue}"
msgstr "Urmează volumul principal • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Urmează setările de sunet din Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Instalează-l din meniul browserului tău."
msgid "Install the new app"
msgstr "Instalează aplicația nouă"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Instalat"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Aplicație Linux"
msgid "Linux default"
msgstr "Implicit Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Pachet Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Protecție maximă pentru spații potrivite familiilor"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Poate cauza probleme de compatibilitate pentru spectatori. Lucrăm la îmbunătățirea acestui aspect."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Poate include audio de la apeluri din aplicații de mixaj"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Noile discuții vor înceta să apară în lista canalului după aceast
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Utilizatorii noi nu se pot alătura momentan. Poți crea în continuare un cont sau te poți conecta, apoi încearcă din nou acest link mai târziu."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Versiune nouă"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Deschide setările"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Deschide centrul software"
@@ -25337,6 +25326,11 @@ msgstr "Redă."
msgid "Playback"
msgstr "Redare"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Dispozitive de redare"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Casetă de selectare rotundă"
msgid "Rows per page"
msgstr "Rânduri pe pagină"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Pachet RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Atinge Partajează, apoi Adaugă pe ecranul principal."
msgid "Tap to add a note"
msgstr "Atinge pentru a adăuga o notă"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Arhivă tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Conexiunea este actualizată la TLS doar dacă serverul o oferă."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Actualizarea pentru desktop nu a putut fi descărcată. Încearcă din nou de la butonul de actualizare când conexiunea ta este stabilă."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Fișierul descărcat este salvat pe computerul tău. Instalează-l cu managerul tău de pachete obișnuit."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Până la 4K la 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Până la 720p la 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Actualizează {appName} din centrul tău software."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Actualizează {appName} acum"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Actualizează {appName} cu managerul tău de pachete sau descarcă noua versiune."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Чтобы изменения в строке заголовка вст
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} нужно перезапустить, чтобы отключить аппаратное ускорение Chromium. Используйте это, только если устраняете графические сбои или высокую нагрузку на GPU."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} доступна. Обновите её из вашего центра приложений."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Доступна новая версия {productName} {version}. Обновите её с помощью менеджера пакетов или скачайте новую версию."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Полезный бот, который делает удивитель
msgid "a hostname, e.g. {exampleDomain}"
msgstr "имя хоста, например {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Доступно обновление для Linux. Выберите формат пакета для этой системы, и {productName} сохранит его локально."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Звук отключён"
msgid "Deafened by moderators"
msgstr "Звук отключён модераторами"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Пакет DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Настройки уведомлений по умолчанию"
msgid "Default notifications"
msgstr "Уведомления по умолчанию"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Устройство вывода по умолчанию"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Уведомления на компьютере заблокирова
msgid "Desktop startup"
msgstr "Автозапуск"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Доступно обновление для ПК {version}. Выберите пакет Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Доступно обновление для ПК"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Доступно обновление для ПК. Выберите пакет Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Аудио только с устройства"
msgid "Device details"
msgstr "Информация об устройстве"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Устройство не подключено"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Скачать установщик"
msgid "Download media"
msgstr "Скачать медиа"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Скачать пакет"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Вся система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Весь звук системы"
@@ -15617,6 +15611,10 @@ msgstr "Подписан"
msgid "Following master • {effectiveValue}"
msgstr "Как общая громкость • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Соответствует настройкам звука Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Установите его из меню браузера."
msgid "Install the new app"
msgstr "Установить новое приложение"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Установлено"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Приложение Linux"
msgid "Linux default"
msgstr "Linux (устройство по умолчанию)"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Пакет для Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Максимальная защита для семейных чатов
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Может вызвать проблемы совместимости у зрителей. Мы работаем над улучшением."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Может включать аудио звонка из приложений-микшеров"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Новые ветки перестанут отображаться в
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Новые пользователи пока не могут присоединиться. Вы можете создать аккаунт или войти, а затем попробовать эту ссылку позже."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Новая версия"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Открыть настройки"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Открыть центр приложений"
@@ -25337,6 +25326,11 @@ msgstr "Воспроизвести."
msgid "Playback"
msgstr "Воспроизведение"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Устройства воспроизведения"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Круглый флажок"
msgid "Rows per page"
msgstr "Строк на странице"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Пакет RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Нажмите «Поделиться», затем «На экран «
msgid "Tap to add a note"
msgstr "Нажмите, чтобы добавить заметку"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Архив tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Соединение будет обновлено до TLS только
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Не удалось загрузить обновление для ПК. Повторите попытку с помощью кнопки обновления, когда соединение станет стабильным."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Загруженный файл сохранен на вашем компьютере. Установите его с помощью обычного менеджера пакетов."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "До 4K при 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "До 720p при 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Обновите {appName} из вашего центра приложений."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Обновить {appName} сейчас"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Обновите {appName} с помощью вашего менеджера пакетов или скачайте новую версию."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} behöver startas om för att ändringen av namnlisten ska
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} måste startas om för att inaktivera Chromiums hårdvaruacceleration. Använd detta endast om du felsöker grafikproblem eller hög GPU-användning."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} är tillgänglig. Uppdatera den från ditt programcenter."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} är tillgängligt. Uppdatera det med din pakethanterare, eller ladda ner den nya versionen."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "En hjälpsam bot som gör fantastiska saker!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ett värdnamn, t.ex. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "En uppdatering av datorappen för Linux är tillgänglig. Välj paketformatet för det här systemet så sparar {productName} paketet lokalt."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Ljudet avstängt"
msgid "Deafened by moderators"
msgstr "Ljudet avstängt av moderatorer"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB-paket"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Standardinställningar för aviseringar"
msgid "Default notifications"
msgstr "Standardaviseringar"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Standard utmatningsenhet"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Datoraviseringar har blockerats. Du kan aktivera dem senare i webbläsar
msgid "Desktop startup"
msgstr "Start av datorappen"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Uppdatering {version} för datorappen är tillgänglig. Välj ett Linux-paket."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Uppdatering för datorappen är tillgänglig"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Uppdatering för datorappen är tillgänglig. Välj ett Linux-paket."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Endast enhetsljud"
msgid "Device details"
msgstr "Enhetsinformation"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Enhet inte ansluten"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Ladda ner installationsprogram"
msgid "Download media"
msgstr "Ladda ner medieobjekt"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Ladda ner paket"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Hela systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Hela systemljudet"
@@ -15617,6 +15611,10 @@ msgstr "Följer"
msgid "Following master • {effectiveValue}"
msgstr "Följer huvudvolymen • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Följer dina Windows-ljudinställningar"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Installera det från din webbläsarmeny."
msgid "Install the new app"
msgstr "Installera den nya appen"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Installerad"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux-app"
msgid "Linux default"
msgstr "Standard för Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux-paket"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Maximalt skydd för familjevänliga utrymmen"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Kan orsaka kompatibilitetsproblem för tittare. Vi arbetar på att förbättra detta."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Kan inkludera samtalsljud från mixerappar"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Nya trådar slutar visas i kanalens lista efter denna inaktivitetsperiod
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Nya användare kan inte gå med just nu. Du kan fortfarande skapa ett konto eller logga in och sedan försöka med den här länken igen senare."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Ny version"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Öppna inställningar"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Öppna programcenter"
@@ -25337,6 +25326,11 @@ msgstr "Spela upp."
msgid "Playback"
msgstr "Uppspelning"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Uppspelningsenheter"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Rund kryssruta"
msgid "Rows per page"
msgstr "Rader per sida"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM-paket"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Tryck på Dela och sedan på Lägg till på hemskärmen."
msgid "Tap to add a note"
msgstr "Tryck för att lägga till en anteckning"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz-arkiv"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Anslutningen uppgraderas till TLS endast om servern erbjuder det."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Uppdateringen för datorappen kunde inte laddas ner. Försök igen via uppdateringsknappen när anslutningen är stabil."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Den nedladdade filen sparas på din dator. Installera den med din vanliga pakethanterare."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Upp till 4K med 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Upp till 720p i 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Uppdatera {appName} från ditt programcenter."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Uppdatera {appName} nu"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Uppdatera {appName} med din pakethanterare, eller ladda ner den nya versionen."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} ต้องรีสตาร์ทเพื่อให
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} ต้องรีสตาร์ทเพื่อปิดการเร่งฮาร์ดแวร์ของ Chromium ใช้ตัวเลือกนี้เฉพาะเมื่อคุณกำลังแก้ปัญหาภาพกราฟิกผิดปกติหรือการใช้งาน GPU สูง"
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "มี {productName} {version} พร้อมให้อัปเดตแล้ว อัปเดตได้จากศูนย์ซอฟต์แวร์ของคุณ"
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "มี {productName} {version} พร้อมให้อัปเดตแล้ว อัปเดตด้วยตัวจัดการแพ็กเกจของคุณ หรือดาวน์โหลดเวอร์ชันใหม่"
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "บอทตัวช่วยที่ทำสิ่งน่าทึ
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ชื่อโฮสต์ เช่น {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "มีการอัปเดตเดสก์ท็อปสำหรับ Linux แล้ว เลือกรูปแบบแพ็กเกจสำหรับระบบนี้ แล้ว {productName} จะบันทึกไฟล์ไว้ในเครื่อง"
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "ปิดเสียงทั้งหมดแล้ว"
msgid "Deafened by moderators"
msgstr "ปิดเสียงทั้งหมดโดยผู้ดูแล"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "แพ็กเกจ DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "การตั้งค่าการแจ้งเตือนเร
msgid "Default notifications"
msgstr "การแจ้งเตือนเริ่มต้น"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "อุปกรณ์ส่งเสียงเริ่มต้น"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "การแจ้งเตือนบนเดสก์ท็อปถ
msgid "Desktop startup"
msgstr "การเริ่มต้นบนเดสก์ท็อป"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "มีอัปเดตเดสก์ท็อป {version} ให้ใช้งาน เลือกแพ็กเกจ Linux"
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "มีอัปเดตสำหรับเดสก์ท็อป"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "มีการอัปเดตเดสก์ท็อป เลือกแพ็กเกจ Linux"
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "เสียงอุปกรณ์เท่านั้น"
msgid "Device details"
msgstr "รายละเอียดอุปกรณ์"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "อุปกรณ์ไม่ได้เชื่อมต่อ"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "ดาวน์โหลดตัวติดตั้ง"
msgid "Download media"
msgstr "ดาวน์โหลดสื่อ"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "ดาวน์โหลดแพ็กเกจ"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "ทั้งระบบ"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "เสียงทั้งระบบ"
@@ -15617,6 +15611,10 @@ msgstr "กำลังติดตาม"
msgid "Following master • {effectiveValue}"
msgstr "ใช้ระดับเสียงหลัก • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "เป็นไปตามการตั้งค่าเสียงของ Windows ของคุณ"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "ติดตั้งจากเมนูเบราว์เซอร
msgid "Install the new app"
msgstr "ติดตั้งแอปใหม่"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "ติดตั้งแล้ว"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "แอป Linux"
msgid "Linux default"
msgstr "ค่าเริ่มต้นของ Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "แพ็กเกจ Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "ปกป้องเต็มที่เพื่อพื้นที
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "อาจทำให้ผู้ชมมีปัญหาด้านความเข้ากันได้ เรากำลังปรับปรุงเรื่องนี้อยู่"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "อาจรวมเสียงการโทรจากแอปมิกเซอร์"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "เธรดใหม่จะหยุดแสดงในรายก
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "ผู้ใช้ใหม่ไม่สามารถเข้าร่วมได้ในขณะนี้ คุณยังสามารถสร้างบัญชีหรือลงชื่อเข้าใช้ แล้วลองใช้ลิงก์นี้อีกครั้งในภายหลังได้"
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "เวอร์ชันใหม่"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "เปิดการตั้งค่า"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "เปิดศูนย์ซอฟต์แวร์"
@@ -25337,6 +25326,11 @@ msgstr "เล่น"
msgid "Playback"
msgstr "การเล่น"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "อุปกรณ์เสียง"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "ช่องทำเครื่องหมายแบบวงกล
msgid "Rows per page"
msgstr "จำนวนแถวต่อหน้า"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "แพ็กเกจ RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "แตะแชร์ แล้วแตะ เพิ่มไปยั
msgid "Tap to add a note"
msgstr "แตะเพื่อเพิ่มโน้ต"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "ไฟล์บีบอัด tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "การเชื่อมต่อจะอัปเกรดเป็
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "ไม่สามารถดาวน์โหลดการอัปเดตเดสก์ท็อปได้ โปรดลองอีกครั้งจากปุ่มอัปเดตเมื่อการเชื่อมต่อของคุณเสถียร"
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "ไฟล์ที่ดาวน์โหลดจะถูกบันทึกลงในคอมพิวเตอร์ของคุณ ติดตั้งด้วยตัวจัดการแพ็กเกจปกติของคุณ"
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "สูงสุด 4K ที่ 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "สูงสุด 720p ที่ 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "อัปเดต {appName} จากศูนย์ซอฟต์แวร์ของคุณ"
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "อัปเดต {appName} ตอนนี้"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "อัปเดต {appName} ด้วยตัวจัดการแพ็กเกจของคุณ หรือดาวน์โหลดเวอร์ชันใหม่"
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "Başlık çubuğu değişikliğinin etkili olması için {PRODUCT_NAME}
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "Chromium'un donanım hızlandırmasını devre dışı bırakmak için {PRODUCT_NAME} uygulamasının yeniden başlatılması gerekiyor. Bunu yalnızca grafik hatalarını veya yüksek GPU kullanımını gideriyorsanız kullanın."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} sürümü mevcut. Yazılım merkezinizden güncelleyin."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} sürümü mevcut. Paket yöneticinizle güncelleyebilir veya yeni sürümü indirebilirsiniz."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Harika şeyler yapan yardımcı bir bot!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "bir ana bilgisayar adı, örn. {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Linux masaüstü için bir güncelleme mevcut. Bu sistem için paket biçimini seçin ve {productName} uygulaması bunu yerel olarak kaydedecektir."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Sağırlaştırıldı"
msgid "Deafened by moderators"
msgstr "Moderatörler tarafından sağırlaştırıldı"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB paketi"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Varsayılan bildirim ayarları"
msgid "Default notifications"
msgstr "Varsayılan bildirimler"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Varsayılan çıktı aygıtı"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Masaüstü bildirimleri engellendi. Daha sonra tarayıcı ayarlarınızd
msgid "Desktop startup"
msgstr "Masaüstü başlangıcı"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Masaüstü güncellemesi {version} mevcut. Bir Linux paketi seçin."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Masaüstü güncellemesi mevcut"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Masaüstü güncellemesi mevcut. Bir Linux paketi seçin."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Yalnızca cihaz sesi"
msgid "Device details"
msgstr "Cihaz ayrıntıları"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Cihaz bağlı değil"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Yükleyiciyi indir"
msgid "Download media"
msgstr "Medyayı indir"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Paketi indir"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Tüm sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Tüm sistem sesi"
@@ -15617,6 +15611,10 @@ msgstr "Takip ediliyor"
msgid "Following master • {effectiveValue}"
msgstr "Ana ses düzeyini takip ediyor • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Windows ses ayarlarınızı izler"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Tarayıcı menünüzden yükleyin."
msgid "Install the new app"
msgstr "Yeni uygulamayı yükle"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Yüklü"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux uygulaması"
msgid "Linux default"
msgstr "Linux varsayılanı"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux paketi"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Aile dostu alanlar için maksimum koruma"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Görüntüleyenler için uyumluluk sorunlarına neden olabilir. Bunu iyileştirmek için çalışıyoruz."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Mikser uygulamalarından gelen arama sesini içerebilir"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Bu süre boyunca etkin olmayan yeni başlıklar kanal listesinde görün
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Yeni kullanıcılar şu anda katılamıyor. Yine de bir hesap oluşturabilir veya oturum açabilir, ardından bu bağlantıyı daha sonra tekrar deneyebilirsiniz."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Yeni sürüm"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Ayarları aç"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Yazılım merkezini aç"
@@ -25337,6 +25326,11 @@ msgstr "Oynat."
msgid "Playback"
msgstr "Oynatma"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Ses çıkış aygıtları"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Yuvarlak stil onay kutusu"
msgid "Rows per page"
msgstr "Sayfa başına satır"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM paketi"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Paylaş'a dokunun, ardından Ana Ekrana Ekle'yi seçin."
msgid "Tap to add a note"
msgstr "Not eklemek için dokun"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz arşivi"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Sunucu teklif ederse bağlantı TLS'ye yükseltilir."
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Masaüstü güncellemesi indirilemedi. Bağlantınız kararlı olduğunda güncelleme düğmesinden tekrar deneyin."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "İndirilen dosya bilgisayarınıza kaydedildi. Normal paket yöneticinizle yükleyin."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "En fazla 4K 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "30 FPS ile 720p'ye kadar"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Yazılım merkezinizden {appName}'i güncelleyin."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Şimdi {appName} uygulamasını güncelle"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Paket yöneticinizle {appName}'i güncelleyin veya yeni sürümü indirin."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
@@ -29,6 +29,7 @@ Use natural Ukrainian app language with friendly neutral tone. Follow Telegram,
- role, permission, invite, webhook, passkey, OAuth, and bot: use conventional app or developer terminology.
- favorites: translate as saved or favorite items according to the locale's app convention, not as a romantic preference.
- Discovery: keep as the named Fluxer area if that reads naturally. Otherwise translate as the app's discovery or explore area.
- emoji: always use «емоджі», never «емодзі».
## Quality check
+90 -101
View File
@@ -89,7 +89,7 @@ msgstr "{actor} додав(-ла) стікер"
#. Activity log summary for a custom emoji that was added to the community when its name was not recorded. {actor} is the member who added it, shown as a clickable user chip, or the word System.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} added an emoji"
msgstr "{actor} додав(-ла) емодзі"
msgstr "{actor} додав(-ла) емоджі"
#. Activity log summary for a bot that was added to the community. {actor} is the member who added the bot, shown as a clickable user chip, or the word System. {target} is the bot, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts
@@ -104,7 +104,7 @@ msgstr "{actor} додав(-ла) бота {target} як тимчасового
#. Activity log summary for a custom emoji that was uploaded or copied to the community. {actor} is the member who added it, shown as a clickable user chip, or the word System. {emoji} is the emoji, shown as its image when it still exists, followed by its name between colons, for example :blobcat:.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} added the emoji {emoji}"
msgstr "{actor} додав(-ла) емодзі {emoji}"
msgstr "{actor} додав(-ла) емоджі {emoji}"
#. Activity log summary for a sticker that was uploaded or copied to the community. {actor} is the member who added it, shown as a clickable user chip, or the word System. {name} is the sticker name, shown in bold. The app adds the bold, so do not add ** or <b>.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
@@ -334,7 +334,7 @@ msgstr "{actor} видалив(-ла) вебхук"
#. Activity log summary for a custom emoji that was deleted when its name was not recorded. {actor} is the member who deleted it, shown as a clickable user chip, or the word System.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} deleted an emoji"
msgstr "{actor} видалив(-ла) емодзі"
msgstr "{actor} видалив(-ла) емоджі"
#. Activity log summary for several messages that were deleted together when neither their number nor the channel was recorded. {actor} is the member who deleted them, shown as a clickable user chip, or the word System.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
@@ -364,7 +364,7 @@ msgstr "{actor} видалив(-ла) канал {channel}"
#. Activity log summary for a custom emoji that was deleted from the community. {actor} is the member who deleted it, shown as a clickable user chip, or the word System. {emoji} is the name of the deleted emoji between colons, for example :blobcat:, shown without an image.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} deleted the emoji {emoji}"
msgstr "{actor} видалив(-ла) емодзі {emoji}"
msgstr "{actor} видалив(-ла) емоджі {emoji}"
#. Activity log summary when a forum channel was deleted. {channel} is the deleted channel, shown as a channel chip with the name it had.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogForumPresentation.ts
@@ -629,7 +629,7 @@ msgstr "{actor} перейменував(-ла) спільноту з {oldName}
#. Activity log summary for a custom emoji that got a new name. Only the name changed. The emoji was not replaced with a different one. {actor} is the member who renamed it, shown as a clickable user chip, or the word System. {oldEmoji} is the previous name between colons, shown without an image. {newEmoji} is the new name between colons, shown after the emoji image when the emoji still exists.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} renamed the emoji {oldEmoji} to {newEmoji}"
msgstr "{actor} перейменував(-ла) емодзі {oldEmoji} на {newEmoji}"
msgstr "{actor} перейменував(-ла) емоджі {oldEmoji} на {newEmoji}"
#. Activity log summary when the only change to a forum channel was its name. {oldName} and {newName} are shown in bold by the app, so do not add ** or <b>.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogForumPresentation.ts
@@ -794,7 +794,7 @@ msgstr "{actor} оновив(-ла) вебхук"
#. Activity log summary for a custom emoji that was edited when neither a change nor the emoji name is known. {actor} is the member who edited it, shown as a clickable user chip, or the word System.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} updated an emoji"
msgstr "{actor} оновив(-ла) емодзі"
msgstr "{actor} оновив(-ла) емоджі"
#. Activity log summary when settings of an announcement channel were changed. The changes are listed as detail rows below it. {actor} is the member who made the change, shown as a clickable user chip, or the word System. {channel} is the channel, shown as a channel chip with its name.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogChannelMessages.ts
@@ -819,7 +819,7 @@ msgstr "{actor} оновив налаштування спільноти"
#. Activity log summary for a custom emoji that was edited when no change to show was recorded. {actor} is the member who edited it, shown as a clickable user chip, or the word System. {emoji} is the emoji, shown as its image when it still exists, followed by its name between colons, for example :blobcat:.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "{actor} updated the emoji {emoji}"
msgstr "{actor} оновив(-ла) емодзі {emoji}"
msgstr "{actor} оновив(-ла) емоджі {emoji}"
#. Activity log summary when settings of a forum channel were changed. The changes are listed as detail rows below it. {channel} is shown as a channel chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogForumPresentation.ts
@@ -1328,7 +1328,7 @@ msgstr "{count, plural, one {Запрошення використали # ра
#. Body text of the emoji upload progress modal. {count} is the number of emojis being uploaded.
#: src/features/emoji/components/modals/EmojiUploadModal.tsx
msgid "{count, plural, one {Uploading # emoji. This may take a little while.} other {Uploading # emojis. This may take a little while.}}"
msgstr "{count, plural, one {Завантажується # емодзі. Це може зайняти трохи часу.} few {Завантажуються # емодзі. Це може зайняти трохи часу.} many {Завантажується # емодзі. Це може зайняти трохи часу.} other {Завантажується # емодзі. Це може зайняти трохи часу.}}"
msgstr "{count, plural, one {Завантажується # емоджі. Це може зайняти трохи часу.} few {Завантажуються # емоджі. Це може зайняти трохи часу.} many {Завантажується # емоджі. Це може зайняти трохи часу.} other {Завантажується # емоджі. Це може зайняти трохи часу.}}"
#: src/features/messaging/components/alerts/TooManyAttachmentsModal.tsx
msgid "{count, plural, one {You can only upload # file at a time. Try again with fewer files.} other {You can only upload # files at a time. Try again with fewer files.}}"
@@ -1802,6 +1802,16 @@ msgstr "Щоб зміни в рядку заголовка набули чинн
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} потрібно перезапустити, щоб вимкнути апаратне прискорення Chromium. Використовуйте це лише для усунення несправностей графіки або високого завантаження графічного процесора."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} доступно. Оновіть його з вашого програмного центру."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "Доступна нова версія {productName} {version}. Оновіть її за допомогою менеджера пакунків або завантажте нову версію."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2607,12 +2617,12 @@ msgstr "Спільнота, доступ до якої можливий лише
#. Description of a custom emoji in the emoji info card when the viewer can use it outside the community. productName is the Fluxer product name.
#: src/features/expressions/components/ExpressionInfoCard.tsx
msgid "A custom emoji from this community. You can use it anywhere on {productName}."
msgstr "Власний емодзі з цієї спільноти. Ви можете використовувати його будь-де в {productName}."
msgstr "Власний емоджі з цієї спільноти. Ви можете використовувати його будь-де в {productName}."
#. Description of a custom emoji in the emoji info card when the viewer can only use it inside the community.
#: src/features/expressions/components/ExpressionInfoCard.tsx
msgid "A custom emoji from this community. You can use it in this community."
msgstr "Власний емодзі з цієї спільноти. Ви можете використовувати його в цій спільноті."
msgstr "Власний емоджі з цієї спільноти. Ви можете використовувати його в цій спільноті."
#. Description of a custom sticker in the sticker info card when the viewer can use it outside the community. productName is the Fluxer product name.
#: src/features/expressions/components/ExpressionInfoCard.tsx
@@ -2632,7 +2642,7 @@ msgstr "дата або діапазон дат"
#. Description of a built-in unicode emoji in the emoji info card. productName is the Fluxer product name.
#: src/features/expressions/components/ExpressionInfoCard.tsx
msgid "A default emoji. You can use it anywhere on {productName}."
msgstr "Стандартний емодзі. Ви можете використовувати його будь-де в {productName}."
msgstr "Стандартний емоджі. Ви можете використовувати його будь-де в {productName}."
#. Inline validation error on the Discovery application form when the description field is empty.
#: src/features/guild/components/modals/guild_tabs/GuildDiscoveryTab.tsx
@@ -2669,11 +2679,6 @@ msgstr "Корисний бот, який робить дивовижні реч
msgid "a hostname, e.g. {exampleDomain}"
msgstr "ім'я хоста, наприклад, {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Доступне оновлення для комп'ютера в Linux. Оберіть формат пакета для цієї системи, і {productName} збереже його локально."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -3233,7 +3238,7 @@ msgstr "Додати електронну пошту"
#. Accessible label of the emoji button in the new post composer.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Add emoji"
msgstr "Додати емодзі"
msgstr "Додати емоджі"
#. Modal or page title for the add-favorite-channels flow.
#: src/features/expressions/components/modals/AddFavoriteChannelModal.tsx
@@ -3964,7 +3969,7 @@ msgstr "Кому дозволено запрошувати"
#. Activity log detail line under a community settings update, shown when the Let others clone your emojis setting was turned on. Members of other communities can now clone the custom emojis of this community into their own communities. Use the same word for clone as the Clone emoji and Clone sticker menu items. 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. It is not the label of the setting.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogGuildMessages.ts
msgid "Allowed others to clone this community's emojis"
msgstr "Дозволено іншим клонувати емодзі цієї спільноти"
msgstr "Дозволено іншим клонувати емоджі цієї спільноти"
#. Activity log detail line under a community settings update, shown when the Let others clone your stickers setting was turned on. Members of other communities can now clone the stickers of this community into their own communities. Use the same word for clone as the Clone emoji and Clone sticker menu items. 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. It is not the label of the setting.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogGuildMessages.ts
@@ -6116,7 +6121,7 @@ msgstr "Яскравість"
#. Plutonium page perk card body about global emojis and stickers.
#: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts
msgid "Bring custom emojis and stickers from any of your communities into every chat and community you're in."
msgstr "Додавайте власні емодзі та стікери з будь-яких спільнот до кожного чату та спільноти, в яких ви перебуваєте."
msgstr "Додавайте власні емоджі та стікери з будь-яких спільнот до кожного чату та спільноти, в яких ви перебуваєте."
#. Title of the modal shown when the browser autoplay policy blocks voice audio until the user interacts.
#: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx
@@ -8293,12 +8298,12 @@ 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/AdvancedSettingsIndex.ts
msgid "Clone emoji"
msgstr "Клонувати емодзі"
msgstr "Клонувати емоджі"
#. Submenu label listing communities the emoji can be cloned to.
#: src/features/ui/action_menu/items/ExpressionMenuConfig.ts
msgid "Clone emoji to..."
msgstr "Клонувати емодзі до..."
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/AdvancedSettingsIndex.ts
@@ -9604,7 +9609,7 @@ msgstr "Копіювати ID пристрою"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/user/components/settings_utils/search_index/AdvancedSettingsIndex.ts
msgid "Copy emoji"
msgstr "Копіювати емодзі"
msgstr "Копіювати емоджі"
#. Developer-mode action that copies the emoji ID to the clipboard.
#: src/features/ui/action_menu/items/ExpressionMenuConfig.ts
@@ -10996,12 +11001,12 @@ msgstr "Користувацькі дискримінатори недоступ
#. Accessible label for a custom emoji in the message composer. Preserve {emojiName} and {communityName}.
#: src/features/lexical/composer/nodes/ComposerCustomEmoji.tsx
msgid "Custom emoji {emojiName} from {communityName}"
msgstr "Власний емодзі {emojiName} зі спільноти {communityName}"
msgstr "Власний емоджі {emojiName} зі спільноти {communityName}"
#. Accessible label for a custom emoji in the message composer when its community name is unavailable. Preserve {emojiName}.
#: src/features/lexical/composer/nodes/ComposerCustomEmoji.tsx
msgid "Custom emoji {emojiName} from a community"
msgstr "Власний емодзі {emojiName} зі спільноти"
msgstr "Власний емоджі {emojiName} зі спільноти"
#. Error modal body shown when custom entrance sounds are disabled on the instance.
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx
@@ -11427,11 +11432,6 @@ msgstr "Звук вимкнено"
msgid "Deafened by moderators"
msgstr "Звук вимкнено модераторами"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Пакет DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11525,7 +11525,7 @@ msgstr "Камера за замовчуванням"
#. Short label in the channel and chat autocomplete emoji. Keep it concise.
#: src/features/channel/components/AutocompleteEmoji.tsx
msgid "Default emoji"
msgstr "Стандартний емодзі"
msgstr "Стандартний емоджі"
#. Label of the default auto archive duration for new threads in a text channel.
#: src/features/threads/utils/ThreadMessageDescriptors.ts
@@ -11546,6 +11546,10 @@ msgstr "Налаштування сповіщень за замовчуванн
msgid "Default notifications"
msgstr "Сповіщення за замовчуванням"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Пристрій виведення за замовчуванням"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Сповіщення на комп'ютері заблоковано. В
msgid "Desktop startup"
msgstr "Запуск на комп'ютері"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Доступне оновлення для комп'ютера {version}. Виберіть пакет Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Доступне оновлення для комп'ютера"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Доступне оновлення для комп'ютера. Виберіть пакет Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Аудіо пристрою"
msgid "Device details"
msgstr "Деталі пристрою"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Пристрій не підключено"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Завантажити інсталятор"
msgid "Download media"
msgstr "Завантажити медіа"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Завантажити пакунок"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -13705,7 +13698,7 @@ msgstr "емоджі {emojiName}"
#. Settings search entry label for opting into the emoji and sticker cloning shortcuts.
#: src/features/user/components/settings_utils/search_index/AdvancedSettingsIndex.ts
msgid "Emoji and sticker cloning shortcuts"
msgstr "Ярлики для клонування емодзі та стікерів"
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
@@ -13720,7 +13713,7 @@ msgstr "Кнопка емоджі"
#. Audit log entry label. A custom emoji was added to the community.
#: src/features/app/config/AuditLogConstants.ts
msgid "Emoji created"
msgstr "Емодзі створено"
msgstr "Емоджі створено"
#. Audit log entry label. A custom emoji was removed from the community.
#: src/features/app/config/AuditLogConstants.ts
@@ -13745,7 +13738,7 @@ msgstr "Назва емоджі має бути не довшою ніж 32 си
#. Description in the community emoji upload section. {maxSize} is the formatted size limit.
#: src/features/guild/components/modals/guild_tabs/GuildEmojiTab.tsx
msgid "Emoji names need at least 2 characters and can use letters, numbers, and underscores. Emojis must be under {maxSize}. Static images are resized to 128x128 pixels and compressed automatically. Animated emojis and SVGs must already fit the limit."
msgstr "Назви емодзі мають містити щонайменше 2 символи та можуть складатися з літер, цифр і підкреслень. Розмір емодзі має бути меншим за {maxSize}. Статичні зображення автоматично змінюються до розміру 128x128 пікселів і стискаються. Анімовані емодзі та SVG мають одразу відповідати обмеженню."
msgstr "Назви емоджі мають містити щонайменше 2 символи та можуть складатися з літер, цифр і підкреслень. Розмір емоджі має бути меншим за {maxSize}. Статичні зображення автоматично змінюються до розміру 128x128 пікселів і стискаються. Анімовані емоджі та SVG мають одразу відповідати обмеженню."
#. 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/ChatSettingsSections.ts
@@ -13890,7 +13883,7 @@ msgstr "Увімкнути доставку електронної пошти"
#. Short label for the experimental advanced setting.
#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedExperimentalControls.tsx
msgid "Enable emoji and sticker cloning shortcuts"
msgstr "Увімкнути швидкі дії для клонування емодзі та стікерів"
msgstr "Увімкнути швидкі дії для клонування емоджі та стікерів"
#: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx
msgid "Enable extra option"
@@ -13958,7 +13951,7 @@ msgstr "Увімкніть сповіщення, щоб бути в курсі
#. Button or menu action label in the search engines tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx
msgid "Enable or disable built-in reverse image search providers. Enabled providers appear in the context menu of images, avatars, banners, stickers, and emoji."
msgstr "Увімкніть або вимкніть вбудовані сервіси зворотного пошуку зображень. Увімкнені сервіси з'являються в контекстному меню зображень, аватарів, банерів, стікерів та емодзі."
msgstr "Увімкніть або вимкніть вбудовані сервіси зворотного пошуку зображень. Увімкнені сервіси з'являються в контекстному меню зображень, аватарів, банерів, стікерів та емоджі."
#. Button or menu action label in the search engines tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/SearchEnginesTab.tsx
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Уся система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Весь системний звук"
@@ -15200,7 +15194,7 @@ msgstr "Додати приватний чат до вибраного"
#. Emoji context menu action that adds the emoji to favorites.
#: src/features/ui/action_menu/items/ExpressionMenuConfig.ts
msgid "Favorite emoji"
msgstr "Додати емодзі до вибраного"
msgstr "Додати емоджі до вибраного"
#. Title of the error modal shown when no more favorite GIFs can be added.
#: src/features/expressions/commands/FavoriteGifCommands.ts
@@ -15617,6 +15611,10 @@ msgstr "Підписано"
msgid "Following master • {effectiveValue}"
msgstr "За загальною гучністю • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Відповідно до налаштувань звуку Windows"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Встановіть його з меню браузера."
msgid "Install the new app"
msgstr "Встановити новий застосунок"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Встановлено"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19470,7 +19463,7 @@ msgstr "Дозволити учасникам цієї спільноти над
#: src/features/guild/components/modals/guild_tabs/CloneAllowedToggle.tsx
msgid "Let others clone your emojis"
msgstr "Дозволити іншим клонувати ваші емодзі"
msgstr "Дозволити іншим клонувати ваші емоджі"
#: src/features/guild/components/modals/guild_tabs/CloneAllowedToggle.tsx
msgid "Let others clone your stickers"
@@ -19794,11 +19787,6 @@ msgstr "Застосунок для Linux"
msgid "Linux default"
msgstr "Стандартний аудіопристрій Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Пакет для Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20181,7 +20169,7 @@ msgstr "Керувати пристроями"
#. Permission name: allows editing or deleting custom emoji and stickers.
#: src/features/permissions/utils/PermissionLabelDescriptors.ts
msgid "Manage emoji & stickers"
msgstr "Керувати емодзі та стікерами"
msgstr "Керувати емоджі та стікерами"
#: src/features/channel/components/modals/channel_tabs/ChannelWebhooksTab.tsx
msgid "Manage incoming webhooks that can post messages into this channel."
@@ -20546,6 +20534,10 @@ msgstr "Максимальний захист для сімейних спіль
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Може спричинити проблеми сумісності у глядачів. Ми працюємо над покращенням."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Може включати аудіо виклику з програм-мікшерів"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Нові теми перестануть відображатися в
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Нові користувачі зараз не можуть приєднатися. Ви все ще можете створити обліковий запис або ввійти, а потім скористатися цим посиланням пізніше."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Нова версія"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Відкрити налаштування"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Відкрити центр програм"
@@ -25089,7 +25078,7 @@ msgstr "Виберіть постачальника вебпошуку"
#. Button that opens the emoji picker in forum settings.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Pick an emoji"
msgstr "Виберіть емодзі"
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
@@ -25337,6 +25326,11 @@ msgstr "Відтворити."
msgid "Playback"
msgstr "Відтворення"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Пристрої відтворення"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Круглий прапорець"
msgid "Rows per page"
msgstr "Рядків на сторінку"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Пакет RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -29719,7 +29708,7 @@ msgstr "Надсилати повідомлення в гілках"
#. One-line description of the text channel type in the create channel modal.
#: src/features/channel/utils/ChannelCreateModalUtils.ts
msgid "Send messages, images, GIFs and emoji"
msgstr "Надсилайте повідомлення, зображення, GIF-файли та емодзі"
msgstr "Надсилайте повідомлення, зображення, GIF-файли та емоджі"
#. Report flow: footer button on the summary screen that sends the report to the safety team.
#: src/features/moderation/components/report_flow/ReportFlowCopy.ts
@@ -30365,7 +30354,7 @@ msgstr "Показувати попередження про вміст у ць
#. Settings search entry description. One-line summary of what the setting controls.
#: src/features/user/components/settings_utils/search_index/AdvancedSettingsIndex.ts
msgid "Show a one-click shortcut for copying custom emojis and stickers from communities that allow it"
msgstr "Показувати кнопку копіювання в один клік для власних емодзі та стікерів зі спільнот, які це дозволяють"
msgstr "Показувати кнопку копіювання в один клік для власних емоджі та стікерів зі спільнот, які це дозволяють"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/NotificationsIndex.ts
@@ -30447,7 +30436,7 @@ msgstr "Показувати типовий аватар, ігноруючи в
#. Short label for an advanced message input preference.
#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedChatControls.tsx
msgid "Show default emojis in expression autocomplete"
msgstr "Показувати стандартні емодзі в автозаповненні виразів"
msgstr "Показувати стандартні емоджі в автозаповненні виразів"
#. Short label for an advanced media button preference.
#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedChatControls.tsx
@@ -32386,7 +32375,7 @@ msgstr "Припинено дозвіл на використання гнучк
#. Activity log detail line under a community settings update, shown when the Let others clone your emojis setting was turned off. Members of other communities can no longer clone the custom emojis of this community into their own communities. It is the reverse of the line for turning the setting on, so keep the two worded alike. Use the same word for clone as the Clone emoji and Clone sticker menu items. 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/AuditLogGuildMessages.ts
msgid "Stopped allowing others to clone this community's emojis"
msgstr "Більше не дозволено іншим клонувати емодзі цієї спільноти"
msgstr "Більше не дозволено іншим клонувати емоджі цієї спільноти"
#. Activity log detail line under a community settings update, shown when the Let others clone your stickers setting was turned off. Members of other communities can no longer clone the stickers of this community into their own communities. It is the reverse of the line for turning the setting on, so keep the two worded alike. Use the same word for clone as the Clone emoji and Clone sticker menu items. 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/AuditLogGuildMessages.ts
@@ -33120,11 +33109,6 @@ msgstr "Торкніться «Поширити», а потім «На Поча
msgid "Tap to add a note"
msgstr "Натисніть, щоб додати примітку"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Архів tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,15 +33497,10 @@ msgstr "З'єднання оновлюється до TLS лише тоді, к
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Не вдалося завантажити оновлення для комп'ютера. Спробуйте ще раз за допомогою кнопки оновлення, коли ваше з'єднання буде стабільним."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Завантажений файл збережено на вашому комп'ютері. Установіть його за допомогою звичайного менеджера пакунків."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
msgstr "Емодзі завантажив(-ла) {user}"
msgstr "Емоджі завантажив(-ла) {user}"
#: src/features/connection/components/modals/AddConnectionModal.tsx
msgid "The file contains the verification token we will fetch from <0>{dnsUrl}</0>."
@@ -34198,7 +34177,7 @@ msgstr "Цей емоджі не вдалося підготувати. Спро
#. Label above the community an emoji comes from in the emoji info card.
#: src/features/expressions/components/ExpressionInfoCard.tsx
msgid "This emoji is from"
msgstr "Цей емодзі з"
msgstr "Цей емоджі з"
#. Title of the error modal shown when a custom emoji was already deleted.
#. Title of the error modal shown when a custom emoji was deleted before the rename was saved.
@@ -34383,7 +34362,7 @@ msgstr "Це не та спільнота, яку ви шукаєте."
#: src/features/guild/components/modals/guild_tabs/CloneAllowedToggle.tsx
msgid "This is off until you turn it on. While it is on, members of other communities can use the in-app one-click \"Clone\" shortcut on your custom emojis. Turning it off does not prevent anyone from saving the image and uploading it themselves."
msgstr "Цю функцію вимкнено, доки ви її не ввімкнете. Коли її ввімкнено, учасники інших спільнот зможуть у один клік використовувати вбудовану кнопку «Клонувати» для ваших власних емодзі. Вимкнення цієї функції не завадить нікому зберегти зображення та завантажити його самостійно."
msgstr "Цю функцію вимкнено, доки ви її не ввімкнете. Коли її ввімкнено, учасники інших спільнот зможуть у один клік використовувати вбудовану кнопку «Клонувати» для ваших власних емоджі. Вимкнення цієї функції не завадить нікому зберегти зображення та завантажити його самостійно."
#: src/features/guild/components/modals/guild_tabs/CloneAllowedToggle.tsx
msgid "This is off until you turn it on. While it is on, members of other communities can use the in-app one-click \"Clone\" shortcut on your custom stickers. Turning it off does not prevent anyone from saving the image and uploading it themselves."
@@ -35977,7 +35956,7 @@ msgstr "Видалити приватний чат з вибраного"
#. Emoji context menu action that removes the emoji from favorites.
#: src/features/ui/action_menu/items/ExpressionMenuConfig.ts
msgid "Unfavorite emoji"
msgstr "Видалити емодзі з вибраного"
msgstr "Видалити емоджі з вибраного"
#. Action that removes a group DM from the favorites list.
#. DM list context menu item that removes a group DM from favorites.
@@ -36189,7 +36168,7 @@ msgstr "Розблокуйте всі власні емоджі та стіке
#. Premium upsell shown when sending custom emoji in a DM without a subscription.
#: src/features/expressions/utils/ExpressionPermissionUtils.ts
msgid "Unlock custom emojis in DMs with {premiumProductName}"
msgstr "Розблокуйте власні емодзі у приватних чатах з {premiumProductName}"
msgstr "Розблокуйте власні емоджі у приватних чатах з {premiumProductName}"
#. Premium upsell title in video settings.
#: src/features/user/components/modals/tabs/UserVideoTab.tsx
@@ -36548,11 +36527,21 @@ msgstr "До 4K при 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "До 720p зі швидкістю 30 кадрів/сек"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Оновіть {appName} у своєму центрі програмного забезпечення."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Оновити {appName} зараз"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Оновіть {appName} за допомогою менеджера пакунків або завантажте нову версію."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
@@ -36761,7 +36750,7 @@ msgstr "Завантажити новий"
#. Permission description in the role/permission editor for the Create Emoji & Stickers permission. Lets the member upload new custom expressions and edit the ones they uploaded.
#: src/features/permissions/utils/PermissionLabelDescriptors.ts
msgid "Upload new emoji and stickers, and manage your own creations."
msgstr "Завантажувати нові емодзі та стікери, а також керувати власними творіннями."
msgstr "Завантажувати нові емоджі та стікери, а також керувати власними творіннями."
#. Description for the screen-share preview toggle in the informational modal.
#: src/features/voice/components/modals/ScreenSharePickerModal.tsx
@@ -36958,7 +36947,7 @@ msgstr "Використовуйте застосунок автентифіка
#. Plutonium page comparison row label for animated emoji use.
#: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts
msgid "Use animated emojis in messages"
msgstr "Використовуйте анімовані емодзі в повідомленнях"
msgstr "Використовуйте анімовані емоджі в повідомленнях"
#. Settings search entry label. Names the settings search entry in the settings UI.
#: src/features/user/utils/UserMessageDescriptors.ts
@@ -36993,7 +36982,7 @@ msgstr "Використовувати вугільну тему (абсолют
#. Plutonium page comparison row label for global emojis and stickers.
#: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts
msgid "Use custom emojis and stickers in any community"
msgstr "Використовуйте власні емодзі та стікери в будь-якій спільноті"
msgstr "Використовуйте власні емоджі та стікери в будь-якій спільноті"
#. Short label in the banner uploader. Keep it concise. Keep the tone plain and specific.
#: src/features/user/utils/UserMessageDescriptors.ts
@@ -37023,7 +37012,7 @@ msgstr "Використовувати прямий доступ до прист
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
#: src/features/permissions/utils/PermissionLabelDescriptors.ts
msgid "Use emoji from other communities in this channel."
msgstr "Використовувати емодзі з інших спільнот у цьому каналі."
msgstr "Використовувати емоджі з інших спільнот у цьому каналі."
#. Premium upsell shown when sending external emoji without a subscription.
#: src/features/expressions/utils/ExpressionPermissionUtils.ts
@@ -38548,7 +38537,7 @@ msgstr "Радимо зберегти ці коди зараз, щоб не вт
#. Error text for static emoji uploads that still exceed the file size limit after resizing. {fileSize} and {maxSize} are formatted file sizes.
#: src/features/guild/components/modals/guild_tabs/GuildEmojiTab.tsx
msgid "We resized and compressed this emoji to 128x128 pixels, but it is still {fileSize}. The limit is {maxSize}. Try a simpler image, fewer colors, or a smaller source file."
msgstr "Ми змінили розмір і стиснули цей емодзі до 128x128 пікселів, але його розмір усе одно становить {fileSize}. Максимальний розмір: {maxSize}. Спробуйте простіше зображення, менше кольорів або менший вихідний файл."
msgstr "Ми змінили розмір і стиснули цей емоджі до 128x128 пікселів, але його розмір усе одно становить {fileSize}. Максимальний розмір: {maxSize}. Спробуйте простіше зображення, менше кольорів або менший вихідний файл."
#. Body of the sticker upload size error modal when a static image remains too large after resizing. {fileSize} and {maxSize} are formatted file sizes.
#: src/features/expressions/components/modals/AddGuildStickerModal.tsx
@@ -39365,7 +39354,7 @@ msgstr "Ви все одно можете створити обліковий з
#: src/features/user/components/modals/tabs/my_profile_tab/BioEditor.tsx
msgid "You can use links, emoji, and Markdown."
msgstr "Можна використовувати посилання, емодзі та Markdown."
msgstr "Можна використовувати посилання, емоджі та Markdown."
#. Title of the error modal shown when cloning an emoji or sticker is blocked by missing permissions.
#: src/features/app/components/alerts/ExpressionCloneFailedModal.tsx
@@ -39745,7 +39734,7 @@ msgstr "Щоб переглядати та редагувати вебхуки
#. Permission error shown when sending external emoji without the required permission.
#: src/features/expressions/utils/ExpressionPermissionUtils.ts
msgid "You need the \"{permissionLabel}\" permission to use emoji from other communities here."
msgstr "Щоб використовувати тут емодзі з інших спільнот, вам потрібен дозвіл «{permissionLabel}»."
msgstr "Щоб використовувати тут емоджі з інших спільнот, вам потрібен дозвіл «{permissionLabel}»."
#. Permission error shown when sending external stickers without the required permission.
#: src/features/expressions/utils/ExpressionPermissionUtils.ts
@@ -40279,7 +40268,7 @@ msgstr "Вашу електронну адресу підтверджено. Т
#. Plutonium page perk card title about using custom emojis and stickers in every community.
#: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts
msgid "Your emojis, everywhere"
msgstr "Ваші емодзі — скрізь"
msgstr "Ваші емоджі — скрізь"
#. Description text in the sounds.
#: src/features/user/components/modals/tabs/notifications_tab/NotificationsTabSounds.tsx
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} cần khởi động lại để thay đổi về thanh t
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} cần khởi động lại để tắt tính năng tăng tốc phần cứng của Chromium. Chỉ sử dụng tùy chọn này nếu bạn đang khắc phục sự cố đồ họa hoặc mức sử dụng GPU cao."
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} phiên bản {version} đã có sẵn. Hãy cập nhật từ trung tâm phần mềm của bạn."
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} đã có sẵn. Hãy cập nhật bằng trình quản lý gói của bạn hoặc tải xuống phiên bản mới."
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "Một bot hữu ích có thể làm được nhiều điều tuyệt v
msgid "a hostname, e.g. {exampleDomain}"
msgstr "một tên máy chủ, ví dụ: {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Đã có bản cập nhật cho ứng dụng máy tính trên Linux. Chọn định dạng gói cho hệ thống này và {productName} sẽ lưu về máy."
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "Đã tắt tiếng nghe"
msgid "Deafened by moderators"
msgstr "Đã bị người điều hành tắt tiếng nghe"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "Gói DEB"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "Cài đặt thông báo mặc định"
msgid "Default notifications"
msgstr "Thông báo mặc định"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "Thiết bị đầu ra mặc định"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "Thông báo trên máy tính đã bị chặn. Bạn có thể bật l
msgid "Desktop startup"
msgstr "Khởi động cùng máy tính"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "Có bản cập nhật {version} cho ứng dụng máy tính. Chọn gói Linux."
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "Có bản cập nhật cho ứng dụng máy tính"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "Có bản cập nhật cho ứng dụng máy tính. Chọn gói Linux."
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "Chỉ âm thanh thiết bị"
msgid "Device details"
msgstr "Chi tiết thiết bị"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "Thiết bị chưa được kết nối"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "Tải trình cài đặt"
msgid "Download media"
msgstr "Tải phương tiện"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "Tải gói"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "Toàn bộ hệ thống"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "Toàn bộ âm thanh hệ thống"
@@ -15617,6 +15611,10 @@ msgstr "Đang theo dõi"
msgid "Following master • {effectiveValue}"
msgstr "Theo âm lượng chính • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "Theo cài đặt âm thanh trên Windows của bạ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/AppearanceSections.ts
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "Cài đặt từ menu trình duyệt của bạn."
msgid "Install the new app"
msgstr "Cài đặt ứng dụng mới"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "Đã cài đặt"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Ứng dụng Linux"
msgid "Linux default"
msgstr "Mặc định của Linux"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Gói Linux"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "Bảo vệ tối đa cho không gian thân thiện với gia đình"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "Có thể gây ra sự cố tương thích cho người xem. Chúng tôi đang nỗ lực cải thiện điều này."
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "Có thể bao gồm âm thanh cuộc gọi từ các ứng dụng mixer"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "Luồng mới sẽ ngừng hiển thị trong danh sách kênh sau kho
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "Người dùng mới hiện chưa thể tham gia. Bạn vẫn có thể tạo tài khoản hoặc đăng nhập, sau đó thử lại liên kết này sau."
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "Phiên bản mới"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "Mở cài đặt"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "Mở trung tâm phần mềm"
@@ -25337,6 +25326,11 @@ msgstr "Phát."
msgid "Playback"
msgstr "Phát lại"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "Thiết bị phát lại"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "Ô đánh dấu kiểu tròn"
msgid "Rows per page"
msgstr "Số hàng mỗi trang"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "Gói RPM"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "Chạm vào Chia sẻ, sau đó chọn Thêm vào MH chính."
msgid "Tap to add a note"
msgstr "Nhấn để thêm ghi chú"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "Tệp nén tar.gz"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "Kết nối sẽ nâng cấp lên TLS chỉ khi máy chủ cung cấp t
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "Không thể tải bản cập nhật cho máy tính. Hãy thử lại bằng nút cập nhật khi kết nối của bạn ổn định."
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "Tệp đã tải xuống được lưu vào máy tính của bạn. Cài đặt bằng trình quản lý gói thông thường của bạn."
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "Lên đến 4K ở 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "Lên đến 720p ở 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "Cập nhật {appName} từ trung tâm phần mềm của bạn."
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "Cập nhật {appName} ngay bây giờ"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "Cập nhật {appName} bằng trình quản lý gói của bạn hoặc tải xuống phiên bản mới."
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} 需要重启才能使标题栏更改生效。"
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} 需要重启才能禁用 Chromium 的硬件加速。仅在排查图形故障或 GPU 占用过高时使用此功能。"
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} 可用。请从您的软件中心更新。"
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} 已发布。请使用你的包管理器进行更新,或下载新版本。"
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "一个能做很多厉害事情的实用机器人!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "主机名,例如 {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "Linux 桌面端有可用更新。请选择适用于此系统的软件包格式,{productName} 会将其保存到本地。"
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "已拒听"
msgid "Deafened by moderators"
msgstr "被管理员设为拒听"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB 软件包"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "默认通知设置"
msgid "Default notifications"
msgstr "默认通知"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "默认输出设备"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "桌面通知已被屏蔽。你之后可以在浏览器设置、用户设
msgid "Desktop startup"
msgstr "桌面端启动"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "桌面版更新 {version} 已可用。请选择一个 Linux 软件包。"
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "有可用的桌面版更新"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "有可用的桌面版更新。请选择一个 Linux 软件包。"
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "仅设备音频"
msgid "Device details"
msgstr "设备详情"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "设备未连接"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "下载安装程序"
msgid "Download media"
msgstr "下载媒体文件"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "下载安装包"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "整个系统"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "整个系统音频"
@@ -15617,6 +15611,10 @@ msgstr "已关注"
msgid "Following master • {effectiveValue}"
msgstr "跟随主音量 • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "遵循你的 Windows 音频设置"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "从浏览器菜单中安装。"
msgid "Install the new app"
msgstr "安装新应用"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "已安装"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux 应用"
msgid "Linux default"
msgstr "Linux 默认"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux 安装包"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "为家庭友好空间提供最高等级保护"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "可能会导致观看者出现兼容性问题。我们正在努力改进。"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "可能包含来自混音器应用的通话音频"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "新创建的帖子在不活跃一段时间后将不再显示在频道列
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "新用户暂时无法加入。你仍然可以创建账号或登录,稍后再次尝试此链接。"
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "新版本"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "打开设置"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "打开软件中心"
@@ -25337,6 +25326,11 @@ msgstr "播放。"
msgid "Playback"
msgstr "播放"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "播放设备"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "圆形样式复选框"
msgid "Rows per page"
msgstr "每页行数"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM 软件包"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "轻点“共享”,然后轻点“添加到主屏幕”。"
msgid "Tap to add a note"
msgstr "轻触添加备注"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz 压缩包"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "如果服务器提供该选项,连接将升级到 TLS。"
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "桌面更新下载失败。请在网络连接稳定后通过更新按钮重试。"
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "下载的文件已保存到你的电脑。请使用你的常规软件包管理器进行安装。"
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "最高 4K 60 帧"
msgid "Up to 720p at 30 FPS"
msgstr "最高 720p,30 帧/秒"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "从你的软件中心更新 {appName}。"
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "立即更新 {appName}"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "使用你的包管理器更新 {appName},或下载新版本。"
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
+44 -55
View File
@@ -1802,6 +1802,16 @@ msgstr "{PRODUCT_NAME} 需要重新啟動才能套用標題列的變更。"
msgid "{PRODUCT_NAME} needs to restart to disable Chromium's hardware acceleration. Use this only if you're troubleshooting graphics glitches or high GPU usage."
msgstr "{PRODUCT_NAME} 需要重新啟動才能停用 Chromium 的硬體加速。只有在排解顯示異常或 GPU 使用率過高的問題時才使用。"
#. Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it from your software center."
msgstr "{productName} {version} 已推出。請從你的軟體中心進行更新。"
#. Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "{productName} {version} is available. Update it with your package manager, or download the new version."
msgstr "{productName} {version} 已推出。請使用您的套件管理程式進行更新,或下載新版本。"
#. Accessible label for the Fluxer application icon.
#: src/features/ui/components/icons/FluxerIconMark.tsx
msgid "{productName} application icon"
@@ -2669,11 +2679,6 @@ msgstr "一個能做許多驚人事情的實用機器人!"
msgid "a hostname, e.g. {exampleDomain}"
msgstr "主機名稱,例如 {exampleDomain}"
#. Linux desktop updater modal body shown before version details and package format selector. productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally."
msgstr "有可用的 Linux 桌面版更新。請選擇此系統適用的套件格式,{productName} 會將檔案儲存在本機。"
#. Plutonium subscription card line offering a move to a lower price. {listPriceEffectiveDate} is a date already formatted and localized by code; never write a date into the translation.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx
msgid "A lower price is available. Switching takes effect on <0>{listPriceEffectiveDate}</0> and changes nothing else."
@@ -11427,11 +11432,6 @@ msgstr "已耳機靜音"
msgid "Deafened by moderators"
msgstr "遭管理員設為耳機靜音"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "DEB package"
msgstr "DEB 套件"
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#. Short label in the settings dialog mobile settings view.
#: src/features/app/components/dialogs/components/MobileSettingsView.tsx
@@ -11546,6 +11546,10 @@ msgstr "預設通知設定"
msgid "Default notifications"
msgstr "預設通知"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Default output device"
msgstr "預設輸出裝置"
#. Label of the forum setting that picks the reaction button shown on every post.
#: src/features/forum/utils/ForumMessageDescriptors.ts
msgid "Default reaction"
@@ -12095,21 +12099,11 @@ msgstr "桌面通知已被封鎖。您稍後可以在瀏覽器設定、使用者
msgid "Desktop startup"
msgstr "桌面版啟動"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update {version} available. Choose a Linux package."
msgstr "桌面版更新 {version} 已推出。請選擇 Linux 套件。"
#. Modal title shown when a new desktop app update can be downloaded.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop update available"
msgstr "有可用的桌面版更新"
#. Tooltip on the updater icon for a Linux desktop update that requires choosing a package format and no version is known.
#: src/features/channel/components/channel_header_components/UpdaterIcon.tsx
msgid "Desktop update available. Choose a Linux package."
msgstr "有可用的桌面版更新。請選擇 Linux 套件。"
#. Desktop updater modal body. The version placeholder is the target app version; productName is the app name.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Desktop version {version} is available. Download the installer, then run it to update {productName}."
@@ -12230,6 +12224,10 @@ msgstr "僅音訊裝置"
msgid "Device details"
msgstr "裝置詳細資訊"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Device not connected"
msgstr "裝置未連線"
#. Toast shown after a saved login session was signed out.
#: src/features/auth/components/modals/DeviceRevokeModal.tsx
msgid "Device revoked"
@@ -13049,11 +13047,6 @@ msgstr "下載安裝程式"
msgid "Download media"
msgstr "下載媒體"
#. Button label that downloads a selected Linux desktop update package.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Download package"
msgstr "下載套件"
#. Button that downloads the account recovery kit as a PDF file.
#: src/features/auth/components/modals/RecoveryKitModal.tsx
msgid "Download PDF"
@@ -14391,6 +14384,7 @@ msgid "Entire system"
msgstr "整個系統"
#: src/features/voice/components/AudioSourcePickerLinux.tsx
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Entire system audio"
msgstr "整個系統音訊"
@@ -15617,6 +15611,10 @@ msgstr "正在追蹤"
msgid "Following master • {effectiveValue}"
msgstr "跟隨主音量 • {effectiveValue}"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Follows your Windows sound settings"
msgstr "遵循你的 Windows 音效設定"
#. 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
msgid "Font"
@@ -18280,11 +18278,6 @@ msgstr "從瀏覽器選單安裝。"
msgid "Install the new app"
msgstr "安裝新版應用程式"
#. Label for the installed desktop version in the Linux update modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed"
msgstr "已安裝"
#. Desktop updater modal body. The currentVersion placeholder is the installed app version.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Installed version: {currentVersion}."
@@ -19794,11 +19787,6 @@ msgstr "Linux 應用程式"
msgid "Linux default"
msgstr "Linux 預設值"
#. Select label for choosing the Linux desktop package format to download.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Linux package"
msgstr "Linux 套件"
#. Forum layout name shown inside an activity log row.
#. Forum layout option that shows posts as rows.
#: src/features/forum/utils/ForumMessageDescriptors.ts
@@ -20546,6 +20534,10 @@ msgstr "為闔家適宜的空間提供最高等級的保護"
msgid "May cause compatibility issues for viewers. We’re working on improving this."
msgstr "可能會導致觀眾出現相容性問題。我們正在努力改善此情況。"
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "May include call audio from mixer apps"
msgstr "可能包含來自混音應用程式的通話音訊"
#. Short label in the max favorite memes modal.
#: src/features/app/components/alerts/MaxFavoriteMemesModal.tsx
#: src/features/expressions/components/modals/GiftAcceptModal.tsx
@@ -22430,11 +22422,6 @@ msgstr "閒置一段時間後,新討論串將不再顯示於頻道列表中。
msgid "New users can't join right now. You can still create an account or sign in, then try this link again later."
msgstr "新使用者目前無法加入。您仍然可以建立帳號或登入,稍後再試一次此連結。"
#. Fallback version label when the available desktop version is unknown.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "New version"
msgstr "新版本"
#. US state name, shown next to the country name in the mature content gate.
#: src/features/user/utils/UserGeo.ts
msgctxt "us-state"
@@ -24142,6 +24129,8 @@ msgid "Open settings"
msgstr "開啟設定"
#. Button label that opens the software center via appstream protocol.
#. Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.
#: src/features/platform/utils/DesktopLocaleBridge.ts
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "Open software center"
msgstr "開啟軟體中心"
@@ -25337,6 +25326,11 @@ msgstr "播放。"
msgid "Playback"
msgstr "播放"
#. Submenu label in the stream settings menu of a Windows screen share. Picks which playback devices the shared desktop audio comes from.
#: src/features/voice/components/StreamSettingsMenuContent.tsx
msgid "Playback devices"
msgstr "播放裝置"
#. Section / menu header above the playback rate options in the media player.
#. 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/AccessibilitySections.ts
@@ -28464,11 +28458,6 @@ msgstr "圓形樣式核取方塊"
msgid "Rows per page"
msgstr "每頁列數"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "RPM package"
msgstr "RPM 套件"
#. Settings search entry description. One-line summary of what the settings search entry controls.
#: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts
msgid "Run {productName} automatically when your computer starts"
@@ -33120,11 +33109,6 @@ msgstr "點一下「分享」,然後點一下「加入主畫面」。"
msgid "Tap to add a note"
msgstr "輕觸以新增記事"
#. Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "tar.gz archive"
msgstr "tar.gz 封存檔"
#. 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/SharedDescriptors.ts
msgid "Taskbar badge"
@@ -33513,11 +33497,6 @@ msgstr "如果伺服器提供,連線才會升級至 TLS。"
msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable."
msgstr "無法下載桌面版更新。請在網路連線穩定後,從更新按鈕重試。"
#. Help text below the Linux package format selector in the desktop updater modal.
#: src/features/updater/commands/UpdaterModalCommands.tsx
msgid "The downloaded file is saved to your computer. Install it with your normal package manager."
msgstr "下載的檔案已儲存到您的電腦。請使用您慣用的套件管理員進行安裝。"
#. Activity log detail line under a deleted emoji, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the emoji, shown as a clickable user chip.
#: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts
msgid "The emoji was uploaded by {user}"
@@ -36548,11 +36527,21 @@ msgstr "最高 4K 60 FPS"
msgid "Up to 720p at 30 FPS"
msgstr "最高 720p 30 FPS"
#. Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} from your software center."
msgstr "從您的軟體中心更新 {appName}。"
#. Tray menu item shown only while a desktop update is waiting. Clicking it installs the update. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} now"
msgstr "立即更新 {appName}"
#. Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).
#: src/features/platform/utils/DesktopLocaleBridge.ts
msgid "Update {appName} with your package manager, or download the new version."
msgstr "使用你的套件管理程式更新 {appName},或下載新版本。"
#. Linux settings text when the installed desktop app is too old for system-wide shortcuts. {productName} is the app name.
#: src/features/user/components/modals/tabs/components/SystemShortcutsSection.tsx
msgid "Update {productName} to use system-wide shortcuts on Wayland."
@@ -275,6 +275,20 @@ const UPDATE_MANUAL_DETAIL_DESCRIPTOR = msg({
message: 'Download the new version to update {appName}.',
comment: 'Native desktop dialog body under the headline announcing a new version that must be downloaded by hand.',
});
const UPDATE_MANAGED_DETAIL_DESCRIPTOR = msg({
message: 'Update {appName} with your package manager, or download the new version.',
comment:
'Native desktop dialog body under the headline announcing a new version, shown on a Linux install managed by a package manager such as a deb, rpm or AUR package. {appName} is the desktop app name (typically Fluxer).',
});
const UPDATE_FLATPAK_DETAIL_DESCRIPTOR = msg({
message: 'Update {appName} from your software center.',
comment:
'Native desktop dialog body under the headline announcing a new version, shown on a Flatpak install. {appName} is the desktop app name (typically Fluxer).',
});
const UPDATE_OPEN_SOFTWARE_CENTER_DESCRIPTOR = msg({
message: 'Open software center',
comment: 'Native desktop dialog button on a Flatpak install that opens the software center page for the desktop app.',
});
const UPDATE_UP_TO_DATE_MESSAGE_DESCRIPTOR = msg({
message: '{appName} is up to date.',
comment: 'Native desktop dialog headline after a manual update check found nothing newer.',
@@ -513,6 +527,9 @@ const NATIVE_MESSAGES: Record<string, NativeMessage> = {
'desktop.update.download': UPDATE_DOWNLOAD_DESCRIPTOR,
'desktop.update.manualMessage': UPDATE_MANUAL_MESSAGE_DESCRIPTOR,
'desktop.update.manualDetail': UPDATE_MANUAL_DETAIL_DESCRIPTOR,
'desktop.update.managedDetail': UPDATE_MANAGED_DETAIL_DESCRIPTOR,
'desktop.update.flatpakDetail': UPDATE_FLATPAK_DETAIL_DESCRIPTOR,
'desktop.update.openSoftwareCenter': UPDATE_OPEN_SOFTWARE_CENTER_DESCRIPTOR,
'desktop.update.upToDateMessage': UPDATE_UP_TO_DATE_MESSAGE_DESCRIPTOR,
'desktop.update.upToDateDetail': UPDATE_UP_TO_DATE_DETAIL_DESCRIPTOR,
'desktop.update.checkFailedMessage': UPDATE_CHECK_FAILED_MESSAGE_DESCRIPTOR,
@@ -667,7 +667,7 @@ export function useVoiceParticipantMenuData(options: VoiceParticipantMenuDataOpt
const useConnectionSpecificControls =
connectionId !== undefined && (isGroupedItem || connectionId !== MediaEngine.connectionId);
if (useConnectionSpecificControls) {
const isSelfMuted = connectionVoiceState?.self_mute ?? false;
const isSelfMuted = VoiceStateCommands.getSelfMuteForConnection(connectionId);
const isSelfDeafened = connectionVoiceState?.self_deaf ?? false;
const isCameraOn = connectionVoiceState?.self_video ?? false;
const isStreaming = connectionVoiceState?.self_stream ?? false;
@@ -726,7 +726,7 @@ export function useVoiceParticipantMenuData(options: VoiceParticipantMenuDataOpt
}
if (isDeviceScopedMenu) advancedActions.push(createCopyDeviceIdAction(connectionId));
} else if (currentConnectionId && canUseCurrentConnectionAsRoot) {
const isSelfMuted = currentUserVoiceState?.self_mute ?? false;
const isSelfMuted = VoiceStateCommands.getCurrentSelfMute();
const isSelfDeafened = currentUserVoiceState?.self_deaf ?? false;
const isCameraOn = currentConnectionVoiceState?.self_video ?? false;
const isStreaming = currentConnectionVoiceState?.self_stream ?? false;
@@ -909,7 +909,9 @@ export function useVoiceParticipantMenuData(options: VoiceParticipantMenuDataOpt
const bulkActions: Array<MenuItemType> = [];
const connectionIds = userVoiceStates.map((u) => u.connectionId);
if (isCurrentUser && isCurrentUserConnectedToVoice) {
const allMuted = userVoiceStates.every(({voiceState}) => voiceState.self_mute);
const allMuted = userVoiceStates.every(({connectionId}) =>
VoiceStateCommands.getSelfMuteForConnection(connectionId),
);
bulkActions.push({
icon: (
<SelfMuteIcon
@@ -35,10 +35,10 @@ interface SelfMuteMenuItemProps {
export const SelfMuteMenuItem: React.FC<SelfMuteMenuItemProps> = observer(
({connectionId, isDeviceSpecific = false, label}) => {
const {i18n} = useLingui();
const voiceState = connectionId
? MediaEngine.getVoiceStateByConnectionId(connectionId)
: MediaEngine.getCurrentUserVoiceState();
const isSelfMuted = voiceState?.self_mute ?? false;
const isSelfMuted =
isDeviceSpecific && connectionId
? VoiceStateCommands.getSelfMuteForConnection(connectionId)
: VoiceStateCommands.getCurrentSelfMute();
const handleToggle = useCallback(() => {
if (isDeviceSpecific && connectionId) {
VoiceStateCommands.toggleSelfMuteForConnection(connectionId);
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {parseNumericInput, resolveNearestNumericOption} from '@app/features/ui/components/form/ComboboxNumericInput';
import {describe, expect, it} from 'vitest';
const RELEASE_DELAY_OPTIONS = [20, 100, 250, 500, 1000, 1500, 2000].map((value) => ({
value,
label: new Intl.NumberFormat('en-US', {style: 'unit', unit: 'millisecond', unitDisplay: 'narrow'}).format(value),
}));
describe('parseNumericInput', () => {
it('reads grouped thousands in common locale formats', () => {
expect(parseNumericInput('1,000ms')).toBe(1000);
expect(parseNumericInput('1.500 ms')).toBe(1500);
expect(parseNumericInput('2 000 ms')).toBe(2000);
expect(parseNumericInput("1'000")).toBe(1000);
});
it('keeps decimals', () => {
expect(parseNumericInput('1.5 s')).toBe(1.5);
expect(parseNumericInput('1,5 s')).toBe(1.5);
expect(parseNumericInput('250')).toBe(250);
});
it('returns undefined without digits', () => {
expect(parseNumericInput('ms')).toBeUndefined();
});
});
describe('resolveNearestNumericOption', () => {
it('keeps release delays above 500 ms when the selected label is read back', () => {
for (const option of RELEASE_DELAY_OPTIONS) {
expect(resolveNearestNumericOption(option.label, RELEASE_DELAY_OPTIONS)).toBe(option.value);
}
});
});
@@ -0,0 +1,26 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox';
const DIGIT_GROUP_SEPARATOR = /(?<=\d)[,.'\u2019\s\u00a0\u202f](?=\d{3}(?!\d))/g;
export function parseNumericInput(inputValue: string): number | undefined {
const numericMatch = inputValue
.trim()
.replace(DIGIT_GROUP_SEPARATOR, '')
.match(/([0-9]+(?:[.,][0-9]+)?)/);
if (!numericMatch) return undefined;
const parsedValue = Number(numericMatch[1].replace(',', '.'));
return Number.isFinite(parsedValue) ? parsedValue : undefined;
}
export function resolveNearestNumericOption(
inputValue: string,
options: ReadonlyArray<ComboboxOption<number>>,
): number | undefined {
const parsedValue = parseNumericInput(inputValue);
if (parsedValue === undefined) return undefined;
return options.reduce((nearest, option) =>
Math.abs(option.value - parsedValue) < Math.abs(nearest.value - parsedValue) ? option : nearest,
).value;
}
@@ -21,17 +21,12 @@ export interface ComboboxOption<V extends Primitive = string> {
isDisabled?: boolean;
}
export function resolveNearestNumericOption(
function findOptionByLabel<V extends Primitive, O extends ComboboxOption<V>>(
inputValue: string,
options: ReadonlyArray<ComboboxOption<number>>,
): number | undefined {
const numericMatch = inputValue.trim().match(/([0-9]+(?:\.[0-9]+)?)/);
if (!numericMatch) return undefined;
const parsedValue = Number(numericMatch[1]);
if (!Number.isFinite(parsedValue)) return undefined;
return options.reduce((nearest, option) =>
Math.abs(option.value - parsedValue) < Math.abs(nearest.value - parsedValue) ? option : nearest,
).value;
options: ReadonlyArray<O>,
): O | undefined {
const lowered = inputValue.trim().toLowerCase();
return options.find((option) => option.label.trim().toLowerCase() === lowered);
}
export interface ComboboxFilterOption<O> {
@@ -197,6 +192,8 @@ export const Combobox = observer(function Combobox<
);
const resolveInputValue = useCallback(
(inputValue: string): V | undefined => {
const labelMatch = findOptionByLabel<V, O>(inputValue, options);
if (labelMatch) return labelMatch.value;
const customValue = autoSelectValueFromInput?.(inputValue, options);
if (customValue !== undefined) return customValue;
if (!autoSelectExactMatch) return undefined;
@@ -1,43 +0,0 @@
/* SPDX-License-Identifier: AGPL-3.0-or-later */
.manualUpdateBody {
display: flex;
flex-direction: column;
gap: 0.875rem;
}
.manualUpdateIntro {
margin: 0;
}
.versionList {
display: grid;
grid-template-columns: max-content minmax(0, 1fr);
gap: 0.375rem 0.75rem;
margin: 0;
color: var(--text-secondary);
font-size: 0.875rem;
}
.versionLabel {
color: var(--text-primary-muted);
font-weight: 600;
}
.versionValue {
margin: 0;
min-width: 0;
overflow-wrap: anywhere;
color: var(--text-primary);
}
.packageSelect {
min-width: 0;
}
.manualUpdateHelp {
margin: -0.125rem 0 0;
color: var(--text-primary-muted);
font-size: 0.8125rem;
line-height: 1.4;
}
@@ -3,20 +3,12 @@
import {ConfirmModal} from '@app/features/app/components/dialogs/ConfirmModal';
import {DESKTOP_DOWNLOAD_URL} from '@app/features/app/config/I18nDisplayConstants';
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
import {
AVAILABLE_DESCRIPTOR as AVAILABLE_VERSION_LABEL_DESCRIPTOR,
CLOSE_DESCRIPTOR,
UNKNOWN_DESCRIPTOR as UNKNOWN_VERSION_DESCRIPTOR,
} from '@app/features/i18n/utils/CommonMessageDescriptors';
import {CLOSE_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors';
import * as ModalCommands from '@app/features/ui/commands/ModalCommands';
import {modal} from '@app/features/ui/commands/ModalCommands';
import {Combobox} from '@app/features/ui/components/form/FormCombobox';
import {isCanaryDesktop, openExternalUrl} from '@app/features/ui/utils/NativeUtils';
import styles from '@app/features/updater/commands/UpdaterModalCommands.module.css';
import type {UpdaterDownloadFormat, UpdaterDownloadOption} from '@app/types/electron.d';
import {i18n, type MessageDescriptor} from '@lingui/core';
import {i18n} from '@lingui/core';
import {msg} from '@lingui/core/macro';
import {useMemo, useState} from 'react';
const DESKTOP_UPDATE_AVAILABLE_DESCRIPTOR = msg({
message: 'Desktop update available',
@@ -35,10 +27,6 @@ const DOWNLOAD_INSTALLER_DESCRIPTOR = msg({
message: 'Download installer',
comment: 'Button label that downloads a desktop update installer.',
});
const DOWNLOAD_PACKAGE_DESCRIPTOR = msg({
message: 'Download package',
comment: 'Button label that downloads a selected Linux desktop update package.',
});
const DESKTOP_UPDATE_RESTARTS_APP_DESCRIPTOR = msg({
message: '{productName} closes, installs the update and opens again.',
comment:
@@ -90,6 +78,16 @@ const SYSTEM_MANAGED_UPDATE_BODY_DESCRIPTOR = msg({
message: 'This install is managed by your system. Update {productName} from your software center or package manager.',
comment: 'Desktop updater modal body for managed package builds such as Flatpak. productName is the app name.',
});
const MANAGED_SHELL_UPDATE_FLATPAK_BODY_DESCRIPTOR = msg({
message: '{productName} {version} is available. Update it from your software center.',
comment:
'Desktop updater modal body for a Flatpak install when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.',
});
const MANAGED_SHELL_UPDATE_PACKAGE_BODY_DESCRIPTOR = msg({
message: '{productName} {version} is available. Update it with your package manager, or download the new version.',
comment:
'Desktop updater modal body for a Linux install managed by a package manager, such as a deb, rpm or AUR package, when a newer desktop version exists. The version placeholder is the new app version and productName is the app name.',
});
const OPEN_SOFTWARE_CENTER_DESCRIPTOR = msg({
message: 'Open software center',
comment: 'Button label that opens the software center via appstream protocol.',
@@ -115,56 +113,25 @@ const DESKTOP_UPDATE_DOWNLOAD_FAILED_BODY_DESCRIPTOR = msg({
'The desktop update could not be downloaded. Try again from the update button when your connection is stable.',
comment: 'Modal body shown when a desktop update download fails.',
});
const LINUX_PACKAGE_UPDATE_INTRO_DESCRIPTOR = msg({
message:
'A Linux desktop update is available. Choose the package format for this system and {productName} will save it locally.',
comment:
'Linux desktop updater modal body shown before version details and package format selector. productName is the app name.',
});
const INSTALLED_VERSION_LABEL_DESCRIPTOR = msg({
message: 'Installed',
comment: 'Label for the installed desktop version in the Linux update modal.',
});
const NEW_VERSION_DESCRIPTOR = msg({
message: 'New version',
comment: 'Fallback version label when the available desktop version is unknown.',
});
const LINUX_PACKAGE_LABEL_DESCRIPTOR = msg({
message: 'Linux package',
comment: 'Select label for choosing the Linux desktop package format to download.',
});
const PACKAGE_HELP_DESCRIPTOR = msg({
message: 'The downloaded file is saved to your computer. Install it with your normal package manager.',
comment: 'Help text below the Linux package format selector in the desktop updater modal.',
});
const DEB_PACKAGE_FORMAT_DESCRIPTOR = msg({
message: 'DEB package',
comment:
'Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "DEB" verbatim and translate only the word "package".',
});
const RPM_PACKAGE_FORMAT_DESCRIPTOR = msg({
message: 'RPM package',
comment:
'Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "RPM" verbatim and translate only the word "package".',
});
const TAR_GZ_ARCHIVE_FORMAT_DESCRIPTOR = msg({
message: 'tar.gz archive',
comment:
'Option in the Linux package format dropdown of the desktop updater modal. Keep the format token "tar.gz" verbatim and translate only the word "archive".',
});
const DOWNLOAD_FORMAT_LABEL_DESCRIPTORS: Partial<Record<UpdaterDownloadFormat, MessageDescriptor>> = {
deb: DEB_PACKAGE_FORMAT_DESCRIPTOR,
rpm: RPM_PACKAGE_FORMAT_DESCRIPTOR,
tar_gz: TAR_GZ_ARCHIVE_FORMAT_DESCRIPTOR,
};
const UPDATE_AVAILABLE_KEY = 'updater-available';
const UP_TO_DATE_KEY = 'updater-up-to-date';
const UNSUPPORTED_KEY = 'updater-unsupported';
const ERROR_KEY = 'updater-error';
function openSoftwareCenter(appId: string = isCanaryDesktop() ? 'app.fluxer.FluxerCanary' : 'app.fluxer.Fluxer'): void {
void openExternalUrl(`appstream://${appId}`);
}
function managedShellUpdateBody(version: string | null, flatpakAppId: string | null): string {
const productName = RuntimeConfig.productName;
if (version == null) {
return i18n._(SYSTEM_MANAGED_UPDATE_BODY_DESCRIPTOR, {productName});
}
return flatpakAppId != null
? i18n._(MANAGED_SHELL_UPDATE_FLATPAK_BODY_DESCRIPTOR, {productName, version})
: i18n._(MANAGED_SHELL_UPDATE_PACKAGE_BODY_DESCRIPTOR, {productName, version});
}
export function pushUpdateAvailableModal(version: string | null, onDownload: () => void | Promise<void>): void {
ModalCommands.pushWithKey(
modal(() => (
@@ -187,6 +154,36 @@ export function pushUpdateAvailableModal(version: string | null, onDownload: ()
);
}
export function pushManagedShellUpdateModal({
version,
flatpakAppId,
}: {
version: string | null;
flatpakAppId: string | null;
}): void {
ModalCommands.pushWithKey(
modal(() => (
<ConfirmModal
title={i18n._(DESKTOP_UPDATE_AVAILABLE_DESCRIPTOR)}
description={managedShellUpdateBody(version, flatpakAppId)}
primaryText={
flatpakAppId != null ? i18n._(OPEN_SOFTWARE_CENTER_DESCRIPTOR) : i18n._(OPEN_DESKTOP_DOWNLOADS_DESCRIPTOR)
}
secondaryText={i18n._(LATER_DESCRIPTOR)}
onPrimary={() => {
if (flatpakAppId != null) {
openSoftwareCenter(flatpakAppId);
return;
}
void openExternalUrl(DESKTOP_DOWNLOAD_URL);
}}
data-flx="updater.updater-modal-commands.push-managed-shell-update-modal.confirm-modal"
/>
)),
UPDATE_AVAILABLE_KEY,
);
}
export function pushDesktopUpdateAvailableModal(onUpdate: () => void | Promise<void>): void {
ModalCommands.pushWithKey(
modal(() => (
@@ -205,90 +202,6 @@ export function pushDesktopUpdateAvailableModal(onUpdate: () => void | Promise<v
);
}
interface ManualUpdateAvailableModalProps {
currentVersion: string | null;
version: string | null;
options: ReadonlyArray<UpdaterDownloadOption>;
onDownload: (option: UpdaterDownloadOption) => void | Promise<void>;
}
function ManualUpdateAvailableModal({currentVersion, version, options, onDownload}: ManualUpdateAvailableModalProps) {
const [selectedFormat, setSelectedFormat] = useState<UpdaterDownloadOption['format'] | null>(
options[0]?.format ?? null,
);
const selectOptions = useMemo(
() =>
options.map((option) => {
const descriptor = DOWNLOAD_FORMAT_LABEL_DESCRIPTORS[option.format];
return {
value: option.format,
label: descriptor ? i18n._(descriptor) : option.label,
};
}),
[options],
);
const selectedOption = options.find((option) => option.format === selectedFormat) ?? options[0];
return (
<ConfirmModal
title={i18n._(DESKTOP_UPDATE_AVAILABLE_DESCRIPTOR)}
description={
<div className={styles.manualUpdateBody} data-flx="updater.manual-update.body">
<p className={styles.manualUpdateIntro} data-flx="updater.manual-update.intro">
{i18n._(LINUX_PACKAGE_UPDATE_INTRO_DESCRIPTOR, {productName: RuntimeConfig.productName})}
</p>
<dl className={styles.versionList} data-flx="updater.manual-update.version-list">
<dt className={styles.versionLabel} data-flx="updater.manual-update.installed-label">
{i18n._(INSTALLED_VERSION_LABEL_DESCRIPTOR)}
</dt>
<dd className={styles.versionValue} data-flx="updater.manual-update.installed-value">
{currentVersion ?? i18n._(UNKNOWN_VERSION_DESCRIPTOR)}
</dd>
<dt className={styles.versionLabel} data-flx="updater.manual-update.available-label">
{i18n._(AVAILABLE_VERSION_LABEL_DESCRIPTOR)}
</dt>
<dd className={styles.versionValue} data-flx="updater.manual-update.available-value">
{version ?? i18n._(NEW_VERSION_DESCRIPTOR)}
</dd>
</dl>
<Combobox
className={styles.packageSelect}
label={i18n._(LINUX_PACKAGE_LABEL_DESCRIPTOR)}
value={selectedFormat}
options={selectOptions}
onChange={setSelectedFormat}
isSearchable={false}
density="compact"
data-flx="updater.manual-update.package-select.change"
/>
<p className={styles.manualUpdateHelp} data-flx="updater.manual-update.help">
{i18n._(PACKAGE_HELP_DESCRIPTOR)}
</p>
</div>
}
primaryText={i18n._(DOWNLOAD_PACKAGE_DESCRIPTOR)}
secondaryText={i18n._(LATER_DESCRIPTOR)}
onPrimary={async () => {
if (selectedOption) {
await onDownload(selectedOption);
}
}}
data-flx="updater.updater-modal-commands.push-manual-update-available-modal.confirm-modal"
/>
);
}
export function pushManualUpdateAvailableModal(options: ManualUpdateAvailableModalProps): void {
ModalCommands.pushWithKey(
modal(() => (
<ManualUpdateAvailableModal
data-flx="updater.updater-modal-commands.push-manual-update-available-modal.manual-update-available-modal"
{...options}
/>
)),
UPDATE_AVAILABLE_KEY,
);
}
export function pushUpToDateModal(currentVersion: string | null): void {
ModalCommands.pushWithKey(
modal(() => (
@@ -320,13 +233,7 @@ export function pushUnsupportedUpdateModal(
description={i18n._(SYSTEM_MANAGED_UPDATE_BODY_DESCRIPTOR, {productName: RuntimeConfig.productName})}
primaryText={i18n._(OPEN_SOFTWARE_CENTER_DESCRIPTOR)}
secondaryText={i18n._(CLOSE_DESCRIPTOR)}
onPrimary={() => {
const appstreamUrl = isCanaryDesktop()
? 'appstream://app.fluxer.FluxerCanary'
: 'appstream://app.fluxer.Fluxer';
void openExternalUrl(appstreamUrl);
}}
onPrimary={() => openSoftwareCenter()}
data-flx="updater.updater-modal-commands.push-unsupported-update-modal.confirm-modal"
/>
);
@@ -1,6 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {UpdaterDownloadOption} from '@app/types/electron.d';
import {assign, initialTransition, type SnapshotFrom, setup, transition} from 'xstate';
interface NativeUpdateInfo {
@@ -31,7 +30,6 @@ interface UpdaterMachineContext {
manualNativeDownloadInFlight: boolean;
nativeUnsupported: NativeUnsupportedUpdate | null;
nativeManualDownloadUrl: string | null;
nativeManualDownloadOptions: ReadonlyArray<UpdaterDownloadOption>;
}
export type UpdaterMachineEvent =
@@ -43,7 +41,6 @@ export type UpdaterMachineEvent =
type: 'native.available';
version: string | null;
downloadUrl: string | null;
downloadOptions: ReadonlyArray<UpdaterDownloadOption>;
}
| {type: 'native.notAvailable'; now: number}
| {type: 'native.error'}
@@ -56,8 +53,6 @@ export type UpdaterMachineEvent =
| {type: 'manualDownload.started'}
| {type: 'manualDownload.finished'};
const EMPTY_DOWNLOAD_OPTIONS: ReadonlyArray<UpdaterDownloadOption> = Object.freeze([]);
function createEmptyNativeUpdateInfo(): NativeUpdateInfo {
return {
available: false,
@@ -81,7 +76,6 @@ function createInitialUpdaterContext(): UpdaterMachineContext {
manualNativeDownloadInFlight: false,
nativeUnsupported: null,
nativeManualDownloadUrl: null,
nativeManualDownloadOptions: EMPTY_DOWNLOAD_OPTIONS,
};
}
@@ -97,7 +91,6 @@ function clearNativeUpdate(context: UpdaterMachineContext): UpdaterMachineContex
native: createEmptyNativeUpdateInfo(),
},
nativeManualDownloadUrl: null,
nativeManualDownloadOptions: EMPTY_DOWNLOAD_OPTIONS,
};
}
@@ -141,7 +134,6 @@ const updaterStateMachine = setup({
isChecking: false,
nativeUnsupported: null,
nativeManualDownloadUrl: event.downloadUrl,
nativeManualDownloadOptions: [...event.downloadOptions],
};
}),
applyNativeNotAvailable: assign(({context, event}) => {
@@ -231,7 +223,7 @@ export function transitionUpdaterMachineSnapshot(
}
export function hasManualNativeDownload(snapshot: UpdaterMachineSnapshot): boolean {
return Boolean(snapshot.context.nativeManualDownloadUrl) || snapshot.context.nativeManualDownloadOptions.length > 0;
return Boolean(snapshot.context.nativeManualDownloadUrl);
}
export function getUpdaterDisplayVersion(snapshot: UpdaterMachineSnapshot): string | null {
@@ -1,181 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
import type {UpdaterDownloadFormat, UpdaterDownloadOption} from '@app/types/electron.d';
type LinuxManualDownloadFormat = Extract<UpdaterDownloadFormat, 'appimage' | 'deb' | 'rpm' | 'tar_gz'>;
type LinuxDownloadArch = 'x64' | 'arm64';
type DesktopDownloadChannel = 'stable' | 'canary';
const LINUX_MANUAL_DOWNLOAD_FORMATS: ReadonlyArray<LinuxManualDownloadFormat> = ['appimage', 'deb', 'rpm', 'tar_gz'];
const LINUX_MANUAL_FORMAT_LABELS: Record<LinuxManualDownloadFormat, string> = {
appimage: 'AppImage',
deb: 'DEB package',
rpm: 'RPM package',
tar_gz: 'tar.gz archive',
};
const LINUX_MANUAL_FORMAT_EXTENSIONS: Record<LinuxManualDownloadFormat, string> = {
appimage: '.AppImage',
deb: '.deb',
rpm: '.rpm',
tar_gz: '.tar.gz',
};
const LINUX_MANUAL_ARCH_TOKENS: Record<LinuxManualDownloadFormat, Record<LinuxDownloadArch, string>> = {
appimage: {x64: 'x86_64', arm64: 'arm64'},
deb: {x64: 'amd64', arm64: 'arm64'},
rpm: {x64: 'x86_64', arm64: 'aarch64'},
tar_gz: {x64: 'x64', arm64: 'arm64'},
};
const PACKAGE_ORIGIN_BASE = 'https://pkgs.fluxer.com';
interface ParsedLinuxDownloadUrl {
downloadBase: string;
channel: DesktopDownloadChannel;
arch: LinuxDownloadArch;
search: string;
}
export interface LinuxManualUpdateOptionsInput {
downloadUrl?: string | null;
channel?: string | null;
arch?: string | null;
version?: string | null;
knownOptions?: ReadonlyArray<UpdaterDownloadOption>;
}
function normalizeLinuxDownloadArch(value: string | null | undefined): LinuxDownloadArch {
const normalized = value?.trim().toLowerCase();
if (normalized === 'arm64' || normalized === 'aarch64') {
return 'arm64';
}
return 'x64';
}
function normalizeLinuxDownloadArchOrNull(value: string | null | undefined): LinuxDownloadArch | null {
const normalized = value?.trim();
if (!normalized) {
return null;
}
return normalizeLinuxDownloadArch(normalized);
}
function normalizeDesktopDownloadChannel(value: string | null | undefined): DesktopDownloadChannel {
return value?.trim().toLowerCase() === 'canary' ? 'canary' : 'stable';
}
function parseLinuxDownloadUrl(value: string | null | undefined): ParsedLinuxDownloadUrl | null {
if (!value) {
return null;
}
try {
const parsed = new URL(value);
const segments = parsed.pathname.split('/').filter(Boolean);
const start = segments.findIndex((segment, index) => segment === 'desktop' && segments[index + 2] === 'linux');
if (start < 0) {
return null;
}
const channel = normalizeDesktopDownloadChannel(segments[start + 1]);
const arch = normalizeLinuxDownloadArch(segments[start + 3]);
const version = segments[start + 4];
const format = segments[start + 5];
if (!version || !format) {
return null;
}
const prefix = segments.slice(0, start);
const prefixPath = prefix.length > 0 ? `/${prefix.join('/')}` : '';
return {
downloadBase: `${parsed.origin}${prefixPath}`,
channel,
arch,
search: parsed.search,
};
} catch {
return null;
}
}
function getLinuxDownloadArchFromText(value: string | null | undefined): LinuxDownloadArch | null {
const normalized = value?.trim().toLowerCase();
if (!normalized) {
return null;
}
if (/(^|[-_/(\s])(?:arm64|aarch64)(?=$|[-_/).\s])/u.test(normalized)) {
return 'arm64';
}
if (/(^|[-_/(\s])(?:x64|x86_64|amd64)(?=$|[-_/).\s])/u.test(normalized)) {
return 'x64';
}
return null;
}
function getLinuxDownloadOptionArch(option: UpdaterDownloadOption): LinuxDownloadArch | null {
return (
parseLinuxDownloadUrl(option.url)?.arch ??
getLinuxDownloadArchFromText(option.suggestedName) ??
getLinuxDownloadArchFromText(option.label)
);
}
function getKnownLinuxManualOption(
options: ReadonlyArray<UpdaterDownloadOption>,
format: LinuxManualDownloadFormat,
arch: LinuxDownloadArch,
): UpdaterDownloadOption | null {
const formatOptions = options.filter((option) => option.format === format);
return (
formatOptions.find((option) => getLinuxDownloadOptionArch(option) === arch) ??
(formatOptions.length === 1 && getLinuxDownloadOptionArch(formatOptions[0]) === null ? formatOptions[0] : null)
);
}
function buildLinuxDownloadUrl(params: {
downloadBase: string;
channel: DesktopDownloadChannel;
arch: LinuxDownloadArch;
versionToken: string;
format: LinuxManualDownloadFormat;
search: string;
}): string {
return `${params.downloadBase}/desktop/${params.channel}/linux/${params.arch}/${params.versionToken}/${params.format}${params.search}`;
}
function getModernProductName(channel: DesktopDownloadChannel): string {
return channel === 'canary' ? `${RuntimeConfig.productName} Canary` : RuntimeConfig.productName;
}
function getSuggestedName(
format: LinuxManualDownloadFormat,
channel: DesktopDownloadChannel,
arch: LinuxDownloadArch,
versionToken: string,
): string {
const archToken = LINUX_MANUAL_ARCH_TOKENS[format][arch];
const extension = LINUX_MANUAL_FORMAT_EXTENSIONS[format];
return `${getModernProductName(channel)}-${versionToken}-linux-${archToken}${extension}`;
}
export function buildLinuxManualUpdateOptions(input: LinuxManualUpdateOptionsInput): Array<UpdaterDownloadOption> {
const parsedUrl = parseLinuxDownloadUrl(input.downloadUrl);
const channel = parsedUrl?.channel ?? normalizeDesktopDownloadChannel(input.channel);
const arch = normalizeLinuxDownloadArchOrNull(input.arch) ?? parsedUrl?.arch ?? 'x64';
const downloadBase = parsedUrl?.downloadBase ?? PACKAGE_ORIGIN_BASE;
const search = parsedUrl?.search ?? '';
const version = input.version?.trim() ?? '';
const hasVersion = /^\d+\.\d+\.\d+$/u.test(version);
const versionToken = hasVersion ? version : 'latest';
const knownOptions = hasVersion ? (input.knownOptions ?? []) : [];
return LINUX_MANUAL_DOWNLOAD_FORMATS.map((format) => {
const knownOption = getKnownLinuxManualOption(knownOptions, format, arch);
return {
format,
label: LINUX_MANUAL_FORMAT_LABELS[format],
url: buildLinuxDownloadUrl({downloadBase, channel, arch, versionToken, format, search}),
suggestedName: knownOption?.suggestedName ?? getSuggestedName(format, channel, arch, versionToken),
sha256: knownOption?.sha256 ?? null,
};
});
}
@@ -13,7 +13,8 @@ import {getCachedNumberFormat} from '@app/features/i18n/utils/IntlCache';
import {Message as MessageModel} from '@app/features/messaging/models/MessagingMessage';
import {remFromPx} from '@app/features/theme/layout/RemFromPx';
import {Button} from '@app/features/ui/button/Button';
import {type ComboboxOption, resolveNearestNumericOption} from '@app/features/ui/components/form/FormCombobox';
import {resolveNearestNumericOption} from '@app/features/ui/components/form/ComboboxNumericInput';
import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox';
import {Switch} from '@app/features/ui/components/form/FormSwitch';
import {MockAvatar} from '@app/features/ui/components/MockAvatar';
import MobileLayout from '@app/features/ui/state/MobileLayout';
@@ -15,6 +15,7 @@ import NativePermission from '@app/features/permissions/system/state/NativePermi
import {Button} from '@app/features/ui/button/Button';
import * as ModalCommands from '@app/features/ui/commands/ModalCommands';
import {modal} from '@app/features/ui/commands/ModalCommands';
import {parseNumericInput} from '@app/features/ui/components/form/ComboboxNumericInput';
import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox';
import {Switch} from '@app/features/ui/components/form/FormSwitch';
import {RESET_SLIDER_TO_DEFAULT_VALUE_DESCRIPTOR, Slider} from '@app/features/ui/components/Slider';
@@ -161,10 +162,8 @@ const resolvePushToTalkReleaseDelayInput = (
options: ReadonlyArray<ComboboxOption<number>>,
): number | undefined => {
const normalized = inputValue.trim().toLowerCase();
const numericMatch = normalized.match(/([0-9]+(?:\.[0-9]+)?)/);
if (!numericMatch) return undefined;
const parsedValue = Number(numericMatch[1]);
if (!Number.isFinite(parsedValue)) return undefined;
const parsedValue = parseNumericInput(normalized);
if (parsedValue === undefined) return undefined;
const unitMatch = normalized.match(/[0-9.]\s*([a-z]+)/);
const unit = unitMatch?.[1] ?? 'ms';
const valueInMs = unit.startsWith('s') ? parsedValue * 1000 : parsedValue;
@@ -12,7 +12,8 @@ import Channels from '@app/features/channel/state/Channels';
import {getCachedNumberFormat} from '@app/features/i18n/utils/IntlCache';
import {Message as MessageModel} from '@app/features/messaging/models/MessagingMessage';
import {isNewMessageGroup} from '@app/features/messaging/utils/MessageGroupingUtils';
import {type ComboboxOption, resolveNearestNumericOption} from '@app/features/ui/components/form/FormCombobox';
import {resolveNearestNumericOption} from '@app/features/ui/components/form/ComboboxNumericInput';
import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox';
import {Switch} from '@app/features/ui/components/form/FormSwitch';
import {canResetSliderValue, SliderResetIconButton} from '@app/features/ui/components/slider/SliderResetIconButton';
import type {RadioOption} from '@app/features/ui/radio_group/RadioGroup';
@@ -8,7 +8,8 @@ import Accessibility, {
} from '@app/features/accessibility/state/Accessibility';
import {APP_ZOOM_LEVEL_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors';
import {getCachedNumberFormat} from '@app/features/i18n/utils/IntlCache';
import {type ComboboxOption, resolveNearestNumericOption} from '@app/features/ui/components/form/FormCombobox';
import {resolveNearestNumericOption} from '@app/features/ui/components/form/ComboboxNumericInput';
import type {ComboboxOption} from '@app/features/ui/components/form/FormCombobox';
import {Slider} from '@app/features/ui/components/Slider';
import {canResetSliderValue, SliderResetIconButton} from '@app/features/ui/components/slider/SliderResetIconButton';
import {formatRoundedPercentage, roundPercentage} from '@app/features/ui/utils/PercentageFormatting';
Loaded 100 of 194 files, more files were not shown because too many files have changed in this diff. Show more